☰
如何看懂USB Rubber Ducky摩斯密码渗出:Win_PoSH_MorseCode Payload完整解析
2026/10/8 6:58:56 网站建设 项目流程

如何看懂USB Rubber Ducky摩斯密码渗出:Win_PoSH_MorseCode Payload完整解析

【免费下载链接】usbrubberducky-payloadsThe Official USB Rubber Ducky Payload Repository项目地址: https://gitcode.com/GitHub_Trending/us/usbrubberducky-payloads

Win_PoSH_MorseCode是 USB Rubber Ducky 官方 Payload 仓库中的一个摩斯密码渗出(Morse Code Exfiltration)Payload:它运行在 Windows 系统上,悄悄读取用户"我的文档"里的所有 txt 文件,然后用键盘指示灯(Scroll Lock)的长短闪烁,把文件内容翻译成摩斯密码"放"到屏幕上。没有弹窗、没有网络流量、没有声音——数据就以光的形式离开了受害者电脑。🦆

下面这篇指南带你完整拆解它的执行流程、摩斯码映射表和时序设计,并说明如何安全地观察与解码它。

一、这个 Payload 是做什么的?

一句话概括:把文件变成灯光秀。它是典型的"低带宽、零流量"渗出(数据外带)手法,核心价值不在于实用,而在于演示"数据渗出可以不用一根网线"。

项目说明
作者Cribbit(1.2 版,从 BashBunny 仓库移植)
目标系统Windows(PowerShell 5.1+)
分类数据渗出(Exfiltration)
攻击模式HID & STORAGE(键盘模拟 + U盘存储双模式)
渗出通道Scroll Lock 指示灯闪烁(短闪=点,长闪=划)
渗出内容"我的文档"目录下所有.txt文件

核心文件都在 payloads/library/exfiltration/Win_PoSH_MorseCode/ 目录下:

  • payload.txt:DuckyScript 主脚本(烧录进 Ducky 的文件)
  • MorseCodeFileExfiltration.ps1:可读的 PowerShell 渗出逻辑
  • b.txt:上面脚本的 base64 编码版(实际被调用)
  • readme.md:官方说明与版本日志

二、工作原理:用滚动锁指示灯"说"摩斯密码

摩斯码映射表

脚本内部内置了一张完整的摩斯映射表(3代表点,9代表划):

字符摩斯码字符摩斯码字符摩斯码
E3A39T9
S333I33O999
N93V3339Z9933
..................

覆盖0~9和A~Z共 36 个字符,超出范围的字符(如@)采用兜底策略:先闪一次 2700ms 的超长脉冲,再闪烁该字符 ASCII 码值的数字(@ = 64就闪64的摩斯码)。

时序设计(解码的关键)

flashy函数每次点亮 Scroll Lock、等待指定毫秒后再熄灭,形成"闪烁脉冲":

  • 点(dot):3 × 100 =300ms短闪
  • 划(dash):9 × 100 =900ms长闪
  • 未知字符:2700ms超长闪(提示:下一个是数字编码)
  • 每个字符结束后固定停顿600ms,空格则停顿1200ms

这种"用时间间隔编码数据"的思路,在仓库其他渗出 Payload 中也大量存在,比如基于 ICMP 时延的外带:

三、Payload 执行流程拆解

打开 payload.txt,整个流程分为 5 步:

  1. 声明双模式:ATTACKMODE HID STORAGE,让 Ducky 既模拟键盘又暴露为 U 盘(脚本要存在 U 盘里)。
  2. 静默检测操作系统:内嵌 PASSIVE_WINDOWS_DETECT 扩展,通过统计主机配置请求次数被动判断是否 Windows,全程不打扰用户;判定结果写入$_OS。
  3. 绿灯提示:LED_GREEN表示已识别为 Windows,可观察 Ducky 指示灯判断执行状态。
  4. 打开运行对话框:GUI r快捷键唤出 Win+R。
  5. 执行编码脚本:STRINGLN输入一行 PowerShell 命令,用-encodedCommand参数执行 U 盘里 base64 编码的 b.txt:
powershell .(powershell.exe -encodedCommand (gc((gwmi win32_volume -f 'label=''DUCKY''').Name+'\b.txt')))

注意它先用 WMI 查出卷标为DUCKY的盘符,再读取该盘上的b.txt,实现了"Payload 本体藏在 U 盘存储区"的HID & STORAGE 混合渗出。

Ducky 存储分区中渗出数据的典型场景长这样(另一渗出 Payload 的截图):

四、为什么用 base64 编码的脚本?

作者在 readme.md 中解释:base64 版本是为了绕过 PowerShell 脚本执行策略(Execution Policy)。如果你不想用编码版,仓库也给了明文替代方案:

RUN WIN "powerShell -Noni -NoP -W h -EP Bypass .((gwmi win32_volume -f 'label=''DUCKY''').Name+'payloads\$SWITCH_POSITION\MorseCodeFileExfiltration.ps1')"

⚠️安全提示:官方特别强调——执行前请自行解码校验 base64 内容(MorseCodeFileExfiltration.ps1就是可核对的明文版),防止编码 payload 被替换成恶意代码。这也是所有-encodedCommand类 Payload 的通病:审计门槛高。

解码后的 MorseCodeFileExfiltration.ps1 逻辑非常清晰:递归遍历"我的文档"中所有.txt→ 逐字符查摩斯表 → 调用flashy函数闪灯。

五、如何解码这些"灯光暗号"?

站在防守方视角,观察 + 简单工具就能还原:

  1. 肉眼观察:屏幕上无任何异常,只有 Scroll Lock 灯在"闪摩斯"。用秒表记录每次闪烁的时长,短(≈300ms)=点、长(≈900ms)=划、超长(≈2700ms)=未知字符标记。
  2. 查表还原:把点划序列对照标准摩斯表还原成0~9 A~Z;遇到 2700ms 长闪后,把接下来的数字序列当作 ASCII 码值转回字符。
  3. 脚本记录:写一个监听 Scroll Lock 状态变化的脚本,把每次状态翻转的时间戳落盘,事后再离线解码——这正是"视觉渗出"可被检测的根本原因:时序信息会留在监控数据里。

六、局限性与同类 Payload 对比

作者自己承认:"这是一个受摩斯码限制、实用性不高的 Payload,但做出来很有意思"。它的短板:

  • 只渗出.txt文件,且必须先存到"我的文档"
  • 带宽极低:一个文件就要以秒为单位逐字符闪烁
  • 只能被"人眼"或专门监控解码,无法自动接收

仓库里还有几个更"工程化"的同类思路可以对比:

Payload渗出方式特点
Win_PoSH_PixelReflection屏幕左上角 1 像素窗口黑/白闪位比特级、更隐蔽,同样是概念验证
Win_Hid_ImgOverKey用大小写锁定键闪图片二进制807 字节的图要闪约 7 分钟
ClipBoard-Creep剪贴板 → 外部 Webhook自动接收,但会产生网络流量

带 Webhook 的自动接收是实用路线,数据到达攻击者端点后的样子如下:

七、防守方检查清单 🛡️

如果你担心内部存在这类"无声渗出"行为,可以按以下清单排查:

  • 键盘指示灯行为:监控 Scroll Lock / Caps Lock 状态的异常高频翻转(正常用户很少反复按这些键)。
  • PowerShell 命令行审计:-encodedCommand、-EP Bypass、-NoP(NoProfile)组合出现即应告警;开启 PowerShell 脚本块日志(Script Block Logging)可完整还原解码后的命令。
  • USB 设备策略:对无盘标或标为DUCKY的可移动介质访问记录审计;HID + 存储双模式的 U 盘是 Ducky 类设备的典型特征。
  • 文档区异常读操作:批量递归读取"我的文档"中所有 txt 文件的行为,可用 EDR 的文件读取监控捕获。

八、小结

Win_PoSH_MorseCode 是 USB Rubber Ducky 数据渗出家族里最"艺术化"的一员:

  • HID & STORAGE 双模式+ 被动 OS 检测,让它在正确环境安静启动;
  • 300ms/900ms/2700ms 三档脉冲构成完整的摩斯编码协议;
  • base64 编码 + encodedCommand展示了一类真实攻击中常见的审计规避手法;
  • 它证明了渗出通道可以完全不经过网络,也提醒我们:防守时别只盯流量,物理与视觉通道同样需要可观测性。

想动手复现或深入研究,建议先在隔离虚拟机中阅读 payload.txt 与 MorseCodeFileExfiltration.ps1 的对应关系,再对照时序表尝试手工解码——这比任何文档都直观。

【免费下载链接】usbrubberducky-payloadsThe Official USB Rubber Ducky Payload Repository项目地址: https://gitcode.com/GitHub_Trending/us/usbrubberducky-payloads

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询