HTB - Eighteen Writeup
[HTB-Eighteen] Writeup
| 机器名称 | [Eighteen] |
|---|---|
| IP 地址 | 10.10.11.95 |
| 操作系统 | Windows |
| 难度 | Easy |
| 发布日期 | 11-16-2025 |
| 关键词 | [MSSQL, Active Directory, Kerberoasting, Tunneling, DMSA] |
1. Reconnaissance (信息收集)
Nmap 扫描
点击查看 Nmap 详细扫描结果
1 | Nmap scan report for 10.129.132.84 |
Note: 1433 端口开着,对应 MSSQL 服务,我们初始靶机提供了一组账号密码可能就是用在这里。
2. Enumeration (服务枚举)
Web Enumeration (Port 80)

- 技术栈识别 (Wappalyzer): IIS
- 目录扫描:
点击查看 Gobuster 扫描结果
Bash
1 | gobuster dir -u [http://eighteen.htb](http://eighteen.htb) -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,txt,zip,js |
- 发现: 一个预算管理的网页,有一个 admin 面板但是需要登录,允许 user 注册。没有 SQL 注入的点位,鉴于我有 MSSQL 的凭据的话我想要先看一下 MSSQL。
Service Enumeration
利用靶机提供的凭据登录一下:

发现了 financial_planner 这个库名,但是 kevin 没有权限。尝试去看看有没有 impersonate 的可能。

发现可以切换到 appdev,并且这个用户能够访问 financial_planner 库。用 PayloadAllTheThing 的命令列出一下数据库的表名,发现有一个 user 表,查出来看看有什么。

发现有一个 admin 的用户以及一个 passhash:
1 | pbkdf2:sha256:600000$AMtzteQIG7yAbZIa$0673ad90a0b4afb19d662336f0fce3a9edd0b7b19193717be28ce4d66c887133 |
这个 hash 是 10900 | PBKDF2-HMAC-SHA256,但是格式并不正确,需要将后半部分转换成 base64,用脚本转换一下然后用 hashcat 来破解一下。

3. Initial Foothold (获取立足点)
漏洞利用 (Exploitation)
这下子我们有了一个密码,但是没有用户名,怎么办?nxc (NetExec) 的 mssql 模块也是可以 rid-brute 的,跑一下 rid-brute 拿到一个 userlist,而后用 userlist 进行密码喷洒。

得到了一个可以 WinRM 登录的用户 adam.scott。


先上 SharpHound 看一眼 AD 有什么。

似乎没什么东西,当前用户什么都干不了。先把靶机的 LDAP 代理过来看看吧。
4. Privilege Escalation (权限提升)
Information Gathering (内部侦察)
通过 BloodHound 枚举 Writable 权限:

可以发现我们拥有对 Staff 的 create_child 权限。再详细看看。

可以看到有 msDS-DelegatedManagedServiceAccount: CREATE_CHILD,查阅资料得知这个可以利用 BadSuccessor 攻击。
BadSuccessor?
DMSA (Delegated Managed Service Account) 是 Windows Server 2025(以及部分 Server 2022 更新)引入的概念。它的核心目的是实现 “无缝迁移” 和 “身份解耦”。
- 设计目标:让服务账号不再死板地绑定在某台机器上,并且允许旧账号平滑过渡到新账号。
- 核心特性:
- 短期凭据:DMSA 使用基于 Kerberos 的短期凭据,而不是长期静态密码。
- 身份继承 (Identity Inheritance):这是万恶之源。为了让旧服务无缝切换到新服务,DMSA 允许被配置为“继承”另一个账户(Predecessor/Legacy Account)的身份和权限。
BadSuccessor 利用了这种迁移流。通常创建 dMSA 以替换现有旧服务帐户。若要实现无缝转换,dMSA 可以通过执行迁移过程来“继承”旧帐户的权限。
Exploitation (提权过程)
参考这两篇文章来进行利用:
Akamai Research Kreep.in - BadSuccessor首先上传 BadSuccessor 上去进行利用。

当我想继续按照上面利用的时候产生了这个报错,在这个地方卡了我很多时间。
Error Encountered:
PowerShell
1 | *Evil-WinRM* PS C:\programdata> ./Rubeus.exe dump /luid:0xf12ab7 /service:krbtgt /nowrap |
我们已经创建了一个名为 enc_dmsa 的账户并将它设置成为继承 admin 的 badsuccessor 的利用状态,我们下一步手动请求它的 TGS。

这个票据就具有和 administrator 相同的权限了,所以 secretsdump 出来 hash。

接下来以 admin 登录就能获取到 root.txt。
5. Conclusion (总结与复盘)
攻击路径回顾
- 端口探测与服务发现: 通过 Nmap 扫描发现 1433 (MSSQL)、80 (Web) 和 5985 (WinRM) 端口。
- 数据库渗透与哈希破解: 使用初始凭据登录 MSSQL,利用 Impersonation (用户模拟) 提权至
appdev用户。获取 Web Admin 的 PBKDF2 哈希并破解。 - 横向移动: 利用 NetExec 进行 RID Brute-force 枚举域用户列表。配合破解得到的密码进行 Password Spraying,获取
adam.scott权限。 - 域内权限分析: 发现当前用户在
Staff容器上拥有 CreateChild 权限,且具备操作 DMSA 的相关属性。 - DMSA 漏洞提权: 利用 BadSuccessor 创建恶意的 dMSA 账户并“继承”域管权限。
- 最终提权: 导出域控制器哈希(DCSync),获取 Administrator 权限。
知识点 (Key Learnings)
知识点总结
- MSSQL Impersonation (用户模拟): MSSQL 中的
EXECUTE AS语句允许用户模拟其他数据库用户。如果低权限数据库账户被授予了高权限账户的IMPERSONATE权限,攻击者可以在数据库内部横向移动甚至提权。 - 非标准 Hash 格式处理: Web 框架(如 Flask/Werkzeug)生成的 PBKDF2 哈希格式可能与 Hashcat 的标准格式不同。在破解失败时,应检查哈希各字段的编码格式,必要时使用脚本进行转换(Base64 解码/编码)。
- RID Brute-force (RID 爆破): 在拥有有效凭据但不知道有效用户名列表时,可以通过枚举 SID 的最后一部分(RID)来反查对应的用户名。
- DMSA (Delegated Managed Service Account) 安全风险: 利用
msDS-DelegatedManagedServiceAccount属性和CreateChild权限,创建一个新的 dMSA 并将其“前任”设置为高权限账户。由于逻辑缺陷,系统会允许这个新账户获取旧账户的权限凭据(TGS)。- 关键工具:
BadSuccessor,Rubeus,impacket-secretsdump
- 关键工具:
- Title: HTB - Eighteen Writeup
- Author: EnchanterW
- Created at : 2025-11-21 01:00:00
- Updated at : 2025-11-21 01:17:53
- Link: https://enchanter-w.github.io/2025/11/21/HTB_eighteen/
- License: This work is licensed under CC BY-NC-SA 4.0.