在IIS设置里,有一个“Web服务扩展”的设置,其中包括“WebDAV”扩展。许多人都不明白,这个“WebDAV”扩展是干嘛用的,要不要开启呢?有不少人的想法是“开启吧,以免影响网站运行,启用总比不启用好”。其实,这些人的想法是错误的,我们在设置服务器时,基本原则是启用的服务越少越好,能不启用就不启用,在不了解某一服务时,千万不要开启它。为什么呢?因为那怕是一个小小的不经意的配置失误,都可能造成整台服务器被人入侵而沦陷。而“WebDAV”扩展就属于此类高风险的服务,绝对不能轻易开启,除非你对此服务已经相当熟悉,且做好了足够的安全设置。

在IIS中安装“WebDAV”扩展:

安装后就会在IIS中出现“WebDAV 创作规则”模块:

了解“WebDAV”扩展


WebDAV是一种基于 HTTP 1.1协议的通信协议,它扩展了HTTP 1.1,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法。使应用程序可直接对Web Server直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制。
IIS实现Webdav是采用它的两种接口:CGI、ISAPI的ISAPI接口。
Webdav支持的请求包括PROPFIND、PROPPATCH、MKCOL、DELETE、PUT、COPY、MOVE、LOCK、UNLOCK等。

配置“WebDAV”扩展


为了安全上的考虑,IIS默认并不会启动WebDAV的功能,因此必须另外来激活它。
通过启动“IIS管理器”,展开本地计算机,选择“Web服务扩展”,选择“允许”的途径来启动WebDAV功能。
开启WebDAV之后,IIS就支持PROPFIND、PROPPATCH、MKCOL、DELETE、PUT、COPY、MOVE、LOCK、UNLOCK等方法了。
当IIS中的配置允许写入的时候就可以直接PUT文件上去,由此可能引发非常严重的安全问题,强烈建议禁止。

“WebDAV”扩展的危害


当开启了WebDAV后,IIS中又配置了目录可写,便会产生很严重的问题,由此配置产生的问题很多,并且有老外黑了一群中国政府站有一部分就是由于此配置。 危害巨大,操作简单,直接批量扫描,上传shell。

测试IIS的put漏洞


演示用的是新装的Win2003虚拟机,IIS采用的默认的设置,勾选上了主目录标签页下的“写入”复选框。
对服务器发送OPTION包:

返回响应头如下:

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成脚本文件。

启用了“WebDAV”扩展,并且复选了“写入”,就可以写入txt文件了。要想使用MOVE命令将其更名为脚本文件后缀,必须还复选上“脚本资源访问”。
 
但是发现利用IIS的解析漏洞,可以MOVE成test.asp;.jpg,然后就可以当做shell来执行了。

测试NTFS权限的设置是否能够对IIS的写权限产生影响


测试一:
站点根目录设置IIS匿名帐户的权限为允许“读取和运行,列出文件夹目录,读取”,其它未勾选。经测试,可以成功PUT写入文件。

测试二:
站点根目录设置IIS匿名帐户的权限为允许“读取和运行,列出文件夹目录,读 取”,并且勾选禁止“写入”。经测试,可以PUT写入文件失败。

返回报文如下:

HTTP/1.1 401 Unauthorized
Content-Length: 75
Content-Type: text/html
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Date: Fri, 01 Jan 2010 08:33:09 GMT <html><head><title>Error</title>< /head><body>错误: 拒绝访问。</body></html> 注释:写入操作被 拒绝。

总结:不要开启“WebDAV”扩展


(1)如果没有启用“WebDAV”扩展,OPTIONS命令是无法查看IIS支持的方法集合 的。即便是复选上了“写入”,仍然无法写入txt文件(asp的当然也不行)。
(2)启用了“WebDAV”扩展,并且复选了“写入”,就可以写 入txt文件了。要想使用MOVE命令将其更名为脚本文件后缀,必须还复选上“脚本资源访问”。
(3)只有设置了IIS匿名帐户禁止“写入”的 NTFS权限,才能拒绝写入。注意:这个拒绝写入的权限是大家很容易忽视的,如果未设置,还是可以成功写入文件的。它并不单单是针对IIS写权限的,测试发现,如果没有禁止写入,脚本木马还是可以创建和修改文件的。

原文链接

安全提示:IIS不要开启“WebDAV”扩展(转载)的更多相关文章

  1. [转载]IIS下开启php扩展失效? 感谢作者 本人泪流满面

    用户反应,空间不支持GD.系统环境是IIS PHP.   先用phpinfo探了一下,确实没有找到gd的影子.然后检查php.ini,发现gd扩展没有开启(windows下安装的php,其所有php扩 ...

  2. Windows 7中安装SQL2005提示IIS未安装 解决办法 .(转载)

    在Windows 7系统中安装SQL Server 2005时,可能会收到一个警告:提示IIS未安装或者未启用.在通过“控制面板”的“打开或关闭Windows功能”按默认设置安装IIS后,发现仍有这个 ...

  3. php以pdo方式连接sqlserver,无法开启sqlsrv扩展

    首先,PHP连接sqlserver代码如下: $host="aaaaa"; $dbname="aaaaa"; $user="aaaaa"; ...

  4. CVE-2017-7269—IIS 6.0 WebDAV远程代码执行漏洞分析

    漏洞描述: 3月27日,在Windows 2003 R2上使用IIS 6.0 爆出了0Day漏洞(CVE-2017-7269),漏洞利用PoC开始流传,但糟糕的是这产品已经停止更新了.网上流传的poc ...

  5. win10 64位安装memcache扩展和开启redis扩展

    前面有关于win10下搭建wamp环境的介绍,在此不在赘述,php操作memcache有memcache库和memcached库,其中memcache是php内置的扩展库,支持面向对象和面向过程两种操 ...

  6. 在PHP中开启CURL扩展,使其支持curl()函数

    在用PHP开发CMS的时候,要用到PHP的curl函数,默认状态下,这个函数需要开启CURL扩展,有主机使用权的,可通过PHP.ini文件开启本扩展,方法如下: 1.打开php.ini,定位到;ext ...

  7. Linux 下安装 Memcached 和 PHP 开启 Memcached 扩展

    [项目背景]:阿里云ECS服务器,Linux(centos7.2 64位),环境部署使用的是阿里云一键安装包(LAMP)等 [项目需求]:linux安装memcached 和php开启Memcache ...

  8. php没有开启Memcache扩展类时

    模拟PHP Memcache 类.当服务器没有开启Memcache扩展的时候.可以采用本类使用方法class_exists('Memcache') or include './Memcache.cla ...

  9. PHPnow开启PHP扩展里openssl支持的方法

    PHPnow 是 Win32 下绿色的 Apache + PHP + MySQL 环境套件包.简易安装.快速搭建支持虚拟主机的 PHP 环境.更多介绍<PHP服务套件 PHPnow1.5.6&g ...

随机推荐

  1. 【读书笔记】iOS-手势识别

    一,事件处理机制 事件是当用户手指触及屏幕,或地屏幕上滑动,或摇晃设备等时候,系统不断地把这些事件通过消息发送给应用程序对象.在iOS设备中能够捕获的事件有3种:触摸事件,移动事件和多媒体远程控制事件 ...

  2. 【读书笔记】iOS-WiFi长连接

    如果你的应用需要一个持久的WiFi长连接,你可以通过设置应用的Info.plist文件中的UIRequiresPersistentWiFi配置项的Boolean值来达到目的.如果这个配置项的值为YES ...

  3. NODE获取节点删除空格的操作

    NODE节点操作有: object.parentNode:获取某子元素的父级: object.childNodes:是获取所有的子元素节点,返回数组类型: object.lastChild: 获取该元 ...

  4. 编程实践:使用java访问mySQL数据库

    1.虚拟机安装mySQL 服务器, 宿主机分别使用navicat工具和java代码 访问mySQL,组网图如下: 2. 查看mySQL的服务器状态,如下: 3. 服务器上查看数据库和数据表内容如下: ...

  5. SVN SVN合并(Merge)与拉取分支(Branch/tag)操作简介

    SVN合并(Merge)与拉取分支(Branch/tag)操作简介 合并(Merge) 例子:把对feature_branch\project_name_v3.3.7_branch的修改合并到deve ...

  6. .Net Core(完) 创建Docker镜像

    使用Docker可以在操作系统上分出多个独立的区域(容器/Container),各个容器之间基本隔离,且可以有自己单独的系统配置.软件等,各个容器之间的软件基本不会互相干扰.Docker上配置好的容器 ...

  7. 你不可不知的Java引用类型之——软引用

    定义 软引用是使用SoftReference创建的引用,强度弱于强引用,被其引用的对象在内存不足的时候会被回收,不会产生内存溢出. 说明 软引用,顾名思义就是比较"软"一点的引用. ...

  8. springcloud 入门 10 (eureka高可用)

    eureka高可用: 说白了,就是加一个实例作为原实例的备份,然后一起对外提供服务.这样可以保证在一台机器宕机的时候,整个系统不会死掉.保证其继续对外服务. eureka的集群化: 服务注册中心Eur ...

  9. docker端口映射启动报错Error response from daemon: driver failed programming external connectivity on endpoint jms_guacamole

    问题描述:今天跳板机的一个guacamole用docker重新启动报错了 [root@localhost opt]# docker start d82e9c342a Error response / ...

  10. 【hexo】03config文件配置详解

    YAML 是专门用来写配置文件的语言,非常简洁和强大,我们的配置文件就是这种格式.需要了解的只有: # 我是文配置件的注释 重要提示,例如:"theme: landspace"中冒 ...