windows
操作系统中常见的配置错误包括管理员凭据配置错误,服务配置错误,故意削弱的安全措施,用户权限过高等
Windows
系统服务文件在操作系统启动时加载和执行,如果一个低权限用户对此类系统服务调用的可执行文件拥有写权限,就可以将该文件替换成任意可执行文件,并随着系统服务的启动获得系统权限
Windows
服务是以 system
权限运行的,其文件夹、文件和注册表 key-value
都是受强制访问控制保护如果出现以下配置服务情况则可能出现漏洞
系统服务权限配置错误情况
1 | 账号未运行: |
# 系统服务缺陷
PowerUP 提权框架
PowerUPGitHub 地址
PowerUPGitHub 工具教程
# MSF service_permissions 提权
MSF``service_permissions
模块选择 AGGRESSIVE
可以利用目标上的每一个有缺陷的服务进行提权
模块通过 2 种方法获得 System
权限
1 | 1.meterpreter以管理员权限运行,该模块会尝试创建并运行一个服务 |
得到机器 shell
后首先退回该会话,然后进入 service_permissions
模块进行设置,做完设置后如果 run
后执行成功会自动反弹一个新的 meterpreter(system)
权限
1 | use exploit/windows/local/service_permissions |
# 注册表键值 AlwaysInstallElevated
AlwaysInstallElevated 提权介绍
注册键
AlwaysInstallElevated
是一个策略设置项,它允许低权限用户以System
权限运行安装文件,如果启用该策略,那么任何权限用户都可以用Systen
权限安装 ** 恶意 ****MSI(Microsoft WindowsInstaller)
** 文件
# Windows Installer 的相关知识
# 特权安装功能漏洞
PathAlwaysInstallElevated
该漏洞产生的原因是用户开启了 Windows Installer
特权安装功能
1 | 组装略——计算机配置——管理模板——Windows组件——Windows Insaller——永远以高特权进行安装:选择启用 |
如上设置后,会在注册表的以下两个位置自动创建键值 1
代表普通用户可以 system
权限安装 MSI
文件
1 | HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstall Elevated |
# PowerUp 提权框架测试漏洞
使用 PowerUp
的 Get-RegistryAlwaysInstallElevated
模块来检查注册表键是否被设置
如果 AlwaysInstallElevated
注册键已经被设置,就意味着 MSI
文件是以 System
权限运行的。运行该模块的命令如下, True
表示已经设置,下面也有第二种探测命令,利用框架其他模块生成 MSI
文件,该文件会添加管理员账户
1 | // 判断脚本是否成功设置注册表 |
1 | // 脚本判断注册表是否设置 |
正常未设置情况
运行 Write-UserAddMSI
模块,生成一个 MSI
文件
1 | Write-UserAddMSI // 管理员权限允许命令 |
运行 MSI
文件,就会添加一个管理员账户
1 | msiexec /q /i UserAdd.msi // 普通用户权限用户命令 |
# 漏洞防范
禁用注册表 AlwaysInstallElevated
不要使用该策略
# 可信任服务路径漏洞
利用
windows
文件路径解析的特性,如果一个服务调用的可执行文件没有正确处理所引用的完整路径名,这个漏洞就会被攻击者用来上传任意可执行文件
如果一个服务的可执行文件的路径没有被双引号引起来且包含空格,那么这个服务就有漏洞
漏洞存在如下两种可能
- 如果路径与服务有关,就任意创建一个服务或者编译
Sericce
模板。 - 如果路径与可执行文件有关,就任意创建个可执行文件
# 漏洞原理
Windows
服务通常都是以 System
权限运行,所以系统解析服务所对应的文件路径中的空格时,也会以系统权限进行
例如文件路径 "C:\yue se\saber.exe"
路径存在空格,系统都会尝试寻找并执行与空格前面名字匹配的程序,类似于通配符了,直到找到一个可以匹配的程序
1 | C:\yue |
利用 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 | sc stop service_name // 首先停止指定的服务名称 |
# MSF 模块利用
使用 msf
中的 WINDOWS Service Trusted Path Privilege Escalation
模块进行渗透测试。该模块会将可执行程序放到受影响的文件夹中,然后讲受影响的服务重启
1 | use exploit/windows/local/unquoted_service_path // 使用模块 |
# 漏洞防范
不要在服务路径包含空格,文件夹读写权限严格
# 自动安装配置文件
网络管理员在内网中配置同一个环境是,通常会采用脚本化批量部署。在这个过程中,会使用配置文件。这些文件可能包含本地管理员账户密码信息。这些文件列举如下
1 | C:\sysprep.inf |
MSF
集成了该漏洞的利用模块 post/windows/gather/enum_unattend
1 | use post/windows/gather/enum_unattend |
# 计划任务
** 如果攻击者以高权限运行的计划任务所在的目录具有写权限,就可以使用恶意程序覆盖原来的程序。** 这样在下次计划任务执行时,就会以高权限来运行我们覆盖后的程序
1 | schtasks /query /fo LIST /v // 查看机器计划任务 |
系统直接搜索或是在控制面板中搜索计划任务都可以打开,作为攻击方利用此添加木马程序,蓝队方发现可疑计划任务删除