如何安全利用ADB拿到Shell
TOPIC SOURCE
Android4漏洞环境简单靶场WriteUp
在渗透测试或设备维护时,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=1,adb root 能直接切换到 root;否则,需要借助已知的本地提权漏洞(如 CVE‑2020‑XXXXX)或利用已植入的 su 二进制。实际操作时,先尝试 id 确认当前 UID,再根据环境决定是否执行 su。
事后清理与防御
- 执行完测试后,立刻运行
adb disconnect,并恢复service.adb.tcp.port为 0。 - 在系统设置中关闭“开发者选项”里的“USB 调试”。
- 审计日志:
logcat -b all | grep -i adb,确认没有异常连接残留。
把握好这几道“门槛”,就能在不触碰设备保修线的情况下,安全地把 ADB 变成一把可控的钥匙。

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