如何安全利用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 变成一把可控的钥匙。

参与讨论
防火墙设置真麻烦
直接root不了就很烦
adb版本太低会怎样
这个清理步骤很关键
之前搞这个把设备搞坏了
为啥必须同一子网
默认只能看/data外?
有更简单的方法吗
CVE那个漏洞现在还能用不
日志审计那步挺重要
小白表示看不懂
端口只对特定IP开,学到了
shell用户权限好低
试了下连不上,路由器问题?
这样搞不会丢保修吧
adb kill-server那步老忘,每次都卡半天
@ 奥术之眼 我也老忘,现在直接写成脚本了
权限提不上去的话有别的招吗?
@ 液态黄昏 可以试试找找别的提权漏洞