Windows 认证
Windows 认证方式主要有两种:NTLM 认证、kerberos 认证。同时,Windows Access Token 记录着用户的SID、组ID、Session、及权限等信息,也起到了权限认证的作用。
其中 NTLM 认证主要有本地认证和网络认证两种方式。
本地认证
NTLM
NTLM Hash 是支持 Net NTLM 认证协议及本地认证过程中的一个重要参与物,其长度为 32 位,由数字与字母组成。 Windows 本身不存储用户的明文密码,它会将用户的明文密码经过加密算法后存储在 SAM 数据库中。 当用户登录时,将用户输入的明文密码也加密成 NTLM Hash,与 SAM 数据库中的 NTLM Hash 进行比较。NTLM Hash 的前身是 LM Hash,目前基本淘汰,但是还是存在。
SAM 文件一般在%SystemRoot%\system32\config\sam
:
NTLM hash 的产生:
admin -> hex(16进制编码) = 61646d696e
61646d696e -> Unicode = 610064006d0069006e00
610064006d0069006e00 -> MD4 = 209c6174da490caeb422f3fa5a7ae634
流程
- Windows Logon Process,即 winlogon.exe, 是 Windows NT 用户登陆程序,用于管理用户登录和退出。
- LSASS 是微软 Windows 系统的安全机制。用于本地安全和登录策略。
winlogon.exe -> 接收用户输入的账密 -> lsass.exe -> 转换NTLM hash 并与 SAM 文件中的进行对比 -> 相同则将user SID 和 group SID 发给 winlogon.exe,准备桌面,登录成功
网络认证
内网渗透中,经常遇到工作组环境,而工作组环境是一个逻辑上的网络环境(工作区),隶属于工作组的机器之间无法互相建立一个完美的信任机制,只能点对点,是比较落后的认证方式,没有信托机构。
网络认证则是基于一种 Challenge/Response 认证机制(NTLM 协议)的认证模式。例如 SMB 文件共享。
流程
- 协商:主要用于确认双方协议版本、加密等级等。
- 质询
- 客户端向服务器端发送用户信息(用户名)。
- 服务器收到请求,生成 16 位随机数,称之为"Challenge",随后使用登录用户名对应的 NTLM hash 加密 Challenge,得到 Challenge1。将 Challenge 发送给客户端。
- 客户端得到 Challenge 后,使用登录账户的 NTLM hash 加密 Challenge 得到 Response,随后将Response 发送给服务端。
- 验证:服务端校验收到的 Response 是否与 Chanllenge1 相等,相等则认证通过。
NTLM v1 和 v2 区别
-
NTLM v1 的 Challenge 有
8
位,NTLM v2 的 Challenge 为16
位 -
NTLM v1 的主要加密算法是
DES
,NTLM v2 的主要加密算法是HMAC-MD5
(实际实现下,可能使用更好的算法)。
Windows Access Token
简介
Windows Token,也叫Access Token(访问令牌),它是一个描述进程或者线程安全上下文的一个对象。不同的用户登录计算机后,都会生成一个Access Token,这个 Token 在用户创建进程或者线程时会被使用,并不断拷贝,这也就解释了A用户创建一个进程而该进程没有B用户的权限。
种类
- Delegation token(授权令牌):用于交互会话登录(例如本地用户直接登录、远程桌面登录)
- Impersonation token(模拟令牌):用于非交互登录(利用net use访问共享文件夹)
一般情况下,用户双击运行一个程序,都会拷贝“explorer.exe”的 Access Token。
当用户注销,系统将会使主令牌切换为模拟令牌,不会将令牌清除,只有在重启机器后才会清除。
Access Token 的组成:
- 用户帐户的安全标识符(SID)
- 用户所属的组的SID
- 用于标识当前登录会话的登录SID
- 用户或用户组所拥有的权限列表
- 所有者SID
- 主要组的SID
- 访问控制列表
- 访问令牌的来源
- 令牌是主要令牌还是模拟令牌
- 限制SID的可选列表
- 目前的模拟等级
- 其他统计数据
产生
每个进程创建时都会根据登录会话权限由 LSA(Local Security Authority)分配一个 Token,如果CreaetProcess时自己指定了 Token, LSA 会使用该 Token, 否则就使用父进程 Token 的一份拷贝。
令牌假冒
本质就是利用:用户注销后,系统将会使主令牌切换为模拟令牌,不会将令牌清除。
- Cobalt Strike
steal_token
- MSF
meterpreter > getsystem
meterpreter > load incognito
meterpreter > list_tokens –u
meterpreter > impersonate_token "PAYLOADS\\Administrator”