这是帝国的一套下载系统如图 ps(不需要任何账户和密码,直接写shell) 由于很多站是由于下载要整合discuz等等一些论坛.... 而帝国他又有一个万能接口,如图 而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码 当我们! Q, W1 p; P; P* P$ F
* z% `5 a5 v# I J$ K, s) I
& D6 a3 h3 \/ H% ^
这是帝国的一套下载系统 如图. K% N, e& H7 i; W: W
ps(不需要任何账户和密码,直接写shell)
. m$ [# o0 ~4 @$ O1 {: [0 k7 E8 |由于很多站是由于下载要整合discuz 等等一些论坛....
/ C( {/ b7 L1 }; L& D
. ]1 W Q' A6 x而帝国他又有一个万能接口,如图 ) b8 {. j2 F1 {' ]! A" j' V% f
. o; C/ v0 Z# _/ J6 ]6 F& w1 V- M* C
- b9 b) X4 W* o3 e而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码
' R4 ~! T' g' Z4 j- t* z3 Z: V7 [- \0 f4 }: W: E3 E
当我们提交的时候,他地址是提交到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的函数了,我们继续跟踪) k% b$ Z0 J; h+ w: M; I5 c9 n
5 r O5 `' m. X* |1 @# H) A' @& c在data/fun.php中的15行
) |# F' N j' _# f' P
" X) W( @: o) {& ^. w" T我们可以看到这个函数 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. {; Y- _% P; m; W
17. InstallShowMsg(' /class/user.php 文件权限没有设为0777,安装不成功.'); 18. } 19. @fputs($fp,$filetext); 20. @fclose($fp); 复制代码 .....//省略若干
9 q) o u" O* H9 O6 F
+ E0 E _6 O6 m' F1 ?. g0 P3 b这里的他将$filetext=str_replace("[!@--".$vr[$i]."--@!]",$add[$vr[$i]],$filetext);
2 o. Z$ @2 I. B+ O4 P/ h) L- S4 X" m5 ^' Q
他将传进来的变量进行了切割,然后赋给了$filetext
) }$ a5 S: `8 z! m6 {
* R) c0 h, ]1 h' V1 U" q% |% t& W" }然后看下面 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写入了
$ X: x0 V: b; S. h1 g/ T! Z8 T1 e8 k- a/ j( z
我们看看写入的结果,随便填一个
+ q$ R+ g) y5 f7 N
/ }2 t/ x. [- t ?) ?* E/ }3 C
% e/ t1 {; a8 t5 P6 D2 g0 Z. r7 @2 D' O; ~5 j' c
" u- S$ r. e# e( R* `9 b! t( k; _
4 n) l7 A X( r
$ q3 f) H: [. a2 d
; a5 S; d, H, h# L) |/ L5 v6 J% P; D5 r6 s4 b, S: }9 b4 F, v# w# ?
' j b j% ] q: o; V' W& |% M' S( R: Q4 m5 i& X
; g. S1 x; ^1 E; h/ z3 E& v# v; _4 H. J, z" n j
1 ]" [; n4 x5 q
9 n1 y- D! n2 Z+ s! f; {- s2 C
6 U4 \8 ^% R7 v! t( K2 m' Z
% ^1 |4 m5 G' e% C6 V, A% g( s. v( `0 F+ j, l/ |
2 d4 f4 P/ l G* c* l
: @4 i; i; {2 ^8 H6 E" S
1 p/ u$ k, n% w, x; x/ ~2 h
+ K% h. i+ O% _. a8 T( U所以我们淫荡点,写个${@phpinfo()}试试 . ?) M' \! J" {9 ]! s+ |
然后访问以下class/user.php这个文件# @, f/ t3 @6 f7 |
日了吧 3 m. S5 ]) }% t7 K9 P8 v( P
9 W; [# h# q3 ]6 {! N! c( H
5 X1 r0 O' e% u- j" k3 o1 H/ s
7 m* W7 O+ ]; y) ~
& F# p% T: @; Q3 P& Y: r* Q* K$ A( `3 f9 }; R5 k+ ~- L; B
|