' W. z" k% ]5 D* i+ W $dt=date("Ymd",time()); ' T- b4 i d3 Y- @: z if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){- W- ^4 @1 E: Q+ v! c
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777); 1 s7 |$ [9 F; ^; C( V, D* ?0 }+ V } 5 z7 b: z" ~) q) \ ) \$ y; @" ~4 }1 o6 f J
//文件保存目录路径9 y9 i: O2 U+ `, d3 T: a
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';0 Y5 U: ^* c6 m! @. s5 H
echo $save_path;6 q( E/ z+ W/ ]- E! d- o2 o
//文件保存目录URL7 {* g- L5 F) _) J# d! C: O: F
$save_url = '../../'.$_POST['attachPath'].$dt.'/';' S! C) N" V% G5 k; I' T
9 z, f- a0 `: c1 m% ^* j* |) l D1 V5 P //定义允许上传的文件扩展名. O- \" |7 n7 ?1 b
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀# o( c( Y3 ]' {* Q# l8 }
: \4 ]; y/ A+ s" e) ~
//最大文件大小; W1 I* h0 `6 G' O9 S# x
$max_size = 1000000; $ ]/ F: R. V1 B/ B2 ~ 8 T$ U. m' E% f" J8 N$ B2 r# g# J //更改目录权限 2 e' I3 I" i! ^7 z @mkdir($save_path, 0777);- F, D" @8 j% f% j9 @; @4 V8 [
& v- T3 b. r" {% C- _& j. ?# l' L
//文件的全部路径 5 k& ~+ K o4 V( c $file_path = $save_path.$_POST['fileName']; //保存文件名 0 }; j; i& c- x% J2 T* y- _; R) s* L 7 s& [/ U; ^! \3 M* u
//文件URL& G9 S; l' f1 K/ f0 _: n& E
$file_url = $save_url.$_POST['fileName'];) S. ^. t7 U4 F- _* s* o
//有上传文件时0 a" [/ W9 ^4 w9 W
if (empty($_FILES) === false) {* r1 b% c' V6 V7 Y
6 O& ^3 [" o+ \, }
//原文件名 ( O, T: p3 y. Z9 h" G3 { ~5 i( a2 F $file_name = $_FILES['fileData']['name']; # L& {$ k, E# r8 s; f7 W //服务器上临时文件名 5 d1 T! f/ v2 l2 t7 M' C; k $tmp_name = $_FILES['fileData']['tmp_name']; - b( S, T) F2 m9 p9 t4 O- U //文件大小0 j6 ]0 b4 q1 ^' _4 N
$file_size = $_FILES['fileData']['size'];8 l2 U" M9 v+ L1 I" i, @
//检查目录 % [) [/ V1 j( q) ~' } if (@is_dir($save_path) === false) {! I0 q! N% N9 R( j
alert("上传目录不存在。"); - A- n6 ?! r$ p- F } - L1 Y! T% j: ?: N //检查目录写权限 * x. V% w5 t" C! @5 O6 N6 Z if (@is_writable($save_path) === false) { " R6 B$ P3 j9 Z1 a- ?3 I; W: ]; X# M alert("上传目录没有写权限。");5 x: b; }: q: \6 ?2 e N3 l
}2 i: @3 s5 G1 [3 y0 `
//检查是否已上传3 l* r( ^ a5 G' Z2 ~4 w o/ `
if (@is_uploaded_file($tmp_name) === false) { % R' O. Q' k: R' u% v0 `* ]6 l alert("临时文件可能不是上传文件。");$ I+ M6 N. U L5 [; l
} 5 ?9 P: M5 G# c# p5 U9 O, l+ U# o //检查文件大小 8 w- ], R, p' a- e/ h, S if ($file_size > $max_size) { ( d2 } q; d4 z3 x, T, H alert("上传文件大小超过限制。");# P% _) g; L& X( F4 P
} / ?! E3 A/ A1 m s //获得文件扩展名 2 ?( P4 g3 T: J8 X/ j( X- j9 i $temp_arr = explode(".", $_POST['fileName']);1 N$ P2 ?' e/ A: w
$file_ext = array_pop($temp_arr); 0 w& J4 b2 P `' f+ F0 U $file_ext = trim($file_ext); 6 `; z2 d) D) S, o+ {, E+ { $file_ext = strtolower($file_ext); 3 Z3 s1 h+ z9 E: T; w ; v( I& W! ^5 d, ~! u //检查扩展名 ) c3 D) U- j9 @; y3 ]
if (in_array($file_ext, $ext_arr) === false) { 7 x5 |. C" w+ ~2 J6 ]$ {2 V5 ^3 Y; X
alert("上传文件扩展名是不允许的扩展名。");# P+ D& t i3 z8 ^; @( f( q+ D
} ! L6 N7 L3 V' R- v3 E! [ f " C- r3 y2 D$ b5 P; T
//移动文件 # c; Q& N) V, j" P
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^- ]& U3 c J- q9 |
if (move_uploaded_file($tmp_name, $file_path) === false) {) Z( P: B# F7 O
alert("上传文件失败。");# z( \4 [+ S) c8 `, S; u T
}6 }4 G# m/ n9 G4 Z% n1 ~ k
+ h4 p) G/ m. `5 F# |2 l) t) e @chmod($file_path,0666); ) \. A7 l) ^$ `# {: }- [/ z # A" Y! s; Q! u+ E
?> & \2 A6 R( h: J; f抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=2279 i8 |" R' _- P( O- \" t# g6 _
! M {/ h1 h) Y+ B! I8 R( Y' C0 s
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过 / I& O/ }6 N0 ]8 F ! w! m1 Y4 y; x- O( F8 E/ E' y—————————————————— 4 H X1 d( L+ a6 ]3 x, |1 \+ D注入漏洞: 1 s& a7 o7 }2 X, ~: G漏洞文件:search/module/search.php, ^1 q ?9 A, Q2 X
/search/index.php?key=1&myord=1 [sqlinjection]- o0 t' |4 N1 e
* |, x9 n3 d! ^- R " |9 l t4 Z7 S0 g( ]. W( @# G% H7 Y
<?php " }& n2 f. X) a! u; h2 ?' i, E0 Z // ... 省略 n 行...8 l$ |; g& |# E# B2 X+ C) K
//第18行:# p; M9 @2 h b7 X+ v: p: e
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响' f M" S8 ]! E- l& a' m
$page=htmlspecialchars($_GET["page"]); 3 ^: M3 \; P s6 R } $myord=htmlspecialchars($_GET["myord"]); Z" G4 n7 Q! I3 Q" V 0 ^$ k5 ? h L1 A- C1 x# [
// ... 省略 n 行...+ f9 v1 I7 |/ l; \& u6 w, J
$key,$myord 两个参数带入查询 / X e8 j- h# M) S //第47行 $key: * `# N3 ]; W" W3 h + w C' \! ]: c. U% ]8 e
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过.. ( o' l( N. U7 M7 R: N9 c & n& e( p# `6 ]) h. s //第197行 $myord ' B0 [# g; b" N) J" l9 x $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入 . G3 R, \3 W( H. k1 |: A 9 v2 E, U( Q7 b7 f% }! L7 Y: X) } ?> & A2 N, [! i0 i- B7 O) v& \ d* w: Z+ w