实验环境
同实验一,同样是三台机器,但是各个角色(DNS_server attacker client)的ip可能发生了变化
DNS简介
DNS服务是很常见的应用层协议,它的作用是帮助你根据域名信息得到它的IP地址(有了IP地址才能访问网站)
DNS域名系统的构造如下图
常见的DNS查询流程
注: 有时候Local DNS Server既可以是集成在你的电脑上,也可以是另一台机器(看你自己怎么设置了),通常情况下,充当这个角色的是8.8.8.8(google提供的免费的dns服务器ip地址)
比如有一个场景,你在你电脑(client)的命令行下进行了 ping www.example.net 的命令,这时候会发生什么?
①先向本地域名服务器(Local DNS server,LDNS)进行查询,如果LDNS缓存了www.example.net的ip地址,会将ip地址返回给client。结束流程;如果没有缓存目标网址的ip地址的话,进入第二步
②本地域名服务器采用迭代查询。它先向一个根域名服务器查询 。 ③根域名服务器告诉本地域名服务器下一次该查询的顶级域名服务器的IP地址。
④本地域名服务器向顶级域名服务器进行查询。
⑤顶级域名服务器告诉本地域名服务器下一次应查询的权限域名服务器的IP地址。
⑥本地域名服务器向权限域名服务器进行查询。
⑦权限域名服务器告诉本地域名服务器所查询的主机的IP地址。
⑧本地域名服务器最后把查询结果告诉client。
DNS攻击
根据DNS服务的流程找寻攻击方式
有三个攻击点
-
如果你是攻击者(attacker)你通过某种途径(渗透,社工 etc)拿到了user machine的shell,又通过提权方式拿到了user machine的root 权限,那么这时候你可以直接更改user machine的默认的LDNS,直接改成你的电脑的IP,你为它提供DNS解析服务,这时候你想让它访问哪它就得访问哪(比如user想访问www.baidu.com,你返回的ip地址实际上指向了www.yellow.com)
-
用户在向LDNS进行查询时,我们嗅探到DNS查询包时,可以抢先一步,伪造LDNS发送一个假的响应包。(假的相应包一定要比真的相应包先一步到达user machine才有效)
-
用户在向LDNS进行查询,LDNS向其身后的DNS域名系统进行查询时,跟方法2类似,我们要比NDS域名系统早一步返回假的响应包,让LDNS成功接受并缓存。
有人可能会问为什么没有在DNS域名系统内的DNS欺骗服务。因为DNS域名系统是构建在注册域名上的。(比如根域名服务器(缓存了每个顶级域名服务器的域名信息和ip地址),它返回的信息已经实现缓存好了,只后不会自动更改,顶级域名服务器和权威域名服务器也是类似的,他们是不会发出DNS查询的,也就不会更新缓存信息)能更新他们的是DNS域名系统运营商提供的注册ip地址的服务。
实验
实验主要就是重现一下三个攻击点
其实这个实验大概是seed项目抄过来的,有兴趣的小伙伴直接去seed项目里找相关实验就行了。
说实话这个实验太麻烦了(一是配置环境很麻烦(主要是配置local dns),很容易出错,二是有些实验的成功率挺低的,排错挺麻烦的,有时候你不知道没成功 是 因为你设置出了问题,还是设置没问题就是单纯运气不好,还有一些很隐晦的小问题)
这里就不详细展开了,哈哈。