4.8 KiB
Python Internal Read Gadgets
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
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 esta chave secreta está 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 de Bypass Python sandboxes.
No caso em que a vulnerabilidade está em um arquivo python diferente, você precisa de um gadget para percorrer arquivos para chegar ao principal e acessar o objeto global app.secret_key
para mudar a chave secreta do Flask e poder escalar privilégios conhecendo esta chave.
Uma carga útil como esta deste writeup:
{% code overflow="wrap" %}
__init__.__globals__.__loader__.__init__.__globals__.sys.modules.__main__.app.secret_key
{% endcode %}
Use este payload para mudar app.secret_key
(o nome no seu app pode ser diferente) para poder assinar novos e mais privilegiados cookies do flask.
Werkzeug - machine_id e node uuid
Usando esses payloads deste writeup você poderá acessar o machine_id e o uuid do nó, que são os principais segredos que você precisa para gerar o pin do Werkzeug que você pode usar para acessar o console python em /console
se o modo de depuração estiver habilitado:
{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 da web que te dará o caminho.
{% endhint %}
Se a vulnerabilidade estiver em um arquivo python diferente, verifique o truque Flask anterior para acessar os objetos do arquivo python principal.
{% hint style="success" %}
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.