SignSaboteur:轻松伪造签名Web令牌的Burp Suite扩展

本文介绍了PortSwigger研发的SignSaboteur工具,这是一个用于编辑、签名、验证和攻击签名Web令牌的Burp Suite扩展。它支持多种令牌类型,提供自动检测、内联编辑、暴力破解攻击等功能,帮助安全研究人员发现和利用令牌安全漏洞。

介绍SignSaboteur:轻松伪造签名Web令牌

签名Web令牌广泛应用于Web无状态认证和授权。最流行的格式是JSON Web令牌(JWT),但除此之外还存在多样化的标准生态系统,每种都有其自己的数据存储和安全实现。

为了帮助评估这些标准,我们发布了一个新的Burp Suite开源扩展SignSaboteur。该工具旨在自动化本文讨论的攻击,确保您不再错过任何不安全的配置。

简要概述

SignSaboteur是一个用于编辑、签名、验证和攻击签名令牌的Burp Suite扩展。它支持不同类型的令牌,包括Django、Flask和Express。该扩展提供:

  • HTTP请求/响应对和WebSocket消息中令牌的自动检测和内联编辑
  • 令牌签名和暴力破解攻击自动化
  • 包含已知默认密钥和盐的预构建单词列表
  • 支持JSON编码字符串,可包含非ASCII密钥
  • 可保存已知密钥用于未来的暴力破解攻击

您可以在Proxy和Repeater消息编辑器中修改签名令牌。有多个内置便捷编辑器用于JSON、时间戳和HEX字符串。

但该工具的真正威力在于未知签名字符串模式 - 稍后会详细介绍。

方法论

要利用签名令牌,通常需要发现密钥。这些密钥可能披露在源代码、配置文件、文档页面和错误消息中。

要检测和利用签名Web令牌,我们推荐以下方法:

  1. 观察请求/响应的cookie、URL、body参数中潜在的签名令牌:base64编码或已知HMAC常见长度的十六进制字符串
  2. 如果签名Web令牌包含时间戳,观察令牌过期时签名是否变化
  3. 尝试识别目标使用的任何框架
  4. 尝试使用不同的派生技术暴力破解令牌

如果您发现密钥,尝试以下攻击:

  • 如果令牌结构已知,将id更改为高权限账户(通常为1)
  • 如果令牌结构未知,使用常用列表暴力破解参数名称:id、user_id、username等

配置暴力破解攻击

暴力破解攻击针对每种类型的签名令牌进行配置。SignSaboteur使您能够使用不同的策略来查找密钥和盐:

  • 已知密钥 - 仅使用先前找到的密钥
  • 快速 - 使用默认哈希算法和密钥派生
  • 平衡 - 使用所有已知的密钥派生技术,除了慢速的PBKDF2 Hmac
  • 深度 - 使用所有密钥派生技术,包括Ruby on Rails框架支持的不同类型

配置授权绕过攻击

一旦识别出密钥,您可以使用扩展运行多个授权绕过攻击。所有这些攻击可以一起使用:

  • 用户声明 - 一组OpenID Connect标准声明
  • 包装用户声明 - 将协作负载注入用户JSON属性
  • 用户名和密码声明 - 为admin用户生成占位符
  • Flask声明 - 为第一个用户(通常是admin)生成会话
  • Express声明 - 为admin用户生成占位符
  • 账户用户声明 - 使用账户包装器存储认证用户信息
  • 认证声明 - 最知名的认证标志
  • 用户access_token - 使用相同密钥和哈希算法生成JWT OpenID连接ID令牌

开始使用

首先需要在Burp Suite中安装SignSaboteur。可以从Extensions选项卡下的BApp Store安装。当然,您也可以从源代码构建扩展。

要使用扩展,打开任何包含签名Web令牌的HTTP请求/响应对,然后转到SignSaboteur选项卡。包含签名Web令牌的消息会在Proxy > HTTP history选项卡中自动高亮显示。

基本用例

在SignSaboteur选项卡中,您可以查看扩展识别的所有签名Web令牌。这些出现在Token下拉菜单中。每个Web签名令牌类型支持快速暴力破解攻击模式。该模式仅使用已知消息和派生方法。

如果扩展找到密钥和盐,您将看到新密钥对话框。您可以使用已知密钥进行未来攻击。单击Brute Force > Known keys或单击Attack并从Signing keys下拉菜单中选择密钥。要更改密钥,请转到SignSaboteur > Wordlist选项卡。

设置

您可以在SignSaboteur > Settings选项卡中配置搜索策略以适合您的偏好。支持的所有令牌列表可供参考。请注意,默认情况下禁用某些令牌以减少噪音。

未知签名Web令牌用例

当您在Enabled signers菜单中选择Unknown时,扩展会查找与常见哈希函数大小匹配的模式。某些消息负载可能被SignSaboteur错误识别。您可以手动更改消息和分隔符值来解决此问题。扩展支持不同的消息和密钥派生技术进行暴力破解攻击,因此您不必手动更改它们。

要查找未知签名令牌的密钥,请转到Unknown选项卡,单击Brute force并选择Balanced或Deep模式。请注意,深度暴力破解模式支持慢速哈希函数,如基于密码的密钥派生函数2。仅使用小单词列表,否则任务将花费太长时间。

小演示

这个简短的GIF演示了如何查找Flask测试应用程序的未知密钥,修改会话令牌并重新签名。

最后说明

您可以在GitHub存储库中的自托管实验室中尝试该扩展的实际操作。祝你好运并玩得开心!

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