前言
大家好!最近学习内网,对于认证的过程感到迷茫,于是找到倾旋师傅的博客进行学习。这篇文章是在对认证有了解后根据自己的需求增减,补充并完善而成。希望对大家入门内网有所帮助。
本地认证的基础知识
NTLM Hash加密的方式(即NTLM Hash的由来)
NTLM协议是什么?答:因为早期SMB协议与LM(LAN Manager Challenge/Response验证机制)很容易就被破解;于是微软提出了WindowsNT挑战/响应验证机制,简称为NTLM。在Windows中,密码Hash目前称之为NTLM Hash;其中NTLM全称是:"NT LAN Manager"
NTLM加密解析
1.首先明文转换为16进制ASCII码 2.后将其再转换为Unicode格式(0x80之前的标准ASCII码转换成Unicode码,就是简单地从0x??变成 0×00??。此类标准ASCII串按little-endian序转换成Unicode串,就是简单地在原有每个字节之后添加 0×00) 3.最后对所获取的 Unicode串进行标准MD4单向哈希,无论数据源有多少字节,MD4固定产生128-bit的哈希值 4.admin -> hex(16进制编码) = 61646d696e 61646d696e -> Unicode = 610064006d0069006e00 610064006d0069006e00 -> MD4 = 209c6174da490caeb422f3fa5a7ae634
HTLM加密解析本地认证过程
本地认证流程路线:winlogon.exe -> 接收用户输入 -> lsass.exe -> (认证)首先,用户在经历注销;重启.....时,操作系统会让winlogon显示登录界面,也就是密码账号的输入框,操作系统接收输入后,将密码交给lsass进程后。lass进程中会存一份明文密码,将明文密码加密成NTLM Hash,对SAM数据库比较认证。
补充:
1. Windows Logon Process(即 winlogon.exe),是Windows NT 用户登 陆程序,用于管理用户登录和退出
2. lsass.exe用于微软Windows系统的安全机制;它用于本地安全和登陆策略(mimikatz的原理就是依靠这个程序获得Hash值)
3. 本地认证的过程,其实就是将用户输入的密码转换成为NTLM Hash后与SAM中的NTLM Hash进行比较
加密的存储
在本地登录Windows的时候,计算机操作系统中的密码存储在哪里呢?答:%SystemRoot%\system32\config\sam
SAM是什么?答:可以理解为是一个数据库;它的地址为(C:\Windows\system32\config\SAM),这个SAM
文件中保存了计算机本地所有用户的凭证信息,当我们登录系统的时候,系统会自动地读取SAM文件中的”密码”与我们输入的“密码”进行比对,如果相同,证明认证成功!
补充:Windows本身不保存明文密码,只保留密码的Hash(但是在无KB2871997补丁或win10或winsever2012R2以下(eg:较老的XP版本)的情况下可能会存在明文密码)
网络认证(工作组)
工作组
在内网渗透中,经常遇到工作组环境,而工作组环境是一个逻辑 上的网络环境(工作区),隶属于工作组的机器之间无法互相建 立一个完美的信任机制,只能点对点,是比较落后的认证方式, 没有信托机构;假设A主机与B主机属于同一个工作组环境,A想访问B主机上的资料,需要将一个存在于B主机上的账户凭证发送至B主机,经过认证才能够访问B主机上的资源。这是我们接触比较多的SMB共享文件的案例,SMB的默认端口是445(可能存在永恒之蓝;永恒之黑....漏洞)
NTLM协议
但是 SMB协议 和 LAN Manager Challenge/Response 验证机制 (简称LM;但是他并没有退休,还在XP与sever 03中继续工作)很容易受到攻击被破解,所以现在才又有了NTLM以及Kerberos。因此NTLM认证协议是,它与NTLM Hash的关系就是:NTLM网络认证协议是以NTLM Hash作为根本凭证进行认证的协议。也就是说,NTLM与NTLM Hash相互对应。(这个协议只支持Windows)
NTLM V2协议(进阶)
NTLM v1与NTLM v2最显著的区别就是Challenge与加密算法(一个是DES另一个是MD5加密)不相同 ,共同点就是加密的原料都是NTLM Hash;我们可以使用Responder等工具获取到的就是Net-NTLM,Het-Hash可能通过暴力破解来获取明文密码因为从Windows 2000开始,在Windows中算法为默认为NT哈希,所以可以通过BruteForce/Dictionary攻击将其还原成明文密码,也可以用于中继攻击
Chalenge/Response(挑战回应认证)
HTLM协议认证的主要步骤:
协商:主要用于确认双方协议版本(这个产生的原因是windows存在向下兼容)
质询:就是挑战(Chalenge)/响应(Response)认证机制起作用的原理(我们可以看成《计算机网络》中的三次握手,只不过他们发送的是加密的消息)
验证:验证主要是在质询完成后,验证结果,是认证的最后一步
Chalenge/Response流程:
1.客户端向服务器发出认证请求; 2.认证服务器从用户数据库中查询用户是否是合法的用户,若不是,则不做进一步的处理; 3.认证服务器内部产生一个随机数,作为Challenge,发送给用户; 4.客户将口令和随机数合并,使用单向Hash函数 ( 例如MD5算法 ) 生成一个字节串作为Response; 5.认证服务器将Response与自己的计算结果比较,如两者相同,则通过一次认证,反之认证失败; 6.认证服务器通知客户端认证成功或失败
下面我就拿倾旋大佬的图来举列子(好吧我承认是我懒):
Pass The Hash攻击
Pass The Hash(利用)
什么是哈希传递?答:哈希传递是能够在不需要账户明文密码的情况下完成认证的一个技术;所以在内网渗透中,我们经常会需要抓取管理员的密码、NTLM Hash,通过搜集这些信息有助于我们在域环境下进行提权与横向移动利用哈希传递的原因?答:其中重要的是windows使用系统API(LsaLogonUser)生成hash进行认证,而不是用明文,所以利用hash即可模拟用户登录进行操作。(还可以死确认的是密码小于7位可以一眼判断出来,并且如果密码长度大于15则不存在LM Hash)
利用Pass The Hash攻击(必要)条件
Pass The Hash攻击(必要)条件如下:要完成一个NTLM认证,第一步需要客户端将自己要参与认证的 用户名发送至服务器端,等待服务器端给出的Challenge⋯⋯其实哈希传递就是使用用户名对应的NTLM Hash将服务器给出的 Chanllenge加密,生成一个Response,来完成认证。(Pass The Hash能够完成一个不需要输入密码的NTLM协议认证流程,针对内网渗透,有不错的效果)