需要解决的问题:
- 如何从表现中(当前页面加载出来的)的JS提取价值信息
- 如何从地址中FUZZ提取未知的JS文件
- 如何从JS开发框架WEBPACK进行测试
什么是JS渗透测试
在JS中也存在变量和函数,当存在可控变量及函数调用即可参数漏洞JS开发的WEB应用和PHP,JAVA,.Net等区别在于即没有源代码,也可以通过浏览器的查看源代码获取真实的点。获取URL,获取JS敏感信息,获取代码传参等,所以相当于JS开发的WEB应用属于白盒测试(默认有源码参考),一般会在JS中寻找更多的URL地址,在JS代码逻辑(加密算法,APIKEY配置,验证逻辑等)进行后期安全测试;
前提:WEB应用可以采用后端或前端语言开发
- 后端语言:PHP java Python .net 浏览器端看不到真实的源代码
- 前端语言:JS和JS框架 浏览器端可以看到真实的源代码
例子:
- zblog:核心功能采用PHP语言去传输接收
- vue.js:核心功能采用框架语法(JS)传输接收
JS安全问题:
- 源码泄露
- 未授权访问:JS里面分析更多的URL访问确定接口路径
- 敏感Key泄露:JS文件中可能配置了接口信息(云应用,短信,邮件,数据库等)
- API接口安全:代码中加密提交参数传递,更多的URL路径
流行的JS框架: - Vue NodeJS jQuery Angular等
如何判断JS开发应用: - 插件wappalyzer
- 源程序代码简短
- 引入多个js文件
- 一般有/static/js/app.js等顺序的js文件
- 一般cookie中有connect.sid
➢JS前端架构-手工搜索分析
浏览器全局搜索分析
- 如何快速获取价值信息?
src=
path=
method:“get”
http.get("
method:“post”
http.post("
$.ajax
http://service.httppost
http://service.httpget
➢JS前端架构-半自动Burp分析
- 自带功能:Target->sitemap->Engagement tools->Find scripts
- 官方插件:JS Link Finder & JS Miner
安装时,可能需要下载Jython(插件加载器)
https://www.jython.org/download.html
将下载好的jar包导入
- 第三方插件:HaE
HaE下载地址github
规则更新地址Config.yml文件
HaE是基于BurpSuit插件JavaAPI开发的请求高亮标记和信息提取的辅助性插件。该插件可以通过自定义正则的方式匹配响应报文或者请求报文,可以自行决定符合该自定义正则匹配的相应请求是否需要高亮标记,信息提取;
➢JS前端架构-自动化项目分析
-
Jsfinder-从表现中JS中提取URL或者敏感数据
一款用作快速在网站的js文件中提取URL,子域名的工具
使用方法
-
URLFinder-从表现中JS中提取URL或者敏感数据
一款用于快速提取检测页面中JS与URL的工具。
功能类似于JSFinder,但JSFinder好久没更新了。
使用方法
-
FindSomething-从表现中JS中提取URL或者敏感数据
GitHUb地址
该工具是用于快速在网页的html源码或js代码中提取一些有趣的信息的浏览器插件,
包括请求的资源、接口的url,请求的ip和域名,泄漏的证件号、手机号、邮箱等信息。
-
ffuf-FUZZ爆破找到更多的js文件分析更多的信息
gitHub地址
字典下载地址
功能强大的模糊化工具,用它来FUZZ模糊化js文件。
根据字典爆破URL,查找能跑通的JS来获取更多的信息
- -u url地址
- -w 设置字典
- -c 将响应状态码用颜色区分(Windows下无用)
- -t 线程率(默认40)
- -p 请求延时:0.1/0.2s
- -ac 自动校准fuzz结果
- -H Header头,格式为:Name:Value
- -r 跟随重定向
- -x 设置代理
- -e 设置脚本语言 -e .asp,.php,.html,.txt等
- -o 输出文本
- -of 输出格式文件,支持html、json、md、csv、all
示例语句:
ffuf.exe -w js字典.txt -u http://www.XXXXcom/FUZZ -t 200
4. Packer-Fuzzer-针对JS框架开发打包器Webpack检测
gitHub地址
一款针对Webpack等前端打包工具所构造的网站进行快速、高效安全检测的扫描工具
Webpack:本质上,webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当 webpack 处理应用程序时,它会在内部从一个或多个入口点构建一个 依赖图(dependency graph),然后将你项目中所需的每一个模块组合成一个或多个 bundles,它们均为静态资源,用于展示你的内容。