一、漏洞原理
Tomcat设置了写权限(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>
二、影响范围
Apache Tomcat 7.0.0 – 7.0.81
三、漏洞复现
首先启动我们的漏洞环境
通过工具burp suite修改包,把GET方法修改成PUT方法,接下来上传jsp文件(注意jsp后面要加/),这里我用的是冰蝎以及自带的shell.jsp 响应201表示上传成功了
通过冰蝎连接连接成功
四、漏洞修复
- 配置readonly和VirtualDirContext值为True或注释参数,禁止使用PUT方法并重启tomcat
注意:如果禁用PUT方法,对于依赖PUT方法的应用,可能导致业务失效。 - 根据官方补丁升级最新版本