Packer-Fuzzer:自动化API模糊提取与漏洞检测

声明:该系列文章首发于公众号:Y1X1n安全,转载请注明出处!本公众号所分享内容仅用于每一个爱好者之间的技术讨论及教育目的,所有渗透及工具的使用都需获取授权,禁止用于违法途径,否则需自行承担,本公众号及作者不承担相应的后果。

一、认识一下

Packer-Fuzzer是一款针对Webpack等前端打包工具所构造的网站进行快速、高效安全检测的扫描工具。
支持自动模糊提取对应目标站点的API以及API对应的参数内容,并支持对:未授权访问、敏感信息泄露、CORS、SQL注入、水平越权、弱口令、任意文件上传七大漏洞进行模糊高效的快速检测。

开发原因:
在日常渗透测试、安全服务中是否遇到越来越多以Webpack打包器为代表的网站?这类打包器会将整站的API和API参数打包在一起供Web集中调用,这也便于我们快速发现网站的功能和API清单,但往往这些打包器所生成的JS文件数量异常之多并且总JS代码量异常庞大(多达上万行),这给我们的手工测试带来了极大的不便 。

Packer-Fuzzer:自动化API模糊提取与漏洞检测_第1张图片

二、使用方法

常用命令

python3 PackerFuzzer.py -u https://target.com -t adv -p http://127.0.0.1:8083 -f 1 -r html
# 高级版模式、yakit代理、忽略自签名CA证书
python3 PackerFuzzer.py -u https://www.vulnhub.com -j https://www.vulnhub.com/js/index.js,https://www.vulnhub.com/static/js/cookieAlert.js
# 附加JS进行额外分析
python3 PackerFuzzer.py -u https://www.vulnhub.com -b v1
#指定baseurl

参数详解

python3 PackerFuzzer.py -u https://target.com
# --url
python3 PackerFuzzer.py -c "POC=666;SIR=233" -u https://target.com
# --cookie,附加cookie内容
python3 PackerFuzzer.py -d "Token:3VHJ32HF0"
# --head,附加HTTP头
python3 PackerFuzzer.py -l zh
# --lang,默认中文
python3 PackerFuzzer.py -t adv
# --type,为空则为基础班,adv则为高级版,会进行:SQL注入漏洞、水平越权漏洞、弱口令漏洞、任意文件上传漏洞的检测
python3 PackerFuzzer.py -p https://hack.cool:8080
# --proxy,全局代理,
python3 PackerFuzzer.py -j https://demo.poc-sir.com/js/index.js,https://demo.poc-sir.com/js/vue.js
# --js,附加JS进行额外分析
python3 PackerFuzzer.py -b v1_api
# --base,baseurl这里建议通过观察手动指定来提高API拼接成功率
python3 PackerFuzzer.py -r html
# --report
python3 PackerFuzzer.py -e on
# --ext 开启插件
python3 PackerFuzzer.py -f 1
# --flag,SSL连接安全选项,当为空时默认关闭状态,在此状态下将会阻止一切不安全的连接。若您希望忽略SSL安全状态,您可使用1命令开启,将会忽略一切证书错误,例如:-f 1;
python3 PackerFuzzer.py -s Scan_Task_777
# --silent,静默选项,一旦开启则一切询问YES或NO的操作都将自动设置为YES,并且参数后的内容便是本次扫描报告的名称(自定义报告名),可用于无人值守、批量操作、插件调用等模式
python3 PackerFuzzer.py --st POST
# --sendtype,请求方式选项,目前本选项支持POST和GET参数,一旦开启则将会使用对应的请求方式扫描所有的API,若不开启将会通过HTTP状态码来进行智能请求。
python3 PackerFuzzer.py --ct
# --contenttype,可通过此选项自定义扫描时的HTTP请求头中的Content-Type参数内容,若不开启将会通过HTTP状态码来进行智能请求。
python3 PackerFuzzer.py --pd 
# --postdata,POST内容选项,可通过此选项自定义扫描时的POST请求内容(所有的扫描都将会使用此内容,仅对POST场景有效),若不开启将会通过HTTP状态码来进行智能请求。
python3 PackerFuzzer.py --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与前端不同域名或服务器等场景。

三、优点:

JS提取

  • 可处理异步加载JS(按需加载):在测试时会遇到,网站为了减少资源浪费,将JS进行拆分,当打开某个页面时仅加载必要的js文件进行调用。该工具通过检测异步加载JS的特征代码进行匹配识别+爆破文件名;
  • 文件去重

API提取

  • API过滤:域名+BaseURL路径+API路径拼接完成后,会通过GTE和POST方式进行请求,并且对POST请求体根据Content-Type进行三种请求体提交,从而过滤废弃API;
  • 参数模糊提取:高级模式功能:正则匹配+暴利提取

漏洞检测

  • 未授权访问漏洞
  • 敏感信息泄露漏洞:密码、token、秘钥、邮箱、IP地址等
  • CORS漏洞
  • SQL注入漏洞(高级版模式下)
    • 报错注入:这里仅以单引号和双引号进行测试,判断返回结果
    • 布尔盲注:and 1=1、and 1=2,判断返回内容长度
    • 基于时间延迟注入:使用API参数模糊提取生成的参数,添加and sleep(10),判断服务器响应时间
  • 水平越权漏洞(高级版模式下):仅对数字型参数进行检测
  • 弱口令漏洞(高级版模式下):API名称、用户参数、密码参数三者同时满足config.ini内的passwordtest_list、passworduser_list、passwordpass_list三个配置文件内容才会进行爆破;
  • 任意文件上传漏洞(高级版模式下):匹配API名称、响应内容满足config.ini内的uploadtest_list、upload_fail、upload_success要求即表示存在漏洞;

报告

支持生成交互式报告、正式报告两类报告,四种格式:HTML、DOC、PDF、TXT,在默认情况下将会生成HTML报告及DOC报告。推荐HTML格式,较为灵活。
Packer-Fuzzer:自动化API模糊提取与漏洞检测_第2张图片

其他

  • 多语言支持
  • 可自行添加标准扩展插件
  • 日志回溯:log/

四、不足:

  1. API提取规则不足,目前仅有3个成熟规则,新增两类API识别规则(2021/01/21);
  2. API参数提取规则不足,目前仅有1个成熟规则;
  3. API参数提取需要逐个进行正则匹配,若遇上较大JS文件或API结果较多时则会陷入假卡死状态消耗较长时间;
  4. API参数的POST和GET类型判断模块存在一些逻辑问题可能会导致结果不准确;
  5. API参数判断规则及API判断规则库目前还不够丰富;
  6. API参数默认参数内容可能无法较好的提取;
  7. 若API与API参数内容段分的很开,或者混淆异常严重则无法成功提取API参数内容;
  8. BaseURL提取规则不足,推荐使用自定义模式…

参考:
[https://github.com/rtcatc/Packer-Fuzzer](https://github.com/rtcatc/Packer-Fuzzer)
https://mp.weixin.qq.com/s/0YDXUbJuKue01H9w35xf-A

如果你对网络安全或编程感兴趣,可以搜索公众号“Y1X1n安全”,每天都会分享相关知识点,让我们一同加油!路漫漫其修远兮,吾将上下而求索。

你可能感兴趣的:(自动化,网络安全,渗透测试)