0x00:前言
DHCP(Dynamic Host Configuration Protocol),动态主机配置协议,是一个局域网的网络协议,使用UDP协议工作,常用的2个端口:67(DHCP server),68(DHCP client)。DHCP通常被用于局域网环境,主要作用是集中的管理、分配IP地址,使client动态的获得IP地址、Gateway地址、DNS服务器地址和域名等信息,并能够提升地址的使用率。简单来说,DHCP就是一个不需要账号密码登录的、自动给内网机器分配IP地址等信息的协议。
0x01:地址分配方式
(1)手动分配:一般用在固定主机,管理员手动分配IP地址,一般不会再改变
(2)动态分配:注意每次登录的地址都不一样,随机,每次使用完后,DHCP客户端就得释放这个IP地址,以给其他客户端使用
(3)自动分配:自动分配是当DHCP客户端第一次成功地从DHCP服务器端分配到一个IP地址之后,就永远使用这个地址。IP地址于MAC地址绑定,只要交换机不重启,绑定关系不变。IP地址和MAC绑定,可一定程度上防止DHCP欺骗。
注:如果局域网中有两台相同IP地址的主机,那么先上线的那个可以上网,原因:基于ARP缓存表,先上线的更新了网关的ARP映射表。经常断网
0x02:流程
(1)DHCP Discover
DHCP Discover,客户端广播请求IP地址
计算机发现本机上没有任何IP地址设定,将以广播方式发送DHCP discover发现信息来寻找DHCP服务器,即向255.255.255.255发送特定的广播信息。
源地址:0.0.0.0
目标地址:255.255.255.255 (目标是广播地址)
源MAC:主机的物理地址
目的MAC:ff:ff:ff:ff:ff:ff:ff
(2)DHCP Offer
服务器的DHCP响应
源地址:192.168.1.1
目的:255.255.255.255 (广播地址,因为主机还没有地址)
源MAC:服务器的物理地址
目的MAC:ff:ff:ff:ff:ff:ff:ff
报文内容:分配的IP、网关、DNS服务器和域名、租约时间和续约时间(续约:当时间在50%客户端会request服务器 进行续约,如服务器没有回应,则在租期87.5%时间再次request)
注:再次之前,服务器可能会,用ICMP ECHO REQUEST 报文进行检查该IP地址是否被占用
(3)DHCP Request
客户端以广播的方式回答一个DHCP request请求信息,该信息包含向它所选定的DHCP服务器请求IP地址的内容。
源地址:0.0.0.0
目的地址:255.255.255.255
(4)DHCP ACK
当DHCP服务器收到DHCP客户端回答的DHCP request请求信息之后,便向DHCP客户端发送一个包含它所提供的IP地址和其他设置的DHCP ack确认信息,告诉DHCP客户端可以使用它提供的IP地址。然后,DHCP客户机便将其TCP/IP协议与网卡绑定,另外,除了DHCP客户机选中的DHCP服务器外,其他的DHCP服务器将收回曾经提供的IP地址。
源地址:192.168.1.1
目的地址:255.255.255.255
注:以上全部是广播方式,后面续约是单播方式
0x03:Cisco 路由器配置DHCP
Router>en
Router#config t
Router(config)#ip dhcp pool aaa (创建地址池)
Router(dhcp-config)#network 192.168.1.0 255.255.255.0 (地址池范围)
Router(dhcp-config)#default-router 192.168.1.1 (默认网关)
Router(dhcp-config)#dns-server 192.168.1.2 (dns-server服务)
Router(dhcp-config)#int fa 0/0
Router(config-if)#ip address 192.168.1.1 255.255.255.0 (路由端口IP)
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#ip dhcp excluded-address 192.168.1.200 192.168.1.253 (表示某一段IP地址不由DHCP分配)
Router(config)#ip dhcp excluded-address 192.168.1.254 (表示某一个IP地址不由DHCP分配)
PC:
0x04:DHCP欺骗
DHCP欺骗(DHCP Sproofing)
DHCP Sproofing同样是一种中间人攻击方式。DHCP是提供IP地址分配的服务。当局域网中的计算机设置为自动获取IP,就会在启动后发送广播包请求IP地址。DHCP服务器(如路由器)会分配一个IP地址给计算机。在分配的时候,会提供DNS服务器地址。
攻击者可以通过伪造大量的IP请求包,而消耗掉现有DHCP服务器的IP资源。当有计算机请求IP的时候,DHCP服务器就无法分配IP。这时,攻击者可以伪造一个DHCP服务器给计算机分配IP,并指定一个虚假的DNS服务器地址。这时,当用户访问网站的时候,就被虚假DNS服务器引导到错误的网站。
DHCP Sproofing成功的前提是有计算机请求IP。如果计算机使用静态IP,或者在攻击前就获取IP,就不会遭受这类攻击。
Kali Linux很多工具都提供支持DHCP Sproofing,如Ettercap。
攻击命令式:
[root@localhost dhcpstarv-0.2.1]# dhcpstarv -i eth0
后面的eth0是你的网卡接口,一般第一个网卡是eth0
开始不断申请IP地址
DHCP欺骗的解决方案(DHCP SNOOPING)
DHCP SNOOPING截获交换机端口的DHCP应答报文,建立-张包含有用户MAC地址、IP地址、 租用期、VLAN ID、交换机端口等信息的一张表,组DHCP SNOOPING还将交换机的端口分为可信任端口和不可信任端口,当交换机从一个不可信任端口收到DHCP服务器的报文时,比如DHCPOFFER报文、DHCPACK报文、DHCPNAK报文,交换机会直接将该报文弃;对信任端口收到的DHCP服务器的报文,交换机不会丢弃而直接转发。一般将与用户相连的端口定义为不可信任端口,而将与DHCP服务器或者其他交换机相连的端口定义河信任端口,也就是说,当在一个不可信任端口连接有DHCP服务器的话,该服务器发出的报文将不能通过交换机的端口。因此只要将用户端口设置为不可信任端口,就可以有效地防止非授权用户私自设置DHCP服务而引起的DHCP欺骗。
IP地址冲突
在同一个局域网中,如果两台计算机同时使用了相同的IP地址,或者其中一台计算机已经通过DHCP获得IP地址了,同时其他计算机手动分配了与此相同的IP地址。其中一台计算机无法正常上网。IP地址冲突也是ARP攻击的一部分,这种攻击可以在局域网中产生大量的ARP通信,造成局域网闭塞。黑客只要不断地发出伪造的ARP响应数据,就能更改目标计算机ARP缓存中的IP/MAC地址信息,造成目标计算机不断显示IP地址冲突,无法正常上网。