zoukankan      html  css  js  c++  java
  • jwt攻击手段

    jwt

    秘钥泄漏/敏感文件泄漏

    在一些配置文件被我们可查的情况下,包括各种文件读取,源码泄漏,此时伪造身份就变得很容易了。

    空加密算法

    对于明文的加密算法通常为HS256,在jwt中分为三个部分,以点分割

    =eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzZWNyZXRpZCI6MSwidXNlcm5hbWUiOiJ0ZXN0IiwicGFzc3dvcmQiOiJ0ZXN0IiwiaWF0IjoxNTk5NzIzNTg0fQ.7vusJvfKRNY8Or2KnUCEoJhKfseOM6-RyAwgLw3WrLU
    

    在第一部分header这里:

    {
      "alg": "HS256",
      "typ": "JWT"
    }
    

    JWT支持使用空加密算法,只要我们在header中指定alg这个参数为None

    {
        "alg" : "None",
        "typ" : "jwt"
    }
    

    此时这个加密算法就不存在,那么这个加密秘钥就没用了。

    const token = jwt.sign({secretid, username, password}, secret, {algorithm: 'HS256'});
    
    关于KID的修改
    kid也是jwt header中的一个可选参数,作用就是指定加密算法的密钥。  
    
    当kid变得可控的时候,就优惠出现很多安全的问题,例如:
    
    任意文件读取:kid如果从文件读取,在服务端上没有做任何的限制的时候,那么kid就可能读取到别的文件,就例如/etc/passwd。 
    
    sql注入:当kid从数据库当中获取,那么可能存在着sql注入。   
    
    修改RSA加密算法为HMAC

    在JWT中,除了HS256代表的HMAC还有RSA等加密方式,即RS256。

    HMAC是密钥相关的哈希运算消息认证码,他是使用相同的密钥对传输信息进行加解密。
    
    RSA则是一种非对称加密算法,使用私钥加密明文,公钥解密密文。  
    

    这种攻击方式的利用就是

    JWT传输过程中使用RSA算法,用私钥进行了加密,最后公钥进行了解密验证。

    私钥我们可能搞不到,但是公钥我们可能可以搞到。

    此时改一下加密方式:

    {                                   {
        "alg" : "RS256",  ---->>>>>     "alg" : "HS256",
        "typ" : "jwt"                      "typ" : "jwt"
    }                                    }
    

    此时HMAC被服务端判断,这个时候服务端按照HMAC的方式自动使用公钥进行解密验证。

    爆破

    jwt可以进行爆破,前几天的DDCTF第一道题就是强制的爆破,可惜后面拿到了client之后,逆向太菜了,没搞出来。

    相关工具:

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

  • 相关阅读:
    爬虫相关知识(二 )xpath
    爬虫相关知识(一)
    html基础知识
    接口和异常
    继承与多态
    方法与方法重载,方法重写
    面向对象预习随笔
    《深入浅出MFC》第三章 MFC六大关键技术之仿真
    《深入浅出MFC》第二章 C++的重要性质
    《深入浅出MFC》第一章 Win32基本程序概念
  • 原文地址:https://www.cnblogs.com/ophxc/p/13647605.html
Copyright © 2011-2022 走看看