- Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) **groupe Discord** ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
J'ai constaté que l'utilisation de `--break-on 'java.lang.String.indexOf'` rend l'exploit plus **stable**. Et si vous avez la possibilité de télécharger une porte dérobée sur l'hôte et de l'exécuter au lieu d'exécuter une commande, l'exploit sera encore plus stable.
Normalement, ce débogueur est exécuté sur le port 8000 et si vous établissez une connexion TCP avec le port et envoyez "**JDWP-Handshake**", le serveur devrait vous répondre avec la même chaîne.\
De plus, vous pouvez vérifier cette chaîne dans le réseau pour trouver d'éventuels services JDWP.
En listant les **processus**, si vous trouvez la chaîne "**jdwk**" à l'intérieur d'un **processus java**, il a probablement activé le **Java Debug Wired Protocol** et vous pourrez peut-être vous déplacer latéralement ou même **escalader les privilèges** (si exécuté en tant que root).
**Java Platform Debug Architecture (JPDA)**: JDWP est un composant du système de débogage Java global, appelé Java Platform Debug Architecture (JPDA)\[2]. Voici un diagramme de l'architecture globale :
Le Debuggee est constitué d'une JVM multi-thread exécutant notre application cible. Pour être débogable à distance, l'instance JVM doit être explicitement démarrée avec l'option -Xdebug passée en ligne de commande, ainsi que l'option -Xrunjdwp (ou -agentlib). Par exemple, le démarrage d'un serveur Tomcat avec le débogage à distance activé ressemblerait à ceci :
Comme le montre le diagramme d'architecture, le Java Debug Wire Protocol est le lien central entre le débogueur et l'instance JVM. Les observations sur le protocole comprennent :
* C'est un protocole binaire de réseau basé sur des paquets.
* Il est principalement synchrone. Le débogueur envoie une commande sur JDWP et s'attend à recevoir une réponse. Cependant, certaines commandes, comme les événements, n'attendent pas de réponse synchrone. Ils enverront une réponse lorsque des conditions spécifiques seront remplies. Par exemple, un point d'arrêt est un événement.
Toutes ces observations ont du sens puisque nous parlons d'un protocole de débogage. Cependant, lorsque ce service est exposé à un réseau hostile, ou est accessible depuis Internet, les choses pourraient mal tourner.\
**Handshake**: JDWP dicte\[9] que la communication doit être initiée par une simple poignée de main. Après une connexion TCP réussie, le débogueur (client) envoie la chaîne ASCII de 14 caractères "JDWP-Handshake". Le Debuggee (serveur) répond à ce message en envoyant exactement la même chaîne. La trace scapy\[3] suivante montre la poignée de main initiale à deux voies :
root:\~/tools/scapy-hg # ip addr show dev eth0 | grep “inet “ inet 192.168.2.2/24 brd 192.168.2.255 scope global eth0root:\~/tools/scapy-hg # ./run\_scapy
L'exploit final utilise ces techniques, ajoute quelques vérifications et envoie des signaux de suspension/reprise pour causer le moins de perturbation possible (il est toujours préférable de ne pas casser l'application sur laquelle vous travaillez, n'est-ce pas ?). Il agit en deux modes :
* Le mode "par défaut" est totalement non intrusif et exécute simplement du code Java pour obtenir des informations système locales (parfait pour une preuve de concept à un client).
* Le passage de l'option "cmd" exécute une commande système sur l'hôte distant et est donc plus intrusif. La commande est exécutée avec les privilèges avec lesquels la JVM s'exécute.
Comme Java est conçu pour être indépendant de la plate-forme, des commandes peuvent être exécutées sur n'importe quel système d'exploitation pris en charge par Java. Eh bien, c'est en fait une bonne nouvelle pour nous, les testeurs de pénétration : un service JDWP ouvert signifie une RCE fiable. Jusqu'à présent, tout va bien.
En fait, JDWP est assez souvent utilisé dans le monde des applications Java. Les testeurs de pénétration pourraient cependant ne pas le voir souvent lorsqu'ils effectuent des évaluations à distance car les pare-feu bloqueraient (et devraient) principalement le port sur lequel il s'exécute. Mais cela ne signifie pas que JDWP ne peut pas être trouvé dans la nature :
* Au moment de la rédaction de cet article, une recherche rapide sur ShodanHQ\[4] révèle immédiatement environ 40 serveurs envoyant la poignée de main JDWP :
* La recherche de ports spécifiques (tcp/8000, tcp/8080, tcp/8787, tcp/5005) sur Internet a révélé de nombreux hôtes (qui ne peuvent pas être signalés ici) répondant à la poignée de main initiale.
* Des applications "entreprise" ont été trouvées dans la nature exécutant un service JDWP \*par défaut\* (la recherche du numéro de port réel est laissée à l'exercice du lecteur curieux).
Ce ne sont que quelques façons de découvrir des services JDWP ouverts sur Internet. C'est un excellent rappel que les applications devraient régulièrement faire l'objet d'examens de sécurité approfondis, que les environnements de production devraient avoir toute fonctionnalité de débogage désactivée et que les pare-feu devraient être configurés pour restreindre l'accès aux services nécessaires uniquement pour un fonctionnement normal. Permettre à n'importe qui de se connecter à un service JDWP, c'est exactement la même chose que permettre une connexion à un service gdbserver (de manière peut-être plus stable). J'espère que vous avez apprécié la lecture de cet article autant que j'ai apprécié jouer avec JDWP. À tous les pirates puissants, joyeux JDWP pwning !!
- Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Partagez vos astuces de piratage en soumettant des PR au repo [hacktricks](https://github.com/carlospolop/hacktricks) et [hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.