找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2799

积分

1

好友

388

主题
发表于 4 天前 | 查看: 14| 回复: 0

本文章仅用网络安全研究学习,请勿使用相关技术进行违法犯罪活动。

声明:本文搬运自互联网,如你是原作者,请联系我们!

我最近与一位漏洞赏金猎人交流了他们的侦察方法。当我询问他们是否也遵循“枚举子域名 -> 收集URL -> 测试端点”这一基本流程时,他们的答案出乎意料。他们主要依赖于手动浏览网站和深入分析 JavaScript 文件。

手动浏览我理解,但花数小时分析 JavaScript 文件 听起来就让人头疼。

程序员分析JavaScript文件时的痛苦表情

然而,这次对话让我意识到,我过去寻找 JS 文件的方式过于被动和片面。通常只是在抓取端点时顺带收集,这无疑遗漏了大量隐藏的 JavaScript 资源。这些文件往往是信息的宝库,可能包含泄露的 API 密钥、硬编码的凭证、内部接口或未公开的 API 路由。

为此,我改进了侦察流程,整合了多种工具来最大化 JS 文件的发现率。以下方法假设您已经拥有目标的子域名列表(包括活跃的和不活跃的)。如果您需要子域名枚举方法,可以参考相关文章。

第一步:从活跃子域名中获取 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。

  • 深度 1:从提供的 URL 开始。
  • 深度 2:点击这些页面上的链接一次。
katana -list subdomains_alive.txt -d 2 -jc -silent | grep -E '\.js([?#].*)?$' | sort -u > live_katana_js.txt

您可以根据目标规模调整深度。对于单个域名,深度可以设到5;但对于大型子域名列表,深度过大会导致爬取时间极长。

Linkfinder
这是一个 Python 工具,通过解析 HTML 和 JavaScript 代码来发现其中的 JS 文件和 API 端点,擅长找出隐藏的引用。请注意,LinkFinder 一次只能处理一个 URL,需要脚本化以处理多个目标。

针对主域名运行示例:

linkfinder -i https://www.example.com -d -o cli | sort -u | tee linkfinder_raw.txt

原始输出包含完整URL和路径片段。我们需要对其进行清理:

# 仅提取目标域名的URL
grep -Eo 'https?://[^ )"]+example\.com[^ )"]*' linkfinder_raw.txt | sort -u > linkfinder_urls.txt
# 过滤出JS文件URL
grep -E '\.js([?#].*)?$' linkfinder_urls.txt | sort -u > live_linkfinder_js.txt

第二步:从历史存档中获取 JS 文件

在线文件固然重要,但“数字废墟”中往往埋藏着更大的宝藏。一些旧版 JavaScript 文件可能已从当前网站移除,但仍保存在互联网档案馆(Wayback Machine)、CommonCrawl 等历史存档中。

这些过时的代码有时反而更有利,因为它们可能包含被遗忘而非被删除的硬编码密钥、内部 API 端点。

我们可以使用相同的 JS 发现工具,但数据源改为从历史存档中收集的 URL。

GetAllURLs (gau)
从 Wayback Machine、CommonCrawl、URLScan 等来源获取历史 URL。--subs 标志确保包含子域名。
注意:这里应使用完整的子域名列表(subdomains.txt),而不仅仅是活跃列表。

gau --subs < subdomains.txt | grep -E '\.js([?#].*)?$' | sort -u > archive_gau_js.txt

Waybackurls
一个更简洁的、专门用于从 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.txt
cat archive_gau_js.txt archive_wayback_js.txt | getJS | sort -u > archive_getjs_js.txt

注意:并非所有存档的 JS 文件都可访问(可能返回 404/403),但有时可以直接从 archive.org 的快照 URL 下载。

第三步:合并与去重

现在我们已经得到了多个来源的 JS 文件列表。为了进行高效分析,需要将它们合并并去重。

sort -u live_*js.txt archive_*js.txt > all_js_files.txt

可选:按域名或关键词筛选
当针对多个目标运行此流程时,可以按特定域名进行筛选。

grep -E '\.example\.com' all_js_files.txt > all_js_example.txt

可选:下载 JS 文件以供离线静态分析
将文件下载到本地可以进行更深入、不依赖网络的静态分析。

  1. 创建目录:
    mkdir -p js_files
  2. 下载并建立映射:
    为避免同名文件(如 app.js)被覆盖,使用哈希值命名文件,并创建一个映射文件记录哈希值与原始 URL 的对应关系。
    # 清空映射文件
    > js_files/hash_map.txt
    # 循环下载并记录
    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
cat subdomains_alive.txt | subjs | sort -u > live_subjs_js.txt
cat subdomains_alive.txt | getJS | sort -u > live_getjs_js.txt
katana -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.txt
grep -Eo 'https?://[^ )"]+example\.com[^ )"]*' linkfinder_raw.txt | sort -u > linkfinder_urls.txt
grep -E '\.js([?#].*)?$' linkfinder_urls.txt | sort -u > live_linkfinder_js.txt

# 2. 从存档URL获取JS
gau --subs < subdomains.txt | grep -E '\.js([?#].*)?$' | sort -u > archive_gau_js.txt
waybackurls < subdomains.txt | grep -E '\.js([?#].*)?$' | sort -u > archive_wayback_js.txt
cat archive_gau_js.txt archive_wayback_js.txt | subjs | sort -u > archive_subjs_js.txt
cat archive_gau_js.txt archive_wayback_js.txt | getJS | sort -u > archive_getjs_js.txt

# 3. 合并与去重
sort -u live_*js.txt archive_*js.txt > all_js_files.txt

# 可选:按目标域名筛选
grep -E '\.example\.com' all_js_files.txt > all_js_example.txt

# 4. 可选:下载以供离线分析
mkdir -p js_files
> js_files/hash_map.txt
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

通过这套方法,您能够系统性地收集目标相关的 JavaScript 文件,为后续的敏感信息提取和漏洞挖掘奠定坚实基础。希望这套改进后的 JavaScript 文件 侦察流程能助您在漏洞赏金猎杀或安全评估中取得更多成果。

工具链接

欢迎在云栈社区交流更多安全技术实战心得。




上一篇:Redis五大核心数据结构深度解析:从底层原理到高性能实战指南
下一篇:大厂高P求职困境解析:为什么年薪百万的简历也遭市场冷遇?
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-24 01:46 , Processed in 0.294917 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表