【内网攻击】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

相关文章

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

Linux查询服务器 IP 地址的命令详解

《Linux查询服务器IP地址的命令详解》在服务器管理和网络运维中,快速准确地获取服务器的IP地址是一项基本但至关重要的技能,下面我们来看看Linux中查询服务器IP的相关命令使用吧... 目录一、hostname 命令:简单高效的 IP 查询工具命令详解实际应用技巧注意事项二、ip 命令:新一代网络配置全

一文带你迅速搞懂路由器/交换机/光猫三者概念区别

《一文带你迅速搞懂路由器/交换机/光猫三者概念区别》讨论网络设备时,常提及路由器、交换机及光猫等词汇,日常生活、工作中,这些设备至关重要,居家上网、企业内部沟通乃至互联网冲浪皆无法脱离其影响力,本文将... 当谈论网络设备时,我们常常会听到路由器、交换机和光猫这几个名词。它们是构建现代网络基础设施的关键组成

Java对接MQTT协议的完整实现示例代码

《Java对接MQTT协议的完整实现示例代码》MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛,:本文主要介绍Ja... 目录前言前置依赖1. MQTT配置类代码解析1.1 MQTT客户端工厂1.2 MQTT消息订阅适配器1.

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

MySQL 事务的概念及ACID属性和使用详解

《MySQL事务的概念及ACID属性和使用详解》MySQL通过多线程实现存储工作,因此在并发访问场景中,事务确保了数据操作的一致性和可靠性,下面通过本文给大家介绍MySQL事务的概念及ACID属性和... 目录一、什么是事务二、事务的属性及使用2.1 事务的 ACID 属性2.2 为什么存在事务2.3 事务