杨凌网站开发,php网站开发套模板,wordpress淘宝客链接,自己做网站统计关注这个专栏的其他相关笔记#xff1a;[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01#xff1a;SAM 文件 Windows 本地认证流程
0x0101#xff1a;SAM 文件简介
Windows 本地账户的登录密码是存储在系统本地的 SAM 文件中的#xff0c;在登录 Windows 的时候[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01SAM 文件 Windows 本地认证流程
0x0101SAM 文件简介
Windows 本地账户的登录密码是存储在系统本地的 SAM 文件中的在登录 Windows 的时候系统会将用户输入的密码与 SAM 文件中的密码进行对比如果相同则认证成功你就可以登录了。
SAM 文件存储在系统的 %SystemRoot%\system32\config\ 目录下该文件用于存储本地所有用户的凭证信息。值得注意的是哪怕我们能看到该文件我们也是无法直接查看到文件内容的 0x0102Windows 本地认证流程
下图就是 Windows 本地认证的流程这个流程每当我们进行登录时系统就会自动走一遍 Windows 本地认证流程如下 首先用户注销、重启、锁屏后操作系统会让 winlogon.exe 显示登录界面接收用户输入的账号密码。 用户在 winlogon.exe 中输入账号密码后winlogon.exe 会将明文密码发送到 lsass.exe 进程中。 lsass.exe 将收到的明文密码保存到内存中并将明文密码进行 NTLM Hash 加密。 lsass.exe 将加密后的密码与 SAM 文件中的值进行比对比对成功就允许登录反之登录失败。
Winlogon.exe 即 Windows Logon Process是 Windows NT 用户登录程序用于管理用户的登录和退出。
Lsass.exe 是微软 Windows 系统的一个安全机制它用于控制本地安全和登录策略。 在进行本地认证的过程中用来处理用户输入密码的进程 lsass.exe 会将用户的密码以明文形式存储一份在内存中以供该进程将密码计算成 NTLM Hash 与 SAM 进行比对。我们后面使用 Mimikatz 来获取的明文密码便是通过该进程读取到的。
即若要让 Mimikatz 成功抓取密码被抓密码的用户必须在该机器中登陆过且明文密码被保存在了内存中。关机重启后内存就刷新了密码就消失了也就抓不到了
0x02NTLM Hash LM Hash 原理剖析
Windows 操作系统中的密码一般由两部分组成一部分为 LM Hash另一部分为 NTLM Hash。在 Windows 操作系统中Hash 的结构通常如下
username:RID:LM-HASH:NTLM-HASH LM Hash 简介 — DES 加密可逆 LM Hash 的全名为 “LAN Manager Hash”是微软为了提高 Windows 操作系统的安全性而采用的散列加密算法其本质是 DES 加密DES 加密是可逆的可被破解的。 由于 LM Hash 比较容易被破解微软又为了保证系统的兼容性所以从 Windows Vista 和 Windows Server 2008 开始LM Hash 默认是被禁用了开始使用 NTLM Hash。 LM Hash 明文密码被限定在 14 位以内即如果要停止使用 LM Hash将用户的密码设置为 14 位以上即可。如果 LM Hash 被禁用了攻击者通过工具抓取到的 LM Hash 通常为 “ad3b435b51404eead3b435b51404ee” 标示 LM Hash 为空值或者被禁用。 NTLM Hash 简介 — MD4 加密不可逆 NTLM Hash 是微软为了在提高安全性的同时保证兼容性而设计的散列加密算法。NTLM Hash 是基于 MD4 加密算法进行加密的。 个人版从 Windows Vista 以后服务器版从 Windows Server 2003 以后Windows 操作系统的认证方式均为 NTLM Hash。 为了解决 LM 加密和身份验证方案中固有的安全弱点Microsoft 于 1993 年在 Windows NT 3.1 中引入了 NTLM 协议下面是各个版本对 LM 和 NTLM 的支持 0x0201LM Hash 加密原理
这部分我们将以明文口令 Admin123 为例一步一步的演示 LM Hash 加密的流程以此加深大家对 LM Hash 加密的理解下面加密流程中字节之间是没有空格的笔者这样写只是方便大家看清而已。
第一步将明文口令转换为其大写形式 ADMIN123
第二步将大写的明文口令转换为十六进制字符串 41 44 4D 49 4E 40 31 32 33
字符串HEX转换hex转string,string转hex,hex转字符串,字符串转hexhttps://www.lddgo.net/string/hex
第三步密码不足 14 字节要求用 0 补全1Byte8bit上面十六进制字符串共 9 字节还差 5 字节我们需要用 00 补全最终结果为
41 44 4D 49 4E 40 31 32 33 00 00 00 00 00
第四步将上述编码每 7 个字节一组分成两组
第一组: 41 44 4D 49 4E 40 31
第二组: 32 33 00 00 00 00 00
第五步将每一组 7 个字节的十六进制转换为二进制
第一组: 41 44 4D 49 4E 40 31
转化过程:41 4 1 0100 000144 4 4 0100 01004D 4 D 0100 110149 4 9 0100 10014E 4 E 0100 111040 4 0 0100 000031 3 1 0011 0001
转化后: 0100 0001 0100 0100 0100 1101 0100 1001 0100 1110 0100 0000 0011 0001
第二组: 32 33 00 00 00 00 00
转化过程:32 3 2 0011 001033 3 3 0011 001100 0 0 0000 0000
转化后: 0011 0010 0011 0011 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
第六步每 7bit 一组末尾加零再转化成十六进制得到 2 组 8 字节的编码
第一组: 0100 0001 0100 0100 0100 1101 0100 1001 0100 1110 0100 0000 0011 0001
转换过程: 每 7 bit 一组末尾加零并转化为十六进制
0100 0000 40
1010 0010 A2
0001 0010 12
1010 1000 A8
1001 0100 94
0111 0010 72
0000 0000 00
0110 0010 62
转换后: 40 A2 12 A8 94 72 00 62
第二组: 0011 0010 0011 0011 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
转换过程: 每 7 bit 一组末尾加零并转化为十六进制
0011 0010 32
0001 1000 18
1100 0000 C0
0000 0000 00
0000 0000 00
0000 0000 00
0000 0000 00
0000 0000 00
转换后: 32 18 C0 00 00 00 00 00
第七步将前面步骤得到的两组 8 字节编码分别作为密钥对字符串 KGS!#$% 的十六进制值4B47532140232425进行 DES 加密 DES 加密工具DES加密工具.exe 被加密的明文: 4B47532140232425
第一组密钥: 40A212A894720062
第二组密钥: 3218C00000000000 第八步将两次 DES 加密的结果拼接在一起就是最终的 LM Hash值
6F08D7B306B1DAD4B75E0C8D76954A50
0x0202NTLM Hash 加密原理
这部分我们将以明文口令 Admin123 为例一步一步的演示 NTLM Hash 加密的流程以此加深大家对 NTLM Hash 加密的理解下面加密流程中字节之间是没有空格的笔者这样写只是方便大家看清而已。
第一步将明文口令转化为十六进制格式 41 64 6D 69 6E 40 31 32 33
第二步将转化的十六进制再转化为 Unicode 格式在每个字节后面补两个 0
原始: 41 64 6D 69 6E 40 31 32 33
转 Unicode 格式: 4100 6400 6D00 6900 6E00 4000 3100 3200 3300
最终值: 410064006D0069006E004000310032003300
第三步对 Unicode 字符串进行 MD4 加密生成 32 位的 NTLM Hash 值 HashCalc 工具获取HashCalc.exe 570a9a65db8fba761c1008a51d4c95ab 综上所属如果我们有一个用户账号信息为admin : Admin123那么其在 SAM 文件中的格式就长下面这样
admin:RID:6F08D7B306B1DAD4B75E0C8D76954A50:570a9a65db8fba761c1008a51d4c95ab
这里笔者简单介绍一下 RID
在 WIndows 操作系统中RIDRelative Identifier相对标识符是安全标识符SID的一部分用于唯一标识用户账户、组或其他安全主体。 SIDSecurity Identifier安全标识符 是一个唯一标识用户、组或计算机账户的数字。它由两部分组成域 SID 和 RID。 RIDRelative Identifier相对标识符 是 SID 中的一部分用于区分同一域内的不同对象。每次创建新账户或组时RID 会递增。
例如一个用户账户的 SID 可能是 S-1-5-21-1234567890-1234567890-1234567890-1000其中 1000 就是 RID。
常见的 RID 值有以下几个 500 本地管理员账户。 501 来宾账户。 1000 即以上 普通用户账户。