这是帝国的一套下载系统如图 ps(不需要任何账户和密码,直接写shell) 由于很多站是由于下载要整合discuz等等一些论坛.... 而帝国他又有一个万能接口,如图 而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码 当我们7 ]0 M8 l0 g" U: n' j7 [" Z, b, t
, P) v/ `+ Q6 C( u1 V% d/ K
2 }; X+ M7 H$ Q8 u* f: G- [
这是帝国的一套下载系统 如图
! B" P0 x, f; J M: Sps(不需要任何账户和密码,直接写shell)
. g# H. U( U! v6 m" ]% r4 K* |由于很多站是由于下载要整合discuz 等等一些论坛....
4 c, p& N, g' Q4 m; F; d7 V
. q& w) m8 t' Y5 o0 J% B而帝国他又有一个万能接口,如图 $ p+ m! Z1 T9 }
! G& j+ v. N2 w# P6 f9 `& G
0 J: r$ d( W" o! p
而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码
: V6 V0 {; p- I- W4 H0 f t# E6 H- O' ]" W/ |
当我们提交的时候,他地址是提交到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的函数了,我们继续跟踪
+ W" ~+ m* \: F1 M* x( x
! Q9 k3 E! h$ c1 ?* W9 O) ~! K在data/fun.php中的15行' X; g/ x0 ^! I7 [- F% r7 E: G
, S9 t1 |& K8 b+ W我们可以看到这个函数 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. {/ U) N+ t9 h3 ]; B2 a: |
17. InstallShowMsg(' /class/user.php 文件权限没有设为0777,安装不成功.'); 18. } 19. @fputs($fp,$filetext); 20. @fclose($fp); 复制代码 .....//省略若干
* j9 R. C# ~+ n: l) v' U7 J: R7 B& v9 _6 l
这里的他将$filetext=str_replace("[!@--".$vr[$i]."--@!]",$add[$vr[$i]],$filetext);
7 q; U+ X- T0 R% q! |5 o8 Z2 ]+ Y4 ]. b% m5 Y$ H
他将传进来的变量进行了切割,然后赋给了$filetext5 m: m; d, y: n
4 m' n5 m$ @8 ^) p然后看下面 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写入了" K% m6 {& p3 n( l" i( K0 }) B; J
4 q! A2 p4 g% c* }0 ?. h
我们看看写入的结果,随便填一个 ) y! a! q) N5 I% k6 ^. g8 h! ~# V
2 p; e4 I0 }/ R4 E. h0 R; E/ `( \' F, u
5 _3 Z2 G" {/ Y
# u9 D: N8 H9 b d% I% O
) k i, F9 G7 X
/ x7 P" g; g3 ^8 Q
' A3 R+ @- ?1 W
3 z N7 E- ]' D q/ u% v# F1 X
, c' @# S* b) }+ C! M+ e! P/ D7 _1 Z; x- S6 \
& m$ R0 z8 {, W9 c
" b$ Z+ Y& d3 V1 b
6 W0 ? N. A( K- k' G. _- C
: U7 j' r+ T* ]. f& u3 R$ J* A$ ]! i+ P8 G, _
6 v5 E5 w8 C2 j# u3 f
) d: F2 m7 E3 m; X" x) Z
$ R7 Y6 m* G) I3 K7 [% ~
) G- _% ^" T( {4 y* R1 A$ [) |7 i3 w$ u0 m3 B2 [; S8 Y6 b' g
$ ]; S) Y3 J/ g所以我们淫荡点,写个${@phpinfo()}试试
: f3 l, \! z, r# O9 o& F然后访问以下class/user.php这个文件
; u) s4 V' |) C) k5 ~日了吧
! p6 w+ q* @4 L- T: ] m) c) D5 d7 i$ @3 ]5 B" W
: }0 d2 f5 b- X/ y; U! @8 b2 A* ^; a& U& C/ Q$ O
3 F/ Y- P: L4 W) f; D" s- S
2 V* Q% i3 ?# M- `3 G
|