认证实验室实战演练:从IP绕过到JWT攻击的完整指南

本文详细解析了认证实验室中的各类挑战,包括IP认证绕过、时序攻击、客户端认证漏洞、JWT信息泄露等实战技术,通过具体案例演示了如何利用这些漏洞进行安全测试和防御。

认证实验室实战演练

认证实验室包含一系列与认证和授权相关的挑战,这些挑战均来源于真实世界的测试案例或其他测试人员的建议。

您可以在认证实验室体验最新版本的所有挑战,或从GitHub获取代码自行构建实验室。该实验室使用Golang编写,安装和运行都相当简单。

IP基础认证绕过

挑战目标:发现故意设置的基于IP的认证绕过漏洞。

实战解析

在实际测试中,开发者/管理员为了避免频繁登录,设置了页面检查请求源IP的功能。如果IP匹配其固定IP(192.168.0.14),则自动完成登录流程。但关键漏洞在于:IP检查代码同时验证了X-Forwarded-For头部。

利用方法

1
2
3
4
for ip in {1..255}
do
  curl https://authlab.digi.ninja/Bypass -H "X-Forwarded-For: 192.168.0.$ip" -o $ip.out
done

通过文件大小差异可快速定位有效IP(14.out),成功登录为Alex管理员。

时序攻击

挑战特点:系统通过响应时间差异泄露有效用户名信息。

技术要点

  1. 使用Burp Intruder对2000个用户名进行爆破
  2. 通过"Response completed"时间列排序识别异常值
  3. 确认四个有效用户名:Sarah、Zoe、Matthew、Daniel

关键提示:真实环境中需保持单线程测试和稳定网络环境以减少干扰。

客户端认证漏洞

漏洞原理:完全依赖JavaScript的认证机制,包含以下关键缺陷:

  1. 用户名密码拼接后与密钥进行XOR运算
  2. 通过逆向计算可获取原始凭证:
1
2
3
// 从源码获取加密字符串和密钥
xorString("U1UdFx0BExsXFBUcFB0dFxQdFxQ=", "V1cV")
// 返回"joe:password123"

JWT信息泄露

案例演示: 解码给定JWT获得管理员凭证:

1
2
3
4
echo -n eyJsZXZlbCI6ImFkbWluIiwicGFzc3dvcmQiOiIyYWM5Y2I3ZGMwMmIzYzAwODNlYjcwODk4ZTU0OWI2MyIsInVzZXJuYW1lIjoiam9lIn0 | base64 -d

# 返回结果包含MD5哈希密码"2ac9cb7dc02b3c0083eb70898e549b63"
# 通过Google破解得到明文密码"joe123"

JWT签名绕过(CVE-2019-7644)

攻击步骤

  1. 修改原始token将用户权限从"user"提升至"admin"
  2. 服务器错误返回预期签名"FO8ZDKSDNVnt_VB3f35_ofEMGFDTrv0dVo8hjGXDtn8"
  3. 使用新签名构造有效token实现权限提升

JWT None算法攻击

利用工具:Burp扩展JOSEPH

  1. 检测到JWT后选择"Signature Exclusion"攻击
  2. 将算法修改为"None"变体(如"nOne")
  3. 删除签名后任意修改payload内容

JWT密钥破解

多难度级别实战

  1. 简单级别:直接字典攻击
    1
    2
    
    john --wordlist=rockyou.txt easy.jwt
    # 秒破密钥"hello"
    
  2. 中等难度:需启用规则转换
    1
    2
    
    john --rules --wordlist=rockyou.txt medium.jwt
    # 破解密钥"Tiger"(首字母大写转换)
    
  3. 困难模式:混合攻击
    1
    2
    
    hashcat -m 16500 -a 6 hard.jwt rockyou.txt ?d?d?d?d
    # 破解复合密钥"powerhouse2020"
    

防御建议

  1. 服务端必须验证所有客户端输入
  2. 避免在JWT中存储敏感信息
  3. 禁用None算法并严格校验签名算法
  4. 使用强密钥并定期轮换
  5. 移除生产环境的调试信息

完整实验代码和更多技术细节请参考GitHub仓库

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