标签归档:tomcat

Tomcat远程代码执行漏洞CVE-2017-12615

CVE号:
CVE-2017-12615

漏洞危害:

【安全加固】Tomcat限制不安全的HTTP方法


由上文得知Tomcat默认就是不允许使用PUT方法。
需要修改配置开启PUT方法,修改conf/web.xml,添加

<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>

直接PUT上传Webshell。

一开始影响平台为Windows,受影响版本为Apache Tomcat 7.0.0 – 7.0.81。

复现过程如下
默认是无法上传jsp文件的

Windows环境下利用Windows 的特性。其一是 NTFS 文件流

其二是文件名的相关限制(如 Windows 中文件名不能以空格结尾)

后来披露Linux 和 Windows 服务器平台下从5.x到9.x全部的Tomcat版本都受影响,当 PUT 地址为/1.jsp/时,仍然会创建 JSP。
Windows下Apache Tomcat/8.0.46:

Linux下Apache Tomcat/8.0.46

这里有朋友问Nginx方向代理到Tomcat上,后端的Tomcat如果开启了PUT方法是否受影响,其实Nginx本身没有禁止PUT方法,所以还是会转发到后端,同样是受影响。

参考文章:
http://www.freebuf.com/vuls/148283.html

 

 

【安全加固】Tomcat限制不安全的HTTP方法

默认Tomcat是禁止PUT和DELETE方法的,在tomcat中conf下的web.xml中:
可以看到关于readonly的解释
Is this context “read only”, so HTTP commands like PUT and DELETE are rejected?  [true]
可以看到默认是True,即不允许delete和put操作,会返回403。

如果不想限制的话,可以在Tomcat的web.xml 文件中配置org.apache.catalina.servlets.DefaultServlet的初始化参数中添加
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>

另外还可以修改应用中的web.xml
<?xml version=”1.0″ encoding=”UTF-8″?>
<web-app xmlns=”http://Java.sun.com/xml/ns/j2ee”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd”
version=”2.4″>
的下面添加
<security-constraint>
<web-resource-collection>
<url-pattern>/*</url-pattern>
<http-method>PUT</http-method>
<http-method>DELETE</http-method>
<http-method>HEAD</http-method>
<http-method>OPTIONS</http-method>
<http-method>TRACE</http-method>
</web-resource-collection>
<auth-constraint>
</auth-constraint>
</security-constraint>