深化了解Json Web Token之实战篇

访客5年前关于黑客接单1009

原本想用python DRF 的 JWT做,后来各种失利。终究尝试了用Php,发现十分便当。
PHP 版别 PHP 7.2.4-1+b2 (cli),也便是kali linux自带的php,至于composer的装置办法,以及各个库的运用办法在此不打开,需求的话能够自己查阅官方文档
php jwt库的评测
在jwt.io上有些php jwt的库,在此说一下运用下来的感觉。只取了评分前三的库:
firebase/php-jwt Star 3786
支撑PHP5/7;
操作十分简略,可是不具有许多功用,不是很引荐。
lcobucci/jwt Star Star 2729
支撑PHP5/7;
不具有JWE的办法,操作简略;
不具有多重JWS,JWE办法以及其对应序列化办法。
spomky-labs/jose Star 351
仅支撑 PHP 7;
功用完全,具有多重JWE,JWS,以及其对应序列化办法。以上两个都不具有。
0×01 JWT 进犯手法
JWT 的进犯手法包含以下内容:
参阅网站:https://auth0.com/blog/critical-vulnerabilities-in-json-web-token-libraries//。
1. 灵敏信息走漏
当服务端的秘钥泄密的时分,JWT的伪造就变得十分简略简单。对此,服务端应该妥善保管好私钥,避免被别人盗取。
2. 将加密办法改为’none’
下文实战中的 Juice Shop JWT issue 1 便是这个问题。之前谈及过nonsecure JWT的问题。
签名算法保证歹意用户在传输过程中不会修正JWT。可是标题中的alg字段能够更改为none。一些JWT库支撑无算法,即没有签名算法。当alg为none时,后端将不履行签名验证。将alg更改为none后,从JWT中删去签名数据(仅标题+’.'+ payload +’.')并将其提交给服务器。
处理对策:
不允许呈现 none 的办法;
将敞开 alg : none 作为一种额定的装备选项。
3.将算法RS256修正为HS256(非对称暗码算法=>对称暗码算法)
HS256运用密钥来签名和验证每个音讯。而RS256运用私钥对音讯进行签名并运用公钥进行认证。
假如将算法从RS256更改为HS256,则后端代码运用公钥作为密钥,然后运用HS256算法验证签名。因为进犯者有时能够获取公钥,因而进犯者能够将标头中的算法修正为HS256,然后运用RSA公钥对数据进行签名。
此刻,后端代码就会运用RSA公钥+HS256算法进行签名验证,然后让验证经过。
处理对策:
不允许 HS256等对称加密 算法读取秘钥。jwtpy便是约束了这种办法。当读取到 类似于 “— xxx key —” 的参数的时分应抛出过错;
将秘钥与验证算法彼此匹配。
4. HS256(对称加密)密钥破解
假如HS256密钥强度较弱,则能够直接强制运用,经过爆炸 HS256的秘钥能够完结该操作。难度比较低。处理对策很简略,运用杂乱的秘钥即可。
5. 过错的堆叠加密+签名验证假定
过错的堆叠加密
这种进犯发作在单个的或许嵌套的JWE中,咱们幻想一个JWE如下所示:
JWT RAW
    header : ...
    payload: "admin" : false
             "uid"   : 123
             "umail" : 123@126.com
             ...
JWE Main
    protected / unprotected
    recipients:
        en_key : key1
        en_key : key2
    cipher : xxx
在进犯者不修正秘钥的情况下,关于ciphertext进行修正。往往会导致解密的失利。可是,即使是失利,许多JWT的解密也是会有输出的,在没有附加认证数据(ADD)的情况下更是如此。进犯者关于ciphertext的内容进行修正,可能会让其他的数据无法解密,可是只需最终输出的payload中,有“admin”:true。 其意图就现已到达了。
处理对策:
关于JWE而言,应当解密一切数据,而非从解密的成果中提取单个需求的数据。别的,使用附加认证数据ADD,也是十分好的挑选。
签名假定验证
这种进犯发作嵌套的JWS中。咱们幻想一个嵌套的JWS,其包含了两层的部分,其结构如下:
JWT Main
    JWT Sub1
        payload
        Signature2
    Signature
现在,进犯者经过必定的办法,能够让外层的验证经过的时分,此刻,体系还应该查看内层的签名数据,假如不查看,进犯者就能够随意篡改payload的数据,来到达越权的意图。
处理对策:
因而关于嵌套JWS而言,应当验证一切层面的签名是否正确,而非验证最外层的签名是否正确就满足。
6. 无效椭圆曲线进犯
椭圆曲线加密是一种十分安全的办法,乃至从某种程度上而言,比RSA愈加安全。关于椭圆曲线的算法,在此不打开。
在椭圆曲线加密中,公钥是椭圆曲线上的一个点,而私钥仅仅一个坐落特别但十分大的范围内的数字。 假如未验证对这些操作的输入,那进犯者就能够进行规划,然后康复私钥。
而这种进犯已在曩昔中得到证明。这类进犯被称为无效曲线进犯。这种进犯比较杂乱,也规划到许多的数学知识。具体能够参阅文档:critical-vulnerability-uncovered-in-json-encryption。
处理对策:
查看传递给任何公共函数的一切输入是否有用是处理这类进犯的要害点。验证内容包含公钥是所选曲线的有用椭圆曲线点,以及私钥坐落有用值范围内。
7. 替换进犯
在这种进犯中,进犯者需求至少取得两种不同的JWT,然后进犯者能够将令牌中的一个或许两个用在其他的当地。
在JWT中,替换共叽有两种办法,咱们称他们为相同接收方进犯(跨越式JWT)和不同接收方进犯。
不同接收方进犯
咱们能够想象一个事务逻辑如下:
Auth 组织,有着自己的私钥,而且给 App1 和 App2 发放了两个公钥,用于验证签名;
Attacker 使用自己的秘钥登录了 App1。

[1] [2] [3]  黑客接单网

相关文章

根据时延的盲道研讨:受限环境下的内容回传信道

在一次缝隙赏金活动中,挖到个指令注入的洞,我先以时延作为证明向厂商提交该缝隙,厂商以国内网络环境差为由(确实得翻墙)拒收,几回交流,奉告若我能取回指定文件 secret.txt 才认可。方针是个受限环...

Web前端安全探秘:技能理论与实际使用

Web前端安满是个新概念,能够理解为它是Web安全防护范畴的一部分。 早些时候,曾被狭义的以为前端安全即JS安全。却是没有错,但不全面。现在来看,应该说:前端代码安全(JS代码安全)+ 前端进犯侵略防...

技能共享:几种常见的JavaScript混杂和反混杂东西剖析实战

信息安全常被描述成一场军备竞赛,白帽与黑帽,浸透测验者与黑客,善与恶,本文将聚集这场永无止境决战中的一个小点。 HTML5 & JS 运用中充满着对输入进行验证/注入的问题,需求开发人员一直...

RFI绕过URL包含限制Getshell-黑客接单平台

为什么有今日这篇文章?原因是我在阅读Twitter时,发现关于长途文件包括RFI的一个奇淫技巧!值得记载一下,思路也很别致!由于它打破我之前认为RFI已死的观念:) 正文 RFI引出 咱们知道php最...

Zabbix运用Pycurl模块监控web页面状况

因为网络的问题,zabbix自带web模块用不了,后台研制2b,老是更新正式环境安装包,导致一向出问题,老是给他们擦屁股,早说过这事,他们不合作,现在出问题了,挺爽j_0025.gif,这锅我表明不背...

装置nginx+ngx_lua支撑WAF防护功用

  nginx lua模块淘宝开发的nginx第三方模块,它能将lua言语嵌入到nginx装备中,然后运用lua就极大增强了nginx的才能.nginx以高并发而闻名,lua脚本简便,两者的调配可谓完...