测试环境: Windows、MAC、Linux 以及 Linux 的 Windows 子系统(WSL)
通过成为赞助人来支持本项目。快来看看这些了不起的赞助商:
Oxylabs 提供优质代理,覆盖 195 个国家的 1 亿多个 IP,并提供即用型 Scraper API。你可以使用专属优惠码 boost35 享受 Residential、Mobile 代理、Web Unblocker 和 Scraper API 的 35% 折扣。
通过发送请求或从本地响应文件(如果有)中爬取响应,发现隐藏的端点。
创建在源码中找到的 JavaScript 变量列表
从网站中提取所有社交媒体链接,以识别可能失效的链接
使用字典对主机进行暴力破解。
获取 URL 列表的状态码 / 从主机列表中过滤出存活域名。
以上所有功能执行速度都非常快。
SourceWolf 使用 requests 库的 Session 模块,这意味着它会重用 TCP 连接,因此速度非常快。
SourceWolf 提供选项让你本地爬取响应文件,这样就无需向已拥有响应副本的端点再次发送请求。
最终端点是以完整形式呈现的,包含主机,如 https://example.com/api/admin,而不是 /api/admin。这在扫描主机列表时非常有用。
> python3 sourcewolf.py -h
-l LIST, --list LIST JavaScript URL 列表
-u URL, --url URL 单个 URL
-t THREADS, --threads THREADS
使用的并发线程数(默认 5)
-o OUTPUT_DIR, --output directory-name OUTPUT_DIR
将 URL 响应文本存储到目录中以便进一步分析
-s STATUS_CODE_FILE, --store-status-code STATUS_CODE_FILE
将状态码存储到文件中
-b BRUTE, --brute BRUTE
使用 FUZZ 关键字暴力破解 URL(必须同时使用 --wordlist)
-w WORDLIST, --wordlist WORDLIST
用于暴力破解 URL 的字典
-v, --verbose 详细模式(显示所有正在发送的请求)
-c CRAWL_OUTPUT, --crawl-output CRAWL_OUTPUT
存储爬取结果的输出目录
-d DELAY, --delay DELAY
请求延迟(秒)
--timeout TIMEOUT 等待连接超时的最长时间(秒)
--headers HEADERS 添加自定义头(必须以 {'Token': 'YOUR-TOKEN-HERE'} 格式传入)--> 字典格式
--cookies COOKIES 添加 Cookie(必须以 {'Cookie': 'YOUR-COOKIE-HERE'} 格式传入)--> 字典格式
--only-success 只打印 2XX 响应
--local LOCAL 包含本地响应文件的目录,用于爬取
--no-colors 移除输出中的颜色
--update-info 检查最新版本,并在需要时更新
完整用法:
python3 sourcewolf.py -l domains -o output/ -c crawl_output
domains 是需要爬取的 URL 列表,格式如下:
https://example.com/
https://exisiting.example.com/
https://exisiting.example.com/dashboard
https://example.com/hitme
output/ 是存储输入文件响应文本文件的目录。
这些文件按 output/2XX、output/3XX、output/4XX 和 output/5XX 的格式存储。
output/2XX 存储 2XX 状态码的响应,以此类推!
crawl_output 通过 -c 参数指定,用于存储 SourceWolf 爬取存储在 output/ 目录中的 HTTP 响应文件后产生的输出(目前仅包含端点)。
crawl_output/ 目录包含:
endpoints - 所有找到的端点
jsvars - 所有 JavaScript 变量
随着更多模块和功能集成到 SourceWolf 中,该目录将包含更多文件。
(或)
对于单个 URL:
python3 sourcewolf.py -u example.com/api/endpoint -o output/ -c crawl_output
只是将 -l 标志替换为 -u,其他一切保持不变。
python3 sourcewolf.py -b https://hackerone.com/FUZZ -w /path/to/wordlist -s status
-w 标志是可选的。如果未指定,将使用包含 6124 个单词的默认字典。
SourceWolf 将 -b 值中的 FUZZ 关键字替换为字典中的单词,并发送请求。这也可以用于暴力破解 GET 参数的值。
-s 将输出存储到一个名为 status 的文件中。
未包含截图,因为输出看起来与“爬取响应”模式类似。
python3 sourcewolf -l domains -s live
domains 文件可以包含子域名、端点、JS 文件等内容。
-s 标志将响应写入 live 文件。
默认情况下,暴力破解和探测模式会打印除 404 之外的所有状态码。你可以通过使用
--only-success标志来自定义此行为,仅打印2XX响应。
SourceWolf 还使用了多线程。
所有模式的默认线程数为 5。你可以使用 -t 标志增加线程数。
除了上述三种模式,还有一个本地爬取的选项,前提是你已本地拥有这些文件,并且遵循SourceWolf 兼容的命名规范。
将所有响应存储到一个目录中,比如 responses/。
python3 sourcewolf.py --local responses/
这将爬取本地目录,并给出结果。
子域名枚举
|
|
SourceWolf
|
|
过滤出存活子域名
|
|
存储响应并发现隐藏端点 / 目录暴力破解
此时,你将拥有目标的许多端点,这些端点在扫描时从网页中实时提取。
SourceWolf 的核心目的是以更广阔的视野爬取响应,不仅用于发现隐藏端点,还用于自动化所有通常通过手动搜索响应文件来完成的任务。
一个例子是在源码中手动搜索任何泄露的密钥。
这个核心目的解释了文件以模块化方式编写的原因。
可以直接在终端中更新 SourceWolf,无需再次克隆仓库。
SourceWolf 每次运行时都会检查更新,并在有可用更新时通知用户,同时提供更新摘要。
运行
python3 sourcewolf.py --update-info
会提供更新的更多详细信息。
当有可用更新时,你必须将 update.py 文件移动到 SourceWolf 目录之外,然后运行
警告:这会删除 SourceWolf 目录内的所有文件和文件夹。
python3 update.py /path/to/SourceWolf
这实际上会删除该目录,然后重新克隆仓库。
目前,SourceWolf 仅支持从源码中发现隐藏端点,但你可以期待未来集成其他功能。
你可以在哪些方面做出贡献?
主要需要贡献的是将更多模块集成到 SourceWolf 中,当然,即使是修正拼写错误也欢迎提交 PR。
在发送拉取请求之前,请确保你使用的是最新版本。
> 如果你要添加新功能,请先创建一个 Issue 来确认是否需要该功能!不要浪费时间编写不需要的新功能。
请随时提交你遇到的任何问题。
提交问题时,请确保包含你的操作系统、运行过的命令,以及可能的截图,这将帮助我更轻松地重现问题。
你也可以通过提交 Issue 来请求新功能或增强现有功能。
要本地爬取文件,你必须遵循一些命名规范。这些规范是为了让 SourceWolf 能够直接识别主机名,从而解析所有端点,包括相对端点。
考虑一个 URL https://example.com/api/
example.com/apiexample.com@api所以最终的文件看起来像 [email protected]。
Logo 由 Murugan artworks 设计
SourceWolf 使用 MIT 许可证