首先要有这样的思路:2000对应iis5.0 ,xp对应iis5.1 ,2003对应iis6.0
配置 Web 权限
以下是根据发布的材料的用途来配置 Web 权限的各种方法:
? 启用读取、写入和目录浏览:启用这些权限允许客户端查看资源列表并进行修改(除非对这些资源没有写入权限)、发布自己的资源以及处理文件。
? 启用写入;并禁用读取和目录浏览: 如果只想让客户端在目录中发布私人信息,而不希望别人查看所发布的内容,可以设置写入权限,但不设置读取和目录浏览权限。该配置在客户端端提交选票或性能检查时非常有用。
? 启用读取和写入;并禁用目录浏览:如果希望通过隐藏文件名来提高安全性,可设置该配置。然而,请注意,通过隐藏文件名来设置安全性是一种低级的安全防范措施,因为一个故意破坏者可通过试探和错误信息来猜测出文件名。
? 启用索引资源:如果打算让客户端搜索目录资源,请确保启用了索引服务。
保护脚本代码
如果在发布目录中有一些不想让客户端看到的脚本文件,您可以通过不授予“脚本资源访问”权限来拒绝访问。可执行文件将作为静态 HTML 文件处理,除非为该目录启用了“脚本和可执行文件”。
要阻止 .exe 文件下载并作为 HTML 文件来查看,但允许其运行,可在发布目录的“虚拟目录”属性页中,将执行权限更改为“脚本和可执行文件”。
这一权限级别使所有可执行文件受“脚本资源访问”设置的影响。换句话说,如果选中了“脚本资源访问”,有读取权限的客户端可以看到所有的可执行文件;有写入权限的客户端既可运行它们,也可以编辑它们。
使用下面的权限,客户端可以在未出现在应用程序映射中的可执行文件中写入信息:
? 已授予写入权限。
? 执行权限设置为“纯脚本”。
使用下面的权限,客户端可以向任何可执行文件中写入信息,不论它们是否出现在应用程序映射中:
? 已授予“脚本资源访问”权限。
? 执行权限设置为“脚本和可执行文件”。
让我们打开一个IIS服务器来看看。在IIS 服务管理器中,选择一个目录,看他的属性,在目录属性项有有这么一些选项(日志访问和索引此资源不计):
脚本资源访问: 对网站的脚本可以读取原文件。
读取 读取目录里面的静态资源。
写入 用户可以建立以及删除资源
目录浏览 用户可以浏览目录内容。
应用程序设置的执行许可中有三个选项:
无 只能访问静态页面
纯脚本 只允许允许脚本 如ASP脚本
脚本和可执行程序 可以访问和执行各种文件类型
那么,如何确定服务器上面的这些开关设置呢? 别着急,一个一个来。
执行权限
如何确定某个目录是否开了执行权限呢?很简单,向服务器发送一个下面得请求:
http://iis-server/dir/no-such-file.dll /dir/为要判断得目录,no-such-file.dll是随便取得一个名字,服务器上面没有这个文件。
服务器对我们得请求会返回一个信息。如果返回的是一个500错误:
HTTP 500 - 内部服务器错误 (Internal Server error)
那么就说明这个目录的执行权限是开着的。 对于服务器,能不开执行权限的就不要开。特别是虚拟目录的执行权限,大家想一想UNICODE和二次解码漏洞的利用过程就明白了。
如果服务器返回的是一个 404 错误:HTTP 404 - 未找到文件,那么就说明这个目录的执行权限没有开。
写权限
测试一个目录对于web用户是否具有写权限,采用如下方法:
telnet 到服务器的web端口(80)并发送一个如下请求:
PUT /dir/my_file.txt HTTP/1.1
Host: iis-server
Content-Length: 10
这时服务器会返回一个100( 继续)的信息:
HTTP/1.1 100 Continue
Server: Microsoft-IIS/5.0
Date: Thu, 28 Feb 2002 15:56:00 GMT
接着,我们输入10个字母:
AAAAAAAAAA
送出这个请求后,看服务器的返回信息,如果是一个 201 Created响应:
HTTP/1.1 201 Created
Server: Microsoft-IIS/5.0
Date: Thu, 28 Feb 2002 15:56:08 GMT
Location: http://iis-server/dir/my_file.txt
Content-Length: 0
Allow: OPTIONS, TRACE, GET, HEAD, DELETE, PUT, COPY, MOVE, PROPFIND,
PROPPATCH, SEARCH, LOCK, UNLOCK
那么就说明这个目录的写权限是开着的,反之,如果返回的是一个 403 错误,那么写权限就是
没有开起来,如果需要你认证,并且返回一个 401(权限禁止) 的响应的话,说明是开了写权限,但是匿名用户不允许。 如果一个目录同时开了”写”和“脚本和可执行程序”的话,那么web用户就可以上传一个程序并且执行它,恐怖哦%^#$!~
纯脚本执行权限
这样的目录就太多了。很多不需要给执行权限的目录也被管理员给了脚本执行权限,我记得在
shotgun的一篇文章里面他说过:最小的权限+最少的服务= 最大的安全 ; 一点也没有错。给目录任何多余的权限都是没有必要的。判断一个目录是否可以执行纯脚本文件也很简单,发送一个如下一个请求:
http://iis-server/dir/no-such-file.asp 返回404文件不存在说明有执行权限,返回403则是没有开。
浏览目录权限
判断一个目录是否允许浏览可能需要一点点小技巧,但是,在网站的默认首页(如:default.asp)不存在的话,那么就再简单不过了。 在浏览器里面输入:
http://iis-server/dir/
如果权限开着的,那么会返回200响应,并且列出当前目录里面的内容,反之,没有列出目录的话就是关了。 但是,如果默认页面default.asp存在呢?敲入上面的地址就直接打开这个页面了。别急,
WebDAV 里面有一个请求方法叫:PROFIND。这个方法使得我们可以从服务器资源里面得到一些如文件名,创建时间,最后修改时间等等的信息。利用它我们也可以绕过 default.asp 来判断目录浏览权限的情况, telnet到IIS-server的web端口,发送如下请求:
PROPFIND /dir/ HTTP/1.1
Host: iis-server
Content-Length: 0
这时,服务器会送回一个207 Multi Status的响应,如果目录是允许浏览的,那么同时会列出目录里面的资源以及他们的属性。如果目录浏览不允许,返回的信息就会少的多。目录浏览一般来说只能算是一个低危险等级的漏洞,比如一个images目录,里面除了图片没有别的东西了,那对于服务器的安全就没有什么危害,但是,如果目录里面放了一个管理页面adminpage.asp或者一些数据库连接信息文件,可能会导致你的服务器拱手相让给***者。
读权限
判断这点很容易,发一个带 txt文件的请求就可以:
http://iis-server/dir/no-such-file.txt 如果返回一个 404 文件不存在的响应,就说明读权限是开着的,反正,返回403错误则说明都权限没有开。早几年接触安全的人一定知道 ::$DATA泄露ASP源代码的漏洞,其实如果一个目录里面权势asp脚本的话,那么读权限也可以不用开的,ASP只需要脚本执行权限就可以了。
默认应用程序映射判断
判断默认映射是否存在比较简单,这里只简单的给出了在映射存在的情况下对于相应请求的响应:
扩展名: .printer
请求: http://iis-server/foo.printer
响应: HTTP 500 - 内部服务器错误
扩展名:.idc
请求: http://iis-server/foo.idc
响应: code 500 Internal Server Error
扩展名:.idq
请求: http://iis-server/foo.idq
响应码:200 OK
响应: 找不到 IDQ 文件 D:\dir\\foo.idq
扩展名:.ida
请求: http://iis-server/foo.ida
响应码:200 OK
响应: 找不到 IDQ 文件 D:\dir\foo.ida
扩展名:.htr
请求: http://iis-server/foo.htr
响应: HTTP 404 - 未找到文件
扩展名:.htw
请求: http://iis-server/foo.htw
响应码: 200 OK
响应: QUERY_STRING 的格式无效
扩展名:.stm
请求: http://iis-server/foo.stm
响应: HTTP 404 - 未找到文件
扩展名:.shtm
请求: http://iis-server/foo.shtm
响应: HTTP 404 - 未找到文件
扩展名:.shtml
请求: http://iis-server/foo.ida
响应: HTTP 404 - 未找到文件
判断操作系统是否为个人版本(Professional/Workstation )
IIS安装在windows2000专业版和NT workstation上面时候,同时进行的连接数最大为10个,利用这一点我们可以简单判断操作系统版本:创建10个 HTTP 1.1的持续连接,第11个连接请求将放回403错误信息。