攻防环境搭建
POC Proof of Concept 在网络安全,一般指去证明系统存在漏洞的代码。
EXP Exploit 利用系统漏洞进行攻击的程序。
Payload 攻击成功后,攻击者后续实现侵害的代码。
RCE Remote Command Execution 远程代码执行
DVWA
👉 见 DVWA 安装及使用
漏洞 1:Tomcat
Tomcat PUT 方法任意写文件漏洞(CVE-2017-12615)
Tomcat 版本:7.0.0-7.0.79、8.5.19
安装 cved,这里包含有该漏洞的复现环境。
docker search CVE-2017-12615
docker pull docker.io/cved/cve-2017-12615
docker run -d -p 8080:8080 docker.io/cved/cve-2017-12615
工具:Burp Suite
👉 下载地址:https://portswigger.net/burp
Burp Suite 用于渗透测试,可以下载社区版本使用。
在 Burp Suite 中打开一个临时项目,在 Setting 中我们可以看到已经 Burp Suite 在本地的 8080 端口开启了一个服务,去监听流量。
然后在火狐浏览器上,把我们流量转发到 8080 中:
访问 cved
这里我的 cved 是部署在远程服务器上,如果你的 cved 部署在本地上,可以考虑在本地启动一个 host,host 将请求转发到你本地的 cved 端口,比如用 switchhosts 开一个 example.com 转发到 127.0.0.1:8081。
在 Burp Suite 中可以看到我们的请求已经被拦截了:
注意需要打开「Intercept is on」按钮(未打开之前按钮是「intercept is off」)。
PoC:上传文件
右键菜单把请求发送到 Repeater 中,Repeater 可以反复发送同一个请求,方便测试。
修改请求方法
可以看到,当我们访问 /poc.txt
的时候成功响应,也就是文件已经写入服务器。
漏洞原理
首先 Tomcat 的 web.xml 配置了可写(readonly=false),导致我们可以往服务器写文件:
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>