谈js静态文件在漏洞挖掘中的利用
字数 1145 2025-08-26 22:11:29
JavaScript静态文件在漏洞挖掘中的利用
一、前期准备:域名收集
在开始JS静态文件分析前,首先需要进行全面的域名收集工作:
常用工具
- wydomain:猪猪侠开发的域名收集工具
- subsomain:子域名枚举工具
- sublist3r:基于搜索引擎的子域名收集工具
- subdomainsBurte:暴力枚举子域名工具
- DiscoverSubdomain:子域名发现工具
- layer子域名挖掘机:综合性子域名挖掘工具
在线资源
- securitytrails.com:DNS历史记录查询
- virustotal.com:威胁情报平台,可用于子域名发现
二、URL收集方法
Burp Suite专业版使用
- 访问目标网站
- 在Burp Suite的
Target->Site Map中找到目标地址 - 右键点击目标地址,选择
Engagement tools->Find scripts - 可选操作:
- 先主动爬取网站以增加内容
Export Script导出所有脚本内容- 全选后提取URL或Response中的src/href
三、JS文件分析工具
LinkFinder
用于提取JavaScript中的URL节点
基本用法:
python linkfinder.py -i https://example.com/static/js/main.js
局限性:
- 不支持批量URL处理
- 需要自行编写脚本实现批量处理
四、自动化工具jsspider
功能概述
- 动态加载挖掘网站域名涉及的URL和包含的域名
- 对收集到的URL(特别是JS文件)通过正则提取隐藏接口和域名
- 可配置的爬取深度设置
深度设置
- 深度0:仅分析指定JS文件中的接口
python3 main.py -u https://example.com/static/js/common.js -d 0 - 深度1:爬取当前网站所有URL并分析其中的JS文件(默认推荐)
python3 main.py -u https://example.com -d 1 - 深度2:对发现的URL进行递归爬取和分析(性能消耗较大)
核心正则表达式
regex_str = r"""
(?:https?://|//) # Match a scheme
(?:[a-zA-Z0-9-]+\.)+ # Match a domainname (any character + dot)
[a-zA-Z]{2,} # The domain extension
[^"']{0,} # Rest of the characters can't be
| # OR
(/[a-zA-Z0-9_\-/]{1,}/ # Relative endpoint with /
[a-zA-Z0-9_\-/]{1,} # Resource name
\.(?:[a-zA-Z]{1,4}|action) # Rest + extension (length 1-4 or action)
[^"']{0,}) # Maybe with parameters
| # OR
([a-zA-Z0-9_\-]{1,} # filename
\.(?:php|asp|aspx|jsp|json|action|html|js|txt|xml) # . + extension
[^"']{0,}) # Maybe with parameters
"""
该正则主要匹配三类URL特征:
- 完整的HTTP/HTTPS URL
- 相对路径端点
- 常见扩展名的文件
五、漏洞挖掘价值
通过JS静态文件分析可以发现:
- 未公开的敏感接口:可能导致未授权访问
- 老域名/测试域名:扩大攻击面
- 测试接口:可能存在未修复的漏洞
- 隐藏功能:可能包含未受保护的管理功能
六、实际案例
以opposhop.cn为例:
python3 main.py -u https://www.opposhop.cn -d 1
结果:
- 提取200+个URL链接
- 发现多个隐藏API接口
- 识别出测试子域名
七、注意事项
- 性能考虑:深度设置不宜过大,一般深度1足够
- 合法性:确保有授权进行测试
- 误报处理:正则匹配结果需要人工验证
- 动态内容:现代网站大量使用异步加载,静态分析需配合动态爬取
八、后续改进
- 优化正则表达式提高准确率
- 增加对WebSocket端点的识别
- 集成更多JS解析引擎
- 添加API指纹识别功能
通过系统性地分析JS静态文件,安全研究人员可以显著提高漏洞发现的效率和成功率。