内网-Windows认证
windows认证
1.windows本地认证–NTML哈希和LM哈希
本地认证流程
Windows的登陆密码是储存在系统本地的SAM文件中的,在登陆Windows的时候,系统会将用户输入的密码与SAM文件中的密码进行对比,如果相同,则认证成功
SAM文件是位于 %SystemRoot%\system32\config\ 目录下的,用于储存本地所有用户的凭证信息,但是这并不代表 着你可以随意去查看系统密码。
windows本地认证流程:
首先,用户注销、重启、锁屏后,操作系统会让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 |
|
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的支持。
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 |
|
5、将每一组7字节的十六进制转换为二进制,每7bit一组末尾加0,再转换成十六进制组成得到2组8字节的编码
第一组:
1 |
|
第二组:
1 |
|
6、将以上步骤得到的两组8字节编码,分别作为DES加密key为魔术字符串 KGS!@#$% 进行加密
KGS!@#$%的16进制为 4B47532140232425 作为明文进行加密
第一组:
1 |
|

第二组:
1 |
|

7、最终结果拼接即可6F08D7B306B1DAD4B75E0C8D76954A50 这个值就是LMhash值
NTLM hash原理
1.将明文口令转换成十六进制的格式 如:Admin@123 转换成Unicode格式,即在每个字节之后添加0x00
1 |
|
2.对Unicode字符串作MD4加密,生成32位的十六进制数字串 570a9a65db8fba761c1008a51d4c95ab
SAM文件存储的内容
以用户admin 密码Admin@123为例 lsass.exe文件生成的值和SAM文件存储的值即为:
1 |
|
2.windows网络认证–基于挑战响应认证的NTLM协议
网络认证NTLM协议简介
在平时的测试中,经常会碰到处于工作组的计算机,处于工作组的计算机之间是无法建立一个可信的信托机构的, 只能是点对点进行信息的传输。举个例子就是,主机A想要访问主机B上的资源,就要向主机B发送一个存在于主机B上的一个账户,主机B接收以后会在本地进行验证,如果验证成功,才会允许主机A进行相应的访问。
NTLM 协议是一种基于挑战(Chalenge)/响应(Response) 认证机制,仅支持Windows的网络认证协议。
1 |
|
认证流程
认证成功的流程
1、首先,client会向server发送一个username,这个username是存在于server上的一个用户

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

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

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

认证失败的流程
1、首先,client会向server发送一个username,这个username是存在于server上的一个用户

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

NTLM协议v1与v2的区别
NTLM V2协议,NTLMv1与NTLM v2最显著的区别就是Challenge与加密算法不同,共同点就是加密的原料都是 NTLM Hash
1 |
|
抓包分析实验
1.实验环境
2.windows10 安装wireshark
3、使用如下命令进行远程连接,并且使用wireshark 包
1 |
|
4、前5个数据包中前四条时协商,第五个是认证的第一个数据包
5、第6个数据包就是返回challenge挑战值
分析该数据包得到chalenge值 53fb7eb8d40cc777
6、第7个数据包就是返回response的数据包
response数据如下:
1 |
|
7、接下来得到NTLMv2 数据,NTLMv2格式如下:
1 |
|
8、最终的到HTLMv2如下:
1 |
|
9、使用hashcat 破解密码
1 |
|
1.txt为密码字典
10、使用hashcat破解得到密码
抓取HTLMv2值
使用工具:Inveigh

可以使用cs 3种方式:1.本地导入 2.上传文件到靶机 3.远程执行
1 |
|
只要有人执行net use即可抓取到HTLMv2值
3.windows域认证之Kerberos协议认证
什么是Kerberos协议
Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。该 认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并 假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下, Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的
Kerberos协议的组成角色
在古希腊神话故事中,kerberos是一只具有三颗头颅的地狱恶犬,他守护在地狱之外,能够识别所有经此路过的亡 灵,防止活着的入侵者闯入地狱
kerberos协议中也存在三个角色,分别是
1 |
|
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的确认了。
再举个例子:
我们去动物园,动物园不认识你不让你进,你也怕进门后不是动物园,所以就很尴尬
如何解决呢?我们建立一个售票窗口,只要售票处认识你和动物园,你和动物园之间就可以相互信任。
1 |
|
所以整个kerberos认证流程可以简化描述如下:
客户端在访问每个想要访问的网络服务时,他需要携带一个专门用于访问该服务并且能够证明自己身份的票据,当服务端收到了该票据他才能认定客户端身份正确,向客户端提供服务。所以整个认证流程可简化为两大步:
1 |
|
Kerberos认证完整流程
在上述的流程中,其实还有一个问题,那就是
1.KDC怎么知道你(客户端)就是真正的客户端?凭什么给你发放服务授予票据(Ticket)呢?
我们以去动物园为例,售票处凭什么给你买票,你如果是一个逃犯怎么办?其实买票的过程我们可以分为两步第一 才步是你拿着身份证去验证,第二步身份验证通过了才会给你票

1 |
|
所以kerberos通信可以分为3步
通信第一步-客户端和AS进行通信
为了获得能够用来访问服务端服务的票据,客户端首先需要来到KDC获得服务授予票据(Ticket)。由于客户端是第一次访问KDC,此时KDC也不确定该客户端的身份,所以第一次通信的目的为KDC认证客户端身份,确认客户端是一个可靠且拥有访问KDC权限的客户端,
1 |
|
通信第二步-客户端和TGS进行通信
此时的客户端收到了来自KDC(其实是AS)的响应,并获取到了其中的两部分内容。此时客户端会用自己的密钥将 第二部分内容进行解密,分别获得时间戳,自己将要访问的TGS的信息,和用于与TGS通信时的密钥CT_SK。首先 他会根据时间戳判断该时间戳与自己发送请求时的时间之间的差值是否大于5分钟,如果大于五分钟则认为该AS是 伪造的,认证至此失败。如果时间戳合理,客户端便准备向TGS发起请求
1 |
|
通信第三步-客户端和服务端进行通信
此时的客户端收到了来自KDC(TGS)的响应,并使用缓存在本地的CT_SK解密了第二部分内容(第一部分内容中 的ST是由Server密码加密的,客户端无法解密),检查时间戳无误后取出其中的CS_SK准备向服务端发起最后的请求。
1 |
|
总体流程如下
4.Golden Ticket黄金票据制作原理及利用方式
Krbtgt账户介绍
krbtgt用户,是系统在创建域时自动生成的一个帐号,其作用是密钥分发中心的服务账号,其密码是系统随机生成 的,无法登录主机
黄金票据原理
本质:伪造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,重新获取域控的管理权限。
我们在以去动物园为例,当我们去买票的时候,我么首先第一步是去身份认证管理员那里认证身份
实验
实验环境
实验机器 | IP地址 |
---|---|
windows Server 2012(域控) | 10.210.100.10 |
windows Server 2008(域内成员) | 10.210.100.20 |
实验前提
1、已经控制了域名并且使用域管理员登录或者提权的system
如果域管理员发现了你控制了域控机器,把你的后门删除了,那么就不能继续控制域控了,这个时候当我们可以伪造TGT重新获得域控的权限 条件如下:
1 |
|
实验步骤
1、目前已经控制了域控和域内机器
2、获取关键信息
1 |
|
域sid:S-1-5-21-2431442348-1717482385-2017137259
域名称:hack.com
3、使用mimikatz导出KRBTGT的ntlm hash
1 |
|
得到krbtgt的ntlm hash:4d81c6ab6cabae0fc304cd309f601a0b
4、这个时候突然域控下线了,管理员发现的你在控制,把后门清理了
5、因为之前已经记录了关键信息,我们现在就可以伪造任意用户访问域控,windows 2008机器必须是域内用户或者system用户
1 |
|
使用cs制作黄金票据
6、使用dir 远程访问域控
1 |
|
7、使用计划任务上线cs
copy当前控制的靶机的恶意文件到域控的C盘
1 |
|
设置计划任务到域控 名字test 开机启动 c:\artifact.exe 以system权限
1 |
|
运行计划任务
1 |
|
域控上线
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,但是伪造的门票只对部分服务起作用。
我们以去动物园举例
实验
实验环境
实验机器 | 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 |
|
实验步骤
控制域控
1、获取基本信息
1 |
|
域名:hack.com SID:S-1-5-21-2431442348-1717482385-2017137259
2、获取服务账号的ntlm hash值
1 |
|
服务账号DC$的ntlm hash值:a2b973c420b7df773e05ed5d780cdc7c
3、伪造票据(CIFS共享服务)
1 |
|
4、访问域控
1 |
|
6、伪造票据(LDAP共享服务)
1 |
|
7、查询域控的krbtgt(通过LDAP服务)
获取域控的krbtgt的ntlm hash
1 |
|
此时又可以制作黄金票据 拿到域控权限
控制PC-2003
1.获取基本信息
1 |
|
域名:hack.com SID:S-1-5-21-2431442348-1717482385-2017137259
2、获取服务账号的ntlm hash值
1 |
|
ntlm hash:509a5497664e1415f80a550c0ba4b543
3、伪造票据(CIFS共享服务)
1 |
|
4、访问2003
1 |
|