给JBoss种蛊分析
JBoss又发现漏洞了,安全圈儿为之一紧。 知道创宇安全研究团队再次本着科普的情怀收集跟JBoss安全相关的材料,为安全行业再出一把力。
这里先给JBoss正下名。通常所说的JBoss,全称是JBoss Application Server。 它是JavaEE体系里, 一个很流行的应用服务器开源实现。 除了这个JBossAS外,JBoss打头的还有不少产品。不过,由于其它的弟兄在安全视野里很少出场,下文也为了说明方便, 就把JBossAS也简称为JBoss。
关于JBoss安全,网上这方面的东西不少,但初看时, 总是云里雾里的, 搞不明白究竟是说什么的。 这里, 咱试着换另外一种方式来介绍。
先来看基本的攻击思路:利用漏洞部署一个war(war是JavaEE里基本部署单位,对此不了解的请自行google),这个war里一般只有一个jsp的webshell,利用此shell,黑客可做各种猥琐事。
整个过程中,怎么能搞上去一个webshell是核心。这个“搞上去”,在JBoss世界里,就是deploy一个war。 JBoss可真是煞费苦心地提供了N多种部署策略,又在无意中为这N多种部署策略提供M种调用方式,于是乎,跟JBoss相关的漏洞也就理所当然出现了N*M种。这也是造成JBoss漏洞纷繁复杂不好理解的一大原因。咱这篇文章就是要从这纷繁复杂的乱象里趟出一条“血路”来。
话题扯的有些远了,回到主题上来。 这里用最流行的那个漏洞形象地介绍上面的过程和其中的关键概念。
看下图,用这么个url可以方便地部署个“一句话后门”。这里,为了方便阅读方便,对这个长url做了分行处理并加了适当的说明。
JBoss收到这个请求后,就会部署一个shell.war的文件夹,它里面只有一个文件shell.jsp。随后就可以利用此shell.jsp执行各种命令啦。
简短介绍了部署流程后,重点说下上图中红框内标示的三部分。
1, 先说第二个“DeploymentFileRepository”, 它是JBoss运行环境里创建的JMX对象,可通过“jboss.admin:service”名找到。 这个对象实质上是一个服务, DeploymentFileRepository名字出卖了它的作用, 可以deploy一个file。
2, 再回过头来看第一个"jmx-console/HtmlAdaptor", 它本质上是JBoss内在服务的调用接口。 这里关于JMX多说两句。 JMX作为JavaEE体系里一个标准,是为了方便运维(与监控)而设计的,其基本思想是给每一个服务主体创建一个“影子”对象,这个“影子”对象可控制查看主体对象的一切。这里的“jmx-console/HtmlAdaptor”正是控制查看所有影子对象的一个总入口。
3, 第三部分不用太多地说明, 它是黑客行为的最终目标。 其内容可以定制,表现形式又随具体的攻击组合不同而异。 也就是“蛊”可以随场景和目的不同而定制。
借助这个典型事件分析,从而对JBoss攻击所涉及概念有形象了解后,看针对JBoss常见的攻击方式,也就是种蛊方式。
1,jmx-console/HtmlAdaptor + DeploymentFileRepository。 也就是上面详细分析的那个。 之所以这里再列出来, 完全是为了向其致敬。 可以说, 这个种蛊方式最方便。 也正是它,才有了当年大名鼎鼎的JBoss蠕虫事件。 不过, 随着行业对JBoss安全的重视,适合此组合的场景已经很少有了。
2,/jmx-console/HtmlAdaptor + BSHDeployer。 跟上面的类似, 不过, 换了另一种部署方式。 这里的BSH是一种shell语言, JVM支持, JBoss也可就出于顺便支持了。 这个方式是实际是通过HTTP请求给BSHDeployer传了一段beanshell脚本,黑客关心的webshell就内嵌在这个脚本里。
3, web-console/Invoker + DeploymentFileRepository。 跟第一种类似, 只不过是换了调用的入口,背后的服务还是DeploymentFileRepository。
4,invoker/JMXInvokerServlet + application/x-java-serialized-object;class=org.jboss.invocation.MarshalledInvocation + BSHDeployer。这个在利用方式上跟前面几个稍稍不同。前面几个上传的payload还是肉眼可以直接读出的文本,这个有变化了,它实质是发送了一个用HTTP请求发送RMI。这个过程在原理上相当于在第2个的基础上套了一层 MarshalledInvocation调用。稍微介绍下 MarshalledInvocation。 Java里,可以方便地把一次方法调用用一个Java类描述下来,随后再编译后字节码通过网络发送,服务端收到请求后,再解析这个字节码里的调用信息。这里,最终又把请求转给了 BSHDeployer。
5, invoker/JMXInvokerServlet +application/x-java-serialized-object;class=org.jboss.invocation.MarshalledInvocation + MainDeployer。回到这些天爆出的利用方式(http://www.exploit-db.com/exploits/28713/)了。 这种方式跟第4种类似,不同体现在MainDeployer。上面第4种用BSHDeployer时, webshell全部内容可以在请求中传送,而MainDeployer就不行了, 它需要一个指向远程war的url,MainDeployer把这个war下载下来后,再正常地部署。
...
就到这里吧,上面的组合是比较典型的,不过,借助它们可以很好地理解JBoss漏洞利用了。
危害呢? JBoss漏洞的利用本质上是创建一个webshell,这样它的危害就转化成webshell的功能和Jboss进程的用户权限。如果放任自流,然后… 就没有然后了。
如何防御?从上面的分析,我们知道,webshell的部署过程有两个关键点:找到合适的入口调用合适的服务。顺着这个思路,把用不着的服务统统关掉,尽可能地减少访问入口(或关掉访问入口或加强权限拦截)。当然,加速乐已经完全做了相应的防护,运维的筒子们可放心滴使用啦。
给JBoss种蛊分析的更多相关文章
- error: /usr/include/stdio.h: Permission denied 的一种情况分析
error: /usr/include/stdio.h: Permission denied 的一种情况分析 代码: #include <stdio.h> int main(){ prin ...
- Linux ssh登陆慢的两种原因分析
Linux ssh登陆慢的两种原因分析 如果做运维就一定会遇到ssh登陆Linux服务器慢的问题,问题比较好解决,一般Google之后有很多文章都告诉你解决方法,但是很少有文章分析为什么会慢,这篇文章 ...
- LwIP协议栈开发嵌入式网络的三种方法分析
LwIP协议栈开发嵌入式网络的三种方法分析 摘要 轻量级的TCP/IP协议栈LwIP,提供了三种应用程序设计方法,且很容易被移植到多任务的操作系统中.本文结合μC/OS-II这一实时操作系统,以 ...
- Wps 2013 拼音标注两种方式分析
Wps 2013 拼音标注两种方式分析 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转 ...
- ActiveMQ、RabbitMQ、RocketMQ、Kafka四种消息中间件分析介绍
ActiveMQ.RabbitMQ.RocketMQ.Kafka四种消息中间件分析介绍 我们从四种消息中间件的介绍到基本使用,以及高可用,消息重复性,消息丢失,消息顺序性能方面进行分析介绍! 一.消息 ...
- JBoss高危漏洞分析
前言 JBoss是一个基于J2EE的开放源代码应用服务器,代码遵循LGPL许可,可以在任何商业应用中免费使用:JBoss也是一个管理EJB的容器和服务器,支持EJB 1.1.EJB 2.0和EJB3规 ...
- Oracle中获取执行计划的几种方法分析
以下是对Oracle中获取执行计划的几种方法进行了详细的分析介绍,需要的朋友可以参考下 1. 预估执行计划 - Explain PlanExplain plan以SQL语句作为输入,得到这条S ...
- VMWARE虚拟机无法访问的三种方法分析
bridged(桥接模式). NAT(网络地址转换模式) host-only(主机模式). 理论认识: 1.bridged(桥接模式) 在这个地方模式.虚拟机等同于网络内的一台物理主机,可对手动设置I ...
- Loadrunner常用15种的分析点
性能测试的工具目前用的最多的就是LoadRunner和JMeter,性能测试重点在分析和解决, 下边列出了LR中常见的15种分析点,不知道如何分析性能,来看这里吧! Vusers:提供了生产负载的虚拟 ...
随机推荐
- Asp反向代理程序,调用远程站点全站数据,一款脚本级反向代理程序.
前些天临时写的一脚本级反向代理程序,用法很简单,设置好目标站地址,然后放到你网站根目录:index.asp,再将404页面自定义为:index.asp,即可. 由于暂时没有 url 替换需要,所以没有 ...
- Linux环境下实现哲学家就餐问题
#include <stdio.h> #include <stdlib.h> #include <memory.h> #include <pthread.h& ...
- 【新产品发布】【iCore2 ARM / FPGA 双核心板】
iCore2是一款包含ARM / FPGA两大利器的双核心板.ARM方面,采用意法半导体高性能的32位Cortex-M3内核STM32F103VE微处理器,主频达72MHz,并包含丰富外设接口.FPG ...
- debug阶段工作期站立会议2(进度推进)
组名:天天向上 组长:王森 组员:张政.张金生.林莉.胡丽娜 代码地址:HTTPS:https://git.coding.net/jx8zjs/llk.git SSH:git@git.coding.n ...
- DS实验题 Old_Driver UnionFindSet结构
题目 思路 很典型的并查集问题,朋友A和B要合并到一个统一的集合中,也就是Union(A, B)操作,在Union操作中需要先找到A所属的集合的代表元和B所属集合的代表元,也就是使用Find(A)和F ...
- ThinkPHP 3.2.2 实现持久登录 ( 记住我 )
实现持久登录,即用户在登录时,勾选了"记住我"之后,无论是否关闭浏览器,只要不退出登录,在指定的时间内始终保持登录状态(缺点是在另一台电脑上登录过后,之前那台电脑就不能继续保持登录 ...
- mysql查询所有字段(*),并且联表时需要特别注意的地方
如果不标明*是读取哪个表,确实会将所有三个表都读出来.需要小心
- [转]常用 Git 命令清单
作者: 阮一峰 我每天使用 Git ,但是很多命令记不住. 一般来说,日常使用只要记住下图6个命令,就可以了.但是熟练使用,恐怕要记住60-100个命令. 下面是我整理的常用 Git 命令清单.几个专 ...
- 1st-code-review summary
每次做code review,先贤谆谆教诲便在耳畔响起: "There are only two hard problems in Computer Science: cache inval ...
- linux下搭建SVN服务器完全手册【摘抄】
系统环境 RHEL5.4最小化安装(关iptables,关selinux) + ssh + yum 一,安装必须的软件包. yum install subversion ( ...