概述
以下针对AD域的渗透,均在已控制域内主机,并在此基础上进一步渗透域控或域内其他主机。
获取缓存的凭证
kerberos认证过程中,使用LSASS服务存储密码hash,用于TGT的更新,密码hash存储在LSASS服务对应的内存空间中。
若能够提取密码hash,则可以尝试破解。
由于LSASS服务为系统服务,故提取密码hash的前提是已经具备系统权限。
用到的工具:Mimikatz(https://github.com/gentilkiwi/mimikatz)
详细使用说明:https://github.com/gentilkiwi/mimikatz/wiki
备注:Mimikatz两种建议运行方式:1)在内存中加载;2)将LSASS内存数据导出到本地机器,再运行mimikatz。
以下为mimikatz操作命令:
mimikatz > privilege::debug # 启用SeDebugPrivlege权限。SeDebugPrivlege权限可以调试其他账号进程的内存数据。
mimikatz > sekurlsa::logonpasswords # 导出已登录用户的凭证信息。NTLM和SHA1两个参数即为密码hash。
mimikatz > sekurlsa::tickets # 导出内存中的ticket信息,包含TGT和TGS。
服务账号攻击
攻击思路:根据kerberos认证过程,在第三步,client向DC请求service ticket时,DC不判断client是否有权限访问请求中的SPN,都会返回请求访问的SPN对应的服务账号密码hash加密service ticket。利用这点,可以修改TGS_REQ,将SPN改为想要攻击的服务账号的SPN(比如HTTP的SPN对应的服务账号是iis_service)。DC收到调整过的请求后,会返回iis_service密码hash加密的service ticket,将service ticket导出后进行iis_service账号的密码破解。
前提条件:已控制域内主机,需要保证前两步的认证是可以通过的。
攻击过程:
1. 请求service ticket。powershell脚本将用到System.IdentityModel模块中的KerberosRequestorSecurityToken类。
PS C:\> Add-Type -AssemblyName System.IdentityModel
PS C:\> New-Object System.IdentityModel.Tokens.KerberosR