Werkzeug / Flask Debug
どこからでも利用可能な脆弱性評価&ペネトレーションテストのための即時セットアップ。レコンからレポート作成まで、20以上のツールと機能を使用して完全なペンテストを実行します。私たちはペンテスターを置き換えるのではなく、カスタムツール、検出、およびエクスプロイトモジュールを開発して、彼らにより深く掘り下げる時間を与え、シェルをポップして楽しんでもらいます。
コンソールRCE
デバッグがアクティブな場合、/console
にアクセスして RCE を取得しよう。
インターネット上にはこれのような脆弱性がいくつか存在します。また、metasploitにも同様のものがあります。
Pin Protected - パストラバーサル
場合によっては、/console
エンドポイントが PIN で保護されることがあります。ファイルトラバーサルの脆弱性がある場合、その PIN を生成するために必要なすべての情報を漏洩させることができます。
Werkzeug Console PIN Exploit
アプリ内でデバッグエラーページを強制して、これを参照してください:
Werkzeugのデバッグインターフェースにアクセスしようとすると、「コンソールがロックされている」というシナリオに遭遇し、コンソールをアンロックするためにPINが必要であることが示されます。Werkzeugのデバッグ初期化ファイル(__init__.py
)内のPIN生成アルゴリズムを解析してコンソールPINを悪用することが提案されています。PIN生成メカニズムはWerkzeugソースコードリポジトリから調査できますが、潜在的なバージョンの不一致のため、実際のサーバーコードをファイルトラバーサルの脆弱性を利用して入手することが推奨されています。
コンソールPINを悪用するためには、probably_public_bits
とprivate_bits
の2つの変数セットが必要です:
probably_public_bits
probably_public_bits
username
: Flaskセッションを開始したユーザーを指します。modname
: 通常はflask.app
と指定されます。getattr(app, '__name__', getattr(app.__class__, '__name__'))
: 一般的にはFlaskに解決されます。getattr(mod, '__file__', None)
: Flaskディレクトリ内のapp.py
への完全なパスを表します(例:/usr/local/lib/python3.5/dist-packages/flask/app.py
)。app.py
が適用されない場合は、app.pyc
を試してください。
private_bits
private_bits
uuid.getnode()
: 現在のマシンのMACアドレスを取得し、str(uuid.getnode())
で10進数形式に変換します。サーバーのMACアドレスを特定するには、アプリで使用されているアクティブなネットワークインターフェースを特定する必要があります(例:
ens3
)。不確実な場合は、デバイスIDを見つけるために**/proc/net/arp
をリークし、その後/sys/class/net/<device id>/address
**からMACアドレスを抽出します。16進数のMACアドレスを10進数に変換する方法は以下の通りです:
get_machine_id()
:/etc/machine-id
または/proc/sys/kernel/random/boot_id
からのデータと、/proc/self/cgroup
の最後のスラッシュ(/
)以降の最初の行からのデータを連結します。
Last updated