发布于2022年11月8日3年前 0x00 前言 之前的文章《Windows下的密码hash——NTLM hash和Net-NTLM hash介绍》、《渗透技巧——利用netsh抓取连接文件服务器的NTLMv2 Hash》、《渗透技巧——利用图标文件获取连接文件服务器的NTLMv2 Hash》已经介绍了通过SMB协议获取登录用户的Net-NTLM hash的方法。这种方法的前提是,当客户端通过接口通过SMB协议连接到服务器时,默认使用本地计算机的用户名和密码哈希来尝试登录。 对于HTTP协议,也支持NTLM认证。那么,当前登录用户的Net-NTLM hash可以通过HTTP协议获取吗?有什么限制?怎么防守?本文将一一介绍。 0x01 简介 本文将介绍以下内容: HTTP协议上的NTLM简介 找出利用的前提 具体怎么用? 防御思维 0x02 NTLM Over HTTP Protocol简介 官方文件: https://msdn.microsoft.com/en-us/library/cc237488.aspx 参考资料: https://www.innovation.ch/personal/ronald/ntlm.html 使用HTTP协议的NTLM认证过程: 向客户端服务器发送获取请求,请求获取网页内容。 因为服务器已经打开了NTLM身份验证,所以它返回401,表示需要NTLM身份验证。 客户端启动NTLM身份验证,并向服务器发送协商消息。 服务器收到消息后,会生成一个16位的随机数(这个随机数称为Challenge),并以明文形式发送回客户端。 收到质询后,客户端使用输入的密码哈希对质询进行加密,生成响应,并将响应发送给服务器 服务器从客户端接收加密的响应,在相同的操作之后,比较结果。如果匹配,则提供后续服务,否则认证失败。 直观的流程图,如下所示 注: 图片取自https://www.innovation.ch/personal/ronald/ntlm.html.具体消息格式请见链接中的介绍。 实际测试 服务器: 操作系统:服务器2012 R2 IP: 192.168.62.136 安装IIS服务 客户: 操作系统:Win7 x86 IP: 192.168.62.134 1、服务器开启NTLM认证 进入IIS管理页面,如下图所示 选择验证。 关闭其他身份验证,仅打开Windows身份验证。 添加提供商:NTLM 配置如下所示 2、服务器运行Wireshark,进行抓包 选择仅HTTP。 3、客户端访问服务器 弹出框提示输入用户名和密码,如下图所示 服务器此时捕获的HTTP数据包如下 相应的过程1和2 4、客户端输入正确的用户名密码 服务器此时捕获的HTTP数据包如下 相应的流程3-6 5、使用Hashcat对该Net-NTLM hash进行破解 NTLMv2的格式是: 用户名:域:挑战:HMAC-MD5:blob 通过数据包获取挑战,如下图所示 通过数据包获得用户名,域名,HMAC-MD5和blob。 如下图 拼接格式,用hash破解。 请参考: 055-79000的0x03部分 0x03 利用分析 经过上面的测试,可以看出HTTP协议和SMB协议类似,那么在利用率上是否相同呢? 我们知道,使用SMB协议通过接口操作连接服务器时,默认使用本机的用户名和密码哈希来尝试登录,而刚才测试并没有发现HTTP协议也有这个功能。 也就是说,只要用户没有输入正确的密码,服务器就无法获得正确的Net-NTLM哈希,也无法进一步利用它。 此外,Responder和Inveigh的HTTP认证拦截功能还提到,可以在以下地址获取用户的hash: https://github.com/SpiderLabs/Responder#features https://github.com/Kevin-Robertson/Inveigh 这个功能怎么用?我能得到什么样的杂烩?你能得到客户端当前登录用户的哈希吗? 我在IE浏览器的配置里找到了答案。 打开IE浏览器,找到以下位置: 工具-互联网选项-安全-自定义级别-用户验证 如下图 默认情况下,用户身份验证的登录方法是仅在intranet区域中自动登录。 所以我们接下来需要做两个测试。 测试一 将登录方法更改为使用当前用户名和密码自动登录。 重启IE浏览器,再次测试。 客户端通过IE访问服务器,弹出登录验证框。此时,检查服务器的数据包捕获。 如下图 发现客户端自动使用本机的用户名和密码哈希先尝试登录,然后我们可以通过进一步破解来恢复用户密码,这和使用SMB的思路是一致的。 测试二 换成域环境,剩下的都一样。 客户端也将首先尝试使用该机器的用户名和密码哈希登录。 至此,我们已经找到了资格,通过HTTP协议获取当前登录用户的Net-NTLM哈希适用于以下两种情况: 客户端用户身份验证的登录方式是使用当前用户名和密码自动登录。 认证用户的登录模式默认不变,客户端和服务器需要在同一个Intranet区域。 同样,这也是Responder和Inveigh支持HTTP协议用户哈希获取的前提。 0x04 具体利用方法 1.在Intranet区域中使用Responder和Inveigh 如果在工作组环境中无法获得当前登录用户的网络NTLM散列,则可以在域环境中使用它。 2.已获得客户端授权,并且已修改用户身份验证方法。 对应于注册表中的项1a 00 HKEY _当前_用户\软件\微软\ windows \当前版本\ Internet设置\区域\ 3 0表示使用当前用户名和密码自动登录。 10000表示用户名和密码提示。 20000表示仅在内网区域自动登录,默认值为 3000表示匿名登录。 如果客户端用户验证的登录方式更改为使用当前用户名和密码自动登录,客户端在访问任何需要登录验证的网站时,将首先尝试使用本机的用户名和密码哈希进行登录。 0x05 防御 结合思路,这里提出辩护建议: 应禁止将用户身份验证方法设置为使用当前用户名和密码自动登录,并禁止将相应的注册表键值更改为0。 查询如下所示: REG QUERY 'HKEY当前用户\软件\ Microsoft \ Windows \当前版本\Internet设置\区域\3' /v 1A00 否则,客户端当前登录用户的密码可能被破解。 0x06 小结 介绍了通过HTTP协议获取客户端当前登录用户的Net-NTLM哈希的方法,并找出了限制条件(在Intranet区域下或者用户认证方式修改为使用当前用户名和密码自动登录)。该限制也适用于Responder和Inveigh的HTTP身份验证拦截功能。最后给出防御建议:应禁止将用户认证方式设置为使用当前用户名和密码自动登录。 留下回复
创建帐户或登录后发表意见