hacktricks/generic-methodologies-and-resources/python/python-internal-read-gadgets.md

4.8 KiB

Python Internal Read Gadgets

Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks:

Informações Básicas

Diferentes vulnerabilidades como Python Format Strings ou Class Pollution podem permitir que você leia dados internos do Python, mas não permitirão que você execute código. Portanto, um pentester precisará aproveitar ao máximo essas permissões de leitura para obter privilégios sensíveis e escalar a vulnerabilidade.

Flask - Ler chave secreta

A página principal de uma aplicação Flask provavelmente terá o objeto global app onde essa chave secreta é configurada.

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

Neste caso, é possível acessar este objeto apenas usando qualquer gadget para acessar objetos globais da página Bypass Python sandboxes.

No caso em que a vulnerabilidade está em um arquivo python diferente, você precisa de um gadget para percorrer arquivos até chegar ao principal para acessar o objeto global app.secret_key para alterar a chave secreta do Flask e poder escalar privilégios conhecendo esta chave.

Um payload como este deste writeup:

{% code overflow="wrap" %}

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

{% endcode %}

Use este payload para alterar app.secret_key (o nome em seu aplicativo pode ser diferente) para poder assinar novos cookies flask com mais privilégios.

Werkzeug - machine_id e node uuid

Usando estes payloads deste artigo você poderá acessar o machine_id e o uuid do nó, que são os principais segredos necessários para gerar o pin do Werkzeug que você pode usar para acessar o console python em /console se o modo de depuração estiver ativado:

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

{% hint style="warning" %} Observe que você pode obter o caminho local do servidor para o app.py gerando algum erro na página web que irá fornecer o caminho. {% endhint %}

Se a vulnerabilidade estiver em um arquivo python diferente, verifique o truque anterior do Flask para acessar os objetos do arquivo python principal.

Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks: