漏洞赏金侦察全攻略:从子域枚举到深度扫描的现代化工作流

3 阅读8分钟

漏洞赏金侦察全攻略:从子域枚举到深度扫描的现代化工作流

大家好,我是 Batuhan,在网络安全和区块链安全领域工作了 6 年。我曾在该领域的许多公司担任管理职位,创办过几家初创公司,并且多年来一直在空闲时间从事漏洞赏金工作。

这篇文章从何而来?

上周,我和一个想从事漏洞赏金的朋友聊天,他说他不知道从何入手,毫无头绪。他原话是:“我能识别漏洞,也能发现它们,但我真的对去哪里找、怎么找感到非常困惑。”据我观察,人们总是对这个话题感到非常困惑。每个人都理解侦察的重要性,但他们不知道使用哪些工具,或者遵循哪种方法。

老实说,这取决于你选择的目标。在检查一个 Web 应用时,我首先要看它使用了什么技术(编程语言、库、外部依赖等),然后据此制定一条路径。不过,我会提到一些经典的方法和技术,这些是我个人使用的,你也可以在创建自己的漏洞赏金方法论时使用。我写这篇文章的主要原因是,当我向一位朋友提到这些时,他的反应是:“我真的不知道如何正确使用这些工具。”

理解侦察

需要理解的最重要且最关键的一点是,侦察从根本上来讲就是一切。想象一个你看不见、摸不着、闻不到的敌人。与这样的敌人交战无异于自杀。从漏洞赏金的角度来看,侦察本质上也是同一回事。你越了解你的目标,识别出它的弱点,你就拥有越多的“弹药”,在经过一定努力后,你从这个目标获得赏金的机会就越大。如果你不相信我,去问问你认识的所有赏金猎人;他们大部分时间都在收集目标信息。请记住,我们对目标系统的视角越宽广,我们能扩展的攻击面就越大。今天,以我自己的项目 academy.cladious.com(一个区块链学院,而且是免费的)为例,我们将研究一个现代化的侦察工作流程,涵盖从被动扫描到主动扫描和深度分析的整个过程。

子域枚举:subfinder

这是我使用最多的子域枚举工具;请记住,这里有很多选择,但我使用 Subfinder 的主要原因是我们能非常快速地接入 API。

nano ~/.config/subfinder/provider-config.yaml

在这里,我们可能会遇到一点挑战:API_KEY 的收集过程。是的,我知道这很繁琐;你们都想像这样快速攻击,写报告,然后领赏金。但是,你需要学到的第一件事是,漏洞赏金工作是通过大量的试错来进行的,而你拥有的数据越丰富,就越有可能发现一些东西。我们怎么到这里?下面,如果你系统里安装了 Subfinder,你可以快速进入输入 providers API 密钥的区域。

nano ~/.config/subfinder/provider-config.yaml

如果你安装不了 subfinder(我怀疑我们有些人不知道如何配置 Go),我会在文章末尾展示如何做到这一点。如果你想的话,可以跳到那部分,然后我们再继续。

好的,我假设你已经搞定了。如果没成功,你可以在评论里向我求助。我会尽快回复你。好的,现在我们来看看输入了哪些参数。我假设你从 provider-config.yaml 里拿到了 API_KEY。你可能拿不到全部;你可以在这里核对,有多少 KEY 就意味着可能发现多少子域。现在让我们看看你需要在那该死的终端里输入什么。

subfinder -d cladious.com -all -o cladious_subdomains.txt

我认为你在研究目标域方面做得很好。结果就是,当你查看 <target>_subdomains.txt 文件时,你会看到 subfinder 快速识别出的子域。我的观察是,许多人运行这个命令,发现子域,然后逐个点击每个子域。你当然可以这样做,但这样做会让事情更多地依赖于运气。

置换与变异扫描:alterx, shuffledns

仅靠已知的子域是不够的。通过预测开发人员的命名习惯来识别隐藏的域名(staging, dev, test 等)非常有用。虽然你可能在这里一无所获,但有时你识别出的子域可能藏着巨大的“宝藏”。

我们获取现有的子域列表,并生成它们的可能变体(例如,api -> api-staging, dev -> dev01)。这样做的主要原因是,某些域名可能尚未注册 SSL 证书,或者已沦为被动资源。

现在,让我们使用 alterx 为我们识别出的子域创建新的子域预测。

nano ~/.config/alterx/permutation_v0.1.0.yaml

Alterx 正是凭借这个结构为我们精确生成这些预估的子域。如果我们有更好的估计,我们可以在这里进行更改,例如,写入新的模式或特定语言的 payload 和关键字,从而更有效地生成新的子域。

cat cladious_subdomains.txt | alterx -o alterx_domain_cladious.txt

现在,进入我最喜欢的部分,ShuffledNS。这里重要的是我们解析器的质量。你可以通过快速搜索在网上找到这些信息。但我会给你我通常使用的解析器。

wget https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt
wget https://raw.githubusercontent.com/projectdiscovery/public-bugbounty-programs/main/resolvers.txt

至于如何使用,你可以快速执行以下操作。

shuffledns -list cladious_subdomains.txt -r resolvers.txt -o shuffledns_cladious.txt

发现活跃 DNS:dnsx

现在我们可能有成千上万个域名,我们怎么知道哪些是真实的,哪些是虚假的?这就是 DNSX 发挥作用的地方。它的工作是检查我们拥有的域名,看看它们是否能解析到一个活跃的 IP 地址。

cat alterx_domain_cladious.txt | dnsx -o alive_domains.txt

端口扫描和服务检测:naabu

许多漏洞赏金猎人似乎真的害怕端口扫描。当我问我交谈过的那位朋友检查哪些端口时,得到的答案确实令人震惊。他根本不检查端口。虽然他的拒绝让我震惊,但当我问为什么时,他回答说:“我不想在我发现的每个子域上运行 nmap,我可不想等到早上。”朋友们,保持好奇心总是对你有益的。正是这样,我才发现了 Naabu。用 nmap 完成这项任务似乎太慢了,我没有说“我不做端口扫描了”,而是开始寻找替代方案,并发现了 Naabu。现在我已经解释过了,你可能已经猜到它的作用了:你给 Naabu 一个子域列表,它就会检查这些地址的端口。它会为你标记出开放的端口,然后说:“看,老兄,这个端口是开放的。”

cat alive_domains.txt | naabu -o cladious-ports.txt

Web 服务分析:httpx

你的终端开始“燃烧”了吗?希望你们已经在脑海中规划出一条清晰的路线了。如果你有任何疑问或卡在任何地方,欢迎在评论中写下来。我们继续;我们已经找到了开放的端口,现在是时候看看这些端口上运行着什么服务了。httpx 分析正在运行的 web 服务,为我们提供它们的标题、状态码以及更多信息。我甚至可以为这个工具单独写一篇文章。如果你想要这样——是的,我今天说了很多次了——你可以在评论里告诉我并关注我。

cat cladious-ports.txt | httpx -title -sc

这里我能给你的最好建议是,花点时间输入 httpx -h。相信我,你会看到效果的。

深度扫描和爬取:katana

在大多数情况下,仅仅查看主页不会让你有任何进展。我们需要找到深藏在应用中的 API 端点、JavaScript 文件和隐藏参数。这就是 Katana 的用武之地。如果你正在测试的系统(例如,academy.cladious.com)需要登录,你可以通过向 Katana 提供浏览器中的会话 cookie 信息(认证爬取)来绘制登录过程背后的页面地图。这将使攻击面增加 2-3 倍。

katana -u academy.cladious.com -jc -jsl

如何设置这些工具?

许多新手不了解如何导出 Golang(顺便说一句,你一定要学 Linux),即使他们用 Go 安装了这些工具,也会遇到“command not found”的错误。要解决这个问题,请确保你的电脑上已经安装了 Go。

go version
echo 'export PATH=$PATH:$HOME/go/bin' >> ~/.bashrc && source ~/.bashrc
echo 'export PATH=$PATH:$HOME/go/bin' >> ~/.zshrc && source ~/.zshrc

通过这种方式,根据你使用的是 ZSH 还是 Bash,不要忘记导出 go path。之后,你需要做的是:

go install -v github.com/projectdiscovery/pdtm/cmd/pdtm@latest
# 然后
pdtm -ia -igp

这个过程涉及到安装 PDTM。然后你可以通过 PDTM 安装我上面提到的所有工具。

这就是我目前要分享的全部内容。别忘了订阅 newsletter,在 Medium 上关注我并为我鼓掌,这样就不会错过下一篇文章。祝你好运,黑客! CSD0tFqvECLokhw9aBeRqgQR4arIMsNgGXsV4Z7vgMsE2q1DBOF8xBcpiYzjxlK3DbTpUcTJ6lC1BhP85o7U+nbODL0Hp98ZxvFivVOs+m8=