本文作者:Jerry Shah (Jerry)
翻译作者:myh0st(文末点击阅读原文查看英文全文)
再开始今天的内容之前,首先理解一个东西 WebDav,WebDAV (Web-based Distributed Authoring and Versioning) 一种基于 HTTP 1.1协议的通信协议。它扩展了HTTP 1.1,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法,使应用程序可对Web Server直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制。
如果网站服务器启用 WebDav 并且给与所有权限,那么任意用户都可以远程上传、删除和修改服务器上的文件,从而导致服务器被上传 webshell。
大部分网站并非未授权就可以访问,如果未经授权去访问资源会提示 401 Unauthorized ,而验证方式是通过 basic 认证,在 header 中添加如下格式:
Authenticate: Basic YWRtMW46cEBzJHdvcmQ=
其中 amlnc2F3OmppZ3Nhdw== 是 base64 编码,编码前的内容是 adm1n:[email protected]$word
,也就是认证需要的账号密码。
下面就是我发现漏洞的过程:
1、首次访问时,未加任何认证信息,返回信息认证错误的信息,如图:
2、由于是账号密码错误,所以尝试去找找看,webdav 的默认账号密码是什么,说不定目标没有改呢:
3、使用 burp 对默认账号密码的组合,进行 base64 编码,然后尝试认证,发现账号密码还是不对:
4、在一个博客中发现 xampp 的默认 webdav 的账号密码:
5、再次使用 burp 编码之后,进行尝试,发现认证成功了:
尝试 webdav 文件,返回 301 自动跳转 webdav 目录:
尝试 webdav 目录,返回 200 状态码:
6、接下来使用 OPTIONS 方法来看看目标允许那些方法,发现允许 PUT 方法:
7、那么就使用 PUT 方法来上传一个文本文件试试,发现创建成功了:
8、尝试上传一个 html 文件,填入 xss 的 payload,也成功上传:
访问验证一下:
9、由于目标网站是 xampp 搭建的 php 网站,所以尝试上传一个 php 的 webshell:
访问发现 phpinfo 运行结果:
10、当我再次上传 php 文件时,返回 204 状态码,可能是因为文件已存在,没有新创建文件,而是重写了文件:
11、然而,在验证 shell 是否可用时,访问链接:
https://www.mytarget.com/webdav/Jerry.php and added *?JerryCommand=id*
发现命令执行成功:
12、接下来尝试反弹 shell,参考反弹 shell 的备忘录:
https://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet
13、在 vps 上使用 nc 监听一个端口:
14、看看目标系统上是否存在 python:
使用 which python
命令能告诉我们目标系统使用的是 python2 还是 python3。
15、接下来使用 python 的反弹 shell payload 进行尝试,反连我的服务器:
vps 上获得了一个 shell,说明反弹 shell 成功:
到这里整个测试就结束了。
1、首先目标启用了 webdav,并且使用了默认的账号密码,如果不是默认账号密码,那么就需要进行暴力破解,但是爆破的成功率不见得有多高,如果无法获取账号密码,则无法进行后续的测试。
2、webdav 允许所有方法,尤其是比较危险的 PUT、DELETE、COPY 等
1、不要使用默认的认证信息
2、在无法禁用 webdav 的情况下,禁止 PUT 等危险方法