Giter VIP home page Giter VIP logo

packer-fuzzer's Introduction

Packer Fuzzer

一款针对Webpack等前端打包工具所构造的网站进行快速、高效安全检测的扫描工具

Packer-Fuzzer Packer-Fuzzer Packer-Fuzzer Packer-Fuzzer Packer-Fuzzer

由Poc-Sir、KpLi0rn、Liucy、RachesseHS、Lupin-III荣誉出品

DEMO

👮🏻‍♀️ 免责声明

由于传播、利用Packer Fuzzer工具(下简称本工具)提供的检测功能而造成的任何直接或者间接的后果及损失,均由使用者本人负责,Packer Fuzzer开发团队(下简称本团队)不为此承担任何责任

本工具会根据使用者检测结果自动生成扫描结果报告,本报告内容及其他衍生内容均不能代表本团队的立场及观点。

请在使用本工具时遵循使用者以及目标系统所在国当地的相关法律法规,一切未授权测试均是不被允许的。若出现相关违法行为,我们将保留追究您法律责任的权利,并全力配合相关机构展开调查。

🏝 介是个嘛

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

本工具支持自动模糊提取对应目标站点的API以及API对应的参数内容,并支持对:未授权访问、敏感信息泄露、CORS、SQL注入、水平越权、弱口令、任意文件上传七大漏洞进行模糊高效的快速检测。在扫描结束之后,本工具还支持自动生成扫描报告,您可以选择便于分析的HTML版本以及较为正规的doc、pdf、txt版本。

而且您完全不用担心因为国际化带来的语言问题,本工具附带五大主流语言语言包(包括报告模板):简体中文、法语、西班牙语、英语、日语(根据翻译准确度排序),由我们非常专业的团队翻译。

注:目前第一版工具只对Webpack打包器的规则做了优化,其他打包器规则敬请期待。

🎸 安装环境

  1. 本工具使用Python3语言开发,在运行本工具之前请确保您装有Python3.X软件及pip3软件。若您未安装相关环境,可通过如下指引安装:https://www.runoob.com/python3/python3-install.html

    MacOS用户可使用如下命令快速安装:

    brew install python3 #会自动安装pip3

    Ubuntu用户可使用如下命令快速安装:

    sudo apt-get install -y python3 && sudo apt install -y python3-pip

    CentOS用户可使用如下命令快速安装:

    sudo yum -y install epel-release && sudo yum install python3 && yum install -y python3-setuptools && easy_install pip
  2. 本工具将会通过node_vm2运行原生NodeJS代码,故我们推荐您安装NodeJS环境(不推荐其他JS运行环境,可能会导致解析失败)。若您未安装相关环境,可通过如下指引安装:https://www.runoob.com/nodejs/nodejs-install-setup.html

    MacOS用户可使用如下命令快速安装:

    brew install node

    Ubuntu用户可使用如下命令快速安装:

    sudo apt-get install nodejs && sudo apt-get install npm

    CentOS用户可使用如下命令快速安装:

    sudo yum -y install nodejs
  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进行扫描及检测。

🎯 使用技巧

  • 当您遇到假卡死或者扫描器因为意外的错误而被中断时,您无需过于担心。您可以直接在tmp目录下找到对应缓存文件夹内的以.db结尾的Sqlite数据库文件,当您打开之后您可以看见对应项目的所有实时结果均保存在此数据库内,您可以直接通过缓存数据库分析当前的扫描结果;
  • 我们推荐您通过自定义baseurl的方式来提高API拼接成功率,减少发包次数。找寻baseurl并不难,您只需要在对应目标站点中触发任何一个API并稍加观察缺失部分即可快速寻找到;
  • 我们不推荐您在较大、较复杂的站点中使用本工具的高级模式,因为在一些情况下高级模式会耗费异常大量的时间去不停地在后台做正则匹配,从而使本工具陷入假卡死的状态;
  • 当您遇到A站点的API均在B站点时:您可以直接使用本工具的--ah(--apihost)命令来自定义API服务器地址;
  • 当您遇到在Windows环境下无法创建、读取数据库时,您可以右键点击使用管理员身份运行。当您在Linux/Mac下时请也注意权限问题,推荐使用sudo命令。

📝 意见交流

您可以直接在Github仓库中提交ISSUE:https://github.com/rtcatc/Packer-Fuzzer/issues

如果您认为具体目标不宜直接公开,您可以给我们发送邮件:admin[at]hackinn.com

在提交时,为了便于我们判断,请附上logs目录中对应的日志文件,谢谢您的配合!

与此同时您可以扫描左下方群聊二维码加入我们的微信讨论群(受微信限制,此方式暂不可用),或者您可以扫描右边“天下大木头(KpLi0rn)”的个人二维码备注“Packer Fuzzer”由他拉您入群聊:

QR-code QR-code

🍻 贡献名单

Poc Sir Poc Sir       KpLi0rn KpLi0rn       Liucy Liucy       RachesseHS RachesseHS

👑 更新记录

  • v1.0 2020/09/30

    1. 开天辟地,懂的自然懂.
  • v1.1 2020/11/21

    1. 修复了一些Windows系统下的兼容性问题;

    2. 改进了全局证书校验忽略的部分;

    3. 修复了多处可能会导致扫描器产生严重错误的bug.

  • v1.2 2021/01/21

    1. 增加前端打包器识别功能和资产树显示功能;

    2. 优化了异步提取规则并新增了两类API识别规则;

    3. 修复了报告及数据库无法正确生成的bug;

    4. 增加了静默模式,便于批量测试或多平台联动;

    5. 紧急修复了一个可能会导致任意命令执行的漏洞。

  • v1.3 2021/04/23

    1. 修复了若干可能导致检测异常的Bug;

    2. 将PyExecJS替换为相对安全的node_vm2;

    3. 优化了终端显示界面,增加了新的交互提示;

    4. 优化了BaseDir的处理模式,使其更加人性化。

  • v1.4 2022/06/19

    1. 修复了若干会导致扫描器异常运行的Bug;

    2. 移除废弃的python扩展内容;

    3. 优化了HTML报告,现可显示API返回内容长度,并可进行排序;

    4. 添加了POST和GET请求切换机制;

    5. 添加了Content-Type请求头的自定义功能;

    6. 添加了POST请求时的数据内容自定义功能;

    7. 添加了自定义Api服务器地址的功能。

packer-fuzzer's People

Contributors

guyupro avatar kpli0rn avatar leommxj avatar rtcatc avatar ryucyu avatar weisk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

packer-fuzzer's Issues

安装依赖后爆错 windows平台

E:\信息收集\Packer-Fuzzer>py -3 PackerFuzzer.py
Traceback (most recent call last):
File "PackerFuzzer.py", line 4, in
from lib.Controller import Project
ModuleNotFoundError: No module named 'lib.Controller'

sqlite3.OperationalError: near "GET": syntax error

[19:33:53] 提取流程结束,初步提取API可能结果数:374
[19:33:53] 正在检测目标响应状态中...
100%|█████████████████████████████████████████████████████████████████████████████████████████████| 374/374 [01:15<00:00, 4.97it/s]
Traceback (most recent call last):
File "PackerFuzzer.py", line 26, in
tt.check()
File "PackerFuzzer.py", line 19, in check
t.parseStart()
File "/home/explo1t/Desktop/Packer-Fuzzer/lib/Controller.py", line 42, in parseStart
DatabaseType(projectTag).insertTextFromDB(getTexts)
File "/home/explo1t/Desktop/Packer-Fuzzer/lib/Database.py", line 244, in insertTextFromDB
cursor.execute(sql)
sqlite3.OperationalError: near "GET": syntax error

ValueError: the query contains a null character

Traceback (most recent call last):
File "PackerFuzzer.py", line 26, in
tt.check()
File "PackerFuzzer.py", line 19, in check
t.parseStart()
File "/root/Packer-Fuzzer-1.0/lib/Controller.py", line 42, in parseStart
DatabaseType(projectTag).insertTextFromDB(getTexts)
File "/root/Packer-Fuzzer-1.0/lib/Database.py", line 244, in insertTextFromDB
cursor.execute(sql)
ValueError: the query contains a null character

html 提取chunk 类js出错

如下图,当html中出现chunk类js时,脚本能识别到,但是拼接路径时直接跟路径访问了,因为没有加 /static/js/ ,结果全部报404

image

未授权访问误报及优化建议

很好的工具!
但是存在大量未授权访问误报,如下两图:
packer-fuzzer-issues00
packer-fuzzer-issues01
大量API都返回类似"success:false"或者"No such operation"之类的信息,工具错误判断为未授权访问了。
建议:
1:HTTP状态码过滤,如500,401,403等。
2:关键字过滤,如false,error,exception等。
3:增加可选的授权参数,如--token/--cookie,对比授权和未授权请求某API的返回内容进行过滤。

当提取API总数过少,自动开启暴力提取模式时的bug

命令
python PackerFuzzer.py -u https://www.umeng.com
错误信息
[02:27:11] 提取API总数过少,自动开启暴力提取模式
[02:27:11] 暴力提取文件:tmp\WPw65D_www.umeng.com\0VHodj.dpluscode
[02:27:11] 暴力提取文件:tmp\WPw65D_www.umeng.com\2Ikp6q.font_1515515_uf5ph5s0t7f.js
[02:27:11] 暴力提取文件:tmp\WPw65D_www.umeng.com\2YEila.iconfont
[02:27:11] 暴力提取文件:tmp\WPw65D_www.umeng.com\6tBbPc.js
[02:27:11] 暴力提取文件:tmp\WPw65D_www.umeng.com\8TDyss.js
[02:27:11] 暴力提取文件:tmp\WPw65D_www.umeng.com\9mQ1s8.jsonp.js
[02:27:11] 暴力提取文件:tmp\WPw65D_www.umeng.com\A9un24.js
[02:27:11] 暴力提取文件:tmp\WPw65D_www.umeng.com\CMQV9h.js
[02:27:11] 暴力提取文件:tmp\WPw65D_www.umeng.com\CWbauc.js
[02:27:11] 暴力提取文件:tmp\WPw65D_www.umeng.com\ESR1zj.js
[02:27:11] 暴力提取文件:tmp\WPw65D_www.umeng.com\eYEzO4.js
[02:27:11] 暴力提取文件:tmp\WPw65D_www.umeng.com\HAH9vn.index.js
[02:27:11] 暴力提取文件:tmp\WPw65D_www.umeng.com\i8kE0R.js
[02:27:11] 暴力提取文件:tmp\WPw65D_www.umeng.com\LoVUVM.alicarejs
[02:27:11] 暴力提取文件:tmp\WPw65D_www.umeng.com\lwuFEg.js
[02:27:11] 暴力提取文件:tmp\WPw65D_www.umeng.com\q9fgs1.js
[02:27:11] 暴力提取文件:tmp\WPw65D_www.umeng.com\R0eaG0.js
[02:27:11] 暴力提取文件:tmp\WPw65D_www.umeng.com\tp4JFn
[02:27:12] 暴力提取文件:tmp\WPw65D_www.umeng.com\wz4tkh.clue.js
[02:27:12] 暴力提取文件:tmp\WPw65D_www.umeng.com\XcfvvR.js
[02:27:12] 暴力提取文件:tmp\WPw65D_www.umeng.com\yZbonD.js
Traceback (most recent call last):
File "PackerFuzzer.py", line 26, in
tt.check()
File "PackerFuzzer.py", line 19, in check
t.parseStart()
File "C:\Users\admim\Desktop\工具\安全工具\信息收集\js信息收集\Packer-Fuzzer-master\lib\Controller.py", line 32, in parseStart
Apicollect(projectTag).apireCoverStart()
File "C:\Users\admim\Desktop\工具\安全工具\信息收集\js信息收集\Packer-Fuzzer-master\lib\ApiCollect.py", line 195, in apireCoverStart
self.apiComplete()
File "C:\Users\admim\Desktop\工具\安全工具\信息收集\js信息收集\Packer-Fuzzer-master\lib\ApiCollect.py", line 155, in apiComplete
DatabaseType(self.projectTag).apiRecordToDB(filePath, completeApiPath)
File "C:\Users\admim\Desktop\工具\安全工具\信息收集\js信息收集\Packer-Fuzzer-master\lib\Database.py", line 145, in apiRecordToDB
jsFileID = DatabaseType(self.projectTag).getJsIDFromDB(localFileName, projectPath)
File "C:\Users\admim\Desktop\工具\安全工具\信息收集\js信息收集\Packer-Fuzzer-master\lib\Database.py", line 135, in getJsIDFromDB
jsFileID = cursor.fetchone()[0] # 第一个即可
TypeError: 'NoneType' object is not subscriptable
image

2个小bug和1个建议

release v1.3
bug:
1.js文件的url开头为//时会直接拼接在扫描目标域名后导致bug。
packer-fuzzer-issue-2021-07-01_10-17
packer-fuzzer-issue-2021-07-01_10-22
packer-fuzzer-issue-2021-07-01_18-45

2.生成的html报告v1.3版本的还显示1.2。
packer-fuzzer-issue-2021-07-01_10-26

建议:
增加直接扫描指定js文件的功能,不用-u,建议可以在-j参数上处理(或者增加参数如--j-without-url)。
在处理bug-1的问题时-j扫描指定的js文件会出现重复已存在的问题
python3 PackerFuzzer.py -u "http://f.xxx.com/htmlpages/page#/login" -f 1 -j "https://g.xxx.com/web/feet-model-admin/1.5.5/static/js/app.js"

Downloading:mini-login-embedder-min.js
[10:23:03] Downloading:vendor.js
[10:23:04] Downloading:app.js
[10:23:05] Downloading:manifest.js
[10:23:05] The corresponding file already exists:app.js

提取Api时出现错误

[!] 检测到提取结果不准确,请输入新的BaseDir (使用逗号分隔):other Traceback (most recent call last): File "PackerFuzzer.py", line 26, in <module> tt.check() File "PackerFuzzer.py", line 19, in check t.parseStart() File "E:\Project\Git\Packer-Fuzzer\lib\Controller.py", line 47, in parseStart Apicollect(projectTag, self.options).apireCoverStart() File "E:\Project\Git\Packer-Fuzzer\lib\ApiCollect.py", line 204, in apireCoverStart self.apiComplete() File "E:\Project\Git\Packer-Fuzzer\lib\ApiCollect.py", line 162, in apiComplete DatabaseType(self.projectTag).apiRecordToDB(filePath, completeApiPath) File "E:\Project\Git\Packer-Fuzzer\lib\Database.py", line 145, in apiRecordToDB jsFileID = DatabaseType(self.projectTag).getJsIDFromDB(localFileName, projectPath) File "E:\Project\Git\Packer-Fuzzer\lib\Database.py", line 135, in getJsIDFromDB jsFileID = cursor.fetchone()[0] # 第一个即可 TypeError: 'NoneType' object is not subscriptable

Add this

I have link of all url in txt file. So I want to scan all urls

SSL error

Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)')

哥哥,能抽空解答一下这个错误吗

带端口的扫描无法成功

比如:PackerFuzzer.py -u “http://www.baidu.com:81” 无法扫描

[16:38:18] 正在解析网页中...
[16:38:18] 网页解析完毕,共发现4个JS文件
[Err] unable to open database file
[16:38:18] 正在暴力检测JS文件中...
[16:38:18] JS文件收集结束,开始提取平台API...
[16:38:18] 提取API总数过少,自动开启暴力提取模式
[16:38:18] 提取流程结束,初步提取API可能结果数:0
[16:38:18] 正在检测目标响应状态中...
0it [00:00, ?it/s]
[16:38:18] 目标响应状态检测结束,开始漏洞检测...
[16:38:18] 开始检测未授权访问漏洞
[16:38:18] 开始检测敏感信息泄露漏洞
[16:38:18] 开始检测CORS漏洞
[Err] 'access-control-allow-origin'
[16:38:18] 检测报告正在生成中...
[16:38:51] 检测报告生成完毕!
[-] 全部扫描及检测完毕,Packer Fuzzer团队感谢您的使用!

No module named 'execjs'

Windows下提示还缺少execjs模块,不知道考不考虑丢进 requirements.txt里一并给安装了;

解决:pip install PyExecJS

一些试用的小问题

首先感谢开源这么优秀的扫描工具。对于安全从业人员来讲,看大佬们写的工具,确实是牛。

这次在试用的时候发现了一丢丢小问题。
1.js解析的时候api获取不全,有点少。针对我们的一个网站扫了下,拿到了11个api接口,全是get接口和重复的,实际总共的接口数量大概在60个上下。
2.在漏洞检测逻辑上可能有点小问题,譬如,扫描报告中的未授权,但是我们这个网站有些接口是开放的,所以有些接口不需要鉴权,并且有些需要登录的接口,我们在接口状态码返回的是类似于20000这类自定义错误码,是属于访问失败。这块可能检测逻辑稍微有点小问题。

结果保存出错

[!] 共发现1个安全漏洞: 高危1个, 中危0个, 低危0个
[17:31:15] 检测报告正在生成中...
[Err] local variable 'js_path' referenced before assignment
[Err] local variable 'vuln_detail' referenced before assignment
[17:31:18] 检测报告生成完毕!
[-] 全部扫描及检测完毕,Packer Fuzzer团队感谢您的使用!

report目录并没有该目标报告

sqlite3.OperationalError: unable to open database file

[Err] local variable 'cursor' referenced before assignment
[21:57:26] 目标站点:http://114.*.*.98:9527
[21:57:26] 正在解析网页中...
Traceback (most recent call last):
File "PackerFuzzer.py", line 26, in
tt.check()
File "PackerFuzzer.py", line 19, in check
t.parseStart()
File "D:\Tool\Packer-Fuzzer\lib\Controller.py", line 30, in parseStart
ParseJs(projectTag, self.url, self.options).parseJsStart()
File "D:\Tool\Packer-Fuzzer\lib\ParseJs.py", line 154, in parseJsStart
self.requestUrl()
File "D:\Tool\Packer-Fuzzer\lib\ParseJs.py", line 60, in requestUrl
conn = sqlite3.connect(os.sep.join(PATH.split('/')))
sqlite3.OperationalError: unable to open database file

Windows平台,python3.6,没有在tmp目录下创建子文件夹导致报错

TypeError: 'NoneType' object is not subscriptable

地址已发邮箱
[Err] unable to open database file
Traceback (most recent call last):
File "PackerFuzzer.py", line 26, in
tt.check()
File "PackerFuzzer.py", line 19, in check
t.parseStart()
File "D:\渗透工具\GitTools\Packer-Fuzzer\lib\Controller.py", line 31, in parseStart
RecoverSpilt(projectTag,self.options).recoverStart()
File "D:\渗透工具\GitTools\Packer-Fuzzer\lib\Recoverspilt.py", line 156, in recoverStart
projectPath = DatabaseType(self.projectTag).getPathfromDB()
File "D:\渗透工具\GitTools\Packer-Fuzzer\lib\Database.py", line 112, in getPathfromDB
host = cursor.fetchone()[0] # 第一个即可
TypeError: 'NoneType' object is not subscriptable

ValueError: the query contains a null character

[10:13:22] 正在检测目标响应状态中...
100%|█████████████████████████████████████████| 295/295 [00:59<00:00, 4.92it/s]
Traceback (most recent call last):
File "PackerFuzzer.py", line 26, in
tt.check()
File "PackerFuzzer.py", line 19, in check
t.parseStart()
File "/Users/MASK/Documents/pentest/Web/Packer-Fuzzer/lib/Controller.py", line 42, in parseStart
DatabaseType(projectTag).insertTextFromDB(getTexts)
File "/Users/MASK/Documents/pentest/Web/Packer-Fuzzer/lib/Database.py", line 244, in insertTextFromDB
cursor.execute(sql)
ValueError: the query contains a null character

UnboundLocalError: local variable 'options' referenced before assignment

Traceback (most recent call last):
File "PackerFuzzer.py", line 26, in
tt.check()
File "PackerFuzzer.py", line 19, in check
t.parseStart()
File "/root/tools/Packer-Fuzzer/lib/Controller.py", line 48, in parseStart
FuzzerParam(projectTag).FuzzerCollect()
File "/root/tools/Packer-Fuzzer/lib/FuzzParam.py", line 327, in FuzzerCollect
for option in options:
UnboundLocalError: local variable 'options' referenced before assignment

ValueError: the query contains a null character

Traceback (most recent call last):
File "PackerFuzzer.py", line 26, in
tt.check()
File "PackerFuzzer.py", line 19, in check
t.parseStart()
File "/root/Packer-Fuzzer-1.0/lib/Controller.py", line 42, in parseStart
DatabaseType(projectTag).insertTextFromDB(getTexts)
File "/root/Packer-Fuzzer-1.0/lib/Database.py", line 244, in insertTextFromDB
cursor.execute(sql)
ValueError: the query contains a null character

运行时老是报错,请问怎么解决?

File "PackerFuzzer.py", line 19, in check
t.parseStart()
File "C:\Users\admim\Downloads\Packer-Fuzzer-master\lib\Controller.py", line 31, in parseStart
RecoverSpilt(projectTag,self.options).recoverStart()
File "C:\Users\admim\Downloads\Packer-Fuzzer-master\lib\Recoverspilt.py", line 161, in recoverStart
self.checkCodeSpilting(filePath)
File "C:\Users\admim\Downloads\Packer-Fuzzer-master\lib\Recoverspilt.py", line 69, in checkCodeSpilting
jsFile = jsOpen.readlines()
File "C:\Users\admim\AppData\Local\Programs\Python\Python38\lib\codecs.py", line 322, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc3 in position 845: invalid continuation byte

运行命令为python PackerFuzzer.py -u https://www.qq.com -r 1.txt

image

image

这是环境问题嘛

ERROR: Command errored out with exit status 1:
command: 'c:\users\lenovo\appdata\local\programs\python\python39\python.exe' 'c:\users\lenovo\appdata\local\programs\python\python39\lib\site-packages\pip' install --ignore-installed --no-user --prefix 'C:\Users\Lenovo\AppData\Local\Temp\pip-build-env-ltpw7k79\overlay' --no-warn-script-location --no-binary :none: --only-binary :none: -i https://pypi.org/simple -- 'setuptools >= 40.8.0' wheel 'Cython >= 3.0a5' 'cffi >= 1.12.3 ; platform_python_implementation == '"'"'CPython'"'"'' 'greenlet >= 0.4.17 ; platform_python_implementation == '"'"'CPython'"'"''
cwd: None
Complete output (27 lines):
Collecting setuptools>=40.8.0
Using cached setuptools-50.3.2-py3-none-any.whl (785 kB)
Collecting wheel
Using cached wheel-0.35.1-py2.py3-none-any.whl (33 kB)
Collecting Cython>=3.0a5
Using cached Cython-3.0a6-py2.py3-none-any.whl (1.0 MB)
Collecting cffi>=1.12.3
Using cached cffi-1.14.3-cp39-cp39-win_amd64.whl (179 kB)
Collecting greenlet>=0.4.17
Using cached greenlet-0.4.17.tar.gz (61 kB)
Collecting pycparser
Using cached pycparser-2.20-py2.py3-none-any.whl (112 kB)
Using legacy 'setup.py install' for greenlet, since package 'wheel' is not installed.
Installing collected packages: setuptools, wheel, Cython, pycparser, cffi, greenlet
Running setup.py install for greenlet: started
Running setup.py install for greenlet: finished with status 'error'
ERROR: Command errored out with exit status 1:
command: 'c:\users\lenovo\appdata\local\programs\python\python39\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\Users\Lenovo\AppData\Local\Temp\pip-install-6t2u5gkr\greenlet\setup.py'"'"'; file='"'"'C:\Users\Lenovo\AppData\Local\Temp\pip-install-6t2u5gkr\greenlet\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record 'C:\Users\Lenovo\AppData\Local\Temp\pip-record-299agjbq\install-record.txt' --single-version-externally-managed --prefix 'C:\Users\Lenovo\AppData\Local\Temp\pip-build-env-ltpw7k79\overlay' --compile --install-headers 'C:\Users\Lenovo\AppData\Local\Temp\pip-build-env-ltpw7k79\overlay\Include\greenlet'
cwd: C:\Users\Lenovo\AppData\Local\Temp\pip-install-6t2u5gkr\greenlet
Complete output (5 lines):
running install
running build
running build_ext
building 'greenlet' extension
error: Microsoft Visual C++ 14.0 is required. Get it with "Build Tools for Visual Studio": https://visualstudio.microsoft.com/downloads/
----------------------------------------
ERROR: Command errored out with exit status 1: 'c:\users\lenovo\appdata\local\programs\python\python39\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\Users\Lenovo\AppData\Local\Temp\pip-install-6t2u5gkr\greenlet\setup.py'"'"'; file='"'"'C:\Users\Lenovo\AppData\Local\Temp\pip-install-6t2u5gkr\greenlet\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record 'C:\Users\Lenovo\AppData\Local\Temp\pip-record-299agjbq\install-record.txt' --single-version-externally-managed --prefix 'C:\Users\Lenovo\AppData\Local\Temp\pip-build-env-ltpw7k79\overlay' --compile --install-headers 'C:\Users\Lenovo\AppData\Local\Temp\pip-build-env-ltpw7k79\overlay\Include\greenlet' Check the logs for full command output.

ERROR: Command errored out with exit status 1: 'c:\users\lenovo\appdata\local\programs\python\python39\python.exe' 'c:\users\lenovo\appdata\local\programs\python\python39\lib\site-packages\pip' install --ignore-installed --no-user --prefix 'C:\Users\Lenovo\AppData\Local\Temp\pip-build-env-ltpw7k79\overlay' --no-warn-script-location --no-binary :none: --only-binary :none: -i https://pypi.org/simple -- 'setuptools >= 40.8.0' wheel 'Cython >= 3.0a5' 'cffi >= 1.12.3 ; platform_python_implementation == '"'"'CPython'"'"'' 'greenlet >= 0.4.17 ; platform_python_implementation == '"'"'CPython'"'"'' Check the logs for full command output.

这是环境问题嘛

Got error running

Follow install process on the README.en.md and got this error:
I'm on Ubuntu 20.04.1 LTS

$ python3 PackerFuzzer.py -u https://demo.poc-sir.com/

 ____            _               _____
|  _ \ __ _  ___| | _____ _ __  |  ___|   _ ___________ _ __
| |_) / _` |/ __| |/ / _ \ '__| | |_ | | | |_  /_  / _ \ '__|
|  __/ (_| | (__|   <  __/ |    |  _|| |_| |/ / / /  __/ |
|_|   \__,_|\___|_|\_\___|_|    |_|   \__,_/___/___\___|_|
                                Packer Fuzzer v1.2


©2021 Poc-Sir、KpLi0rn、Liucy、RachesseHS、Lupin-III
Project Hub: https://github.com/rtcatc/Packer-Fuzzer

[+] Network connectivity checked, current egress IP:152.254.225.102
[23:14:59] Target sites:https://demo.poc-sir.com/
[23:14:59] Parsing the page ...
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 159, in _new_conn
    conn = connection.create_connection(
  File "/usr/lib/python3/dist-packages/urllib3/util/connection.py", line 61, in create_connection
    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
  File "/usr/lib/python3.8/socket.py", line 918, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 665, in urlopen
    httplib_response = self._make_request(
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 376, in _make_request
    self._validate_conn(conn)
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 996, in _validate_conn
    conn.connect()
  File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 314, in connect
    conn = self._new_conn()
  File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 171, in _new_conn
    raise NewConnectionError(
urllib3.exceptions.NewConnectionError: <urllib3.connection.VerifiedHTTPSConnection object at 0x7fc48fdcf910>: Failed to establish a new connection: [Errno -2] Name or service not known

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 439, in send
    resp = conn.urlopen(
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 719, in urlopen
    retries = retries.increment(
  File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 436, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='demo.poc-sir.com', port=443): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7fc48fdcf910>: Failed to establish a new connection: [Errno -2] Name or service not known'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "PackerFuzzer.py", line 26, in <module>
    tt.check()
  File "PackerFuzzer.py", line 19, in check
    t.parseStart()
  File "/media/gutem/10TB/code/Packer-Fuzzer/lib/Controller.py", line 33, in parseStart
    ParseJs(projectTag, self.url, self.options).parseJsStart()
  File "/media/gutem/10TB/code/Packer-Fuzzer/lib/ParseJs.py", line 165, in parseJsStart
    self.requestUrl()
  File "/media/gutem/10TB/code/Packer-Fuzzer/lib/ParseJs.py", line 47, in requestUrl
    demo = requests.get(url=url, headers=headers,proxies=self.proxy_data).text
  File "/usr/lib/python3/dist-packages/requests/api.py", line 75, in get
    return request('get', url, params=params, **kwargs)
  File "/usr/lib/python3/dist-packages/requests/api.py", line 60, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 533, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 646, in send
    r = adapter.send(request, **kwargs)
  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 516, in send
    raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='demo.poc-sir.com', port=443): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7fc48fdcf910>: Failed to establish a new connection: [Errno -2] Name or service not known'))

sqlite3.OperationalError: near "type": syntax error

[!] 进入高级模式流程...
[10:25:42] 正在对JS文件做二次美化中...
[10:25:42] 正在提取API参数中,提取时间可能较长...
100%|███████████████████████████████████████████████████████████████████████████████████████████████| 24/24 [00:24<00:00, 1.00s/it]
Traceback (most recent call last):
File "PackerFuzzer.py", line 26, in
tt.check()
File "PackerFuzzer.py", line 19, in check
t.parseStart()
File "/home/explo1t/Desktop/Packer-Fuzzer/lib/Controller.py", line 48, in parseStart
FuzzerParam(projectTag).FuzzerCollect()
File "/home/explo1t/Desktop/Packer-Fuzzer/lib/FuzzParam.py", line 337, in FuzzerCollect
cursor.execute(sql)
sqlite3.OperationalError: near "type": syntax error

【建议】避免删除功能等敏感操作接口直接运行

描述错误
一些 js 里可能会包含一些删除数据的接口,若这些接口刚好存在未授权,就可能导致数据误删。例如接口

https://foo.bar/Filter/delFilterById
https://foo.bar/comment/delete
https://foo.bar/product/delProductLine

建议

  • API提取 时添加 黑名单关键词 如 del, remove。可以多加些敏感操作的关键词,目的是宁可误报也不漏报
  • 参数提取 时正常解析,但是不做任何发包与漏洞检测
  • 最后报告输出时添加类似 敏感操作接口解析 的结果,让用户自行复制数据包测试,即使误报了也有数据保留

这是环境问题吗

ERROR: Command errored out with exit status 1:
command: 'c:\users\lenovo\appdata\local\programs\python\python39\python.exe' 'c:\users\lenovo\appdata\local\programs\python\python39\lib\site-packages\pip' install --ignore-installed --no-user --prefix 'C:\Users\Lenovo\AppData\Local\Temp\pip-build-env-ltpw7k79\overlay' --no-warn-script-location --no-binary :none: --only-binary :none: -i https://pypi.org/simple -- 'setuptools >= 40.8.0' wheel 'Cython >= 3.0a5' 'cffi >= 1.12.3 ; platform_python_implementation == '"'"'CPython'"'"'' 'greenlet >= 0.4.17 ; platform_python_implementation == '"'"'CPython'"'"''
cwd: None
Complete output (27 lines):
Collecting setuptools>=40.8.0
Using cached setuptools-50.3.2-py3-none-any.whl (785 kB)
Collecting wheel
Using cached wheel-0.35.1-py2.py3-none-any.whl (33 kB)
Collecting Cython>=3.0a5
Using cached Cython-3.0a6-py2.py3-none-any.whl (1.0 MB)
Collecting cffi>=1.12.3
Using cached cffi-1.14.3-cp39-cp39-win_amd64.whl (179 kB)
Collecting greenlet>=0.4.17
Using cached greenlet-0.4.17.tar.gz (61 kB)
Collecting pycparser
Using cached pycparser-2.20-py2.py3-none-any.whl (112 kB)
Using legacy 'setup.py install' for greenlet, since package 'wheel' is not installed.
Installing collected packages: setuptools, wheel, Cython, pycparser, cffi, greenlet
Running setup.py install for greenlet: started
Running setup.py install for greenlet: finished with status 'error'
ERROR: Command errored out with exit status 1:
command: 'c:\users\lenovo\appdata\local\programs\python\python39\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\Users\Lenovo\AppData\Local\Temp\pip-install-6t2u5gkr\greenlet\setup.py'"'"'; file='"'"'C:\Users\Lenovo\AppData\Local\Temp\pip-install-6t2u5gkr\greenlet\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record 'C:\Users\Lenovo\AppData\Local\Temp\pip-record-299agjbq\install-record.txt' --single-version-externally-managed --prefix 'C:\Users\Lenovo\AppData\Local\Temp\pip-build-env-ltpw7k79\overlay' --compile --install-headers 'C:\Users\Lenovo\AppData\Local\Temp\pip-build-env-ltpw7k79\overlay\Include\greenlet'
cwd: C:\Users\Lenovo\AppData\Local\Temp\pip-install-6t2u5gkr\greenlet
Complete output (5 lines):
running install
running build
running build_ext
building 'greenlet' extension
error: Microsoft Visual C++ 14.0 is required. Get it with "Build Tools for Visual Studio": https://visualstudio.microsoft.com/downloads/
----------------------------------------
ERROR: Command errored out with exit status 1: 'c:\users\lenovo\appdata\local\programs\python\python39\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\Users\Lenovo\AppData\Local\Temp\pip-install-6t2u5gkr\greenlet\setup.py'"'"'; file='"'"'C:\Users\Lenovo\AppData\Local\Temp\pip-install-6t2u5gkr\greenlet\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record 'C:\Users\Lenovo\AppData\Local\Temp\pip-record-299agjbq\install-record.txt' --single-version-externally-managed --prefix 'C:\Users\Lenovo\AppData\Local\Temp\pip-build-env-ltpw7k79\overlay' --compile --install-headers 'C:\Users\Lenovo\AppData\Local\Temp\pip-build-env-ltpw7k79\overlay\Include\greenlet' Check the logs for full command output.

ERROR: Command errored out with exit status 1: 'c:\users\lenovo\appdata\local\programs\python\python39\python.exe' 'c:\users\lenovo\appdata\local\programs\python\python39\lib\site-packages\pip' install --ignore-installed --no-user --prefix 'C:\Users\Lenovo\AppData\Local\Temp\pip-build-env-ltpw7k79\overlay' --no-warn-script-location --no-binary :none: --only-binary :none: -i https://pypi.org/simple -- 'setuptools >= 40.8.0' wheel 'Cython >= 3.0a5' 'cffi >= 1.12.3 ; platform_python_implementation == '"'"'CPython'"'"'' 'greenlet >= 0.4.17 ; platform_python_implementation == '"'"'CPython'"'"'' Check the logs for full command output.

这是环境问题嘛

扫描误报,或者信息缺失

image
这边这里检测出了文件上传,但是并没有显示api的信息,这个检测并没有错,确实有文件上传,但是api的具体信息有缺失

关于 "Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] ..."的验证问题

当出现ssl证书验证的站:
image

扫描会SSL验证报错:
During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "PackerFuzzer.py", line 26, in
tt.check()
File "PackerFuzzer.py", line 19, in check
t.parseStart()
File "E:\Hacker\Tool\Packer-Fuzzer-1.2\lib\Controller.py", line 33, in parseStart
ParseJs(projectTag, self.url, self.options).parseJsStart()
File "E:\Hacker\Tool\Packer-Fuzzer-1.2\lib\ParseJs.py", line 167, in parseJsStart
self.requestUrl()
File "E:\Hacker\Tool\Packer-Fuzzer-1.2\lib\ParseJs.py", line 49, in requestUrl
demo = requests.get(url=url, headers=headers,proxies=self.proxy_data).text
File "F:\Anaconda\anaconda3\lib\site-packages\requests\api.py", line 76, in get
return request('get', url, params=params, **kwargs)
File "F:\Anaconda\anaconda3\lib\site-packages\requests\api.py", line 61, in request
return session.request(method=method, url=url, *kwargs)
File "F:\Anaconda\anaconda3\lib\site-packages\requests\sessions.py", line 530, in request
resp = self.send(prep, send_kwargs)
File "F:\Anaconda\anaconda3\lib\site-packages\requests\sessions.py", line 643, in send
r = adapter.send(request, kwargs)
File "F:\Anaconda\anaconda3\lib\site-packages\requests\adapters.py", line 514, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='
', port=8443): Max retries exceeded with url: /login (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1108)')))

建议增加全局忽略警告,例如(纯属建议哈,具体大佬看怎么改):
在 lib/ParseJs.py中增加全局忽略警告:
requests.packages.urllib3.disable_warnings()
ssl._create_default_https_context = ssl._create_unverified_context

然后再请求处添加 verify=False:
demo = requests.get(url=url, headers=headers, proxies=self.proxy_data,verify=False).text

config.ini文件中的apiExts因为#注释导致的错误

apiExts = *,+,=,{,},[,],(,),<,>,@,#,",',@,:,?,!, ,^,,(,),.docx,.xlsx,.jpeg,.jpg,.bmp,.png,.svg,.vue,.js,.doc,.ppt,.pptx,.mp3,.png,.doc,.pptx,.xls,.mp4,.gif,.css

ini文件的注释是 # 导致之后的属性没有读取到对象中

能否保存提取的API结果

在测试时发现,在提取API后,Packet-Fuzzer会进行API有效测试,当无效时会认为这是一个无效的API不去存储。但我在测试时,却发现其实很多API是存在越权的,需要手工去测试。所以能否增加一个逻辑,当API无效时,也保存API提取结果,供人工参考测试。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.