
SignSaboteurは、様々な署名付きWebトークンの編集、署名、検証を行うためのBurp Suite拡張機能です。
SignSaboteurは、署名付きトークンの編集、署名、検証、攻撃を行うためのBurp Suite拡張機能です。以下の種類のトークンをサポートしています:Django TimestampSigner、ItsDangerous Signer、Express cookie-session middleware、OAuth2 Proxy、Tornadoの署名付きクッキー、Ruby Rails Signed cookies、Ruby Rails Encrypted cookies、Nimbus JOSE + JWT、および不明な署名文字列。
拡張機能の詳細については、Portswigger Researchのブログ記事ページをご覧ください - SignSaboteurの紹介:署名付きWebトークンを簡単に偽造。
HTTPリクエスト/レスポンスおよびWebSocketメッセージ内のトークンの自動検出とインライン編集、トークンの署名、および署名付きトークン実装に対するブルートフォース攻撃の自動化を提供します。
これはFraser Winterborn氏とDolph Flynn氏のJWT Token拡張機能に触発されました。元のソースコードはこちらおよびこちらにあります。
./gradlew jar を実行しますsign-saboteur-1.0.6.jar が build/libs ディレクトリ内に配置されますExtensionsタブ、Installedサブタブに移動し、AddをクリックしてJARファイルをロードします
Wordlist Viewを使用すると、シークレットとソルトのリストファイルをインポートできます。拡張機能は独自のプリビルド辞書リストを持っています。ほとんどのシークレットはjwt-secretsから取得されています。オプションとして、Flask-Unsign-Wordlistを使用することもできます。拡張機能は特殊文字のJSON文字列形式をサポートしており、使用するにはシークレット文字列を"で引用符で囲みます。
Editor Viewは、Django、Dangerous、Flask、Express、OAuth2、Tornadoなどの多くの署名付きトークンをサポートしています。Burp Suiteのプロキシ、履歴、RepeaterツールのHTTPリクエスト/レスポンスビューで署名付きトークンを変更できます。
DangerousタブはFlaskトークンとDjangoトークンの両方に使用でき、DangerousトークンまたはDjangoトークンが検出されたかに応じて選択されます。
Unknownタブは、不明な署名文字列をブルートフォースするために使用できます。推測モードは、_Balanced_および_Deep_ブルートフォース攻撃でのみ機能します。以下のような異なるメッセージ派生テクニックをサポートしています:
JSONコンテンツを含む各コンポーネントを編集するためのJSONテキストエディタが提供されています:
タイムスタンプを含む各コンポーネントを編集するためのタイムスタンプエディタが提供されています:
16進数エディタは、Express署名を除くすべての署名付きトークンに提供されています。注 Expressタブはまだ署名の自動更新をサポートしていません。対応する署名クッキーに手動でコピーしてください。
Signは、署名機能を持つKeys Viewのキーを使用してトークンに署名することで署名を更新できる署名ダイアログを表示します
Brute forceは、署名生成に使用された秘密鍵を見つけようとします。秘密鍵が見つかった場合は、ダイアログが表示されます。
Brute forceオプションは、署名付きトークンの署名に対する3種類の攻撃を実装しています:
Attackオプションは、署名付きトークンに対する8つのよく知られた認証攻撃を実装しています:
これらについては以下で詳しく説明します。
これらの攻撃はすべて一緒に使用できます。拡張機能はAttackモードでトークンペイロードの変更をサポートしていないため、ペイロードは新しいものに置き換えられることに注意してください。
OpenID Connect IDトークン形式は、通常、署名ライブラリが認証済みユーザーに関する情報を保存するために使用します。拡張機能はadminユーザーIDトークンのプレースホルダーを生成します。
User claims攻撃と同じですが、user JSON属性に配置されます。
ユーザー詳細を保存するもう一つの一般的な方法は、usernameおよびpassword JSON属性です。拡張機能はadminユーザーのプレースホルダーを生成します。
Flaskの認証済みユーザーセッション情報がクライアント側に保存される場合、id、_id、user_idまたは_user_id JSON属性を含める必要があります。拡張機能は最初のユーザー(通常はadmin)のセッションを生成します。
Expressフレームワークはpassport JSON属性を使用してユーザー詳細を保存します。拡張機能はadminユーザーのプレースホルダーを生成します。
一部のフレームワークは認証済みユーザーに関する情報を保存するためにaccountラッパーを使用する場合があります。悪用には、Authenticated claimsも使用する必要があるかもしれません。
認証済みクレームは12のよく知られた認証フラグを実装しています。
User access_tokenオプションは、鍵導出を行わずに、同じキーと同じハッシュアルゴリズムで署名されたJWT OpenID Connect IDトークンを生成します。