如何使用Jwtear解析和修改JWT令牌
VSole2022-07-22 17:11:13
關于Jwtear
Jwtear是一款模塊化的命令行工具,該工具可以幫助廣大研究人員從安全研究的角度來解析、創建和修改JSON Web令牌(JWT)。
功能介紹
完整的模塊化組件:所有的命令都是插件,可以輕松添加新的插件;
支持JWS和JWE令牌;
提供了易于使用的接口和模版;
高靈活性,輕松可擴展新功能;
基于生產類庫的令牌生成機制,例如json-jwt和jwe等;
可用插件
Parse:解析JWT令牌;
jsw:修改和生成JWS令牌;
jwe:修改和生成JWE令牌;
bruteforce:暴力破解JWS簽名密鑰;
wiki:包含關于JWT和攻擊相關的離線信息;
工具安裝
廣大研究人員可以使用下列命令將該項目源碼克隆至本地:
git clone https://github.com/KINGSABRI/jwtear.git
除此之外,我們也可以使用gem命令下載和安裝Jwtear:
$ gem install jwtear
工具使用
顯示工具幫助信息:
命令解釋:
help - 顯示命令幫助信息
bruteforce, bfs - 用于離線破解令牌簽名的插件
jws, s - 生成基于簽名的JWT(JWS)令牌
jwe, e - 生成基于加密的JWT(JWE)令牌
parse - 解析JWT令牌(接受JWS和JWE格式)
wiki, w - 為研究人員提供的JWT WiKi
使用“-h COMMAND”命令可以查看相關命令的參數選項:
$jwtear -h jws
NAME
jws - 成基于簽名的JWT(JWS)令牌
SYNOPSIS
jwtear [global options] jws [command options]
DESCRIPTION
生成JWS和JWE令牌
COMMAND OPTIONS
-h, --header=JSON - JWT header (JSON 格式)。例如:{"typ":"JWT","alg":"HS256"}. Run 'jwtear gen -l' for supported algorithms. (必須, 默認: none)
-p, --payload=JSON - JWT payload (JSON 格式)。例如:{"login":"admin"} (必須, 默認: none)
-k, --key=PASSWORD|PUB_KEY_FILE - 密鑰作為密碼字符串或文件公共密鑰。例如:P@ssw0rd | eg. public_key.pem (默認: none)
使用一個插件:
插件是以子命令的形式定義的,每一個子命令都有一個或多個參數進行控制:
$ jwtear parse -t eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.J8SS8VKlI2yV47C4BtfYukWPx_2welF34Mz7l-MNmkE
$ jwtear jws -h '{"alg":"HS256","typ":"JWT"}' -p '{"user":"admin"}' -k p@ss0rd123
$ jwtear jwe -header '{"enc":"A192GCM","typ":"JWT"}' --payload '{"user":"admin"}' --key public.pem
$ jwtear bruteforce -v -t eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjpudWxsfQ.Tr0VvdP6rVBGBGuI_luxGCOaz6BbhC6IxRTlKOW8UjM -l ~/tmp/pass.list
添加插件:
如需添加一個新的插件,則要在“plugins”目錄下創建一個新的Ruby文件,其中包含下列結構數據:
module JWTear
module CLI
extend GLI::App
extend JWTear::Helpers::Extensions::Print
extend JWTear::Helpers::Utils
desc "Plugin short description"
long_desc "Plugin long description"
command [:template, :pt] do |c|
c.action do |global, options, arguments|
print_h1 "Plugin template"
print_good "Hi, I'm a template."
template = TemplatePlugin.new
end
end
end
module Plugin
class TemplatePlugin
include JWTear::Helpers::Extensions::Print
include JWTear::Helpers::Utils
def initialize
check_dependencies
# ..code...
end
# ..code...
end
end
end
其中,我們可以將所需的依賴組件以哈希形式添加到“check_dependencies”方法中:
deps = {'async-io' => 'async/ip'}
check_dependencies(deps)
VSole
網絡安全專家