JWT渗透与攻防

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: JSON Web Token(JWT)作为一种广泛使用的认证机制,因其简单、有效和灵活性而受到开发者的青睐。然而,随着JWT使用的普及,其安全性问题也逐渐显现。本文将探讨JWT的渗透测试方法,分析常见的安全漏洞,并提供相应的防护措施。

前言

JSON Web Token(JWT)作为一种广泛使用的认证机制,因其简单、有效和灵活性而受到开发者的青睐。然而,随着JWT使用的普及,其安全性问题也逐渐显现。本文将探讨JWT的渗透测试方法,分析常见的安全漏洞,并提供相应的防护措施。

JWT的基本概念

JWT是一种用于信息交换的开放标准(RFC 7519),它以紧凑的URL安全格式编码信息。JWT通常由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。这种设计使得JWT能够在不同的系统之间安全地传递信息。

它遵循JSON格式,将用户信息加密到token里,服务器不保存任何用户信息,只保存密钥信息,通过使用特定加密算法验证token,通过token验证用户身份。基于token的身份验证可以替代传统的cookie+session身份验证方法。这使得JWT成为高度分布式网站的热门选择,在这些网站中,用户需要与多个后端服务器无缝交互。

JWT识别

1、标头(Header

Header是JWT的第一个部分,是一个JSON对象,主要声明了JWT的签名算法,如"HS256”、"RS256"等,以及其他可选参数,如"kid"、"jku"、"x5u"等

alg字段通常用于表示加密采用的算法。如"HS256""RS256"

typ字段通常用于表示类型

还有一些其他可选参数,如"kid""jku""x5u"

2、有效载荷(Payload

Payload是JWT的第二个部分,这是一个JSON对象,主要承载了各种声明并传递明文数据,用于存储用户的信息,如id、用户名、角色、令牌生成时间和其他自定义声明。

iss:该字段表示jwt的签发者。

sub:该jwt面向的用户。

aud:jwt的接收方。

exp:jwt的过期时间,通常来说是一个时间戳。

iat:jwt的签发时间,常来说是一个时间戳。

jti:此jwt的唯一标识。通常用于解决请求中的重放攻击。该字段在大多数地方没有被提及或使用。因为使用此字段就意味着必须要在服务器维护一张jti表, 当客户端携带jwt访问的时候需要在jti表中查找这个唯一标识是否被使用过。使用这种方式防止重放攻击似乎让jwt有点怪怪的感觉, 毕竟jwt所宣称的优点就是无状态访问

签名(Signature

Signature是对HeaderPayload进行签名,具体是用什么加密方式写在Header的alg 中。同时拥有该部分的JWT被称为JWS,也就是签了名的JWT。

HeaderPayload进行签名,具体是用什么加密方式写在Header的alg中。

同时拥有该部分的JWT被称为JWS,也就是签了名的JWT。

第一部分:对 JSON 的头部做 base64 编码处理得到

第二部分:对 JSON 类型的 payload 做 base64 编码处理得到

第三部分:分别对头部和载荷做base64编码,并使用.拼接起来

使用头部声明的加密方式,对base64编码前两部分合并的结果加盐加密处理,作为JWT

JWT安全

1、空加密算法(攻击头部不使用加密)

签名算法可被修改为none,JWT支持将算法设定为"None"。如果"alg"字段设为"None",那么签名会被置空,这样任何token都是有效的。

我们通过ctfshow靶场演示(web345)

这里可以看到我们解码后看到加密算法为None ,没有任何加密这里我们直接将jwt面向的用户改为admin即可绕过

替换后得到flag

2、未校验签名(攻击签名不使用签名认证)

算绕绕过签名(web346)

通过解码看到加密算法为HS256

我们通过插件json web tokens 直接更改加密算法为none,对象索引改为admin

如果“alg” 字段设为“ None”,那么签名会被置空,这样任何 token 都是有效的

成功绕过得到flag

3、暴力破解密钥(攻击签名知道密钥实现重组)

针对是对称加密算法(非对称没有用)

非对称要使用方法:获取源码或者公钥私钥文件

某些签名算法,例如HS256(HMAC+SHA-256),会像密码一样使用一个任意的、独立的字符串作为秘密密钥。这个秘钥如被轻易猜到或暴力破解,则攻击者能以任意的头部和载荷值来创建JWT,然后用密钥重新给令牌签名。

弱口令爆破(web347)

使用工具破解 jwt-tools

利用项目:https://github.com/ticarpi/jwt_tool

#安装必要库
python3 -m pip install pycryptodomex
# 自定义修改生成
python3 jwt_tool.py JWT_HERE -T
# 使用字典破解
python3 jwt_tool.py JWT_HERE -C-d dictionary.txt
# 指定密码测试
python3 jwt_tool.py JWT_HERE -C-p password_here

这里我们只能弱口令top1000爆破得到密钥为123456

通过jwt官方网站替换密钥为123456后重新生成jwt提交得到flag

4源码泄漏密匙

web(349)

该题采用RS256非对称加密,所以不能使用爆破的方式

且代码文件中泄露了公钥私钥存储位置,公钥私钥泄露,访问/private.key、/public.key得到公钥密钥

源码中私钥生成jwt,利用公钥解密jwt,只要有私钥就可以重新生成JWT

pyhton 安装这个库

利用私钥文件重新生成

import jwt
public = open('private.key', 'r').read()
payload={"user":"admin"}
print(jwt.encode(payload, key=public, algorithm='RS256'))

利用重新生成的jwt访问

源码了里显示提交方式是post,我们切换提交方法即可得到flag

web350(密钥混淆攻击RS256=>HS256)

这题和上题一样通过私钥生成jwt,公钥认证,但是这里我们通过看源码文件只能找到公钥文件

这里的思路就是将非对称加密改成对称加密


双方都使用公钥验签,顺利篡改数据

var jwt = require('jsonwebtoken');
var fs = require('fs');
var privateKey = fs.readFileSync('./public.key');
var token = jwt.sign({ user: 'admin' }, privateKey, { algorithm: 'HS256' });
console.log(token)

目录
打赏
0
相关文章
网络安全的盾与剑:漏洞防御与加密技术的实战应用
在数字化浪潮中,网络安全成为保护信息资产的重中之重。本文将深入探讨网络安全的两个关键领域——安全漏洞的防御策略和加密技术的应用,通过具体案例分析常见的安全威胁,并提供实用的防护措施。同时,我们将展示如何利用Python编程语言实现简单的加密算法,增强读者的安全意识和技术能力。文章旨在为非专业读者提供一扇了解网络安全复杂世界的窗口,以及为专业人士提供可立即投入使用的技术参考。
网络安全的防线:漏洞、加密与意识的三重奏
在数字化时代,网络安全已成为个人和组织不可忽视的重要议题。随着技术的快速发展,网络攻击手段也日益狡猾,保护信息安全就像一场没有硝烟的战争。本文将深入浅出地探讨网络安全的三个关键方面:网络漏洞的危害性、加密技术的重要性以及安全意识的必要性,旨在提升公众对网络安全的认识和防护能力。
网络安全的盾牌:漏洞防御与信息加密技术
【9月更文挑战第27天】在数字时代,网络安全和信息安全成为维护数据完整性、保密性和可用性的关键因素。本文将探讨网络安全漏洞的概念、成因及预防措施,同时深入讨论加密技术在保护信息安全中的作用。通过分析安全意识的重要性和提升方法,旨在为读者提供一套全面的网络安全知识框架,以增强个人和组织对抗网络威胁的能力。
60 5
|
4月前
|
Web安全-JWT认证机制安全性浅析
Web安全-JWT认证机制安全性浅析
51 2
网络安全的盾牌与矛:漏洞防御与加密技术解析
【9月更文挑战第22天】在数字世界的棋盘上,网络安全是一场没有硝烟的战争。本文旨在揭示网络攻击的常见手段和防御策略,探讨如何通过提升安全意识和应用加密技术来保护信息安全。我们将从网络安全漏洞的类型、成因讲起,进而分析加密技术的原理与实践,最后强调培养良好的安全习惯的重要性。文章将用浅显的语言和生动的比喻,带领读者走进网络安全的世界,理解其复杂性并掌握基本防护知识。
网络安全的盾与剑:漏洞防御与加密技术解析
【9月更文挑战第17天】在数字时代的浪潮中,网络安全成为保护数据和隐私的关键防线。本文深入浅出地探讨了网络安全的两大支柱:漏洞防御和加密技术,旨在提升公众的安全意识并分享防护策略。我们将从基础概念出发,逐步深入到技术细节,不仅阐释原理,还提供实际案例分析,帮助读者构建起一道坚固的数字防御墙。
57 3
网络安全的盾牌:漏洞防御与加密技术解析
【9月更文挑战第9天】在数字时代,网络安全的重要性日益凸显,它不仅是保护个人隐私和数据安全的屏障,也是维护社会稳定和经济繁荣的关键。本文将深入探讨网络安全中的漏洞防御策略、加密技术的运用以及提升公众安全意识的必要性,旨在通过知识分享,增强大众对网络威胁的防范能力,共同构建更安全的网络环境。
揭秘网络安全:漏洞、加密与安全意识的三重防线
【7月更文挑战第31天】在数字化浪潮中,网络安全成为守护信息资产的关键盾牌。本文将深入探讨网络漏洞的成因、加密技术的应用以及培养安全意识的重要性,揭示如何构筑坚不可摧的网络安全防线。
61 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等