一、原理
如何在不使用漏洞的情况下获得windows系统的shell?首先可以从身份认证协议下手。Responder就是这样一种利用身份认证协议,监听获取口令哈希的工具。
如果客户端/目标无法通过DNS域名解析,则会回退到LLMNR(在Windows Vista中引入)和NBT-NS进行解析。
LLMNR(链路本地多播名称解析):多播方式查找网络上的主机,其它主机响应IP,然后连接。
NetBIOS(NBT-NS网络名称服务):将主机的广播请求发送到本地子网,如果其它主机存在该名称,就响应。
LLMNR和NBT-NS是基于信任的,在合法的情况下,只有被请求的目标主机才会响应,但是hacker可以冒充被请求的主机对请求进行响应,对任何监听到的请求发送“我就是!”。
Windows主机之间进行通信时有多种认证方式,例如Kerberos、证书和NTLM等。针对NTLM协议,hacker主要通过获取NTLM Hash,进行冒充用户身份认证。
认证协议详细解析可参考:https://xz.aliyun.com/t/6600
Responder原理:
Responder工具可以污染LLMNR和NBT-NS请求,当网络上的机器尝试用LLMNR和NBT-NS去请求目的机器时,Responder会伪装成目的地机器。当受害机器尝试登陆hacker机器,responder就可以获取受害者机器用户的NTLMv2哈希值。
对标NTLM的认证过程,即是拿到第三步这个Response(也叫Net-NTLM hash,这种无法用来hash传递,需要工具分析出明文密码再利用)。
二、使用方法
1.启动监听
python Responder.py -I eth0 -wd
2.被测试机win10访问不存在的共享文件地址
3.Responder捕获到口令哈希
4.dump出口令哈希
ctrl+c停止运行responder,执行
./DumpHash.py
5.利用john分析口令明文
可以看到DumpHash生成了两个文件,DumpNTLMv1.txt和DumpNTLMv2.txt,根据NTLM协议版本选择相应的文件作为明文解析的输入。(图为xp系统的NTLMv1解析结果,红色字部分为明文的密码和用户名)
三、后续
获取了主机的明文用户名和口令之后,可以扫描开放端口,ssh接入和用Winexe建立远程会话、WMI运行系统信息和查询命令、WinRM启动shell并向目标传递脚本等,形成一次完整的测试。
以上后续内容待作者以后学习研究。
本文参考:
《灰帽黑客》第5版第10章
浅谈Windows身份认证及相关
【脉搏译文系列】Responder指南
不利用系统漏洞拿shell,kali强大工具Responder
【域】 多种方式配合Responder&NTLM中继