内网渗透—windows验证机制
SSPI
安全服务接口,主要用于身份验证机制。
SSP
安全服务,是SSPI的功能函数的具体实现。
LM Hash和NTLM Hash
两者都是windows对用户的密码进行加密得到的hash,会放到本地的SAM文件和NTDS.dit文件中。
Administrator:500:AAD3B435B51404EEAAD3B435B51404EE:31D6CFE0D16AE931B73C59D7E0C089C0:::
格式为:
Administrator:sid:LMHash:NTLMHash
Net-NTLM Hash v1的格式为:
username::hostname:LM response:NTLM response:challenge
Net-NTLM Hash v2的格式为:
username::domain:challenge:HMAC-MD5:blob
从Windows Vista 和 Windows Server 2008开始,默认情况下只存储NTLM Hash,LM Hash将不再存在。(因为LMHash存在漏洞)。
NTLM身份认证
NTLM认证分为本地认证和网络认证。
NTLM本地认证
将用户密码转化为NTLM Hash的时候与本地SAM数据库进行对比。
登陆流程:
winlogon.exe接受用户输入—>密码交给lsass.exe进程—>进程保存明文密码—>明文密码加密成NTLM Hash
NTLM工作组认证
挑战/响应验证机制
1、客户端输入服务端的用户、密码,然后本地缓存服务器密码的NTLM Hash值。
2、服务端返回给客户端一个16位的随机值challenge。
3、客户端用NTLM-Hash和challenge进行加密,拿到response。response里面包含Net-ntlm hash。
4、服务端用自己的ntlm-hash对challeng加密然后与客户端发送的对比。
NTLM 在域环境中的认证
在域环境中,在第四步中,服务端将net ntlm-hash发送给域控,域控负责检验net ntlm-hash是否正确。
用户密码
https://3gstudent.github.io/Windows下的密码hash-NTLM-hash和Net-NTLM-hash介绍
NTLM认证的相关问题
Hash传递
在NTLM认证的第三步中,使用NTLM Hash进行计算Net-ntlmhash。在进行身份验证的时候无需使用用户明文密码,可以直接使用ntlmhash进行身份验证。
http://blog.sycsec.com/2018/10/02/What-is-Pass-the-Hash-and-the-Limitations-of-mitigation-methods/#pth攻击原理
https://xz.aliyun.com/t/8117#toc-2
https://whoamianony.top/2021/04/09/渗透测试/内网渗透测试/内网渗透测试:NTLM 与 NTLM 身份验证/
Net-NTLM爆破
NTLM Relay
KERBEROS认证协议
该协议要解决的问题
客户端要访问服务端上的某个协议时需要进行身份验证
在通讯过程中即使通讯内容被篡改,仍然能保持安全性。
两大部分
客户端向AS发起请求,进行身份验证。验证通过之后会给一个TGT也就是黄金票据。
客户端通过TGT来获取访问服务端上的服务的权限,也就是换取TGS白银票据。
两大票据
黄金票据:由AS生成传递给客户端,使用域控制器中的KRBTGT用户的hash对客户端信息进行加密得到黄金票据。黄金票据存放到客户端原封不动。用来发送给TGS进行服务器授权。
白银票据:白银票据是用服务器端的hash加密用户信息得到的。
具体流程
客户端身份验证
客户端向AS进行身份验证获取TGT票据。
-
客户端向AS发起请求
-
AS通过AD验证是否有该用户。
-
AS发送两条信息给客户端。
-
AS随机生成session-key,并用客户端用户的hash加密。
-
发送TGT,黄金票据。
-
客户端拿到信息之后,黄金票据不动,使用hash解密session-key。
客户端获取服务器授权
客户端发送TGT、要访问的服务器信息、客户端信息给TGS。
-
TGS向AD查询所请求的服务器是否存在。
-
TGS使用域控hash解密TGT,拿到session-key和客户端信息。
-
TGS拿到解密的session-key去解密另一条信息,也得到客户端信息。两者比较。
-
TGS生成一个server session key并向客户端发送以下信息。
-
使用所访问服务器的hash加密server session key生成白银票据。
-
使用session key加密server session key
-
客户端拿到信息之后,用session key解密得到server session key 白银票据依据不动。
客户端请求服务器
客户端使用server session key加密客户端信息和白银票据一起发送给服务器。
-
服务器拿到信息用自己的hash解密白银票据得到server session key和客户端信息。拿到key之后继续解密另一条信息拿到客户端信息。进行对比。
具体的传输内容
客户端身份验证
客户端
请求包中包含:请求用户名、客户端主机名、以及被用户hash加密的时间戳。其中被hash加密的时间戳是请求凭据。
AS服务器
拿到用户的请求凭据之后,从as服务器中获取hash进行解密,解密成果之后获取时间戳,如果在五分中之内则验证成功。
随机生成一个session key,向客户端传递经过krbtgt用户hash加密的黄金票据、用户hash加密的session key。
所以获取域控的用户hash之后,我们可以进行黄金票据伪造。
总结:
session key 由as服务器生成,被用户hash加密。
黄金票据由as服务器生成,被域控的hash加密。
客户端获取服务器授权
客户端
客户端信息、被session key 加密的时间戳、黄金票据
服务端解密黄金票据,拿到session key,然后使用session key解密被加密的时间戳,拿到时间戳。之后使用服务的hash加密生成白银票据。和一个session key加密的server session key。
https://xz.aliyun.com/t/8187
总结:
-
机器是否具有某个服务器中服务的使用权,由KDC分发的票据来决定。 -
客户端向AS发送的请求凭据是客户端的hash加密的时间戳。 -
黄金票据TGT是由域用户的hash生成的。 -
KDC拿到TGT解密之后,如果正确直接返回被服务端hash加密的TGS也就是白银票据。这一步无论是否有权限访问服务器,只要具有TGT,就返回TGS。
黄金票据与白银票据的区别
加密方式不同:
前者是固定用户的hash加密,后者是服务账号的hash加密。
流程不同:
前者构造的时候需要KDC域控的参与,后者不需要。
权限不同:
在伪造前者可以访问任何服务,后者只能访问固定的服务。
原文始发于微信公众号(土拨鼠的安全屋):内网渗透—windows验证机制
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论