重新构建文章内容:安卓渗透测试平台Kali(Nethunter)搭建教程
本文将介绍如何搭建安卓渗透测试平台Kali(Nethunter),主要分为三个部分:Android刷Kali的过程,刷机原理简单探索,以及Android版本Kali的简单使用。
在开始之前,我们需要准备以下软硬件环境:
- OnePlus X手机一台
- Windows 7 64位系统
- QDLoader-HS-USBDriver64bit_Setup
- OnePlusX14A.04151103
- twrp-3.0.2-0-onyx.img
- nethunter-generic-armhf-kalifs-full-2020.1.zip
- platform-tools_r29.0.6-windows
在下文中,我们将使用OPX指代OnePlus X,win7指代Windows 7 64位系统,twrp指代twrp-3.0.2-0-onyx.img。
声明:本文中提到的软硬件环境与笔者无任何利益关系,并且无法保证软件的安全性。仅供学习研究参考。
安卓刷机背景介绍:
刷机是指给手机重装系统的过程。类比于PC电脑,手机上的flash相当于硬盘。我们将Windows/Linux安装到硬盘,就类似于将Android安装到flash。手机的flash也分为多个分区,将对应的ROM文件刷写到相应的分区,完成刷机过程。
在刷机之前,我们需要了解手机的几种状态。以OPX为例,有四种状态:
- Download状态(仅适用于高通soc,通过9008 COM通信)
- fastboot状态
- Recovery状态
- Android OS状态
刷机分为线刷和卡刷两类。线刷是通过USB线连接手机和电脑,使用工具刷入ROM文件。卡刷是将ROM文件放入手机本地存储或SD卡中,然后通过Recovery进行刷机。
这四种状态的启动顺序如下:
启动 > [Download状态] > fastboot状态 > Recovery状态 = Android OS状态
下文中的环境搭建顺序是先通过Download状态刷机,然后在fastboot状态刷twrp,接下来在Recovery状态刷Kali,最终正常启动系统。
Download状态刷机:
在刷机过程中,我们常听到一句话是将手机刷成砖,即无法进入fastboot状态、Recovery状态和Android OS状态。对于普通用户来说,只能通过Download状态刷机。而这个Download状态是高通soc独有的功能。
大多数情况下,我们不需要执行这一步骤。但是为了学习的目的,我尝试了一下通过Download状态刷机。如果您对此不感兴趣,可以直接跳过本章节。
准备工作:
- 准备一台OPX手机和一根USB线
- 下载QDLoader-HS-USBDriver64bit_Setup
- 下载OnePlusX14A.04151103
注意:上述Stock Firmware ROM我无法保证其安全性,请谨慎刷机。
开始刷ROM:
步骤1:连接手机和电脑,按住OPX的音量+键,并同时用USB线连接手机和电脑,直到Win7设备管理器的端口(COM和LPT)中出现Qualcomm HS-USB QDLoader 9008(COM n)。
步骤2:打开MsmDownloadTool V2.0.2工具,该工具在OnePlusX14A.04151103中自带。在设备类型中,如果能看到一个Com设备,说明准备就绪。此时,点击校验按钮,校验Stock Firmware ROM是否无误。如果显示OK,则表示没有问题。准备就绪后,点击start,工具的通信状态会显示“正在下载镜像system.img”,等待一段时间(约几分钟),等到工具显示”正在关机…”,则表示刷机完成。此时按电源键开机,即可进入氧OS系统。
到这里,Download状态刷机过程就结束了。此时,手机flash的所有分区信息都被重置为刷入Stock Firmware ROM的文件,与出厂设置完全相同。
fastboot状态刷twrp:
通常厂商自带的recovery功能比较有限,我们想刷入twrp,让我们开始吧!
准备工作:
- 准备一台OPX手机和一根USB线
- 下载adb、fastboot安卓调试工具集platform-tools_r30.0.1-windows.zip
- 下载twrp-3.0.2-0-onyx.img
开始刷Recovery:
步骤1:关闭手机,按住音量+和开机键,直到手机屏幕显示“Fastboot Mode”。
步骤2:通过USB线连接手机和电脑。
步骤3:进入platform-tools目录,执行命令fastboot devices。
如果打印出设备信息,则表示fastboot连接正常。
步骤4:执行命令fastboot oem device-info,查看fastboot是否锁定。如果锁定,则需要解锁才能刷入twrp。
如果当前为锁定状态(Device unlocked: false),尝试执行命令fastboot oem unlock解锁。如果提示”oem unlock is disabled”,说明fastboot状态下无法解锁。但是通过查阅资料,我发现可以通过进入氧OS系统的开发者模式来解锁fastboot,操作如下:
- 重新启动设备,进入氧OS。
- 打开Settings — About phone — Build number,点击7次,退出About phone,进入Developer options。
- 启用OEM unlocking。
完成上述操作后,重新进入fastboot mode,再次执行fastboot oem unlock。此时手机会提示解锁会删除用户数据,点击yes,手机会重启进入氧系统。再次进入fastboot mode,查看锁定信息,发现解锁成功了。
现在一切准备就绪,开始刷入twrp吧!我将twrp-3.0.2-0-onyx.img放在桌面c:UserstestDesktop,执行命令fastboot flash recovery c:UserstestDesktoptwrp-3.0.2-0-onyx.img。然后执行命令fastboot boot c:UserstestDesktoptwrp-3.0.2-0-onyx.img,让手机进入twrp。在twrp界面中,点击Reboot — Recovery,会提示是否安装SuperSU,拖动图标选择安装,因为后续刷Kali需要root权限。手机再次进入Recovery界面,fastboot状态刷twrp的过程就完成了。
点击Reboot — System进入系统,配置好WiFi。此时会提示SuperSU Installer,点击进入,选择TWRP,等待下载完成。完成后,选择continue,接下来会启动到recovery安装SuperSU。安装完成后会自动重启,进入OOS(氧OS)。
至此,twrp已经刷写完成。
Recovery状态刷Kali:
上述工作完成后,我们可以开始刷入Kali了。
准备工作:
- 准备一台OPX手机和一根USB线
- 下载nethunter-generic-armhf-kalifs-full-2020.1.zip,下载Generic ARMhf
开始刷Kali:
步骤1:关闭手机,长按音量-键和开机键,使手机进入recovery模式。
步骤2:点击Advanced — ADB Sideload。此时手机进入等待状态。
步骤3:进入platform-tools目录,执行命令adb sideload c:UserstestDesktopnethunter-generic-armhf-kalifs-full-2020.1.zip(我将nethunter-generic-armhf-kalifs-full-2020.1.zip放在桌面c:UserstestDesktop)。
步骤4:等待进度完成100%。
重启时,显示了酷炫的界面。
接下来进入系统后,配置网络,安装SuperSU。Android平台Kali环境搭建到这里就结束了。接下来可以探索刷机的原理。
探索刷机的奥秘:
无论是Download状态、fastboot状态还是Recovery状态,我们在刷机过程中都会使用一些工具。我们不能仅停留在脚本小子的层面,让我们来看看刷机的奥秘是什么。
首先,我们在开发者选项中启用USB调试,让adb连接手机。进入platform-tools目录,执行adb root命令,发现执行失败。接着执行adb shell命令,可以获取一个低级别的shell。通过执行su命令,我们可以获取root权限的shell。
首先,让我们看看flash分区情况。
接下来,我们查看每个分区对应的名称。
通过对比发现,刷机的过程就是将对应的二进制文件写入分区的过程。线刷和卡刷的ROM包之所以不同,是因为不同的刷机模式对ROM保护的文件、内容和打包格式有所不同。
以recovery分区为例,我们可以验证刷机的过程。我们将整个recovery分区dump到本地,并通过adb从手机中pull出来。然后将dump出的二进制文件与twrp镜像进行比较,我们预期的效果是两个二进制文件完全相同。
通过查看recovery分区的大小,我们可以看到每个block是1k,因此recovery分区大小为16MB。我们将整个recovery分区dump到本地,再通过adb从手机中pull出来。twrp-3.0.2-0-onyx.img的大小为14.4M,共15112192个字节。通过对比发现,dump出的文件的前15112192字节与twrp-3.0.2-0-onyx.img完全相同。
这证实了我们之前的猜想,即刷机无论是刷recovery还是Android ROM,都是将对应的二进制文件写入分区。
接下来,我进行了一个尝试,将OnePlusX14A.04151103中的recovery.img通过adb传入手机,并在adb shell中使用dd命令将recovery.img写入recovery分区。关机后,进入recovery模式,发现twrp被覆盖回原厂recovery了。
我猜想线刷和卡刷的差别在于线刷(Download模式和fastboot模式)时没有文件系统的概念,只能将文件整个写入分区,从而覆盖原有分区文件。而卡刷不同,卡刷是在recovery模式下进行的,而这个模式是精简版的Linux,recovery与Android OS同级。在这个模式下,一方面可以像线刷一样直接写入分区,另一方面也可以挂载原有的Android文件系统,对Android文件系统进行增删改,实现升级的目的。
使用Android Kali:
在Recovery状态刷Kali的过程实际上是一个升级的过程。升级Kali的zip包时,会对boot img进行一些修改,安装Kali文件系统,并安装一些apk包,如NetHunter.apk、NetHunterStore.apk、NetHunterTerminal.apk等。当我们使用NetHunter时,应该是chroot到Kali文件系统中,对操作者来说,就像在Kali环境中一样。
关于Kali的教程,在网络上有很多资料,本文不再赘述。
接下来,我将用两个例子演示手机版Kali的使用:
演示1:使用msf生成一个payload
演示2:修改本机MAC地址,然后使用nmap进行端口扫描
打开NetHunter应用,点击MAC Changer,将MAC地址修改为aa:bb:cc:dd:ee:ff。
接下来打开NetHunter Terminal应用,执行命令nmap -A 192.168.1.6(同一个网段的另一台主机)。
在主机上抓包,发现手机的MAC地址确实变成了aa:bb:cc:dd:ee:ff。
至此,本文结束。如果文中有任何错误,欢迎读者指正。
参考文献:
[1]
[2]
[3]