JWT Token 弱口令测试

前言

本文介绍 yakit 上关于JWT安全测试的插件。

JWT 介绍

JWT(JSON Web Token)是一种用于身份认证和授权的开放标准,它通过在网络应用间传递被加密的JSON数据来安全地传输信息使得身份验证和授权变得更加简单和安全

JWT 通常由三部分组成,分别是头部(Header)、载荷(Payload)和签名(Signature),它们之间用点(.)分隔,例如:xxxxx.yyyyy.zzzzz

  • 头部:一般包含两部分信息,一是令牌的类型,即JWT;二是所使用的签名算法,如HS256(HMAC with SHA-256)、RS256(RSA with SHA-256)等。它会被编码为一个 JSON 对象,然后进行 Base64 编码。
  • 载荷:是 JWT 的核心部分,包含了实际需要传递的数据,也被编码为 JSON 对象后进行 Base64 编码。这些数据可以是用户的身份信息、权限信息、过期时间等。其中,有一些预定义的字段,如iss(签发者)、exp(过期时间)、sub(主题)等。
  • 签名:是通过对头部和载荷进行签名得到的,用于验证令牌的完整性和真实性。签名的过程使用了头部中指定的签名算法和一个只有服务器端知道的密钥。

yakit 的 JWT 插件

  • JWT 解码
  • JWT None算法生成
  • JWT 弱口令测试

其他的算是其他组件或者框架的历史漏洞,这里不做介绍。
在这里插入图片描述
设置 JWT 插件合集,方便自己快速使用
选择自定义菜单
在这里插入图片描述添加菜单,将插件添加进去
在这里插入图片描述

JWT 解码

从 https://jwt.io/ 拿默认的JWT编码

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30

JWT 解码,顺便将三部分进行解析
在这里插入图片描述

JWT None算法生成

在这里插入图片描述

查看结果

eyJhbGciOiJOb25lIiwidHlwIjoiSldTIn0.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.

修改了第一部分,第三部分为空
在这里插入图片描述

JWT Token 弱口令测试

在这里插入图片描述
输入jwt和jwt密钥字典
在这里插入图片描述
内置字典如下
在这里插入图片描述
发现弱口令
在这里插入图片描述
常见 JWT 密钥字典

  • https://github.com/wallarm/jwt-secrets/blob/master/jwt.secrets.list

扩展阅读

  • 从一个奇葩的JWT解密问题到Github 10K star组件的设计缺陷!!! https://mp.weixin.qq.com/s/hscF3h-ae9Qt6B81etdCfg
  • JWT渗透姿势一篇通 https://xz.aliyun.com/news/12352
  • 一次完整的JWT伪造漏洞实战案例 https://mp.weixin.qq.com/s/wySsC04H6kpUAcEYgbMqBw

在这里插入图片描述

### 如何在Web页面中获取Token 为了实现在Web页面中获取Token,通常会通过前端JavaScript与后端API交互来完成这一过程。当涉及到JWT(JSON Web Token),整个流程可以分为几个部分:发送用户名和密码到服务器验证身份、接收由服务器返回的Token并将其存储以便后续请求使用。 #### 使用AJAX请求获取Token 一种常见的方式是利用XMLHttpRequest或者更现代的选择——Fetch API发起HTTP POST请求向服务端提交用户的凭证信息。一旦认证成功,服务器将以响应体的形式回传一个包含访问令牌的对象给客户端应用[^1]。 ```javascript // JavaScript Fetch API example to get a token from the server. fetch('/api/authenticate', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username: 'yourUsernameHere', password: 'yourPasswordHere' }) }) .then(response => response.json()) .then(data => localStorage.setItem('token', data.token)) .catch(error => console.error('Error:', error)); ``` 这段代码展示了怎样构建一个简单的异步调用来交换用户凭据换取JWT的过程,并把得到的结果存入浏览器本地储存`localStorage`里方便以后读取[^2]。 #### 存储Token安全考虑 值得注意的是,在实际开发过程中应当谨慎处理敏感数据如个人识别码(PINs),口令等;对于像JWT这样的短时间有效且可携带一定量元数据的信息载体来说,则相对安全得多但仍需遵循最佳实践: - **HTTPS协议**:确保所有的通信都经过SSL/TLS加密; - **HttpOnly Cookie vs Local Storage/Session Storage**: 考虑采用设置有HttpOnly属性标记的cookie而非直接保存于JS可达的地方以减少XSS攻击风险; - **定期刷新机制**:设计合理的过期策略以及提供refresh_token用于延长session有效期而不必频繁重新输入账号密码[^3]。 #### 实现自动附加Authorization Header 为了让每次发出的新请求都能带上之前获得的身份证明,可以通过修改默认配置或是创建中间件的方式来自动化这个操作。例如,在Axios库中很容易做到这一点: ```javascript axios.defaults.headers.common['Authorization'] = `Bearer ${localStorage.getItem('token')}`; ``` 这行命令使得任何经由该实例产生的网络活动都会附带必要的授权头字段,从而简化了跨多个资源加载时保持一致性的难度[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值