ITADN
d0ge/sign-saboteur
d0ge/sign-saboteur · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

SignSaboteur

SignSaboteur 是一个用于编辑、签名、验证和攻击已签名令牌的 Burp Suite 扩展。 它支持不同类型的令牌:Django TimestampSigner, ItsDangerous Signer, Express cookie-session 中间件, OAuth2 Proxy, Tornado 的签名 Cookie, Ruby Rails 签名 Cookie, Ruby Rails 加密 Cookie, Nimbus JOSE + JWT 以及未知签名字符串。

你可以在 Portswigger Research 博客文章页面上找到关于该扩展的更多信息 - Introducing SignSaboteur: forge signed web tokens with ease

它提供对 HTTP 请求/响应和 WebSocket 消息中令牌的自动检测和行内编辑, 令牌签名以及针对已签名令牌实现的暴力破解攻击自动化。

它受 Fraser Winterborn 和 Dolph Flynn 的 JWT Token 扩展启发。原始源代码可以在 这里这里 找到。

构建说明

  • 确保已安装 Java JDK 17 或更高版本
  • 从项目根目录运行命令 ./gradlew jar
  • 这应该会将 JAR 文件 sign-saboteur-1.0.6.jar 放置在 build/libs 目录中
  • 可以通过导航到 Extensions 选项卡、Installed 子选项卡,点击 Add 并加载 JAR 文件将其加载到 Burp 中
  • 此 BApp 使用了较新的 Montoya API,因此最好使用最新版本的 Burp(如果最新稳定版存在问题,请尝试早期采用者 渠道)

词表视图

The Wordlist View 允许导入 secrets 和 salts 列表文件。该扩展拥有自己的预构建字典列表。大多数 secrets 取自 jwt-secrets。作为 可选项,可以使用 Flask-Unsign-Wordlist。该扩展支持 JSON 字符串格式以处理特殊字符,使用时请用 " 对 secret 字符串进行引号包裹。

Editor View

The Editor View 支持多种签名令牌:Django、Dangerous、Flask、Express、OAuth2 和 Tornado。它允许在 Burp Suite 的 Proxy、History 和 Repeater 工具中,于 HTTP 请求/响应视图中修改签名令牌。

Dangerous 选项卡可用于 FlaskDjango 令牌,具体选择取决于检测到的是 Dangerous 令牌还是 Django 令牌。

Unknown 选项卡可用于暴力破解未知的签名字符串。猜测模式仅适用于 BalancedDeep 暴力破解攻击。它支持不同的消息派生技术,包括:

  • None 消息将按原样使用
  • CONCAT 分隔符字节将从消息中移除,并使用该新值来计算签名
  • Tornado 分隔符字节将被添加到消息字符串的末尾

可编辑字段

提供了一个 JSON 文本编辑器,用于编辑包含 JSON 内容的每个组件:

  • Dangerous Payload
  • Django Payload(除 pickle 序列化载荷外)
  • Express Payload
  • JWT Payload

提供了一个时间戳编辑器,用于编辑包含时间戳的每个组件:

  • Dangerous timestamp
  • Django timestamp
  • OAuth2 Proxy timestamp
  • Tornado timestamp

为所有签名令牌提供了十六进制编辑器,但 Express 签名除外。注意 Express 选项卡尚不支持签名自动更新。请手动将其复制到对应的签名 cookie 中。

签名

Sign 提供了一个签名对话框,可用于通过使用具有签名功能的 Keys View 中的密钥对令牌进行签名来更新 Signature

暴力破解

Brute force 将尝试查找用于生成签名的密钥。如果找到密钥,将显示一个对话框。

Brute force 选项针对签名令牌签名实现了三种类型的攻击:

  • 已知密钥 仅使用先前发现的密钥
  • 快速 使用默认哈希算法和密钥派生
  • 均衡 使用所有已知的密钥派生技术,但 PBKDF2WithHmacSHA1、PBKDF2WithHmacSHA256 除外
  • 深度 使用所有密钥派生技术,包括 Ruby Rails 框架支持的不同类型

攻击

Attack 选项实现了对签名令牌的八种知名授权攻击:

  • 用户声明
  • 包装的用户声明
  • 用户名和密码声明
  • Flask 声明
  • Express 声明
  • 账户用户声明
  • 已认证声明
  • 用户 access_token

这些攻击将在下文详细描述。

攻击

所有这些攻击可以组合使用。请注意,扩展在 Attack 模块中不支持修改令牌载荷,因此您的载荷将被新的载荷替换。

用户声明

OpenID connect ID 令牌格式通常由签名库用于存储关于已认证用户的信息。 扩展将为 admin 用户 ID 令牌生成占位符。

包装的用户声明

User claims 攻击相同,但会将其放入 user JSON 属性中。

用户名和密码声明

存储用户详情的另一种常见方式是 usernamepassword JSON 属性。扩展将为 admin 用户生成 占位符。

Flask 声明

如果 Flask 已认证用户会话信息存储在客户端,应包含 id_id 以及 user_id_user_id JSON 属性。扩展将为第一个用户(通常是管理员)生成会话。

Express 声明

Express 框架使用 passport JSON 属性来存储用户详情。扩展将为 admin 用户生成占位符。

账户用户声明

某些框架可能使用 account 包装器来存储关于已认证用户的信息。为了利用,可能还需要 使用 Authenticated claims

已认证声明

Authenticated claims 实现了 12 个众所周知的授权标志。

User access_token

User access_token 选项生成的 JWT OpenID connect ID token 使用相同的密钥和相同的哈希算法进行签名, 且未执行任何密钥派生。