Apache Tomcat 9.0.0.M1 to 9.0.0.M11
Apache Tomcat 8.5.0 to 8.5.6
Apache Tomcat 8.0.0.RC1 to 8.0.38
Apache Tomcat 7.0.0 to 7.0.72
Apache Tomcat 6.0.0 to 6.0.47
Earlier, unsupported versions may also be affected.
这个漏洞实质还是JMX反序列化漏洞,tomcat同样也用了JmxRemoteLifecycleListener这个监听器,但是tomcat在Oracle修复这个漏洞后自己没有及时更新,导致了反序列还依旧存在。网上搜了很多关于该漏洞的分析文章基本上都是0c0c0f牛在微信公众号里文章的转载或是变种,也基本都是在window系统上做的测试,所以也就想在linux也测试一下,也就有了这篇文章,大牛们勿喷呐= =、。
Linux Ubuntu server x86 Apache Tomcat (http://archive.apache.org/dist/tomcat/tomcat-8/v8.0.36/bin/apache-tomcat-8.0.36.tar.gz) catalina-jmx-remote (http://archive.apache.org/dist/tomcat/tomcat-8/v8.0.36/bin/extras/catalina-jmx-remote.jar) //添加至%TOMCAT_HOME%/lib/目录下 Groovy (https://repo1.maven.org/maven2/org/codehaus/groovy/groovy/2.3.9/groovy-2.3.9.jar) //添加至 %TOMCAT_HOME%/lib/目录下 POC (https://github.com/frohoff/ysoserial)
关于linux配置tomcat运行远程监控(JMX)这里有个坑,网上搜到的绝大多数关于linux下tomcat jmx配置的文章,都使用了只修改catalina.sh为以下内容的方法,包括Zabbix Wiki也是推荐的这种方式:
CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=192.168.64.7"
但就这种方式而言,需要注意的是 catalina.sh 中提供的默认变量名 JAVA_OPTS 和 CATALINA_OPTS。由于 JAVA_OPTS 所添加的参数会在 tomcat 开启和关闭时都运行,所以如果你把 Dcom.sun.management.jmxremote.port=9999
写在 JAVA_OPTS 中时,关闭服务的时候是会报错的,而且在该漏洞场景中攻击利用也是不会成功的,因此需要注意的是在平常渗透过程当中若在linux下遇到了该漏洞,利用不成功也是正常的。
### Referer
http://seclists.org/oss-sec/2016/q4/502
微信公众号:0c0c0f