seedlab实验本地DNS 攻击
一、实验目标
1、学习使用DNS 工作原理
2、学会对DNS 的主要攻击类型,搭建DNS,伪造回复,DNS 缓存中毒,DNS 授权
攻击等
二、实验原理
DNS 是Internet 的电话簿;它将主机名转换为IP 地址,反之亦然。这种转
换是通过DNS 解析完成的,该解析发生在幕后。DNS Pharming 攻击以各种方式
操纵此解析过程,目的是将用户误导到通常是恶意的替代目标。本实验重点研究
几个DNS Pharming 攻击技术。学生将首先设置和配置DNS 服务器,然后他们还
将在实验室环境内的目标上尝试各种DNS Pharming 攻击。
三、实验步骤及运行结果
Task1、Configure the User Machine
首先需要配置用户机:
首先修改/etc/resolvconf/resolv.conf.d/head 文件,添加:
1 | nameserver 10.0.2.1 |
之后运行指令:
1 | sudo resolvconf -u |
使修改生效。
Task2.Set up a Local DNS Server
Step1:配置BIND9
首先在/etc/bind/named.conf.options 文件中的选项添加dump-file 条目:
发现已经添加。
上述选项制定了缓存内容应该转储到哪个文件。
Step2:关闭DNSSEC
DNSSEC 的作用是抵御对DNS 服务器的欺骗攻击,要想实现需要把该机制关掉。
注释掉dnssec-validation 条目,并增加dnssec-enable 条目。
Step3:开启DNS 服务器:
1 | sudo service bind9 restart |
Step4:使用DNS 服务器
在用户机ping www.baidu.com,发现此时显示:
通过wireshark 抓包可以看出会有10.0.2.1 即DNS 服务器向外部服务器发送的
报文:
此时已经使用10.0.2.1 为DNS 服务器了。
Task3: Host a Zone in the Local DNS Server
Step1:建立区域:
需要在DNS 服务器中创建两个区域,一个用来正向查找(主机-)IP),一个用来
反向查找(IP-)主机):所以在/etc/bind/named.conf 文件中添加:
Step2:配置正向查找区域文件
Step3:配置反向文件
在/etc/bind/192.168.0.db 文件中设置如下内容:
Step4:重启BIND 并测试
重启之后,在用户机输入:
dig www.example.com显示为:
可以看到,此时其对应的IP 为192.168.0.101,配置成功。
Task4:Modifying the Host File
假设我作为攻击者已经拿到了用户机的shell,那么就可以修改用户机的
/etc/hosts 文件,添加如下条目:
此时,使用ping 指令,就会发现:
目的IP 为1.2.3.4,修改成功,这样修改是高于NDS 查询的。
Task5:Directly Spoofing Response to User
但是实际上我并没有拿到用户机的shell,但是和用户机处于同一局域网中,所
以可以对其进行监听,当用户机发出DNS 询问时,对其进行DNS 伪造回复。
使用netwox 105 工具:
此时,令网站www.exam.com的查询结果为:5.6.7.8,查询该网站的域名服务器
为:ns.attacker32.com IP 为:101.102.103.104(当然是伪造的)
此时在用户机发出查询请求之后,攻击端伪造数据包如下:
此时用户机可以看到DNS 查询结果为:
伪造成功。
Task6: DNS Cache Poisoning Attack
上面的攻击方式每一次都要伪造一个数据包,很麻烦,可以采用DNS 缓存中毒来
进行攻击,那样在一段时间之内,都可以不用伪造。
此时攻击方伪造数据包为:
不发送ARP 的查询。
之后,在用户机dig www.exam.com之后,可以看到已被伪造:
此时查看server 端DNS 缓存:
发现缓存已经被更新。
此时,就算是不伪造数据包,也可以查询到伪造的IP:
攻击成功。
Task 7: DNS Cache Poisoning: Targeting the Authority Section
上面的方法只有一个域名的缓存,如果想要得到授权对一个域进行攻击的话,就需要配置一个合法的IP.
在这一步就需要使用scapy:
编写脚本如下:
此时使用dig 查询之后,得到被伪造的对应的IP,查看server 的DNS 缓存信息:
发现此时缓存中写入的就是一个域。
之后,使用dig 查询hhh.exam.com,
DNS 服务器不会进行迭代查询,而是直接返回缓存纪录,发现回送的报文中:
并没有回答,因为ns.attacker32.com 并不是我们能掌控的权威服务器。
Task 8: Targeting Another Domain
尝试为DNS 添加两条缓存域,效果如下:
编写脚本:
在进行dig 之后,发现server 中只留下了一条缓存域条目:
查看此时包中数据为:
发现留下的是发送包中的第一条。
Task 9: Targeting the Additional Section
为一个域设置多个查询条目,为那些查询条目分配对应的DNS IP,效果如下:
编写脚本:
发现server 中只留下了和权威服务器有关的IP,而www.facebook.com并没有被
留下来:
这是由于additional 中的记录只有与authority 中匹配,dns 缓存才会将其收入到dns 的缓存中.
- 本文作者: 李小混
- 本文链接: https://lixiaohun.github.io/post/6.html
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!