内网渗透协议学习
字数 3121 2025-08-06 01:23:31

内网渗透协议学习文档

Kerberos协议详解

基本概念与角色

Kerberos是一种由MIT提出的网络身份验证协议,通过密钥加密技术为客户端/服务器应用程序提供强身份验证。

核心角色:

  • Client(用户):发出访问服务的角色
  • Server(服务):提供服务的角色
  • KDC(Key Distribution Center):密钥分发中心,默认安装在域控中

关键名词:

  • AD(Account Database):账户数据库
  • Master Key:用户密码的hash值
  • Ticket(票据):域网络对象相互访问的凭证
  • TGT(Ticket Granting Ticket):用于向KDC获取服务票据的凭证
  • TGS(Service Ticket):用于向Server请求服务的凭证
  • Authentication Service:认证Client身份并发放TGT的服务
  • Ticket Granting Service:检验TGT并生成TGS的服务

Kerberos认证流程

  1. AS_REQ(认证服务请求)

    • Client向KDC发送请求,凭据是Client的hash加密的时间戳
    • 包含预认证数据(PA-ENC-TIMESTAMP和PA-PAC-REQUEST)
  2. AS_REP(认证服务响应)

    • KDC验证成功后返回TGT
    • TGT使用krbtgt的NTLM hash加密
  3. TGS_REQ(票据发放服务请求)

    • Client凭借TGT向KDC请求特定服务的TGS
  4. TGS_REP(票据发放服务响应)

    • KDC验证TGT后返回TGS
    • TGS使用目标服务的hash加密
  5. AP_REQ(服务请求)

    • Client凭借TGS向Server发起服务请求
  6. AP_REP(服务响应)

    • Server验证TGS后返回服务响应

AS_REQ数据包结构分析

  • pvno:Kerberos版本号(通常为5)
  • msg-type:消息类型(krb-as-req)
  • padata:预认证数据列表
    • PA-ENC-TIMESTAMP:Client用Master Key加密的时间戳
    • PA-PAC-REQUEST:关于微软PAC扩展的请求
  • req-body
    • kdc-options:KDC选项标识位
    • cname:Client主机名(PrincipalName类型)
    • realm:服务端域名
    • sname:服务端身份(krbtgt和所属域)
    • till:到期时间
    • etype:加密类型列表
    • addresses:地址信息

AS_REP数据包结构分析

  • msg-type:krb-as-rep
  • padata:加密类型信息
  • crealm:Client所属域
  • cname:Client身份名
  • ticket:TGT票据
    • tkt-vno:票据版本
    • realm:KDC所属域
    • sname:krbtgt身份
    • enc-part:使用krbtgt的NTLM hash加密的TGT主体
  • enc-part:使用Client的hash加密的Session key

TGS_REQ数据包结构分析

  • msg-type:krb-tgs-req
  • padata
    • PA-TGS-REQ:包含TGT票据
    • PA-PAC-OPTIONS:PAC选项
  • req-body
    • realm:域信息
    • sname:请求的服务名称
    • till:到期时间
    • etype:加密类型列表

TGS_REP数据包结构分析

  • msg-type:krb-tgs-rep
  • crealm:Client所属域
  • cname:Client身份名
  • ticket:最终服务票据
    • 使用目标服务的hash加密
    • 包含Server session key、Client info、到期时间
  • enc-part:使用Session key加密的Server session key

Kerberos安全问题

  1. 用户名枚举

    • 用户名不存在:错误码6(KDC_ERR_C_PRINCIPAL_UNKNOWN)
    • 密码错误:错误码24(KDC_ERR_PREAUTH_FAILED)
    • 通过错误码差异可枚举有效用户名
  2. 黄金票据攻击

    • TGT使用krbtgt的NTLM hash加密
    • 获取krbtgt hash后可伪造任意TGT
    • 可绕过密码验证直接获取服务访问权限

NTLM协议详解

Windows密码存储机制

Windows不保存明文密码,只保存密码hash:

  • 本地用户hash存储在SAM文件中
  • 域用户hash存储在域控的NTDS.DIT文件中

格式示例:

Administrator:500:AAD3B435B51404EEAAD3B435B51404EE:31D6CFE0D16AE931B73C59D7E0C089C0:::
  • LM Hash:AAD3B435B51404EEAAD3B435B51404EE
  • NTLM Hash:31D6CFE0D16AE931B73C59D7E0C089C0

LM Hash算法

  1. 将密码转为大写并转为十六进制字符串,不足14字节补0
  2. 分成两个7byte部分,每部分转为56bit byte流
  3. 分为7bit一组,每组末尾加0凑足8bit
  4. 两组分别作为Key对"KGS!@#$%"进行DES加密
  5. 加密结果拼接得到最终LM Hash

LM Hash弊端

  • 密码长度限制为14字符
  • 不区分大小写
  • 后半部分为固定值表示密码≤7位
  • DES加密强度不足

NTLM Hash算法

  1. 将密码转为十六进制形式
  2. 进行unicode编码
  3. 使用MD4算法对编码结果进行hash计算

NTLM本地认证流程

  1. 用户输入密码后,winlogon将密码交给lsass进程
  2. lsass将明文密码加密为NTLM hash
  3. 与SAM数据库中的hash比对验证

关键组件

  • winlogon:Windows登录进程
  • lsass:本地安全认证服务
  • SAM:安全账户管理数据库(%systemroot%\system32\config\SAM)

NTLM身份验证机制

采用Challenge/Response验证机制,分为三步:

  1. 协商

    • Client发送用户信息和功能列表
  2. 质询

    • Server返回支持的功能列表和随机Challenge
  3. 身份验证

    • Client使用NTLM hash和Challenge计算Response
    • 返回Response、用户名和Challenge

关键概念

  • Challenge:服务端生成的随机字符(NTLMv1为8位,v2为16位)
  • Net-NTLM hash:基于用户hash生成的中间值
  • Response:本质上是Net-NTLM hash

渗透测试相关技术点

Kerberos攻击面

  1. AS-REP Roasting

    • 针对不需要预认证的账户
    • 获取AS-REP响应后可离线破解
  2. Kerberoasting

    • 请求服务票据(TGS)
    • 离线破解服务账户密码
  3. 黄金票据

    • 需要krbtgt的NTLM hash
    • 可生成任意TGT
  4. 白银票据

    • 需要服务账户的NTLM hash
    • 伪造特定服务的TGS

NTLM攻击面

  1. Pass-the-Hash

    • 直接使用NTLM hash进行认证
    • 不需要知道明文密码
  2. NTLM Relay

    • 中继NTLM认证到其他系统
    • 可提升权限或横向移动
  3. Net-NTLMv1破解

    • v1协议安全性较低
    • 可离线破解获得NTLM hash

防御建议

  1. Kerberos防御

    • 禁用RC4加密,使用AES
    • 启用PAC验证
    • 监控异常票据请求
  2. NTLM防御

    • 禁用LM Hash和NTLMv1
    • 启用SMB签名
    • 限制NTLM使用范围
  3. 通用防御

    • 定期轮换krbtgt密码
    • 监控异常认证活动
    • 实施最小权限原则
内网渗透协议学习文档 Kerberos协议详解 基本概念与角色 Kerberos是一种由MIT提出的网络身份验证协议,通过密钥加密技术为客户端/服务器应用程序提供强身份验证。 核心角色: Client(用户) :发出访问服务的角色 Server(服务) :提供服务的角色 KDC(Key Distribution Center) :密钥分发中心,默认安装在域控中 关键名词: AD(Account Database) :账户数据库 Master Key :用户密码的hash值 Ticket(票据) :域网络对象相互访问的凭证 TGT(Ticket Granting Ticket) :用于向KDC获取服务票据的凭证 TGS(Service Ticket) :用于向Server请求服务的凭证 Authentication Service :认证Client身份并发放TGT的服务 Ticket Granting Service :检验TGT并生成TGS的服务 Kerberos认证流程 AS_ REQ(认证服务请求) : Client向KDC发送请求,凭据是Client的hash加密的时间戳 包含预认证数据(PA-ENC-TIMESTAMP和PA-PAC-REQUEST) AS_ REP(认证服务响应) : KDC验证成功后返回TGT TGT使用krbtgt的NTLM hash加密 TGS_ REQ(票据发放服务请求) : Client凭借TGT向KDC请求特定服务的TGS TGS_ REP(票据发放服务响应) : KDC验证TGT后返回TGS TGS使用目标服务的hash加密 AP_ REQ(服务请求) : Client凭借TGS向Server发起服务请求 AP_ REP(服务响应) : Server验证TGS后返回服务响应 AS_ REQ数据包结构分析 pvno :Kerberos版本号(通常为5) msg-type :消息类型(krb-as-req) padata :预认证数据列表 PA-ENC-TIMESTAMP:Client用Master Key加密的时间戳 PA-PAC-REQUEST:关于微软PAC扩展的请求 req-body : kdc-options:KDC选项标识位 cname:Client主机名(PrincipalName类型) realm:服务端域名 sname:服务端身份(krbtgt和所属域) till:到期时间 etype:加密类型列表 addresses:地址信息 AS_ REP数据包结构分析 msg-type :krb-as-rep padata :加密类型信息 crealm :Client所属域 cname :Client身份名 ticket :TGT票据 tkt-vno:票据版本 realm:KDC所属域 sname:krbtgt身份 enc-part:使用krbtgt的NTLM hash加密的TGT主体 enc-part :使用Client的hash加密的Session key TGS_ REQ数据包结构分析 msg-type :krb-tgs-req padata : PA-TGS-REQ:包含TGT票据 PA-PAC-OPTIONS:PAC选项 req-body : realm:域信息 sname:请求的服务名称 till:到期时间 etype:加密类型列表 TGS_ REP数据包结构分析 msg-type :krb-tgs-rep crealm :Client所属域 cname :Client身份名 ticket :最终服务票据 使用目标服务的hash加密 包含Server session key、Client info、到期时间 enc-part :使用Session key加密的Server session key Kerberos安全问题 用户名枚举 : 用户名不存在:错误码6(KDC_ ERR_ C_ PRINCIPAL_ UNKNOWN) 密码错误:错误码24(KDC_ ERR_ PREAUTH_ FAILED) 通过错误码差异可枚举有效用户名 黄金票据攻击 : TGT使用krbtgt的NTLM hash加密 获取krbtgt hash后可伪造任意TGT 可绕过密码验证直接获取服务访问权限 NTLM协议详解 Windows密码存储机制 Windows不保存明文密码,只保存密码hash: 本地用户hash存储在SAM文件中 域用户hash存储在域控的NTDS.DIT文件中 格式示例: LM Hash:AAD3B435B51404EEAAD3B435B51404EE NTLM Hash:31D6CFE0D16AE931B73C59D7E0C089C0 LM Hash算法 将密码转为大写并转为十六进制字符串,不足14字节补0 分成两个7byte部分,每部分转为56bit byte流 分为7bit一组,每组末尾加0凑足8bit 两组分别作为Key对"KGS !@#$%"进行DES加密 加密结果拼接得到最终LM Hash LM Hash弊端 : 密码长度限制为14字符 不区分大小写 后半部分为固定值表示密码≤7位 DES加密强度不足 NTLM Hash算法 将密码转为十六进制形式 进行unicode编码 使用MD4算法对编码结果进行hash计算 NTLM本地认证流程 用户输入密码后,winlogon将密码交给lsass进程 lsass将明文密码加密为NTLM hash 与SAM数据库中的hash比对验证 关键组件 : winlogon :Windows登录进程 lsass :本地安全认证服务 SAM :安全账户管理数据库(%systemroot%\system32\config\SAM) NTLM身份验证机制 采用Challenge/Response验证机制,分为三步: 协商 : Client发送用户信息和功能列表 质询 : Server返回支持的功能列表和随机Challenge 身份验证 : Client使用NTLM hash和Challenge计算Response 返回Response、用户名和Challenge 关键概念 : Challenge :服务端生成的随机字符(NTLMv1为8位,v2为16位) Net-NTLM hash :基于用户hash生成的中间值 Response :本质上是Net-NTLM hash 渗透测试相关技术点 Kerberos攻击面 AS-REP Roasting : 针对不需要预认证的账户 获取AS-REP响应后可离线破解 Kerberoasting : 请求服务票据(TGS) 离线破解服务账户密码 黄金票据 : 需要krbtgt的NTLM hash 可生成任意TGT 白银票据 : 需要服务账户的NTLM hash 伪造特定服务的TGS NTLM攻击面 Pass-the-Hash : 直接使用NTLM hash进行认证 不需要知道明文密码 NTLM Relay : 中继NTLM认证到其他系统 可提升权限或横向移动 Net-NTLMv1破解 : v1协议安全性较低 可离线破解获得NTLM hash 防御建议 Kerberos防御 : 禁用RC4加密,使用AES 启用PAC验证 监控异常票据请求 NTLM防御 : 禁用LM Hash和NTLMv1 启用SMB签名 限制NTLM使用范围 通用防御 : 定期轮换krbtgt密码 监控异常认证活动 实施最小权限原则