域渗透之滥用SPN mappings
2020-10-20 12:57:59 Author: mp.weixin.qq.com(查看原文) 阅读量:5 收藏

在刚刚结束的N1CTF中, 我出了一道很简短的域渗透题目, 其中第三关个人感觉比较有意思, 单独抽出来分享一下.

笔者第一次了解到这个属性是通过ad security关于spn的文章:

https://adsecurity.org/?page_id=183

Domain Controllers automatically map common SPNs to the “HOST” SPN. The HOST SPN is automatically added to the ServicePrincipalName attribute for all computer accounts when the computer is joined to the domain.

可以了解到,HOST这个ServiceName实际上是很多个ServiceName的映射,相关属性被称作SPNMappings,当个访问集合中的成员时,会被映射到HOST。经过一些测试之后发现,Host票据实际上是一种万能票据,默认的映射集如下:

host=alerter,appmgmt,cisvc,clipsrv,browser,dhcp,dnscache,replicator,eventlog,eventsystem,policyagent,oakley,dmserver,dns,mcsvc,fax,msiserver,ias,messenger,netlogon,netman,netdde,netddedsm,nmagent,plugplay,protectedstorage,rasman,rpclocator,rpc,rpcss,remoteaccess,rsvp,samss,scardsvr,scesrv,seclogon,scm,dcom,cifs,spooler,snmp,schedule,tapisrv,trksvr,trkwks,ups,time,wins,www,http,w3svc,iisadmin,msdtc

其中包含很多我们常用到的service,比如cifs,ldap等。

当我们拥有这个映射列表中的任意一张服务票据(包括HOST)的时候, 我们就可以将其转成列表中其他的任意一张服务票据.

那么如何操作呢?非常简单,只需要修改sname即可,这里最简单的方法就是在serviceName长度相同的情况下,我们可以直接修改文件hex中sname.

将其修改为CIFS

即可.

如此一来我们就把Host服务票据转成了CIFS服务票据,请允许我单方面称之为铜票(copper ticket)。

在与Daiker交流之后发现, 这个姿势其实impacket和Rubeus都已经兼容了, 但是并没有具体文章说明.

其中Impacket的psexec.py可以直接使用Host或者映射其的票据自动转成cifs服务票据.

而Rubeus则需要添加一个特殊参数altservice转换.

ps: Rubeus介绍中认为是KRB-CRED不保护sname字段,所以可以随便改, 而我在这里补充一下是由于spn mappings才可以任意修改sname, 因为本质上都是HOST服务票据.

Rubeus.exe tgssub </ticket:BASE64 | /ticket:FILE.KIRBI> /altservice:ldap [/ptt] [/luid] [/nowrap]Rubeus.exe s4u </ticket:BASE64 | /ticket:FILE.KIRBI> </impersonateuser:USER | /tgs:BASE64 | /tgs:FILE.KIRBI> /msdsspn:SERVICE/SERVER [/altservice:SERVICE] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/nowrap]

补充案例,这里我直接使用题目环境来作为演示:

使用Powerview找到UserA约束委派了HOST/DC. 

直接使用s4u获取到TGS

接着,导出票据到物理文件中:

[IO.File]::WriteAllBytes("ticket.kirbi",[Convert]::FromBase64String("<bas64_ticket>"))

按照上文修改sname(或者直接使用Impacket或Rubeus相关功能)为CIFS.

接下来将修改后的票据PTT之后呢, 就可以直接访问DC的CIFS服务了, 如此一来, 我们就成功滥用了SPN mapping.

此技术也可用于后门, 在拿下域控后, 我们使用添加约束委派 time/DC 给某个后门用户, 之后我们就可以随意获取到time/DC的tgs, 并可以将其转变成CIFS/LDAP等服务的票据.


文章来源: https://mp.weixin.qq.com/s?__biz=MzA3MzI1MTIzMw==&mid=2247483704&idx=1&sn=7a4d7ebd9a6433abb7256088f605c5b2&chksm=9f10a1f6a86728e0b876836a44e3a75da883225323d4f022604dc8f62561dd634bdc4b4558a0&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh