最近小伙伴要搞事情,看到他手上的硬件比较羡慕。正好看到白帽汇赵武发布过使用Raspberry PI安装P4wnP1破解Win10密码的视频。果断在某宝入手一个相关设备进行折腾,期间遇到了一些问题,查阅资料时发现国内相关资料相对较少,故进行了整理,供后面的小伙伴借鉴。
0x00 概述
P4wnP1是一个基于Raspberry PI Zero或RaspberryPI Zero W打造的高度定制化的USB攻击平台。利用该平可以实现获取Windows shell、破解锁屏的Windows密码等功能。其具体原理为利用Raspberry PI模拟HID实现攻击。
0x01 环境及设备
Win10 专业版、Raspberry PI Zero W、microUSB To U线、读卡器
0x02 安装系统
下载操作系统,P4wnP1的官方Wiki推荐使用Stretch Lite image,可直接下载[1]。
用SD Card Formatter软件格式化存储卡。
将下载的操作系统写入至U盘,该步骤与制作启动U盘的过程类似,但不能使用某桃、某菜类的软件进行写入。本文中使用的是Etcher[2],网上也有一些教程使用Win32 Disk Imager,都可以。
修改写入系统的配置文件。将系统写入U盘之后,在文件面板中可以看到有一个boot盘符(如果没有可以插拔U盘试一下)。
进入该盘符,找到并打开config.txt文件,在文件的末尾添加“dtoverlay=dwc2”,保存并退出。
打开cmdline.txt文件,找到rootwait字符,并在rootwait字符后面添加“modules-load=dwc2,g_ether”,保存并退出。
在2016年11月之后发布的RASPBIAN系统(即刚刚下载的系统)默认是禁用SSH的。需要在boot目录中添加一个名称为ssh的空白文件[3]。注意该文件的名称为ssh,无任何后缀。如果不创建,本文后面的ssh连接无法进行。
0x03 连接 Raspberry PI Zero
将SD卡放至Raspberry PI Zero W当中,用USB转换线将Win10与Raspberry PI的第二个micro usb接口相连。此时win10会自动安装驱动,可以用设备管理器进行查看。如果新安装的设备为网络适配器,即RNDIS/Ethernet Gadget,则证明设备安装正确,可直接跳过下一步骤,进入连接阶段。如果识别的设备为串口设备,则需要按照下面的步骤进行设置。
0x04 解决Raspberry PI Zero W会识别为COM设备的问题
安装bonjour[6],下载bonjour并安装。
安装RNDIS驱动[7][8]。下载该zip文件,并将其解压到某一目录。在设备管理器中右键USB串行设备,在弹出的对话框中选择更新驱动程序。弹出如下对话框。
选择“浏览我的计算机以查找驱动程序软件”,找到驱动解压的目录,点击下一步,便会提示成功更新驱动程序。此时在设备管理界面看到如下的设备,则证明驱动安装成功。
0x05 连接 Raspberry PI Zero W
0x06 配置SSH并设置网络共享
开启SSH服务。进入Raspberry PI之后,运行sudo raspi-config命令,此时会弹出Raspberry PI Software Configuration Tool 命令会话框。
选择5 Interfacing Options。
选择P2 SSH,此时会弹出是否开启SSH Server的询问框,选择Yes即可。接下来利用Tab键,将光标导向至Finish,回车确认一下,便开启了SSH服务。最后在终端的命令行界面运行sudo update-rc.d ssh enable命令,将ssh服务设置为开机启动。
设置USB网络共享连接[9]。打开Windows的网络连接面板,此时会有一个新增的以太网6(每个人的名称可能会不一样)。
选择已经联网的网络适配器,本文中是WLAN,右键选择属性,在弹出的对话框中选择网络选项。会看到一个下拉选框,在该下拉选框中选择新出现的网络适配器,然后一路确定即可。
重启Raspberry PI。
0x07 安装P4wnP1
重新登录Raspberry PI,ping www.qingteng.cn,便可以看到有数据进行传输了。如果网络ping不通的话,可以尝试在windows中换一个网卡进行共享。
安装P4wnP1[10]。运行git clone -recurive https://github.com/mame82/P4wnP1命令从git下载P4wnP1库(注意一定要添加-recurive参数,如果没有该参数,可能会导致安装失败)。下载完毕后,进入P4wnP1目录,执行 ./install.sh 命令安装P4wnP1。(安装时可能会有wireshark的弹窗,询问是否允许非root用户使用wireshark进行抓包,选择yes即可)。
等待一段时间,如果一切正常的话会出现如下界面,证明安装成功。
重启Raspberry PI,打开电脑的无线网络,会看到一个P4wnP1的无线网络,连接该无线网络,密码为:MaMe82-P4wnP1。
成功连接无线网之后在ssh终端中运行ssh pi@172.24.0.1命令,密码:raspberry,连接Raspberry PI。
进入P4wnP1目录,找到setup.cfg文件并打开。在该配置文件中可以对无线网络的名称、无线密码及加载的payload进行配置,具体的配置可参考Freebuf的相关文章[11]或官方文档[12]。找到Payload selection选项,将其它payload注释掉,然后取消PAYLOAD=hid_backdoor.txt的注释,保存并退出。
0x08 P4wnP1利用
用USB线将配置好的Raspberry PI连接至目标主机。
一段时间后,会在无线网络中出现配置好的无线网,连接该无线网。用ssh终端登录Raspberry PI。登录之后便会进入到一个shell会话当中。
在shell会话当中,可以使用help命令查看支持的命令列表。
可以看到系统支持很多命令,但是许多命令此时是无法执行的。并且在执行其它命令之前需要设置键盘的语言,如果键盘语言设置不正确,会出现命令无法执行的问题。由于payload在目标主机上是以powershell的方式执行的,语言设置不正确,则会在目标主机上弹出powershell窗口,且powershell窗口不关闭的尴尬情况,很容易被发现。
输入SetKeyboardLanguage命令选择键盘的语言。在ThinkPad上进行测试时发现,需要将KeyboardLanguage设置为us,而不是ch。设置完成后可以运行GetKeyboardLanguage命令查看是否设置成功。
成功设置好KeyboardLanguage之后,运行FireStage1命令便会连接目标主机。运行FireStage1命令之后,目标主机上会弹出一个powershell终端窗口,自动输入代码并执行,大约2~3秒的时间。成功之后会在shell中看到client connectd的状态。
成功连接目标主机之后,可以执行其它命令获取系统信息。例如,运行ls命令显示当前目录下的文件。
直接执行shell命令获取系统的shell。
0x09 参考链接
https://www.raspberrypi.org/downloads/raspbian/
https://etcher.io/
http://www.freebuf.com/articles/wireless/149832.html
https://github.com/samyk/poisontap/issues/75
https://answers.microsoft.com/en-us/windows/forum/windows_10-networking/windows-10-vs-remote-ndis-ethernet-usbgadget-not/cb30520a-753c-4219-b908-ad3d45590447?page=3
https://support.apple.com/kb/DL999?locale=zh_CN
http://domotique.caron.ws/cartes-microcontroleurs/raspberrypi/pi-zero-otg-ethernet/
http://domotique.caron.ws/wp-content/uploads/telechargement/RPI%20Driver%20OTG.zip
http://www.circuitbasics.com/raspberry-pi-zero-ethernet-gadget/
http://p4wnp1.readthedocs.io/en/latest/Getting-Started-Subfolder/Installation/
http://www.freebuf.com/articles/wireless/149832.html
http://p4wnp1.readthedocs.io/en/latest/Getting-Started-Subfolder/Setup.cfg/
领取专属 10元无门槛券
私享最新 技术干货