\r\n

1.  废话

\r\n

前段时间写了篇文章介绍MOTS攻击的原理及相关的攻击方式,当时只是了解其原理,没有通过程序具体实现。这段时间找时间学习了Python,抽了几天晚上时间用Python实现了UDP的攻击程序。对于TCP这块的攻击找时间再完善一下相关程序。

\r\n

对于MOTS攻击方式不了解的同学们可以翻翻我上篇文章,MOTS攻击技术分析》。底层原理是关键,程序实现只是侧面佐证。

\r\n

废话不多说,直接奔主题。大家都知道,UDP是没有面向连接的,不可靠的,因此对其攻击主要有两种方式:DOS攻击与UDP欺骗。

\r\n
\r\n

 

\r\n

2.  DOS攻击

\r\n

2.1 原理

\r\n

因为UDP是无连接的,同一个连接中的报文与前面或后面的报文都没有直接关系。因此对其DOS攻击不像TCP那样只需要发送一个reset包就可以干掉一个TCP连接那样简单,针对UDPDOS需要将每个报文都DOS掉,不然应用层的重传还是会使会话与交互的数据保持完整。因此针对UDPDOS攻击一般情况下都是针对UDP的轻量化应用进行攻击,如DNS这种小量交互的报文,而不是P2P这种大量报文交互的应用。

\r\n

DNS的交互相对较简单,DNS查询与响应。下图可见DNS的应用非常轻量化,一个DNS查询,一个DNS响应。简洁灵巧,轻量化。

\r\n

因此对其进行DOS非常简单,只需要监听网络中的DNS流量,有DNS查询时,直接返回一个ICMP\r\nPort unreachable报文即可,表示端口没有开放。若为TCP的应用,其端口没有开放时,一般回应一个reset报文。并且有一点一定要保证,就是ICMP port unreachable报文一定要比正常的DNS 响应报文早到客户端,这样才可以达到DOS的效果。

\r\n

\"点击查看原图\"

\r\n

 

\r\n

2.2 实现

\r\n

要实现对UDP应用的DOS,我们以DNS为例,需要按照以下几步实现:

\r\n

1、构造ICMP Port\r\nUnreachable报文

\r\n

2、监听网络中的DNS查询报文

\r\n

3、监听到DNS查询报文时,回应ICMP port unreachable报文

\r\n

2.2.1  安装scapy

\r\n

实现UDPDOS攻击是通过安装python的第三方库scapy库来实现的,python本身没有这个库,需要手工安装,具体安装方法大家根据自己的系统与python版本自行安装,本人测试是使用Win10 Pro+Python3.6python 3.6版本可以通过命令: pip3 install scapy-python3来安装。

\r\n
\r\n

 

\r\n

2.2.2  构造ICMP Port Unreachable报文

\r\n

ICMP Port\r\nUnreachable报文的具体格式如下,大家可以根据数据包结构来构造。

\r\n

\"点击查看原图\"

\r\n

具体构造时要安装scapy所支持的格式来构造,scapy库支持的icmp报文结构格式如下:

\r\n

\"点击查看原图\"

\r\n

2.2.3  监听并攻击

\r\n

攻击程序代码如下,大家可以根据实际情况修改:

\r\n

\r\n
#coding:utf-8\r\n\r\n\'\'\'\r\ndate:2017-07-05\r\nauthor:feiniao\r\nVersion:1.0\r\n\'\'\'\r\n\r\nfrom scapy.all import *\r\nimport random\r\n\r\n\'\'\'\r\n1、windows绑定本机网卡