如何安全利用ADB拿到Shell

渗透测试或设备维护时,ADB(Android Debug Bridge)往往是打开系统内部的大门。要想在不破坏设备完整性的前提下拿到可交互的 shell,关键不在于“能否”,而在于“怎样把风险降到最低”。

连接前的安全检查

  • 确认目标设备的 adb 端口(默认 5555)已在防火墙规则中限定,仅对特定 IP 开放。
  • 使用 adb version 验证本机客户端版本不低于 1.0.41,以避免已知的协议漏洞。
  • 在目标设备上执行 setprop service.adb.tcp.port 0,确保测试完成后立即关闭网络调试。

建立受控会话的命令示例

# 在渗透机上
adb kill-server
adb start-server
adb connect 192.168.0.49:5555
# 验证连接
adb devices
# 进入交互式 shell
adb -s 192.168.0.49:5555 shell

上述指令看似简单,却隐藏了两点细节:一是 adb connect 必须在同一子网内,否则会被路由器的 NAT 拦截;二是 adb shell 默认以 shell 用户身份运行,除非设备已经 root,否则只能浏览 /data 之外的目录。

提升权限的常见路径

如果目标设备开启了 ro.debuggable=1adb root 能直接切换到 root;否则,需要借助已知的本地提权漏洞(如 CVE‑2020‑XXXXX)或利用已植入的 su 二进制。实际操作时,先尝试 id 确认当前 UID,再根据环境决定是否执行 su

事后清理与防御

  • 执行完测试后,立刻运行 adb disconnect,并恢复 service.adb.tcp.port 为 0。
  • 在系统设置中关闭“开发者选项”里的“USB 调试”。
  • 审计日志:logcat -b all | grep -i adb,确认没有异常连接残留。

把握好这几道“门槛”,就能在不触碰设备保修线的情况下,安全地把 ADB 变成一把可控的钥匙。

参与讨论

0 条评论

    暂无评论,快来发表你的观点吧!