在 Windows 操作系统中,攻击者通常会通过系统内核溢出漏洞来提权,但如果碰到无法通过系统内核溢出漏洞提取所在服务器权限的情况,就会利用系统中的配置错误来提权。Windows 操作系统中的常见配置错误包括管理员凭据配置错误、服务配置错误、故意削弱的安全措施、用户权限过高等。
Windows 系统服务文件在操作系统启动时加载和执行,并在后台调用可执行文件。因此,如果一个低权限的用户对此类系统服务调用的可执行文件拥有写权限,就可以将该文件替换成任意可执行文件,并随着系统服务的启动获得系统权限。Windows 服务是以 System 权限运行的,因此,其文件夹、文件和注册表键值都是受强访问控制机制保护的。但是,在某些情况下,操作系统中仍然存在一些没有得到有效保护的服务
系统服务权限配置错误(可写目录漏洞)有如下两种情况:
注册表键 AlwaysInstallElevated 是一个策略设置项。Windows允许低权限用户以System权限运行安装文件。如果启用此策略设置项,那么任何权限的用户都能以 NT AUTHORITY \ SYSTEM 权限来安装恶意的 MSI(Microsoft Windows Installer) 文件。
开启了 Windows Installer 特权安装功能
Windows Installer:Windows操作系统的组件之一,专门用来管理和配置软件服务。除了是一个安装程序,还用于管理软件的安装、管理软件组件的添加和删除、监视文件的还原、通过回滚进行灾难恢复等
Windows Installer 分为客户端安装程序(Msiexec.exe)和 MSI 文件两部分,它们是一起工作的。
Windows Installer 通过Msiexec.exe 安装 MSI 文件包含的程序。 MSI文件是Windows Installer的数据包,它实际上是一个数据库,包含安装和卸载软件时需要的大量指令和数据,
Msiexec.exe 用于安装MSI文件,一般在运行Microsoft Update 安装更新或者安装一软件的时候使用,占用内存较多。简单来说,双击MSI文件就会运行Msiexec.exe
(1)查看是否开启了特权安装功能,在运行框(win+r)中输入"gpedit.msc",打开组策略编辑器
(2)组策略 —> 计算机配置 —> 管理模板 —> windows组件 —> Windows Installer —> 永远以高特权进行安装:选择启用
(3) 组策略 —> 用户配置 —> 管理模板 —> Windows组件 —> Windows Installer —> 永远以高特权进行安装:选择启用
开启注册表键后,可以在注册表中看到键值(win+r —> regedit.exe:注册表编辑器 )
注册表键值为 1,路径为 HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer
还有这个路径:HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer
(1)可以使用 powerup 的 get-RegistryAlwaysInstallElevated 模块来检查注册表键是否被设置 。如果 注册表键已经被设置,就意味着 MSI 文件是以 System 权限运行的
powershell -nop -exec bypass IEX(New-Object Net.WebClient).DownloadString('C:\powerup.ps1');get-RegistryAlwaysInstallElevated
True :注册表键已启动
(2)添加账户,运行 Write-UserAddMSI,生成 MSI 文件
powershell -nop -exec bypass IEX(New-Object Net.WebClient).DownloadString('C:\powerup.ps1');Write-UserAddMSI
无法在 C 盘 访问文件,估计是权限不足(虽然本来账户就是管理员,不过应该还要再开启什么权限),就尝试 E 盘,能成功
(3)以普通用户权限运行 UserAdd.msi ,添加管理员账户
Msiexec /q /i UserAdd.msi
也可以利用 Metasploit 的 exploit/windows/local/always_install_elevated 模块完成以上操作。使用该模块并设置会话参数,输入 “run” 命令,会返回一个 System 权限的 meterpreter。该模块会随机创建一个文件名随机的 MSI 文件,并在提权后删除所有已部署的文件
可信任服务路径(包含空格且没有引号的路径)利用了Windows文件路径解析的特性,并涉及服务路径的文件/文件夹权限(存在缺陷的服务程序利用了属于可执行文件的文件/文件夹的权限)。如果一个服务调用的可执行文件没有正确地处理所引用的完整路径名,这个漏洞就会被攻击者用来上传任意可执行文件。换句话说,如果一个服务的可执行文件的路径没有被双引号引起来且包含空格,那么这个服务就是有漏洞的。
该漏洞存在两种可能性:
因为 Windows 服务通常都是以 System 权限运行的,所以系统在解析服务所对应的文件路径中的空格是,也会以系统权限进行
例如,有一个文件 C:\Program Files\Some Folder\Service.exe。对于上面文件路径中的每一个空格,windows都会尝试寻找并执行名字与空格前名字相匹配的程序。操作系统会对文件路径中空格的所有可能进行尝试,直到找到一个匹配的程序。在本例中,windows会依次尝试确定和执行下面的程序:
C:\Program.exe
C:\Program Files\Some.exe
C:\Program Files\Some Folder\Service.exe
因此,如果一个被 “适当” 命名的恶意可执行程序上传到受影响的目录中,服务一旦重启,恶意程序就会以system权限运行(大多数情况下)。
首先,检查机器中是否存在该漏洞。使用 wmic 查询命令,列出目前机器汇总所有没有被引号引起来的服务的路径
wmic service get name, displayname, pathname, startmode | findstr /i "Auto" | findstr /i /v "C:\Windows\\" | findstr /i /v """
之后检查对有目标文件夹是否有写入的权限。这里使用Windows内置的一个工具 icacls,依次检查文件,发现有些文件后面会些字样
" Everyone:(OI)(CI)(F) " :对该文件夹,用户有读,写,删除其下的文件,删除其子目录的权限。
确认目标机器中存在此漏洞后,把要上传的程序重命名并放置在存在漏洞且可写的目录下,执行以下命令,尝试重启服务
sc stop service_name
sc start service_name
也可以使用 Metasploit 中的 Windows Service Trusted Path Privilege Escalation模块。该模块会将可执行程序放到受影响的文件夹中,然后将受影响的服务重启。
命令执行后,会自动反弹一个 meterpreter,查询权限,显示提权成功。
但反弹的 meterpreter 会很快中断,这是因为当一个进程在 Windows 操作系统中启动后,必须与服务控制管理器进行通信,如果没有进行通信,服务控制管理器会认为出现了错误,进而终止这个进程。在渗透测试中,需要在终止载荷进程之前将它迁移到其它进程中
(使用命令 “ set AutoRunScript migrate -f ”)
可信任服务路径漏洞 是由于开发者没有将文件路径用引号引起来导致的。将文件路径用引号引起来,就不会出现这种问题了
网络管理员在内网中给多台机器配置同一个环境时,通常不会逐台配置,会使用脚本进行批量部署,即使用安装配置文件。这些文件中包含所有的安装配置信息,其中还有一些包含着本地管理员账号和密码。
也可以执行如下命令,搜索 Unattend.xml 文件
dir /b /s c:\unattend.xml
打开 Unattend.xml 文件,查看其中是否包含明文密码或者经过 Base64 加密的密码
Merasploit 集成了该漏洞的利用模块 post/windows/gather/enum_unattend
schtasks /query /fo list /v
AccessChk 是 SysInterals 套件中的一个工具,用于在windows中运行一些系统或程序的高级查询、管理和故障排除工作。基于杀毒软件的检测等,攻击者会尽量避免接触目标机器的磁盘,但它是微软官方提供的工具,所以杀毒软件不会有告警。
执行以下命令,查看指定目录的权限配置情况。如果攻击者对以高权限运行的任务所在的目录具有写权限,那么就可以使用恶意程序覆盖原有的程序。这样,在计划任务下次执行的时候,就会以高权限运行恶意程序。
accesschk.exe -dqv "C:\Microsoft" -accepteula
(1)第一次运行 SysInterals 工具包里的工具时,会弹出一个许可协议对话框。可以使用参数 accepteula 自动接收许可协议
accesschk.exe /accepteula
(2)列出某个驱动器下所有权限配置有缺陷的文件夹
accesschk.exe -uwdqsUsers c:\
accesschk.exe -uwdqsUsers "AuthenticatedUsers" c:\*.*
内置了 powerup 部分模块 —— usermodule privesc/powerup