当前位置: 首页 > 图文教程 > 服务器 > Windows服务器 > 远程分析win2003 IIS安全设置

Windows服务器
实例讲解Windows 2003分区增容功能
WIN2003服务器端安全配置的一点简单经验
Windows 2003中快速建立ADSL拨号
远程如何修改Windows 2003系统机器名
微软揭示Windows 2003 R2关键性技术
Windows Server 2003组策略排障六法
感受Windows 2003 SP1安全配置向导功能
微软测试Windows Server 2003集群版
Win 2003系统传真功能的配置及使用
巧用Win 2003构筑校园网服务器防火墙
抢先看!WinServer 2003 R2 RTM发布
九招Windows 2003系统设置小技巧
巧施妙计—突破Win 2003系统的种种限制
巧妙启用Windows 2003的远程桌面功能
部署Windows Server 2003终端服务
在Win2003配置DNS的Internet访问
Windows 2003下提高FSO的安全性
Windows Server 2003 SP1 今日发布
微软将在HEC上发布Windows 2003 64-bit
快下载!值得装Windows 2003 SP1三大原因

Windows服务器 中的 远程分析win2003 IIS安全设置


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-04   浏览: 167 ::
收藏到网摘: n/a

提起微软公司IIS web服务器的安全问题,很多人立刻就会联想到那些为人们所称颂的致命漏洞: UNICODE , CGI 解析, .ida,idq, .Printer远程溢出等. 这些伟大的漏洞恐怕是我等scriptskidding的最爱了,利用他们可以很轻松的拿到较高的系统权限。但是这篇文章并非是讨论这些致命的漏洞的,只是比较详细的介绍了如何远程判断IIS 服务器的各种设置,如目录权限,认证方法等等,文中有些东西已经很老了,但是新的东西还是值得一看的。 希望本文能够起到一个抛砖引玉的作用。好了,废话少说,Go~!

win2003 IIS安全设置远程确定目录权限

让我们打开一个IIS服务器来看看。在IIS 服务管理器中,选择一个目录,看他的属性
在目录属性项有有这么一些选项(日志访问和索引此资源不计):
脚本资源访问: 对网站的脚本可以读取原文件。
读取      读取目录里面的静态资源。
写入      用户可以建立以及删除资源
目录浏览    用户可以浏览目录内容。

win2003 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 - 未找到文件
那么就说明这个目录的执行权限没有开。

写权限

win2003 IIS安全设置测试一个目录对于web用户是否具有写权限,采用如下方法:
telnet 到服务器的web端口(80)并发送一个如下请求:
PUT /dir/my_file.txt HTTP/1.1
Host: iis-server
Content-Length: 10 <enter><enter>
这时服务器会返回一个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则是没有开。

win2003 IIS安全设置浏览目录权限

判断一个目录是否允许浏览可能需要一点点小技巧,但是,在网站的默认首页(如: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只需要脚本执行权限就可以了。

IIS 认证方法的判断

这个漏洞是最近才公布出来的,IIS服务器支持匿名访问,基本认证和使用NTLM方式的windows集成认证,如果客户端发送一个包含认证信息的请求,IIS就会强行的尝试用这些认证信息取认证,并且放回不会的响应。这样我们就能够确定IIS的认证的配置。
要确定IIS是否支持基本认证,可以telnet到服务器的80端口,发送如下请求:
GET / HTTP/1.1
Host: iis-server
Authorization: Basic c3lzdGVtOm1hbmFnZXIA
这是一个基本认证的请求,里面包含了一个base 64编码的用户ID和PASS,Basic后面那串字符经过base 64解码以后就是 system:manager 。如果服务器返回一个401信息,则说明基本认证选项是开着的。如果返回200信息,则有2种可能,基本认证选项没有开或者是服务器存在一个用户名是
system的用户名,并且密码是manager (猜中的话,行大运啦)。

要确定NTLM选项是否开启则可以向IIS发送如下请求
GET / HTTP/1.1
Host: iis-server
Authorization: NegotiateTlRMTVNTUAABAAAAB4IAoAAAAAAAAAAAAAAAAAAAAAA=
同样,如果返回401消息,则说明支持NTLM,返回200说明不NTLM认证选项没有开启。
对于大多数网站来说,这两种认证方式都是不需要开起来的,他们有可能泄露一些服务器的重要信息。

泄露内部IP地址信息

如果IIS服务器在一个使用NAT的防火墙里面的话,通常都有个内部地址如10.x.x.x。
如果IIS开启了基本认证选项,那么发送如下一个简单的请求就可以得到服务器的内部IP:
GET / HTTP/1.1
Host:
Authorization: Basic c3lzdGVtOm1hbmFnZXIA
服务器将返回一个如下响应:
HTTP/1.1 401 Access Denied
Server: Microsoft-IIS/5.0
Date: Fri, 01 Mar 2002 15:45:32 GMT
WWW-Authenticate: Basic realm="10.1.1.2"
Connection: close
Content-Length: 3245
Content-Type: text/html
那个10.1.1.2就是机器的内部ip地址,本来realm的值是客户端提供给的一个主机头,但这里它是空的,所以IIS就选择了本机的IP地址来代替。同样的,利用PROPFIND,WRITE,MKCOL等请求的返回信息,也能泄露主机的一些信息,如我们向服务器提请下面这样一个请求:
PROPFIND / HTTP/1.1
Host:
Content-Length: 0
在IIS配置成使用主机名(见后)的情况下,则不会暴露主机的IP地址,但是会暴露NetBIOS名。事实上我们可以利用IIS的认证获得更多的信息,如所在域的名字,方法是向服务器发送如下带NTLM认证的请求:
GET / HTTP/1.1
Host: iis-server
Authorization: NegotiateTlRMTVNTUAABAAAAB4IAoAAAAAAAAAAAAAAAAAAAAAA
服务器会返回一个信息:
HTTP/1.1 401 Access Denied
Server: Microsoft-IIS/5.0
Date: Fri, 01 Mar 2002 16:24:58 GMT
WWW-Authenticate: Negotiate TlRMTVNTUAACAAAADAAMADAAAAAFgoKgeGvyVuvy67U
AAAAAAAAAAEQARAA8AAAAUwBDAFkATABMAEEAAgAMAFMAQwBZAEwATABBAAEA
DABTAEMAWQBMAEwAQQAEAAwAUwBDAFkATABMAEEAAwAMAFMAQwBZAEwATABB
AAAAAAA=
Content-Length: 3245
Content-Type: text/html
那一长串字符就包含了主机名和NT所在域的名字的base 64 编码。
临时解决方法:在cmd下进入c:\inetpub\adminscripts或者是adminiscript所在目录执行一下命令
adsutil set w3svc/UseHostName True
net stop iisadmin /y
net start w3svc

默认应用程序映射判断

判断默认映射是否存在比较简单,这里只简单的给出了在映射存在的情况下对于相应请求的响应:
扩展名:  .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错误信息。