背景介绍
首先要明白什么是攻击性扫描行为,在漏洞‘狩猎’过程中,研究人员或白帽通常会使用到自动化工具和扫描器,但是扫描的频次和线程需要保持在目标厂商要求的限定范围内,任何超出这些限制的行为都可能被定义为"攻击性/入侵性扫描行为"。
比如国外众测平台Intigriti的一些公共项目就会特意标注扫描的请求频次:
这些公共项目序允许进行自动化扫描,但前提是必须每秒发送2—10个请求(RPS),假如此时我们需要启动gobster来扫描网站目录,那么我们会看到扫描速度要远比5 RPS快得多,那就意味着我们破坏了目标网站的条款要求。
有些工具会默认显示这些统计信息,或者通过添加一些额外的参数显示这些信息,如果没有,你也可以使用一些技术来测量出RPS,比如:
- 尝试对自己的Web服务器进行测试,查看收到了多少RPS
- 通过代理工具查看
- 通过网络流量查看(例如Wireshark)
- 通过耗时,手动计算RPS
比如通过耗时来手动计算gobuster的RPS:
head -n 1000 /usr/share/wordlists/dirb/common.txt > words.txt
time gobuster dir -u https://LAB-ID.web-security-academy.net/ -w words.txt
可以看到最终执行时间为 20 秒,表明 gobuster 发送了约 50 RPS,明显超过了一些目标网站的扫描要求。再比如ffuf工具:
ffuf -c -ic -request new.req -request-proto https -w /usr/share/seclists/Passwords/probable-v2-top1575.txt -fr "Invalid"
ffuf 我们进行计算并在执行过程中显示 RPS,整个扫描过程在 23 秒内完成,平均速度为 60 RPS——这更加严重违反了目标网站的扫描要求!接下来让我们看看如何来避免这种行为。
如何避免
通用工具
不同的工具有不同的参数来限制 RPS,强烈建议使用之前查看工具的使用文档,了解“rate limit(速率限制)”和“throttle(限制)”等参数的选项,一种快速且通用的方法是使用 grep,比如:
tool_name -h | grep -i "\(rate\|limit\|throttle\|delay\)"
如果上面这条命令没有任何有效的结果,可以添加一些其它关键字,比如如“time”、“sec”或“request”等,或者直接查看完整的帮助命令输出,因为很多工具提供的微调配置选项通常会在“advanced(高级)”菜单中。接下来我们来看几款比较常用的扫描工具设置:
ffuf
ffuf -h | grep -i "\(rate\|limit\|throttle\|delay\)"
可以看到默认速率为 0(无限制),我们可以使用 -rate 选项调整“每秒请求速率”,因此值如果设置为 5 会将工具限制为 5 RPS。
gobuster
gobuster -h | grep -i "\(rate\|limit\|throttle\|delay\)"
gobuster与ffuf差异比较大,ffuf使用的参数是 –delay 而不是 -rate,并且必须指定每个请求之间等待的时间,而不是提供表示 RPS 数量的值,因此或许用户可以输入 200ms 或 0.2s 的值来达到 5 RPS 的限制,真的如此吗?
实际情况并不是,如果我们来测量 RPS,会发现RPS大大超出了限制,如果我们查看帮助,会发现一个默认值为 10 的线程参数,换句话说,每次运行 gobuster 时,就会有 10 个并发线程来执行任务,我们之前配置的 0.2 秒的延迟,是基于每个线程的,而不是整体的,因此要修改配置,就需要增加延迟或减少线程,通过两者组合,从而降低GPS。
sqlmap
sqlmap -h | grep -i "\(rate\|limit\|throttle\|delay\)"
上面的命令中会发现没有产生任何有用的结果,通过查看帮助菜单会发现 sqlmap 提供了可以通过 -hh 参数来访问高级帮助菜单的选项。
通过高级帮助菜单可以发现,我们可以使用 –delay 参数指定以秒为单位的延迟(类似于 gobuster),为了将该工具限制为 5 RPS,我们同样可以设置为 0.2 秒延迟,当然前提同样是线程方面不存在和gobuster同样的问题,通过仔细查看sqlmap的帮助菜单,可以确认sqlmap的默认线程数为 1。
Burp Suite
鼎鼎大名的Burp Suite怎能轻易忘记,Burp的好处在于允许用户为每个任务配置相应的资源池,这样就能够根据目标网站要求或优先级来限制不同的任务。
Burp 可以配置请求之间的延迟和并发请求(线程)的数量。
总结
希望通过本文能说明负责任的白帽测试在漏洞悬赏中的重要性,并让你了解攻击性/入侵性扫描对目标站点的负面影响,进行自动化测试或扫描时要尽量‘温柔’,某些目标网站可能不允许任何类型的自动化测试,作为白帽应遵守这些规则,因为违反这些规则可能会导致目标站点的服务质量下降,严重的话甚至可能会导致宕机,当然,最好不要在‘狩猎’过程中给自己平添不必要的麻烦才是最重要的,你说是吧?