本地认证的基础知识
HTLM Hash加密的方式(即NTLM Hash的由来)
HTLM加密解析
1.首先明文转换为16进制ASCII码
2.后将其再转换为Unicode格式(0x80之前的标准ASCII码转换成Unicode码,就是简单地从0x??变成 0×00??。此类标准ASCII串按little-endian序转换成Unicode串,就是简单地在原有每个字节之后添加 0×00)
3.最后对所获取的 Unicode串进行标准MD4单向哈希,无论数据源有多少字节,MD4固定产生128-bit的哈希值
4.admin -> hex(16进制编码) = 61646d696e 61646d696e -> Unicode = 610064006d0069006e00 610064006d0069006e00 -> MD4 = 209c6174da490caeb422f3fa5a7ae634
HTLM加密解析本地认证过程
补充:
1. Windows Logon Process(即 winlogon.exe),是Windows NT 用户登 陆程序,用于管理用户登录和退出
2. lsass.exe用于微软Windows系统的安全机制;它用于本地安全和登陆策略(mimikatz的原理就是依靠这个程序获得Hash值)
3. 本地认证的过程,其实就是将用户输入的密码转换成为NTLM Hash后与SAM中的NTLM Hash进行比较
加密的存储
在本地登录Windows的时候,计算机操作系统中的密码存储在哪里呢?答:%SystemRoot%\system32\config\sam
文件中保存了计算机本地所有用户的凭证信息,当我们登录系统的时候,系统会自动地读取SAM文件中的”密码”与我们输入的“密码”进行比对,如果相同,证明认证成功!
补充:Windows本身不保存明文密码,只保留密码的Hash(但是在无KB2871997补丁或win10或winsever2012R2以下(eg:较老的XP版本)的情况下可能会存在明文密码)
工作组
NTLM协议
NTLM V2协议(进阶)
Chalenge/Response(挑战回应认证)
HTLM协议认证的主要步骤:
协商:主要用于确认双方协议版本(这个产生的原因是windows存在向下兼容)
质询:就是挑战(Chalenge)/响应(Response)认证机制起作用的原理(我们可以看成《计算机网络》中的三次握手,只不过他们发送的是加密的消息)
验证:验证主要是在质询完成后,验证结果,是认证的最后一步
Chalenge/Response流程:
1.客户端向服务器发出认证请求;
2.认证服务器从用户数据库中查询用户是否是合法的用户,若不是,则不做进一步的处理;
3.认证服务器内部产生一个随机数,作为Challenge,发送给用户;
4.客户将口令和随机数合并,使用单向Hash函数 ( 例如MD5算法 ) 生成一个字节串作为Response;
5.认证服务器将Response与自己的计算结果比较,如两者相同,则通过一次认证,反之认证失败;
6.认证服务器通知客户端认证成功或失败
下面我就拿倾旋大佬的图来举列子(好吧我承认是我懒):
Pass The Hash(利用)
利用Pass The Hash攻击(必要)条件
Pass The Hash攻击(必要)条件如下:要完成一个NTLM认证,第一步需要客户端将自己要参与认证的 用户名发送至服务器端,等待服务器端给出的Challenge⋯⋯其实哈希传递就是使用用户名对应的NTLM Hash将服务器给出的 Chanllenge加密,生成一个Response,来完成认证。(Pass The Hash能够完成一个不需要输入密码的NTLM协议认证流程,针对内网渗透,有不错的效果)
Windows提供了为企业管理资产、服务、网络对象进行组织化的管理,这非常符合企业架构的管理模式。而承载这些管理机制的就是活动目录服务。如果要搭建一个域,就需要安装活动目录服务,当然,这个不在我们的讨论范围。
活动目录服务以域名来划分域的边界,域外就不属于管理范围了,也就是说,一个域对应一个域名,域之间也可以相互信任。Active Directory存储了有关网络对象的信息,并且让管理员和用 户能够轻松地查找和使用这些信息。Active Directory使用了一种 结构化的数据存储方式,并以此作为基础对目录信息进行合乎逻辑的分层组织。
1.哈希传递需要被认证的主机能够访问到服务器(废话)
2.哈希传递需要被传递认证的用户名
3.哈希传递需要被传递认证用户的NTLM Hash
Kerberos域攻击手段
域外用户枚举:当我们不在域内时,可以通过kerberos中的AS_REQ工作原理来进行枚举域内账号。
hash传递攻击(PTH):哈希传递(pth)攻击是指攻击者可以通过捕获密码的hash值(对应着密码的值),然后简单地将其传递来进行身份验证,以此来横向访问其他网络系统
密码喷洒攻击(Password Spraying)∶确定域策略后,设置密码次数使用工具对应的协议爆破密码
黄金票据:获得域控权限后用来做"万能钥匙"后门
AS-REP Roasting攻击:是一种对"特定设置"用户账号,进行离线爆破的攻击方式
SPN: SPN全程Service Principal Names,是服务器上所运行服务的唯一标识,每个使用kerberos认证的服务都需要一个SPN
Kerberosast攻击:这种攻击方法主要利用了TGT_REP阶段使用对方NTLMHash返回的加密数据,通过碰撞加密数据破解用户密码(利用条件苛刻)
白银票据:获取某域账号HASH之后,伪造服务票据ST。通过伪造的TGS,可以直接发送给Server,访问指定的某个服务,来进行攻击。此过程无需KDC(如果域控服务器进行了相应的KDC签名效验,那么白银票据无用)
委派攻击
下面就面试与hvv常问的两个票据——黄金与白银,进行详细的解说
黄金票据(Golden Tickets)
黄金票据特点:黄金票据(Golden Tickets)
1.由于在域控制器上由KDC服务生成的域设置了Kerberos策略,如果提供票据,则系统信任票据的有效性。这意味着,即使域策略声明Kerberos登录票据(TGT)只有10小时有效,如果票据声明有效期为10 年,那么也会信任票据的有效性期为10年。
2.该KRBTGT帐户密码从不更改*和直到KRBTGT密码被更改(两次),攻击者可以创建黄金票据。请注意,即使伪造用户更改其密码,创建用于模拟用户的Golden Ticket仍然存在。
3.在AS-REP阶段,由于返回的认购,这就造成了黄全票据攻击拥有krbtgt 的 hash 就可以自己制作一个TGT认购权证,这就造成了黄金票据攻击伪造黄金票据的前提:要伪造的域用户(这里我们一般填写域管理员账户)·域名·域的SID值(就是域成员SID值去掉最后的)·krbtgt账号的哈希值或AES-256值
4.它绕过了SmartCard身份验证要求,因为它绕过了DC在创建TGT之前执行的常规验证。
5.这个精心创建的TGT要求攻击者拥有Active Directory域的KRBTGT密码哈希值(通常从域控制器转储)。
6.KRBTGT NTLM哈希可用于生成一个有效的TGT(使用RC4)模拟任何用户访问Active Directory中的任何资源。
7.在主机上都可以生成和使用黄金票据(TGT),即使没有加入域也是如此。只要网络可以访问域。
8.用于从AD森林中的DC获取有效的TGS票据,并提供一个坚持在一切域访问所有的主机的好办法。
黄金票据(Silver Tickets)漏洞分析
白银票据(Silver Tickets)
如果说黄金票据是伪造的TGT,那么白银票据就是伪造的ST。在Kerberos认证的第三大步,Client带着ST和Authenticator3向域上的某个服务进行请求,Server接收到Client的请求之后,通过自己的MasterKey 解密ST,从而获得 Session Key。通过 Session Key 解密 Authenticator3,进而验证对方的身份,验证成功就让 Client 访问server上的指定服务了。所以我们只需要知道Server用户的Hash就可以伪造出一个ST,且不会经过KDC,但是伪造的门票只对部分服务起作用
白银票据特点:
1.黄金票据是伪造TGT并且有效的获得任何Kerberos服务,而白银票据是伪造TGS。这意味着白银票据仅限于特定服务器上的任何服务。
2.大多数服务不验证PAC(通过将PAC校验和发送到域控制器进行PAC验证),因此使用服务帐户密码哈希生成的有效TGS可以完全伪造PAC
3.攻击者需要服务帐户密码哈希值
4.TGS是伪造的,所以没有和TGT通信,意味着DC从验证过
5.任何事件日志都在目标服务器上
白银票据(Silver Tickets)漏洞分析
1.Metaspolit在token 窃取中的应用;拿到了system权限
2.Windows平台下incognito的应用
3.CobaltStrike中的token窃取
4.Invoke-TokenManipulation.ps1用法
5.利用token拿下trust installer 权限
附上参考博客地址:
倾旋师傅:https://payloads.online/
橘子师傅:https://0range-x.github.io/
还有CSDN上其他师傅的文章......
本文转自: 格物安全