Werkzeug / Flask Debug
脆弱性評価とペネトレーションテストのための即時利用可能なセットアップ。20以上のツールと機能を使用して、どこからでも完全なペンテストを実行できます。リコンからレポーティングまで対応しています。私たちはペンテスターを置き換えるのではなく、彼らがより深く掘り下げ、シェルをポップし、楽しむための時間を取り戻すためにカスタムツール、検出およびエクスプロイトモジュールを開発しています。
コンソール RCE
デバッグがアクティブな場合、/console
にアクセスしてRCEを取得することを試みることができます。
インターネット上には、これやmetasploitのものなど、いくつかのエクスプロイトがあります。
ピン保護 - パス・トラバーサル
場合によっては、/console
エンドポイントがピンで保護されることがあります。ファイルトラバーサル脆弱性がある場合、そのピンを生成するために必要なすべての情報を漏洩させることができます。
Werkzeug コンソール PIN エクスプロイト
アプリでデバッグエラーページを強制的に表示させて、これを確認します:
A message regarding the "console locked" scenario is encountered when attempting to access Werkzeug's debug interface, indicating a requirement for a PIN to unlock the console. The suggestion is made to exploit the console PIN by analyzing the PIN generation algorithm in Werkzeug’s debug initialization file (__init__.py
). The PIN generation mechanism can be studied from the Werkzeug source code repository, though it is advised to procure the actual server code via a file traversal vulnerability due to potential version discrepancies.
コンソールPINを悪用するには、2つの変数セット、probably_public_bits
と private_bits
が必要です:
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
)を特定する必要があります。不明な場合は、**/proc/net/arp
を漏洩させてデバイスIDを見つけ、次に/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