hacktricks/network-services-pentesting/pentesting-jdwp-java-debug-wire-protocol.md

7 KiB

Pentesting JDWP - Java Debug Wire Protocol

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert de l'équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks :

Exploitation

L'exploitation de JDWP repose sur le manque d'authentification et de chiffrement du protocole. Il est généralement trouvé sur le port 8000, mais d'autres ports sont possibles. La connexion initiale est établie en envoyant un "JDWP-Handshake" au port cible. Si un service JDWP est actif, il répond avec la même chaîne, confirmant sa présence. Ce handshake agit comme une méthode de reconnaissance pour identifier les services JDWP sur le réseau.

En termes d'identification de processus, la recherche de la chaîne "jdwk" dans les processus Java peut indiquer une session JDWP active.

L'outil de prédilection est jdwp-shellifier. Vous pouvez l'utiliser avec différents paramètres :

./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

J'ai trouvé 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.

Plus de détails

Il s'agit d'un résumé de https://ioactive.com/hacking-java-debug-wire-protocol-or-how/. Consultez-le pour plus de détails.

  1. Aperçu de JDWP:
  • C'est un protocole binaire réseau basé sur des paquets, principalement synchrone.
  • Il manque d'authentification et de chiffrement, le rendant vulnérable lorsqu'il est exposé à des réseaux hostiles.
  1. Poignée de main JDWP:
  • Un processus de poignée de main simple est utilisé pour initier la communication. Une chaîne ASCII de 14 caractères "JDWP-Handshake" est échangée entre le Débogueur (client) et le Débogué (serveur).
  1. Communication JDWP:
  • Les messages ont une structure simple avec des champs comme Longueur, Id, Drapeau et CommandSet.
  • Les valeurs de CommandSet vont de 0x40 à 0x80, représentant différentes actions et événements.
  1. Exploitation:
  • JDWP permet le chargement et l'invocation de classes et de bytecode arbitraires, posant des risques de sécurité.
  • L'article détaille un processus d'exploitation en cinq étapes, impliquant la récupération de références de l'environnement d'exécution Java, la définition de points d'arrêt et l'invocation de méthodes.
  1. Exploitation en conditions réelles:
  • Malgré les protections potentielles du pare-feu, les services JDWP sont découvrables et exploitables dans des scénarios réels, comme le démontrent des recherches sur des plateformes comme ShodanHQ et GitHub.
  • Le script d'exploitation a été testé contre diverses versions de JDK et est indépendant de la plateforme, offrant une exécution de code à distance (RCE) fiable.
  1. Implications en matière de sécurité:
  • La présence de services JDWP ouverts sur Internet souligne la nécessité d'examens de sécurité réguliers, de désactivation des fonctionnalités de débogage en production et de configurations de pare-feu appropriées.

Références:

Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres façons de soutenir HackTricks: