目录
一、前言
在平常渗透测试时经常会遇见使用Webpack打包的网站,打包器会将整站的API和API参数打包在一起供Web集中调用,这也便于我们快速发现网站的功能和API清单,但往往这些打包器所生成的JS文件数量异常之多并且总JS代码量异常庞大(多达上万行),这给我们的手工测试带来了极大的不便,Packer Fuzzer软件应运而生。
二、工具下载
下载链接:https://github.com/rtcatc/Packer-Fuzzer
三、安装环境
1、本工具使用Python3语言开发,在运行本工具之前请确保您装有`Python3.X`软件及`pip3`软件。若您未安装相关环境,可通过如下指引安装:
https://www.runoob.com/python3/python3-install.html
2、本工具将会通过`node_vm2`运行原生`NodeJS`代码,故我们推荐您安装`NodeJS`环境(不推荐其他JS运行环境,可能会导致解析失败)。若您未安装相关环境,可通过如下指引安装:
https://www.runoob.com/nodejs/nodejs-install-setup.html
nodejs是终端运行js文件需要用到的命令和环境
没有安装nodejs环境或者没有配置环境变量时利用"node"命令会报错,如下图所示:
安装nodejs步骤
① node官网下载安装包
官网地址:Node.js
② 下载完成后一直下一步直接安装
③ 安装完成后会自动配置好环境变量
直接打开cmd终端,输入"node -v",即可查看nodejs的版本信息。
④ nodejs终端的使用
直接CMD终端中输入 node + ‘ JS文件名 ’ 即可。
3、请使用如下命令一键安装本工具所需要的Python运行库:
pip3 install -r requirements.txt
四、工具利用
## 参数介绍
您可以使用`python3 PackerFuzzer.py [options]`命令来运行本工具,`options`内容表述如下:
- -h(--help)
帮助命令,无需附加参数,查看本工具支持的全部参数及其对应简介;
- -u(--url)
要扫描的网站网址路径,为必填选项,例如:`-u https://demo.poc-sir.com`;
- -c(--cookie)
附加cookies内容,可为空,若填写则将全局传入,例如:`-c "POC=666;SIR=233"`;
- -d(--head)
附加HTTP头部内容,可为空,若填写则将全局传入,默认为`Cache-Control:no-cache`,例如:`-d "Token:3VHJ32HF0"`;
- -l(--lang)
语言选项,当为空时自动选择系统对应语言选项,若无对应语言包则自动切换至英文界面。可供选择的语言包有:简体中文(zh)、法语(fr)、西班牙语(es)、英语(en)、日语(ja),例如:`-l zh`;
- -t(--type)
分为基础版和高级版,当为空时默认使用基础版。高级版将会对所有API进行重新扫描并模糊提取API对应的参数,并进行:SQL注入漏洞、水平越权漏洞、弱口令漏洞、任意文件上传漏洞的检测。可使用`adv`选项进入高级版,例如:`-t adv`;
- -p(--proxy)
全局代理,可为空,若填写则全局使用代理IP,例如:`-p https://hack.cool:8080`;
- -j(--js)
附加JS文件,可为空,当您认为还有其他JS文件需要本工具分析时,可使用此选项,例如:`-j https://demo.poc-sir.com/js/index.js,https://demo.poc-sir.com/js/vue.js`;
- -b(--base)
指定API中间部分(例如某API为:https://demo.poc-sir.com/v1_api/login 时,则其basedir为:v1_api),可为空,当您认为本工具自动提取的basedir不准确时,可使用此选项,例如:`-b v1_api`;
- -r(--report)
指定生成的报告格式,当为空时默认生成HTML和DOC格式的报告。可供选择的报告格式有:html、doc、pdf、txt,例如:`-r html,pdf`;
- -e(--ext)
是否开启扩展插件选项,本工具支持用户自我编写插件并存入`ext`目录(如何编写请参考对应目录下`demo.py`文件)。默认为关闭状态,当用户使用`on`命令开启时,本工具将会自动执行对应目录下的插件,例如:`-e on`;
- -f(--flag)
SSL连接安全选项,当为空时默认关闭状态,在此状态下将会阻止一切不安全的连接。若您希望忽略SSL安全状态,您可使用`1`命令开启,将会忽略一切证书错误,例如:`-f 1`;
- -s(--silent)
静默选项,一旦开启则一切询问YES或NO的操作都将自动设置为YES,并且参数后的内容便是本次扫描报告的名称(自定义报告名),可用于无人值守、批量操作、插件调用等模式,例如:`-s Scan_Task_777`。
- --st(--sendtype)
请求方式选项,目前本选项支持POST和GET参数,一旦开启则将会使用对应的请求方式扫描所有的API,若不开启将会通过HTTP状态码来进行智能请求。
- --ct(--contenttype)
Content-Type选项,可通过此选项自定义扫描时的HTTP请求头中的Content-Type参数内容,若不开启将会通过HTTP状态码来进行智能请求。
- --pd(--postdata)
POST内容选项,可通过此选项自定义扫描时的POST请求内容(所有的扫描都将会使用此内容,仅对POST场景有效),若不开启将会通过HTTP状态码来进行智能请求。
- --ah(--apihost)
Api域名选项,可通过此选项自定义扫描时所有的API请求域名,例如:api部分(从JS中提取到的API路径)为`/v1/info`,扫描的url(-u --url参数传入内容,扫描的网页)为`http://exp.com/`,当apihost参数传入`https://pocsir.com:777/`则此时的API为`https://pocsir.com:777/v1/info`而不是`http://exp.com/v1/info`,用于api与前端不同域名或服务器等场景。
- --fe(--fileext)
Api扩展名选项,可通过此选项对所有API都添加特定的扩展名,以便应对在提取API时出现扩展名提取缺失的情况,例如:当提取到的API为`https://pocsir.com:777/v1/info`时,传入`--fe .json`则工具将会自动将API转化成`https://pocsir.com:777/v1/info.json`进行扫描及检测。
示例:
python3 PackerFuzzer.py -u https://xxx.xxx.xxx.xxx/
如图所示运行报错提示缺少模块execjs,运行下列命令安装execjs。
pip3 install pyExecjs
重新执行运行命令,成功运行。
扫描完成的结果会保存到/tmp目录下。