Python Internal Read Gadgets
Reading time: 3 minutes
tip
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.
Informações Básicas
Vulnerabilidades diferentes, 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 até chegar ao principal para acessar o objeto global app.secret_key
para mudar a chave secreta do Flask e poder escalar privilégios conhecendo esta chave.
Um payload como este deste writeup:
__init__.__globals__.__loader__.__init__.__globals__.sys.modules.__main__.app.secret_key
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 node, 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 ativado:
{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug]._machine_id}
{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug].uuid._node}
warning
Note 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.
Se a vulnerabilidade estiver em um arquivo python diferente, verifique o truque Flask anterior para acessar os objetos do arquivo python principal.
tip
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.