
remote-method-guesser(rmg)はJava RMIの脆弱性スキャナーであり、Java RMIエンドポイントにおける一般的なセキュリティ脆弱性の特定および検証に使用できます。

remote-method-guesserは、Black Hat USA2021のArsenalセッションで発表されました。セッションの録画と対応するスライドは公開されており、以下のリンクから入手できます。
remote-method-guesserリポジトリには、Java RMIの列挙と攻撃の練習に使用できる3つのサンプルサーバーが含まれています。
rmg-example-serverは、通常のRMIサービスを公開しており、remote-method-guesserを使って列挙および悪用できます。
rmg-ssrf-serverは、SSRF攻撃に対して脆弱なHTTPサービスを公開し、localhost上でのみ待ち受けるRMIサービスも実行します。これは、remote-method-guesserの--ssrfおよび--ssrf-responseオプションを使った練習に使用できます。
spring-remoting-serverは、Spring Remotingを介して作成されたRMIインターフェースを公開します。これらは通常のJava RMIとは少し異なり、remote-method-guesserの関連するSpring Remoting統合をテストするために使用できます。
すべてのサーバーは、GitHub Container Registry内のコンテナとして利用可能です。
rmgはmavenプロジェクトであり、インストールは簡単です。mavenがインストールされていれば、以下のコマンドを実行して実行可能な.jarファイルを作成できます。```console
$ git clone https://github.com/qtc-de/remote-method-guesser
$ cd remote-method-guesser
$ mvn package
各リリース向けに作成されたプリビルドパッケージを使用することもできます。開発ブランチ用のプリビルドパッケージは自動的に作成され、*GitHub*の[アクションページ](https://github.com/qtc-de/remote-method-guesser/actions)にあります。
*rmg*は*ysoserial*を依存関係として含みません。*ysoserial*サポートを有効にするには、``ysoserial.jar``ファイルへのパスを追加引数として指定するか(例:``--yso /opt/ysoserial.jar``)、プロジェクトをビルドする前に[rmg設定ファイル](https://github.com/qtc-de/remote-method-guesser/blob/master/src/config.properties)内のデフォルトパスを変更する必要があります。
*rmg*は*bash*のオートコンプリートもサポートしています。オートコンプリートを利用するには、[completion-helpers](https://github.com/qtc-de/completion-helpers)プロジェクトがインストールされている必要があります。正しく設定されていれば、[completionスクリプト](https://github.com/qtc-de/remote-method-guesser/blob/master/resources/bash_completion.d/rmg)を``~/.bash_completion.d``フォルダにコピーするだけでオートコンプリートが有効になります。```console
$ cp resources/bash_completion.d/rmg ~/bash_completion.d/
以下に、利用可能な各操作の簡単な例を示します。より詳細な説明については、rmg および Java RMI 全般に関する詳細情報を含むドキュメンテーションフォルダを読むことをお勧めします。提示されているすべての例は、rmg-example-server と rmg-ssrf-server に基づいています。これらの両方は、このリポジトリの docker フォルダに含まれており、Java RMI の列挙を練習するために使用できます。対応するコンテナを自分でビルドするか、GitHub Container Registry から直接ロードすることができます。```console [qtc@devbox ~]$ rmg -h usage: remote-method-guesser [-h] action ...
rmg v4.0.0 - a Java RMI Vulnerability Scanner
positional arguments:
action
bind Binds an object to the registry thats points to listener
call Regulary calls a method with the specified arguments
codebase Perform remote class loading attacks
enum Enumerate common vulnerabilities on Java RMI endpoints
guess Guess methods on bound names
known Display details of known remote objects
listen Open ysoserials JRMP listener
objid Print information contained within an ObjID
rebind Rebinds boundname as object that points to listener
roguejmx Creates a rogue JMX listener (collect credentials)
scan Perform an RMI service scan on common RMI ports
serial Perform deserialization attacks against default RMI components
unbind Removes the specified bound name from the registry
named arguments: -h, --help show this help message and exit
#### bind、rebind、unbind