文章总结: 本文介绍通过深度挖掘JavaScript文件进行侦察的方法,以发现API密钥及隐藏端点。作者建议使用subjs、Katana等工具抓取实时JS,并利用gau和waybackurls从历史存档中回收旧文件。文章提供了完整的收集与去重分析命令流程,强调分析JS文件能有效提升漏洞挖掘效率。 综合评分: 90 文章分类: 红队,SRC活动,WEB安全,安全工具,渗透测试
0119.侦察方法:JavaScript 文件查找
原创
Marduk I Am Marduk I Am
Rsec
2026年1月19日 10:44 贵州
本文章仅用网络安全研究学习,请勿使用相关技术进行违法犯罪活动。
声明:本文搬运自互联网,如你是原作者,请联系我们!
类型:侦察方法
大家好,欢迎回来!
我最近和另一位漏洞赏金猎人聊了聊他们的漏洞挖掘方法。我问他们对于新目标的基本流程是否和我一样:找到子域名,尽可能多地收集这些子域名的 URL,然后检查这些端点是否存在漏洞。
他们的回答是?不,完全不是。
他们的方法主要是分析 JS 文件并手动浏览网站。手动点击浏览网站我能理解,我用 Burp 也这么做。但是花几个小时分析 JavaScript 文件,听起来肯定会让我头疼。
然而,那次谈话让我意识到了一件事。我自己的 JavaScript 文件搜寻能力实在太弱了。我以前只是在寻找端点时顺便抓取了一些 JS 文件,并没有主动去寻找它们。当然,我抓取了不少,但也遗漏了无数未被发现的 JS 文件。
从那以后,我为我的流程添加了一些新技术,这极大地增加了我找到的 JS 文件的数量。这一点很重要,因为这些文件可能包含大量信息,例如 API 密钥和令牌、硬编码的凭据、内部端点和隐藏的 API 路由。
如果您读过我之前的文章 《侦察方法:子域名枚举》 ,可以直接从那里开始。如果您使用自己的方法,则需要完整的子域名列表和正在使用的子域名列表。
《侦察方法:子域名枚举》
Marduk I Am,公众号:Rsec0118.侦察方法:子域枚举
第一步:从实时子域名中获取 JS 代码
首先,让我们从实际运行的子域名中提取尽可能多的 JS 文件。我们会使用几种不同的工具,因为每种工具都有可能发现其他工具遗漏的内容。
subjs
一款快速、轻量级的工具,可直接从您提供的 URL 的 HTML 页面源代码中抓取 JavaScript 引用。
cat subdomains_alive.txt | subjs | sort -u > live_subjs_js.txt
getJS
与 subjs 类似,但有时在获取 JS 文件 URL 方面会更积极一些。
cat subdomains_alive.txt | getJS | sort -u > live_getjs_js.txt
Katana
我使用 Katana,并启用 JavaScript 爬取标志( -jc ),并将深度( -d )设置为 2。深度 2 表示:
- 深度 1:从你提供的 URL 开始
- 深度 2:点击这些页面上的链接一次。
katana -list subdomains_alive.txt -d 2 -jc -silent | grep -E '\.js([?#].*)?$' | sort -u > live_katana_js.txt
您可以根据需要调整深度。对于单个域名,我可能会设置到 5 层。但是,对于大型子域名列表,5 层深度所需的时间可能比您预期的要长得多。
#
Linkfinder
这是一个 Python 工具,它通过解析 HTML 和 JavaScript 代码来扫描网页,查找其中的 JavaScript 文件和接口。它非常适合发现其他工具可能遗漏的隐藏 API 路由或 JS 引用。
- 注意——LinkFinder 一次只能处理一个 URL(例如单个域名或页面)。它本身并不接受子域名或 URL 列表,因此,要跨多个子域名运行,通常需要将其封装在脚本中。
接下来,我们将针对主目标域运行它,以了解它的工作原理:
linkfinder -i https://www.example.com -d -o cli | sort -u | tee linkfinder_raw.txt
原始输出包含完整的 URL 和不完整的端点。要清理它:
# Extract only URLs for our target domaingrep -Eo 'https?://[^ )"]+example\.com[^ )"]*' linkfinder_raw.txt | sort -u > linkfinder_urls.txt
# Filter URLs that point to JS filesgrep -E '\.js([?#].*)?$' linkfinder_urls.txt | sort -u > live_linkfinder_js.txt
这样,您就可以获得通过 LinkFinder 发现的 JavaScript 文件列表,可以将其与其他实时主机 JS 源合并。
步骤二:从已存档的 URL 中获取 JS 代码
在线JS 文件固然好,但有时真正的宝藏却藏在旧文件中。这些文件在当前网站上没有任何链接,但仍然保存在诸如互联网档案馆(Wayback Machine)和 CommonCrawl 之类的存档中。
这些文件可能已经过时,但这反而对我们有利。旧代码通常包含硬编码的密钥、API 密钥或内部接口,这些密钥、接口或接口被遗忘而不是被删除。
我们可以使用和以前一样的 JS 查找工具,但这次我们将把它们与从历史资源中提取信息的 URL 收集工具结合起来使用。
GetAllURLs (gau)
这会从 Wayback Machine、CommonCrawl 和 URLScan 等来源抓取 URL。--subs 标志确保我们也抓取子域名的 URL。
- 注意——从存档中提取内容时,请使用目标域的所有子域列表,而不仅仅是“有效”的子域。
gau --subs < subdomains.txt | grep -E '\.js([?#].*)?$' | sort -u > archive_gau_js.txt
Waybackurls
来自伟大的 Tomnomnom 的更简单、更专用的 Wayback Machine URL 获取器。
waybackurls < subdomains.txt | grep -E '\.js([?#].*)?$' | sort -u > archive_wayback_js.txt
在已存档的 URL 上运行 subjs 和 getjs
#
有了这些历史 URL 之后,我们就可以像处理实时 URL 一样,对它们运行 subjs 或 getjs 命令。这是一种很好的方法,可以捕获那些仅在旧页面中链接过的 JS 引用。
cat archive_gau_js.txt archive_wayback_js.txt | subjs | sort -u > archive_subjs_js.txtcat archive_gau_js.txt archive_wayback_js.txt | getJS | sort -u > archive_getjs_js.txt
- 注意——并非所有已存档的 JS 文件都可以访问(有些可能会返回 404 或 403),但即使没有 200 响应,如果您找到已存档的快照 URL,有时也可以直接从 archive.org 下载。
步骤 3:合并和清理 JS 文件
现在我们已经有了几个包含找到的 JS 文件的文件。让我们把它们整理成一个完整的列表。
我们不想单独分析每个文件,也不想让重复的文件到处流传,所以让我们把所有文件合并成一个干净的列表。
sort -u live_*js.txt archive_*js.txt > all_js_files.txt
现在,您的所有 JS 文件都已合并到一个文件中,可以进行更深入的检查了。
可选:按域名或关键词筛选
有时,您可能只想查找特定目标域的 JS 文件,尤其是在多个目标上运行此工作流程时。您可以按如下方式进行筛选:
grep -E '\.example\.com' all_js_files.txt > all_js_example.txt
可选:下载 JS 文件以进行离线分析
下载所有 JS 文件后,您就可以在不依赖在线服务器的情况下进行静态分析。这稍微复杂一些,但仍然很简单。
- 创建文件夹:
创建一个文件夹用于存放所有 JS 文件。
# -p ensures it won't error if the folder already existsmkdir -p js_files
2.将文件下载到您的文件夹中,文件名需经过哈希处理。
我们将存储两样东西:
- 每个 JS 文件都有一个哈希文件名(避免多个文件共享相同名称时发生覆盖,例如 app.js)。
- 一个映射文件,以便您可以将每个哈希值追溯到其原始 URL。
# Clear the hash_map.txt> js_files/hash_map.txt
# One containing hashed filenames, and another containing the hash-to-URL mapping.while read -r url; do hash=$(echo "$url" | md5sum | cut -d' ' -f1) echo "$hash $url" >> js_files/hash_map.txt curl -skLf --compressed "$url" -o "js_files/${hash}.js"done < all_js_files.txt
现在,如果你在某个文件(例如 d41d8cd98f.js )中发现有趣的内容,你可以快速追溯到它:
grep d41d8cd98f js_files/hash_map.txt
总结
# 1. JS from live hostscat subdomains_alive.txt | subjs | sort -u > live_subjs_js.txtcat subdomains_alive.txt | getJS | sort -u > live_getjs_js.txtkatana -list subdomains_alive.txt -d 2 -jc -silent | grep -E '\.js([?#].*)?$' | sort -u > live_katana_js.txt
linkfinder -i https://www.example.com -d -o cli | sort -u | tee linkfinder_raw.txtgrep -Eo 'https?://[^ )"]+example\.com[^ )"]*' linkfinder_raw.txt | sort -u > linkfinder_urls.txtgrep -E '\.js([?#].*)?$' linkfinder_urls.txt | sort -u > live_linkfinder_js.txt
# 2. JS from archived URLsgau --subs < subdomains.txt | grep -E '\.js([?#].*)?$' | sort -u > archive_gau_js.txtwaybackurls < subdomains.txt | grep -E '\.js([?#].*)?$' | sort -u > archive_wayback_js.txtcat archive_gau_js.txt archive_wayback_js.txt | subjs | sort -u > archive_subjs_js.txtcat archive_gau_js.txt archive_wayback_js.txt | getJS | sort -u > archive_getjs_js.txt
# 3. Merge & deduplicatesort -u live_*js.txt archive_*js.txt > all_js_files.txt
# Optional: Filter by target domaingrep -E '\.example\.com' all_js_files.txt > all_js_example.txt
# 4. Optional: Pull down the JS for offline static analysismkdir -p js_files> js_files/hash_map.txtwhile read -r url; do hash=$(echo "$url" | md5sum | cut -d' ' -f1) echo "$hash $url" >> js_files/hash_map.txt curl -skLf --compressed "$url" -o "js_files/${hash}.js"done < all_js_files.txt
现在您已经将所有找到的 JavaScript 文件整理好并放在一起了。希望这能帮助您查找 JS 文件,并助您完成整个漏洞赏金计划!
祝你狩猎和破解愉快!
使用工具:
SubJS — https://github.com/lc/subjs GetJS — https://github.com/003random/getJS Katana — https://github.com/projectdiscovery/katana Linkfinder — https://github.com/GerbenJavado/LinkFinder GetAllURLs (gau) — https://github.com/lc/gau Waybackurls — https://github.com/tomnomnom/waybackurls
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:Rsec Marduk I Am Marduk I Am《0119.侦察方法:JavaScript 文件查找》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论