第四章 权限提升分析及防御
windows中权限大概分为四种:
- User:普通用户权限
- Administrator:管理员权限(可利用Windows机制将自己提升为System权限)
- System:系统权限,可以对SAM等敏感文件进行读取
- TrustedInstaller:Windows中的最高权限,可以修改系统文件
Windows常用提权方式:
- 纵向提权
- 横向提权
Windows常用提权方法:
- 系统内核溢出漏洞提权
- 数据库提权
- 错误的系统配置提权
- 组策略首选项提权
- Web中间件漏洞提权
- DLL劫持提权
- 滥用高权限令牌提权
- 第三方软件/服务提权
4.1 系统内核溢出漏洞提权分析及防范
基本流程:
- 查询系统已安装补丁:
systeminfo
,wmic qfe get Caption,Description,HotFixID,InstalledOn
- 将补丁编号与提权的EXP编号进行对比
- 查找并利用项管EXP
其它工具:
- metasploit中的
post/windows/gather/enum_patches
- Windows Exploit Suggester
- PowerShell中的Sherlock脚本
4.2 Windows操作系统配置错误
一、系统服务权限配置错误
Windows系统服务文件在操作系统启动时加载和执行,并在后台调用可执行文件。因此,如果一个低权限的用户对此类系统服务调用的可执行文件拥有写权限,就可以将该文件替换成任意可执行文件,并随着系统服务的启动获得系统权限。Windows服务是以System权限运行的,因此,其文件夹、文件和注册表键值都是受强访问控制机制保护的。但是,在某些情况下,操作系统中仍然存在一些没有得到有效保护的服务。
系统服务权限配置错误有如下两种可能:
- 服务未运行:使用任意服务替换原来的服务,然后重启服务
- 服务正在运行且无法被终止:利用DLL劫持技术并尝试重启服务来提权
工具:
- PowerUp
- metasploit中的
service_permissions
二、注册表键值AlwaysInstalledElevated
注册表键值AlwayaInstalledElevated是一个策略设置项。Windows允许低权限用户以System权限运行安装文件。如果启用此策略设置项,那么任何权限的用户都能以NT AUTHORITY\SYSTEM权限来安装恶意的MSI文件。该漏洞产生的原因是用户开启了Windows Installer特权安装功能。
Windows Installer是Windows操作系统的组件之一,专门用来管理和配置软件服务。Windows Installer除了是一个安装程序,还用于管理软件的安装、管理软件组件的添加和删除、监视文件的还原、通过回滚进行灾难恢复等
Windows Installer分为客户端安装服务(Msiexec.exe)和MSI文件两部分,它们是一起工作的。Windows Installer通过Msiexec.exe安装MSI文件包含的程序。MSI文件是Windows Installer的数据包,它实际上是一个数据库,包含安装和卸载软件时需要使用大量指令和数据。Msiexec.exe用于安装MSI文件,一般在运行Microsoft Update安装更新或者安装一些软件的时候使用,占用内存较多。简单说,双击MSI文件就会运行Msiexec.exe。
工具
- PowerUp的Get-RegistryAlwaysInstallElevated模块
- metasploit的exploit/windows/local/always_install_elevated模块
三、可信任服务路径漏洞
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
因此,如果一个服务的可执行文件的路径没有被双引号引起来且包含空格,那么这个服务就是有漏洞的。
1.检测漏洞
wmic service get name,displayname,pathname,startmode | findstr /i "Auto" |findstr /i /v "C:Windows\\" |findstr /i /v """
2.漏洞利用
- 使用icacls检测是否具有写权限
icacls "c:\program File\program folder"
- metasploit的
windows service trusted path privilege escalation
模块
四、自动安装配置文件
网络管理员在内网中给多台机器配置同一个环境时,通常会使用脚本批量部署。在这一过程中,会使用安装配置文件,这些文件中可能还包含本地管理员账号和密码信息。
查找这些文件,并搜寻其信息。
五、计划任务
如果攻击者对以高权限运行的任务所在的目录具有写权限,就可以使用恶意程序覆盖原来的程序。这样,在计划任务下次执行时,就会以高权限来运行恶意程序。
1.查看计划任务
scbtasks /query /fo LIST /v
2.使用AccessChk查看目录配置情况
六、Empire内置模块
- AllCheck模块
4.3 组策略首选项提权分析及防范
管理员在域中新建一个组策略后,操作系统会自动在SYSVOL共享目录中生成一个XML文件,该文件中保存了该组策略更新后的密码。该密码使用AES-256加密算法。
1.工具
- PowserSploit的Get-GPPPassword.ps1
- Metasploit的
post/windows/gather/credentials/gpp
- empire的
privesc/gpp
2.防御措施
- 更新KB2962486补丁
- 设置SYSVOL访问权限
- 将包含组策略密码的XML文件删除
- 不要把密码文件放在所有域用户都有权访问的文件中
4.4 绕过UAC提权分析及防范
UAC(USer Account Control,用户账户控制)要求用户在执行可能影响计算机运行的操作或者在进行可能影响其他用户的设置之前,拥有相应的权限或者管理员密码。UAC在操作启动前对用户身份进行验证。
UAC有如下四种设置:
- 始终通知
- 仅在程序试图更改我的计算机时通知我(默认设置,当Windows程序要使用更高级别权限时,不会通知用户。但是当第三方程序要求更高级别的权限时,会提示本地用户)
- 仅在程序试图更改我的计算机时通知我(不降低桌面亮度)
- 从不提示
1.工具
- metasploit的
exploit/windows/local/bypassuac
模块 - metasploit的
exploit/windows/local/ask
模块 - Nishang中的invoke-PsUACme模块
- Empire的bypassuac模块
4.5 令牌窃取分析及防范
令牌(Token)是指系统中的临时密钥,相当于账户和密码,用于决定是否允许当前请求及判断当前请求时属于哪个用户的。获得了令牌,就可以在不提供密码或其他凭据的情况下访问网络和系统资源。这些令牌将持续存在于系统中(除非系统重启)。
令牌具有随机性和不可预测性,常见令牌类型:
- 访问令牌:代表访问控制操作主体的系统对象
- 密保令牌:也叫做认证令牌或者硬件令牌,是一种用于实现计算机身份校验的设备,例如U盾
- 会话令牌:交互会话中唯一的身份标识符
伪造令牌攻击的核心是Kerberos协议,它支持两种令牌:
- 授权令牌(Delegation Tokens):支持交互式登录
- 模拟令牌(Impersonation Tokens):支持非交互式的会话
1.工具
- metasploit的
use incognito
- Rotten Patato本地提权
- Empire的mimikatz
4.6 无凭证条件下的权限获取分析及防范
1.LLMNR
本地链路多播名称解析(LLMNR)是一种域名系统数据包格式。当局域网中的DNS服务器不可用时,DNS客户端会使用LLMNR解析本地网段中机器的名称,直到DNS服务器回复正常为止。LLMNR支持IPv6
LLMNR工作流程如下:
- DNS客户端在自己的内部名称缓存中查询名称
- 如果没有找到,主机将向主DNS发送名称查询请求
- 如果主DNS没有回应或收到了错误的信息,主机会向备DNS发送查询请求
- 如果备DNS没有回应或收到了错误的消息,将使用LLMNR进行解析
- 主机通过UDP协议向组播地址224.0.0.252的5335端口发送多播查询请求,以获取主机名所对应的IP地址、范围仅限于本地子网。
- 本地子网中所有支持LLMNR的主机在收到查询请求后,会对比自己的主机名,如果不同,就丢弃;如果相同,就向查询主机发送包含自己IP地址的单播信息
2.NetBIOS
NetBIOS是一种网络协议,一般用在局域网中,提供的三种服务如下:
- NetBIOS-NS(名称服务):主要用于名称注册和解析,以启动会话和分发数据报。该服务需要使用域名服务器来注册NetBIOS的名称,默认监听UDP137端口,也可以使用TCP137端口
- Datagram Distribution Service(数据分布服务):无连接服务。该服务负责进行错误检测和恢复,默认监听UDP138端口
- Session Service(会话服务):允许两台计算机建立连接,允许电子邮件跨越多个数据包进行传输,提供错误检测和恢复机制。默认使用TCP139端口
3.Net-NTLM
- NTLM Hash是指Windows操作系统的Security Account Manager中保存的密码散列值
- Net-NTLM Hash是指在网络环境中国经过NTLM认证的散列值
4.LLMNR和NetBIOS欺骗