Windows Hash
分类如下:
- • LM Hash
- • NTLM Hash
- • Net-NTLM Hash
Windows Hash简介
- • Windows系统内部不保存用户的明文密码,只保存密码的Hash值
- • 本机用户的密码Hash是存放SAM
%SystemRoot%\system32\config\sam
文件中 - • 域内用户的密码Hash是存在域控的NTDS.DIT文件中
- • 数据库文件夹:
C:\\Windows\NTDS
- • 日志文件文件夹:
C:\\Windows\NTDS
- • SYSVOL文件夹:
C:\\Windows\SYSVOL
Windows系统导出密码的格式如下:
用户名:RID:LM-Hash:NTLM-Hash Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
- 1. 当Windows用户密码≤14个字符,SAM文件中是LM Hash值+NTLM-Hash值
- 2. 当Windows用户密码>14个字符,SAM文件中是NTLM-Hash值
NTLM Hash
NTLM Hash是支持Net NTLM认证协议及本地认证过程中的一个重要参与物,其长度为32位,由数字与字母组成。
当我们登录系统的时候,系统会将用户输入的密码计算成NTLM Hash,然后与sam数据库中该用户的哈希比对,匹配则登陆成功,不匹配则登陆失败
这里提到的NTLM哈希,是一种单向哈希算法,Windows将用户的密码计算成NTLM哈希之后才存储在电脑中,对于这个概念一定要牢牢记住,因为后面NTLM Hash会经常出现
大致的运算流程为:
用户密码->HEX编码->Unicode编码->MD4
用python计算密码'admin'的NTLM哈希:
from passlib.hash import nthash print(nthash.hash('admin'))
一定要保护好自己的SAM文件,现在的PE去密码也是这种方式
本地认证中用来处理用户输入密码的进程即lsass.exe,密码会在这个进程中明文保存,供
该进程将密码计算成NTLM Hash与sam进行比对
我们使用mimikatz来获取的明文密码,便是在这个进程中读取到的
LM Hash
- • 用户口令全部转为大写老的windows的用户名密码不区分大小写
- • 用户口令转为16进制之后不足14个字符(28位)长度,用0补足
- • 把密码的16进制字符串分成两个7byte部分
- • 每部分转换成比特流,并且长度为56bt,长度不足使用0在左边补齐长度
- • 再分7bit为一组末尾加0,转换为16进制,组成新的编码
- • 分别用key为
KGS!@#$%
(4B47532140232425
)进行DES加密 - • 最后将二组DES加密后的编码拼接,获得LM-HASH值
# 将所有小写字母转换为大写字母 123ABC #未达到7个字符 # 将密码转化为16进制,分两组,填充为14个字符,空余位使用0x00字符填补 31323341424300000000000000 # 将密码分割为两组7个字节的块 31323341424300000000000000001 # 16进制 # 将每组转化为比特流,不足56Bit则在左边加0 31323341424300->(转换为二进制) 110001001100100011001101000001010000100100001100000000->(补足56Bit) 00110001001100100011001101000001010000100100001100000000 # 将比特流按照7比特一组,分出8组,末尾加0 # 由于后者都为0,结果可想而知,都是0 # 将每组比特流转换为16进制作为被加密的值,使用DES加密,字符串"KGS!@#$%"(0x4B47532140232425)为Key,得到8个结果,每个结果转换为16进制 00110000100110001000110001101000000101000001001000001100 00000000 30988C6814120000->DES(30988C6814120C00)->48-D7-EB-91-2F-5E-69-7C # 由于我们的密码不超过7字节,所以后面的一半是固定的: AA-D3-B4-35-B5-14-04-EE # 连接两个DES加密字符串。这是LM哈希。 48-D7-EB-91-2F-5E-69-7C-AA-D3-B4-35-B5-14-04-EE
本地认证流程
Windows Logon Process(即Winlogon.exe),是Windows NT用户登录程序,用于管理用户登录和退出
Lsass用于微软Windows系统的安全机制.它用于本地安全和登录策略
Net NTLM Hash(Windows 网络认证)
在内网渗透中,经常遇到工作组环境,而工作组环境是一个逻辑上的网络环境(工作区),隶属于工作组的机器之间无法互相建立一个完美的信任机制,只能点对点,是比较落后的认证方式,没有信托机构
- • 假设A主机与B主机属于同一个工作组环境,A想访问B主机上的资料,需要将一个存在于B主机上的账户凭证发送至B主机,经过
认证才能够访问B主机上的资源- • 最常见的服务:SMB服务端口:445
NTLM(NT LAN Manager) 协议
早期SMB协议在网络上传输明文口令。后来出现LAN Manager Challenge/Response验证机制,简称LM,它是如此简单以至很容易就被破解
微软提出了WindowsNT挑战/响应验证机制,称之为NTLM。现在已经有了更新的NTLMv2以及Kerberos验证体系。
- 1. 挑战/响应--协商客户端主要在这一步向服务器确认协议的版本,是v1还是v2
- 2. 挑战/响应--质询
- • 客户端向服务器端发送用户信息(用户名)请求
- • 服务器接受到请求,生成一个16位的随机数,被称之为“Challenge”,使用登录用户名对应的NTLM Hash加密Challenge(16位随机字符)
生成Challenge1。同时,生成Challenge1后,将Challenge(16位随机字符)发送给客户端Net NTLM Hash=NTLM Hash(Challenge)
- • 客户端接受到Challenge后,使用将要登录到账户对应的NTLM Hash加密Challenge生成Response,然后将Response发送至服务器端。
- • 服务器端收到客户端的Response后,比对Chanllenge1与Response是否相等,若相等,则认证通过。
- 3. 挑战/响应--认证
- 4. 挑战/响应--认证流程
注意:
- 1.
Chanllenge
是Server产生的一个16字节的随机数,每次认证都不同 - 2.
Response
的表现形式是Net-NTLM Hash
,他是由客户端提供的密码Hash加密Server返回的Chanllenge产生的结果
NTLM V2协议
NTLM v1与NTLM V2最显著的区别就是Challenge.与加密算法不同,共同点就是加密的原料都是NTLM Hash。<br />**不同点:**
- 1. Challage:
NTLM V1
的Challenge
有8位,NTLM V2
的Challenge
为16位。 - 2. Net-NTLM Hash:
NTLM V1
的主要加密算法是DES
,NTLM V2
的主要加密算法是HMAC-MD5
Pass The Hash(哈希传递)
在内网渗透中,我们经常会需要抓取管理员的密码、NTLM Hash,通过搜集这些信息有助于我们扩大战果,尤其是在域环境下
什么是哈希传递
哈希传递是能够在不需要账户明文密码的情况下完成认证的一个技术
哈希传递的作用
解决了我们渗透中获取不到明文密码、破解不了NTLM Hash而又想扩大战果的问题
Pass The Hash 必要条件
- • 哈希传递需要被传递认证的用户名
- • 哈希传递需要被传递认证用户的NTLM Hash
Pass The Hash 原理分析
要完成一个NTLM认证,第一步需要客户端将自己要参与认证的用户名发送至服务器端,等待服务器端给出的Challenge
其实哈希传递就是使用用户名对应的NTLM Hash将服务器给出的Chanllenge
加密,生成一个Response
,来完成认证。
Pass The Hash 工具
# CrackMapExec cme cmb 192.168.3.5 -u administrator -H dab7de8feeb5ecac65faf9fdc6cac3a9 -x whoami # SMBexec smbexec.exe -hashes :161cff084477fe596a5db81874498a24 ./administrator@192.168.232.135 # CS mimikatz sekurlsa::pth /user:administrator /domain:xibaqu.com /ntlm:babf03777e2b84adcd6d6ef99801d9f5 shell dir \\192.168.232.135\c$
Active Directory
AD(活动目录)概念
Active Directory存储了有关网络对象的信息,并且让管理员和用户能够轻松地查找和使用这些信息。
Active Directory使用了一种结构化的数据存储方式,并以此作为基础对目录信息进行合乎逻辑的分层组织
网络对象分为:用户、用户组、计算机、域、组织单位以及安全策略等。
AD(活动目录)功能
- • 服务器及客户端计算机管理:管理服务器及客户端计算机账户,所有服务器及客户端计算机加入域管理并实施组策略。
- • 用户服务:管理用户域账户、用户信急、企业通讯录(与电子邮件系统集成)、用户组管理、用户身份认证、用户授权管理等按省实施组管理策略。
- • 资源管理:管理打印机、文件共享服务等网络资源。
- • 桌面配置:系统管理员可以集中的配置各种桌面配置策略,如:用户使用域中资源权限限制、界面功能的限制、应用程序执行特征限制、网络连接限制、安全配置限制等。
- • 应用系统支撑:支持财务、人事、电子邮件、企业信息门户、办公自动化、补丁管理、防病毒系统等各种应用系统。
Kerberoes
Kerberos是一种网络认证协议,其设计目标是通过密钥系统为客户机/服务器应用程序提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据.在以上情况下,Kerberos作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。
域认证所参与的角色:
- 1. Client
- 2. Server
- 3. KDC(Key Distribution Center)=DC
KDC:
KDC(Key Distribution Center):密钥分发中心,里面包含两个服务:AS和TGS
- • AD (account database):存储所有client的白名单,只有存在于白名单的client才能顺利申请到TGT
- • Authentication Service:为client生成TGT的服务
- • Ticket Granting Service:为client生成某个服务的ticket(票据)
PS:从物理层面看,AD与KDC均为域控制器(Domain Controller)
专业术语:
英文名称 | 中文名称 |
AS(Authentication Server ) |
认证服务器 |
KDC(Key Distribution Center ) |
密钥分发中心 |
TGT(Ticket Granting Ticket ) |
票据授权票据,票据的票据(又称黄金票据)用于身份认证 存储在内存,默认有效期为10小时 |
TGS(Ticket Granting Server ) |
票据授权服务器(又称白银票据) |
SS(Service Server ) |
特定服务提供端的票据(服务票据) |
Kerberoes协议框架
Kerberoes认证流程
CLient-AS
Client-TGS
Client-Server
Kerberoes协议的缺陷
- 1. 它需要中心服务器的持续响应。当Kerberos服务宕机时,没有人可以连接到服务器
- 2. Kerberos要求参与通信的主机的时钟同步.票据具有一定的有效期
- 3. 所有用户使用的密钥都存储于中心服务器中,危机服务器的安全的行为将危机所有用户的密钥
- 4. 一个危险客户机将危机用户密码
PTH(哈希传递)
未完待续。。。