【内网攻击】DHCP协议概念——地址池耗尽攻击

2023-10-15 07:36

本文主要是介绍【内网攻击】DHCP协议概念——地址池耗尽攻击,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前言

DHCP 服务概念

1)客户端发送DHCP Discovery广播包

2)服务器响应DHCP Offer广播包

3)客户机发送DHCP Request广播包

4)服务器发送DHCP ACK广播包

部署DHCP服务器

dhcp地址池消耗攻击

攻击防御


前言

现在思考我们的主机IP是如何得到的?[新手向]

如下图 不使用静态配置的方式,改成自动获的IP地址的方式。我们会获取一个动态的临时IP地址!

这期间发生了什么?

本次我会介绍dhcp的基本概念,且从抓包的形式上从流量上来理解dhcp服务端和客户端的通信细节。为了显示dhcp服务攻击,我将采用win2008来部署dhcp服务器,最后用通信流量分析攻击的细节。

DHCP 服务概念

dhcp即可以说是一个协议也可以说是一个服务,他的主要目的就是帮助主机获取一个IP。我们可以自己抓一下包看一看dhcp做了做了那些事情,下图就是DHCP的工作流程。

 

DHCP原理

也是DHCP租约过程,分为4个步骤:

1)客户端发送DHCP Discovery广播包

可以看到此刻的客户端(没有ip故)用0.0.0.0作为源地址,由于也不知道dhcp服务的地址及mac地址,故发送广播报文,目的ip为255.255.255.255目的mac地址为ff:ff:ff..。发送“discover”试图寻找dhcp找可用IP。

2)服务器响应DHCP Offer广播包

服务器收到dhcp discovery 包后响应Offer包。此包的源mac为自己,目的mac为客户端主机(之前发送discovery 服务器记录了mac)。根据ip地址此刻服务器已经当主机为分配的ip地址218.133了,当客户端收到这个包后正常来说会检查目的mac,目的ip是否为自己,如果不是自己则会丢弃。但此刻情况不同!自己还没有ip加之这是一个dhcp的offer包,因此处理逻辑自然也不会相同。这也是一个单播地址。

看看offer包的数据

根据上图服务端向客户端提供了一个IP地址,还有这个ip的使用期限(30)分钟。子网掩码也有。

当时间50%过后,会牵扯到续约的问题。如果客户端不续约服务端会回收这个ip地址。

这个时候,客户端已经知道了服务端的mac和IP地址,因此在接下来的通信中客户端即可以向服务端发单播也可以发广播。但考虑到有多个dhcp的offer情况下,发广播的方式是合理的,并且大部分的主流设备也是这样的做的。

3)客户机发送DHCP Request广播包

这个Request为一个广播包,向服务端218.254 请求IP 218.133这个地址。

4)服务器发送DHCP ACK广播包

再次确定了租期时间和子网掩码。此刻dhcp的工作流程全部完成,客户端获取218.133地址,服务端地址池的ip会减一。

从流程上,用不常规思想想一想,如果我们改变自己mac地址,短时间内反复向服务器租借地址,直到服务器可提供的ip耗尽,至此正常的用户还能获得ip地址吗!

部署DHCP服务器

为了复现本次dhcp地址池消耗的攻击,本次我采windows2008r2服务器搭建dhcp服务,用kali进行攻击。

注意:添加之前请确保自己的windows服务器有一个静态ip,并且之后分配的ip处于这个网段。

本次计划:内网网段为192.168.100.1/24 DHCP服务器ip为192.168.100.253 。欲192.168.100.254 为网关地址

1.服务器添加新角色

2.选择DHCP 服务器一直点下一步

3.新建作用域;本次我在地址池设置了100个ip地址用来测试。

4.本次测试不涉及dhcpv6 ,选禁用,下一步。

5.安装完成

6.服务测试

在打开新的虚拟机置为同一个网络下,测试dhcp自动获取是否能够成功。(可以打开抓包软件,在学习下dhcp协议的流程)

win7已经过了ip,查看服务器地址池。

服务器这边地址租用果然也有了记录。

dhcp地址池消耗攻击

本次我们用kali 提供一款用具dhcpig

如果你的kali没有,那就安装一下

┌──(kali㉿kali)-[~] └─$ sudo dhcpig -h option -? not recognized

enhanced DHCP exhaustion attack.

Doc: GitHub - kamorin/DHCPig: DHCP exhaustion script written in python using scapy network library

Usage: pig.py [-h -v -6 -1 -s -f -t -a -i -o -l -x -y -z -g -r -n -c ] <interface>

Options: -h, --help <-- you are here :) -v, --verbosity ... 0 ... no (3) 1 ... minimal 10 ... default 99 ... debug

-6, --ipv6                     ... DHCPv6 (off, DHCPv4 by default)
-1, --v6-rapid-commit          ... enable RapidCommit (2way ip assignment instead of 4way) (off)
​
-s, --client-src               ... a list of client macs 00:11:22:33:44:55,00:11:22:33:44:56 (Default: <random>)
-O, --request-options          ... option-codes to request e.g. 21,22,23 or 12,14-19,23 (Default: 0-80)
​
-f, --fuzz                     ... randomly fuzz packets (off)
​
-t, --threads                  ... number of sending threads (1)
​
-a, --show-arp                 ... detect/print arp who_has (off)
-i, --show-icmp                ... detect/print icmps requests (off)
-o, --show-options             ... print lease infos (off)
-l, --show-lease-confirm       ... detect/print dhcp replies (off)
​
-g, --neighbors-attack-garp    ... knock off network segment using gratious arps (off)
-r, --neighbors-attack-release ... release all neighbor ips (off)
-n, --neighbors-scan-arp       ... arp neighbor scan (off)
​
-x, --timeout-threads          ... thread spawn timer (0.4)
-y, --timeout-dos              ... DOS timeout (8) (wait time to mass grat.arp)
-z, --timeout-dhcprequest      ... dhcp request timeout (2)
​
-c, --color                    ... enable color output (off)

sudo dhcpig eth1 -r -c

  • -c 彩色输出信息。

  • -r 释放全部已经分配的IP地址。

此刻kali会不断向dhcp服务端请求ip地址

此时的流量情况,(和此前分析的略有不同,服务端回的offer包是一个广播 不是单播,这也可见不同厂商有着不同的见解,不过这不影响dhcp的工作通信),有不断的dhcp请求。

也可以看出这款工具的默认设置的源Mac地址是以dead开头的

在回头看看windows服务器这边的情况

地址租用已经是满了。

此后再开网卡,试试能不能获取ip

可以看到我新开的主机一直请求dhcp discover,但是一直没有响应

攻击防御

1)攻击DHCP服务器:频繁的发送伪装DHCP请求,直到将DHCP地址池资源耗尽

防御:在交换机(管理型)的端口上做动态MAC地址绑定

2)伪装DHCP服务器攻击:hack通过将自己部署为DHCP服务器,为客户机提供非法ip地址

防御:在交换机上(管理型),除合法的DHCP服务器所在接口外,全部设置为禁止发送dhcp offer包

这篇关于【内网攻击】DHCP协议概念——地址池耗尽攻击的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/216287

相关文章

web网络安全之跨站脚本攻击(XSS)详解

《web网络安全之跨站脚本攻击(XSS)详解》:本文主要介绍web网络安全之跨站脚本攻击(XSS)的相关资料,跨站脚本攻击XSS是一种常见的Web安全漏洞,攻击者通过注入恶意脚本诱使用户执行,可能... 目录前言XSS 的类型1. 存储型 XSS(Stored XSS)示例:危害:2. 反射型 XSS(Re

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu

使用Java实现获取客户端IP地址

《使用Java实现获取客户端IP地址》这篇文章主要为大家详细介绍了如何使用Java实现获取客户端IP地址,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 首先是获取 IP,直接上代码import org.springframework.web.context.request.Requ

Linux环境变量&&进程地址空间详解

《Linux环境变量&&进程地址空间详解》本文介绍了Linux环境变量、命令行参数、进程地址空间以及Linux内核进程调度队列的相关知识,环境变量是系统运行环境的参数,命令行参数用于传递给程序的参数,... 目录一、初步认识环境变量1.1常见的环境变量1.2环境变量的基本概念二、命令行参数2.1通过命令编程

C++实现获取本机MAC地址与IP地址

《C++实现获取本机MAC地址与IP地址》这篇文章主要为大家详细介绍了C++实现获取本机MAC地址与IP地址的两种方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 实际工作中,项目上常常需要获取本机的IP地址和MAC地址,在此使用两种方案获取1.MFC中获取IP和MAC地址获取

C/C++通过IP获取局域网网卡MAC地址

《C/C++通过IP获取局域网网卡MAC地址》这篇文章主要为大家详细介绍了C++如何通过Win32API函数SendARP从IP地址获取局域网内网卡的MAC地址,感兴趣的小伙伴可以跟随小编一起学习一下... C/C++通过IP获取局域网网卡MAC地址通过win32 SendARP获取MAC地址代码#i

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/