用Python演示ARP攻击的过程及应对办法

我们经常在电影中看到黑客能够轻松获取到别人的账号密码信息,那么现实中真的这么容易吗?今天我来带大家了解一下黑客是如何获取到别人的账号和密码信息的。

 用<a href='/tag/python.html'>Python</a>演示ARP攻击的过程及应对办法

在网路中获取别人的账号密码其实不难,最简单的就是数据监听或钓鱼,那么如何进行网络数据监听呢?arp欺骗可以实现,他能进行dns欺骗和网络钓鱼的基础,通过arp欺骗我们成为了中间人,对别人电脑的通讯数据截取和伪造修改,下面我们来详细讲解一下arp欺骗。

▊ 什么是ARP欺骗

这是一种技术,攻击者可以通过该技术将欺骗性的ARP数据包(虚假数据包)发送到网络(或特定主机)上,从而使攻击者能够即时拦截,更改或修改网络流量。

一旦您(作为攻击者)成为中间人,您就可以截取或更改传入或传出受害者设备的所有网络数据报文内容。因此,在本教程中,我们将编写一个Python脚本来做到这一点。

在常规网络中,所有设备均正常地与网关通信,然后再与Internet通信,如下图所示:

 用<a href='/tag/python.html'>Python</a>演示ARP攻击的过程及应对办法

现在,攻击者需要将ARP响应发送到两个主机:

向网关发送ARP响应,说“我有受害者的IP地址”。

向受害者发送ARP响应,说“我有网关的IP地址”。

 用<a href='/tag/python.html'>Python</a>演示ARP攻击的过程及应对办法

一旦攻击者如上图所示执行ARP Spoof攻击,他/她将处于中间人的情况:

 用<a href='/tag/python.html'>Python</a>演示ARP攻击的过程及应对办法
一旦受害者发送了任何数据包(例如HTTP请求),它将首先传递到攻击者的计算机,然后将数据包转发到网关,因此您可能会注意到,受害者对此一无所知,换句话说,他/她将无法弄清楚自己正在受到攻击。

▊ 实战演示

好了,理论说完了!在开始之前,您需要安装所需的库:

pip3 install scapy
如果您使用的是Windows,请查看本教程以使Scapy在您的计算机上正常工作。此外,您需要安装pywin32,如下所示:
pip3 install pywin32
编写Python脚本

首先,我们需要导入必要的模块:

from scapy.all import Ether, ARP, srp, send
import argparse
import time
import os
import sys

首先,我需要提到我们需要启用IP路由(即IP转发)。

在多种平台上启用IP路由的方法有很多,但是,我在这里制作了一个python模块,供您在Windows中启用IP路由。

对于类Unix用户(本教程建议的平台),您所需要做的就是编辑文件“ / proc / sys / net / ipv4 / ip_forward” ,该文件需要root用户访问权,并将值1表示已启用,或者使用以下python代码:
def _enable_linux_iproute():
    """
    Enables IP route ( IP Forward ) in linux-based distro
    """
    file_path = "/proc/sys/net/ipv4/ip_forward"
    with open(file_path) as f:
        if f.read() == 1:
            # already enabled
            return
    with open(file_path, "w") as f:
        print(1, file=f)


对于Windows用户,复制 services.py到当前目录后,代码如下:
def _enable_windows_iproute():
    """
    Enables IP route (IP Forwarding) in Windows
    """
    from services import WService
    # enable Remote Access service
    service = WService("RemoteAccess")
    service.start()

好了,我们把以上代码合起来,这样兼容windows和类Unix系统的所有平台:
def enable_ip_route(verbose=True):
    """
    Enables IP forwarding
    """
    if verbose:
        print("[!] Enabling IP Routing...")
    _enable_windows_iproute() if "nt" in os.name else _enable_linux_ip...

点击查看剩余70%

{{collectdata}}

网友评论0