WebDAV服务是否启用PHP解析需以实际访问phpinfo页面为准:davtest仅粗略检测上传后缀响应,非真实执行验证;关键看info.php能否通过URL直接访问并输出phpinfo。

WebDAV 服务是否启用 PHP 解析?先确认 davtest 能否连上
davtest 不是漏洞利用工具,它只检测 WebDAV 接口是否开放、能否上传文件、能否执行任意后缀(比如 .php)。很多 kali 用户跑完 davtest -url http://target/ 就以为“挖到洞了”,其实只是发现了个 WebDAV 端点。关键要看返回里有没有类似 PHP、php5、php7 的 upload result —— 那才说明服务器把 .php 当脚本解析了。
常见失败现象:davtest 报 405 Method Not Allowed 或 401 Unauthorized,说明目标没开 PROPFIND/PUT,或需要认证;若返回 200 OK 但所有上传后缀都显示 Not executable,基本可判定 PHP 解析被禁用(比如 Nginx 默认不解析 WebDAV 上传的 PHP)。
- 确保目标 WebDAV 路径正确,常见为
/webdav/、/dav/、/(根路径有时也开放) - 若需认证,用
-auth user:pass参数,别漏掉冒号 - 注意:davtest 默认只测 13 种后缀,不含
.phtml、.php3等变体,真要覆盖得改源码或换cadaver+ 手动试
为什么 davtest 显示 php 可执行,但上传的 shell.php 访问 404 或 500?
因为 davtest 的“executable”判断逻辑很粗糙:它只看上传后 GET 请求是否返回非空响应体,并不校验内容是否真被 PHP 引擎执行。典型假阳性场景:
- 服务器把
shell.php当静态文件返回(Content-Type: text/plain),内容就是你写的 PHP 代码原文 - Apache + mod_php 下,WebDAV 上传的文件权限为 600(属主读写),web 用户无法读取,导致 403
- Nginx 配置中
location ~ \.php$只匹配磁盘路径,而 WebDAV 上传可能落在非 root 目录(如/var/www/dav/),但该路径未被fastcgi_pass覆盖
验证方法:上传一个 info.php,内容为 ,然后用浏览器直接访问完整 URL(如 http://target/webdav/info.php),看是否输出 phpinfo 页面 —— 这才是真实可执行。
立即学习“PHP免费学习笔记(深入)”;
绕过 WebDAV 的 PHP 解析限制:常见 bypass 方式
即使 davtest 显示 php 不可执行,也不代表完全没戏。WebDAV 本身不解析 PHP,解析行为由 Web Server 决定,所以重点在找服务端配置缺陷:
- 尝试上传
shell.phtml、shell.php5、shell.php3—— 某些旧版 Apache 会 fallback 解析这些扩展名 - 若支持
PROPPATCH,可尝试修改已存在文件的Content-Type属性(极少见,仅特定 IIS 配置) - 上传
.htaccess(Apache 场景):内容为AddType application/x-httpd-php .xxx,再上传shell.xxx;注意 WebDAV 默认不允许上传点开头的文件,需用cadaver或 Burp 改包绕过 - 检查是否允许上传 ZIP 并解压(某些 WebDAV 实现支持
UNZIP方法),可打包含.php的 ZIP 上传后触发解压
实战中容易忽略的权限与路径细节
davtest 输出的“upload path”只是它自己构造的路径,不等于 web 可访问路径。例如它说上传到 http://target/webdav/test.php,但实际 web 根目录可能是 /var/www/html/,而 WebDAV 根映射到 /var/www/dav/ —— 这两个目录在 HTTP 层是否同级,决定你能不能通过 URL 访问。
更隐蔽的问题:
- 某些环境 WebDAV 使用独立用户(如
www-data:davusers),上传文件属组不是 web server 用户,导致 nginx/apache 读取失败 - SELinux 启用时,
httpd_can_network_connect关闭会导致 davtest 连接超时,需先setsebool -P httpd_can_network_connect on - kali 自带的 davtest 版本较老(0.4.8),对 WebDAV 的 digest auth 支持差,遇到 401 时建议切到
curl -X PUT手动测
真正卡住的地方,往往不是“能不能传”,而是“传完放哪、谁有权限读、web server 配置认不认”。别只盯着 davtest 的一行 output。











