在本文中,我想介绍如何在短时间内有效地检查数千个端点是否存在潜在的跨站点脚本漏洞。所提出的技术可以完全自动化(尽管我确实建议进行一些手动数据过滤以节省服务器资源)。该蓝图可用于增强您现有的 Bug Bounty 自动化设置。我将使用Axiom工具来帮助将 XSS 搜索提升到一个新的水平。
如果您对 Axiom 工具不是很熟悉,我强烈建议您关注之前的部分,因为它对主要功能有更深入的描述。
获取目标子域
要首先找到反射型 XSS,您需要做适当的功课。可以使用各种错误赏金工具(如amass、subfinder等)来收集子域名。许多教程已经解释了如何构建大量子域名,因此我不会在本文中对其进行扩展。我在本文中介绍了如何在 axiom 的帮助下做到这一点。
另外,我确实建议选择一个具有很多顶级域的大范围程序。具有大量攻击面和旧基础设施的公司存在跨站脚本漏洞的可能性更高。错误赏金游戏旨在计算潜在漏洞可能出现的位置。
对于这个特定的示例,我将使用Chaos来收集example.com的子域。您需要配置必要的 API 密钥才能使用它。
chaos -silent -d example.com | tee hostnames.txt
现在让我们检查哪些主机还活着。我将使用 Axiom 来加速这个过程。首先,我们需要启动一些实例:
axiom-fleet xss-hunt -i 8
接下来,我建议稍微编辑一下位于~/.axiom/modules/的httpx.json模块,以扫描更多端口并提供一些额外信息,例如状态代码和响应标题:
现在让我们对选定的主机运行 axiom-scan 命令:
axiom-scan hostnames.txt -m httpx | tee alive.txt
过滤子域
是时候进行一些手动工作以节省一些宝贵的云资源了。收集存活主机后的第一个任务是过滤它们。有几种方法可以做到这一点,每个 bug 猎人都有自己的方法。带有一些状态代码和标题正则表达式过滤的多个grep命令会起到一定的作用。许多猎人都有某些黑名单词来过滤子域。对于这个特定的示例,我想过滤每一行中的blog、api单词,并仅选择具有200状态代码的子域:
cat alive.txt | grep -vE "blog|api" | grep 200 | awk '{print $1}' > alive_selected.txt
收集端点
可以通过多种方式收集所选主机的端点,具体取决于您要选择的工具。我建议结合多种工具并将结果合并到一个巨大的列表中。此时您使用的工具越多,针对目标的攻击面就越大。在这篇文章中,我将展示两种可用于此目的的方法。
方法#1:主机抓取
有多种用于此目的的独特工具,例如katana或paramspider。在本教程中,我将使用武士刀,因为它不需要特殊设置。据我检查最新的 axiom 版本,paramspider未在默认配置程序上正确安装。您需要在其中一个实例上手动安装它并为其创建快照。无论如何,如果您决定简单地使用项目发现的katana进行主机爬行,我建议将此命令与 axiom 一起使用:
axiom-scan alive_selected.txt -m katana -duc -silent -nc -jc -kf -fx -xhr -ef woff,css,png,svg,jpg,woff2,jpeg,gif,svg | tee -a katana.txt
方法#2:网络存档数据
收集网络存档端点也有助于形成端点列表。有多种工具可用于此目的,例如waybackrobots、waybackurls、gau、gauplus等。对于此设置,我将使用gau,因为它是当时最先进的。为了释放其全部潜力,我想修改位于~/.axiom/modules/的gau.json axiom 模块:
我添加了一些线程来加速该过程,包括子域收集和将不必要的扩展列入黑名单。对于扫描,由于我们将使用 –subs标志,我建议使用 apex 子域单词列表,如下例所示:
最后,您可以使用 gau 模块执行 axiom 扫描:
axiom-scan targets-wildcards.txt -m gau | tee -a gau.txt
准备收集的端点以进行 XSS 检查
收集的列表将包含大量需要处理的数据。您最不希望将收集到的端点传递到下一个工具而不进行任何过滤。首先,我建议仅选择那些已经具有参数并对唯一端点进行排序的 URL。为此,我喜欢使用 Tomnomnom 的另一个工具 – qsreplace:
cat gau.txt katana.txt | grep -aiE '^http' | grep -aiE '?' | qsreplace FUZZ > fuzzable_urls.txt
扫描跨站脚本漏洞
一旦您有了可用的模糊端点列表,您就可以开始进行一些 XSS 搜索了。我喜欢为此使用freq工具,它也可以使用 axiom 进行缩放。它尚未作为 axiom 模块包含在内,因此您可能需要自己将其添加为模块。我已经在这篇文章中介绍了如何实现它。最后,您准备使用 axiom 实例进行一些 XSS 模糊测试:
cat filtered_fuzzable_urls.txt | qsreplace "';a=prompt,a()//" > fuzz.tmp && axiom-scan fuzz.tmp -m freq | grep -v 'Not'
正如您所看到的,我已将其用作';a=prompt,a()//
本例的有效负载,因为它确实具有绕过某些 WAF 的功能。
最后的话
如果您仔细遵循本指南,您就可以开始大规模寻找 XSS。请记住,您应该在这种方法中添加自己的见解,这样您才能从人群中脱颖而出。我认为这只能让您了解如何实现大规模狩猎。
如果您喜欢这个故事,请按下拍手按钮 50 次,并在下面的评论中添加您自己的见解。您也可以订阅,不错过任何此类故事。我在Twitter上很活跃,查看我每天发布的一些内容!如果您对视频内容感兴趣,请查看我的YouTube。另外,如果您想亲自联系我,您可以访问我的Discord服务器。干杯!
暂无评论内容