如何安全利用ADB拿到Shell

19 人参与

渗透测试或设备维护时,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 变成一把可控的钥匙。

参与讨论

19 条评论
  • 听雨阁主

    防火墙设置真麻烦

    回复
  • Unshaken

    直接root不了就很烦

    回复
  • 爱跑步的兔子

    adb版本太低会怎样

    回复
  • 皮影艺人

    这个清理步骤很关键

    回复
  • 社交伪装者

    之前搞这个把设备搞坏了

    回复
  • 感恩的心

    为啥必须同一子网

    回复
  • 柳岸风

    默认只能看/data外?

    回复
  • 白云观

    有更简单的方法吗

    回复
  • 虚拟之翼

    CVE那个漏洞现在还能用不

    回复
  • 终结者

    日志审计那步挺重要

    回复
  • 一帆风顺

    小白表示看不懂

    回复
  • Etherwhisper

    端口只对特定IP开,学到了

    回复
  • Azure Dragon

    shell用户权限好低

    回复
  • 暗曜歌者

    试了下连不上,路由器问题?

    回复
  • 通话两小时

    这样搞不会丢保修吧

    回复
  • 奥术之眼

    adb kill-server那步老忘,每次都卡半天

    回复
    1. 清鹤

      @ 奥术之眼 我也老忘,现在直接写成脚本了

      回复
  • 液态黄昏

    权限提不上去的话有别的招吗?

    回复
    1. 鸢尾

      @ 液态黄昏 可以试试找找别的提权漏洞

      回复