Python Internal Read Gadgets

Reading time: 5 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

基本情報

Pythonフォーマット文字列クラス汚染などの異なる脆弱性は、Python内部データを読み取ることはできるが、コードを実行することはできないかもしれません。したがって、ペンテスターはこれらの読み取り権限を最大限に活用して、機密特権を取得し、脆弱性をエスカレートさせる必要があります。

Flask - 秘密鍵の読み取り

Flaskアプリケーションのメインページには、appグローバルオブジェクトがあり、ここでこの秘密が設定されています

python
app = Flask(__name__, template_folder='templates')
app.secret_key = '(:secret:)'

この場合、Pythonサンドボックスのバイパスページからグローバルオブジェクトにアクセスするために、任意のガジェットを使用してこのオブジェクトにアクセスすることが可能です。

脆弱性が異なるPythonファイルにある場合、グローバルオブジェクトapp.secret_keyにアクセスしてFlaskのシークレットキーを変更し、このキーを知って権限を昇格させるために、ファイルを横断するためのガジェットが必要です。

このようなペイロードはこの解説から:

python
__init__.__globals__.__loader__.__init__.__globals__.sys.modules.__main__.app.secret_key

このペイロードを使用して、app.secret_key(あなたのアプリでは名前が異なる場合があります)を変更し、新しくより多くの権限を持つフラスククッキーに署名できるようにします。

Werkzeug - machine_id と node uuid

この書き込みからのペイロードを使用することでmachine_iduuid ノードにアクセスでき、これらは 主な秘密 であり、Werkzeugピンを生成するために必要です。これを使用して、デバッグモードが有効な場合/console で Python コンソールにアクセスできます。

python
{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug]._machine_id}
{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug].uuid._node}

warning

app.pyサーバーのローカルパスを取得するには、ウェブページでエラーを生成する必要があります。これにより、パスが得られます。

脆弱性が別のPythonファイルにある場合は、メインPythonファイルからオブジェクトにアクセスするための前のFlaskトリックを確認してください。

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする