
我玩树莓派这么多年一直觉得它是个被低估的小东西。用来做家庭服务器、跑点自动化脚本都算是常规操作真正让我觉得“这玩意儿还能这么玩”的是我第一次在当前这个项目标题描述的领域里折腾P4wnP1的时候。P4wnP1是一个基于树莓派Zero系列也可以跑在树莓派4B上的开源渗透测试辅助工具集它把树莓派伪装成一个“看起来人畜无害”的USB外设实际却能模拟键盘、网卡、存储设备甚至直接开一个无线热点出来。在物理渗透测试、红队演练、安全教学这些场景里它的存在感极高而本文要做的就是把“树莓派怎么刷P4wnP1”、“这东西到底能干什么”、“我实操中踩过哪些坑”这几件事彻底讲清楚。这套东西适合谁如果你在做渗透测试相关的学习或者是企业里负责办公网络安全、想要通过物理测试来验证终端防护能力的安全工程师又或者只是单纯对BadUSB这类攻击手法感兴趣想用手头的树莓派4B或Zero做个能拿上台面的实验环境那这篇内容就是给你准备的。我会尽量把原理和步骤都拆开揉碎保证你跟着走一遍就能跑起来同时也会认真聊聊哪些事能做、哪些事绝对不能做。1. P4wnP1到底是个什么项目1.1 从BadUSB到P4wnP1的进化先说清楚一个背景概念BadUSB。这个名词最早是在2014年的Black Hat USA上被提出来的核心思路是利用USB HID人机交互设备协议的设计缺陷——操作系统天生信任USB键盘和鼠标一旦插入一个被篡改过的USB设备这个设备会在极短时间内模拟出键盘输入自动执行一串预先写好的命令比如打开终端、下载脚本、关掉杀毒软件整个过程可能不到十秒。P4wnP1就是围绕这个思路发展出来的一个更完整的工具集合项目作者是Mame82。它最初叫P4wnP1 A.L.O.A.Attack-Love-O-Matic-Automation后来进化成了P4wnP1 A.L.O.A. for RPi Zero。它把BadUSB的能力大幅扩展不光可以模拟键盘还能模拟USB网卡RNDIS即Remote NDIS微软定义的USB虚拟网卡协议这样目标机器插上这个设备后会自动出现一个新的网络接口它还能模拟USB存储设备在某些场景下让目标机器把它当成U盘除此之外它自带WiFi模块控制能力可以自己开一个WiFi热点或者连到现有的WiFi网络方便测试者在远程进行控制。说句大白话P4wnP1就是一个把树莓派变成“USB攻击利器”的整合方案。它用Python写了一套控制逻辑跑在树莓派上同时在Web端提供了一个图形化控制面板你可以在浏览器里编写攻击脚本、查看运行状态、下发任务用起来非常顺手。1.2 为什么选树莓派Zero/4B而不是其他硬件很多人问我为什么是树莓派市面上也有一些现成的BadUSB设备比如USB Rubber Ducky小鸭子那玩意儿确实很出名但价格不便宜而且脚本语法是自家的DuckyScript跟P4wnP1的兼容性一般。P4wnP1能直接跑在树莓派上这就意味着你可以用更低的价格获得一个功能更丰富的测试环境。硬件选择上主要是这几个考虑树莓派Zero系列体型小长得就像个U盘插在目标机器的USB口上非常隐蔽。Zero W自带WiFi和蓝牙Zero 2 W性能更强一些。官方推荐的其实主要就是Zero系列因为USB gadget模式让树莓派的USB口模拟成其他设备在这个系列上支持得最完善。树莓派4B体积大了点隐蔽性差一些但胜在性能强、接口全。我实际测试下来4B跑P4wnP1也完全没问题尤其适合在家里搭个实验环境慢慢研究的场景——毕竟不用真去“渗透”谁学习阶段方便调试才是第一位的。这里要先说清楚一个概念USB gadget模式。树莓派的USB口默认是“主模式”也就是作为主机去读取U盘、键盘这些从设备。但在Zero系列上Micro USB接口本身支持OTGOn-The-Go的能力可以通过软件把它配置成“从设备模式”也就是让树莓派自己变成一个“U盘”或者“键盘”插到别的电脑上。树莓派4B的Type-C口其实也有这个能力但官方固件对gadget模式的支持比Zero要晚一些、配置上更折腾。所以如果你让我推荐学习初期用Zero W最省心价格便宜、文档多、踩坑的教程到处都是等你想做更复杂的测试再考虑Zero 2 W或者树莓派4B。2. 环境准备硬件、镜像与烧录2.1 硬件清单与注意事项在动手之前先把东西备齐。我列了一个清单照着准备就行硬件推荐型号说明树莓派Raspberry Pi Zero W / Zero 2 W或树莓派4BZero系列体积小适合模拟USB设备4B适合调试Micro SD卡至少16GBClass 10或A1以上镜像加日志文件容量太小不够用数据线Micro USB数据线Zero或Type-C数据线4B一定注意要能传数据的那种不能是只充电的读卡器任意USB读卡器烧录系统到SD卡用电源5V/2AZero或5V/3A4B供电不足是很多莫名问题的根源目标测试机自备电脑或虚拟机用来做实验强烈建议先在虚拟机或老电脑上测试网络环境能连WiFi即可树莓派需要联网下载依赖或更新固件有几个细节提醒一下Zero的Micro USB口有两个一个标着“PWR”是供电用的另一个才是数据传输兼供电的USB口。别插错了插到PWR口上你只能给树莓派充电无法让它模拟USB设备。另外很多杂牌Micro USB线只支持充电、不支持数据插上去会发现电脑完全没有反应这种问题排查起来特耽误时间建议多准备两根数据线交叉测试。2.2 镜像选择与烧录工具P4wnP1项目在GitHub上有完整的镜像发布记得直接去官方仓库或Release页面下载不要随便找第三方精简版容易踩坑。镜像分为两个分支风格老版本的P4wnP1 A.L.O.A.和新版的P4wnP1 A.L.O.A. BETA新版对树莓派Zero 2 W和4B的支持更好功能也更全建议直接用新版。烧录工具我推荐Raspberry Pi Imager官方工具跨平台Windows/macOS/Linux都有操作非常简单选择镜像文件、选择SD卡、点击烧录完了之后它会自动校验。我这里以Windows环境为例详细走一遍流程下载Raspberry Pi Imager并安装打开后点击“选择操作系统”在弹窗里选择“使用自定义镜像”然后找到你下载好的P4wnP1镜像文件。点击“选择存储卡”选你的SD卡注意别选错盘符烧录会清空SD卡所有数据。点击“写入”等待烧录完成。视SD卡速度和镜像大小一般需要3到10分钟。烧录完成后系统会弹窗提示“已成功写入”。此时SD卡会变成一个或多个分区Windows会提示是否需要格式化千万别点格式化Directly把卡拔出来。提示烧录之前一定要确认SD卡里没有重要数据烧录过程是全盘覆盖没有后悔药可吃。2.3 首次开机与SSH连接P4wnP1镜像默认开启了SSH服务所以你不需要接显示器、键盘鼠标纯“无屏幕安装”就能搞定。把烧录好的SD卡插进树莓派用Micro USB数据线把树莓派的USB数据口连接到电脑再给树莓派单独供电开机大约30秒到1分钟后树莓派就会作为一个USB网卡出现在电脑上。在Linux或者macOS上系统一般会自动识别出一个新的网络接口通常是usb0或者enp0s20f0u1之类的名字。在Windows上需要确认识别出来的RNDIS网卡是否被正确安装了驱动如果设备管理器里出现黄色感叹号那就得手动装一下驱动。P4wnP1的官方文档里提供了Windows驱动的说明也有第三方打包好的驱动文件装好之后会看到一个新的网络适配器。接着用SSH连接树莓派。P4wnP1默认IP是172.16.0.1默认用户名pi密码raspberry不同版本可能有差异以官方文档为准。在终端里执行ssh pi172.16.0.1如果连接成功你会进入树莓派的命令行。到这里环境就准备好了接下来进入正题。3. 安装部署把P4wnP1跑起来3.1 直接使用官方镜像 vs 自行安装这里有个重要选择用官方现成镜像还是在自己已有的树莓派系统上手动安装我的建议非常明确刚开始一定用官方镜像。为什么因为P4wnP1涉及大量底层配置USB gadget模式的初始化、网卡的动态配置、WiFi管理、Web服务、各种依赖库的版本匹配……手动安装意味着你得把整套环境重新复现一遍而官方镜像把这些配置全部预设好了。你烧录完、开机、连SSH、打开Web界面就能用把精力花在理解工具本身而不是折腾系统依赖上。等你用熟了确实有定制需求了再考虑在Raspberry Pi OS或者Kali Linux上手动部署那属于进阶玩法了。3.2 Web控制面板的访问与初始配置P4wnP1启动后Web控制面板默认跑在http://172.16.0.1:8000这个地址上。当然前提是你已经通过USB网卡连上了树莓派网络配置正常。打开浏览器输入地址就能看到一个相当简洁的Web界面。这个界面是P4wnP1的核心控制台主要能做的事情包括查看树莓派的状态信息CPU、内存、温度、IP地址等配置WiFi模块开热点、连热点、查看已连接客户端管理USB攻击脚本新建、编辑、部署、触发管理网络设置USB网卡的IP、DHCP、端口转发等配置蓝牙功能第一次打开建议先做两件事第一修改默认密码。这个东西是拿来做安全测试的如果还被别人用默认密码登进来那就成笑话了。在Settings页面找到Change Password改成自己的强密码。第二检查WiFi配置。如果你希望在测试时能远程控制树莓派那就把树莓派连上你本地的一个WiFi网络这样即使目标机器上不方便用USB网卡你还是能通过WiFi访问控制台。3.3 部署一个最小演示脚本模拟键盘输入一切配置就绪后最让人兴奋的时刻来了跑一个P4wnP1的HID攻击脚本。先来一个最经典、最无害的演示——目标机器上自动打开记事本并输入一串文字。在Web控制台的HID Scripts页面新建一个脚本选择一个Slot脚本槽位相当于一个存放脚本的位置然后编写下面这段Python代码from p4wnp1.hid import HID hid HID() hid.layout(us) hid.print(Hello from P4wnP1!)这段代码的意思很简单导入HID模块将键盘布局设为美式英语然后模拟键盘打印一行文字。保存脚本后回到主界面把该脚本设置为“Trigger Action”也就是当树莓派USB插入目标机器时自动执行。然后把树莓派从电脑上拔下来插到另一台测试电脑或另一个USB口上。几秒钟后那台电脑上会自动弹出一个记事本窗口里面自动打出了那行字。就这么简单。当然这只是个Demo实际测试中肯定不是打个字这么简单后面我会细讲真正的玩法。3.4 进阶让脚本更智能如果你觉得脚本只能机械地打字那就太小看P4wnP1了。它的核心价值在于可以和目标机器的操作系统进行“交互”比如等待某个窗口出现、键盘组合键、运行程序、打开PowerShell、执行Shell命令等。举个例子能在目标Windows机器上打开PowerShell并执行一个命令的脚本大概长这样from p4wnp1.hid import HID hid HID() hid.layout(us) hid.sendCombination(GUI, r) # WinR打开运行对话框 hid.sleep(1) hid.type(powershell -NoP -Ep Bypass -Command Write-Host Pwned) hid.sendKey(ENTER)不过我需要严肃提醒一下这种脚本只有在获得合法授权、在你自己搭建的靶机环境里测试才允许写。随便往别人的电脑上插这种东西涉嫌违法一定会引火上身。后面我专门用一节讲边界问题。4. 核心功能拆解HID、Network与蓝牙4.1 HID攻击原理与典型应用HID攻击是整个P4wnP1最核心、最出名的功能。原理就是前面说过的——系统信任USB键盘我们利用这份信任在极短时间内自动化输入命令。在P4wnP1的脚本体系里HID模块封装了大量常用操作。API设计得挺友好几个核心方法方法作用示例hid.print(text)模拟键盘输入一段文本hid.print(hello)hid.sendKey(key)按下某个特殊键hid.sendKey(ENTER)hid.sendCombination(mod, key)组合键比如CtrlAltDeletehid.sendCombination(CTRL,ALT,DELETE)hid.sleep(seconds)等待指定秒数hid.sleep(2)hid.layout(de)更改键盘布局hid.layout(de)注意那个键盘布局函数这可是血泪教训。不同国家、不同输入法的键盘布局差异极大同样是按下Y键在德语键盘上打出来的可能是Z脚本里的路径、命令一旦包含特殊字符布局不对就会执行失败。所以写脚本的第一步永远是指定布局默认要用us除非你有明确理由换别的。实际测试中HID攻击最常见的应用场景有这么几类在目标机器上执行命令比如通过WinR运行cmd或powershell然后执行一串命令。修改系统设置比如关闭Windows Defender、关闭防火墙或者开启远程桌面。建立反向连接让目标机器主动连接你的C2服务器控制端。打持久化写注册表启动项、创建计划任务等。还是那句老话以上所有这些场景都必须限定在授权测试范围内进行。4.2 网络模块让树莓派变成“WiFi钓鱼神器”P4wnP1的网络模块也很有意思。它的设计初衷是利用树莓派Zero自带的WiFi模块来建立独立网络实现远程控制、数据回传。最经典的做法是“双网络模式”树莓派通过USB网卡RNDIS连接目标机器同时通过WiFi连接你控制端所在的局域网。这样一来不管目标机器上发生了什么你都能在远处实时看到日志、操作树莓派用完还能悄悄拔走。你也可以反过来让树莓派开一个WiFi热点名字起得和公司内部WiFi很像比如Company_Guest然后你在后台记录谁连上了这个热点。这在红队演练中叫“Evil Twin攻击”或者“Rogue AP攻击”目的不是真的钓鱼而是验证公司员工对陌生WiFi的防范意识。P4wnP1的网络功能配置在Web界面的Network页面支持以下常见模式模式说明USB RNDIS树莓派作为虚拟网卡接入目标机器WiFi Client树莓派连接现有WiFi网络WiFi AP树莓派自己开启一个WiFi热点WiFi AP Client同时开启AP和连接外部WiFi实现流量中转我在实验环境里测试过WiFi AP模式开个热点、连接设备后台能实时显示客户端列表和流量统计界面做得直观几分钟就能上手。4.3 蓝牙功能与扩展树莓派Zero W和Zero 2 W都自带蓝牙模块P4wnP1也利用了起来。目前蓝牙功能主要是做蓝牙扫描和探测可以收集周边的蓝牙设备信息比如设备名称、MAC地址、信号强度等。这个能力在红队前期信息收集阶段挺有用的你可以快速了解办公区域有哪些蓝牙设备、哪些是手机、哪些是耳机、哪些是智能设备为后续物理渗透提供决策依据。不过说实话蓝牙这块P4wnP1做得不算特别深入如果想做更复杂的蓝牙攻击比如蓝牙中间人、重放攻击需要配合专业工具比如Ubertooth之类的硬件P4wnP1更多是提供一个“顺手就能用”的蓝牙侦察能力。4.4 我还想提一个点脚本系统的可扩展性P4wnP1的脚本系统是基于Python的这就意味着你可以不局限于它内置的API还能import标准库、甚至安装额外的Python包。你可以写一个脚本先检测目标机器的操作系统版本再根据版本执行不同的后续操作你也可以写一个脚本把目标机器上特定的文件打包上传到你的服务器上。这种灵活性是P4wnP1比很多商业BadUSB产品强的地方。当然能力越大责任越大请一定遵守法律和道德底线。5. 常见问题与排查技巧实录5.1 树莓派插入目标电脑后电脑完全没反应这是最常遇到的问题之一。排查思路按顺序来先确认数据线是数据线而不是充电线换线测试。确认插入的是Zero的数据OTG口不是标着PWR的电源口。确认目标电脑上是否安装了RNDIS驱动。Windows 10/11一般能自动识别老系统可能需要手动装驱动。打开树莓派的命令行执行dmesg | tail -20看看内核日志里有没有报错。如果以上都检查了还是不行我建议你换一台电脑试试。有些电脑对USB设备的供电策略比较保守或者USB口本身有问题换口换机能帮你快速排除硬件层面的故障。5.2 树莓派无法连接WiFi或者WiFi信号弱P4wnP1对WiFi配置的修改多数时候是通过Web界面操作但也有直接改配置文件的时候。如果WiFi死活连不上试试在命令行里手动配置WiFisudo nano /etc/wpa_supplicant/wpa_supplicant.conf在里面添加WiFi信息network{ ssid你的WiFi名称 psk你的WiFi密码 }保存后重启网络服务sudo wpa_cli -i wlan0 reconfigure如果还不行重启树莓派再试。我的经验是树莓派Zero的WiFi天线比较弱离路由器超过五六米就明显掉速所以在测试环境里尽量把路由器放近一点或者用树莓派4B这种天线设计稍好的型号。5.3 HID脚本执行到一半就停了或者按键输入乱码常见的两个原因一是键盘布局错了二是脚本执行太快目标机器没有反应过来。第一个原因好解决在脚本开头显式指定hid.layout(us)。第二个原因解决方案就是增加延时。目标机器在刚刚插入USB设备的时候系统可能还在初始化此时立即执行快捷键有很大概率失效。稳妥的办法是在脚本开头加一句hid.sleep(2)给目标机器2秒的“反应时间”再开始后续操作。如果目标机器配置差、开机慢把延时加到3到5秒也不夸张。5.4 树莓派供电不足导致奇怪问题树莓派Zero工作电流其实不大但外接了一些USB设备比如额外的USB Hub后电源容易紧张。供电不足的典型症状包括系统反复重启、无线网卡频繁掉线、脚本执行时突然崩溃。处理方式也很简单换一个5V/2A以上的优质电源适配器尽量不要用电脑USB口直接给树莓派供电。尤其是树莓派4B它正常启动就可能需要2.5A电流供电不足会引发各种匪夷所思的怪问题。问题现象可能原因解决方案目标机无反应数据线/接口插错换线、换USB口、检查RNDIS驱动WiFi连接不上信号弱或配置错误改wpa_supplicant.conf、靠近路由器HID脚本执行中断键盘布局或延时不足指定布局、增加sleep延时系统重启/崩溃供电不足换高电流电源适配器6. 合法使用边界这话我必须说6.1 哪些场景可以动手聊技术归聊技术有些底线不能破。不夸张地说P4wnP1是一把非常锋利的刀——它可以用在合法的安全研究上也可以被当成犯罪工具。我写这篇内容的前提是默认你和我一样把它用来做正经事。按照我的经验下面这些场景是安全、合法、也是能让你成长最快的拿自己家里的电脑、旧笔记本当靶机测试各种脚本的稳定性。使用虚拟机作为目标环境虚拟机上随便折腾不影响物理机安全。在单位明确授权的内部红队演练中使用P4wnP1验证办公网络终端的安全防护能力。在安全培训、CTF比赛Capture The Flag网络安全竞赛中当作教学工具。6.2 如何防护BadUSB这类攻击既然聊到了防御不得不说说怎么防。BadUSB攻击之所以可怕是因为它从硬件层面模拟键盘鼠标软件很难直接识别。我平时给自己或朋友公司做安全建议时一般会给出如下几条物理层面办公电脑的USB口尽可能用管控工具锁定普通员工机器不允许随意插入U盘和其他USB设备。USB管控软件在国产终端管理方案里已经很成熟。系统层面开启Windows Defender的“攻击面减少规则”ASR其中就包含针对USB外设的可疑行为检测。行为层面如果电脑突然自动弹出命令行、记事本、PowerShell窗口鼠标键盘还像有了自己的想法第一时间拔掉所有USB外设断网再排查。管理层面BIOS设置里可以关闭从USB设备引导防止攻击者通过USB引导进入你的系统。7. 最后聊点实在的玩P4wnP1这段时间我的最大感受是安全攻防这件事永远不能只停留在“知道”的层面。你只有亲手搭一个靶机、亲手写一次脚本、亲眼看到它在授权的测试环境中生效才能真正理解BadUSB这类攻击为什么有效也才能在以后面对它们的时候知道怎么防。我自己踩过的坑里面印象最深的还是供电问题和数据线问题这两个小细节浪费了我整整一天的排查时间。所以我特别想跟刚开始玩树莓派的朋友说一句如果发现树莓派行为怪异先别怀疑代码换个电源、换根线试试很多Bug都会莫名其妙消失。后面有时间的话我还想写一篇关于“如何把P4wnP1配合专业C2框架使用”的内容那属于更进阶的玩法了。这篇文章就先到这里希望对你有帮助玩得开心也记得玩得合法、玩得安全。