Werkzeug / Flask Debug
Last updated
Last updated
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Obtenha a perspectiva de um hacker sobre seus aplicativos web, rede e nuvem
Encontre e relate vulnerabilidades críticas e exploráveis com impacto real nos negócios. Use nossas 20+ ferramentas personalizadas para mapear a superfície de ataque, encontrar problemas de segurança que permitem escalar privilégios e usar exploits automatizados para coletar evidências essenciais, transformando seu trabalho árduo em relatórios persuasivos.
Se o debug estiver ativo, você pode tentar acessar /console
e obter RCE.
Há também vários exploits na internet, como este ou um no metasploit.
Em algumas ocasiões, o endpoint /console
estará protegido por um PIN. Se você tiver uma vulnerabilidade de traversal de arquivo, pode vazar todas as informações necessárias para gerar esse PIN.
Force uma página de erro de depuração no aplicativo para ver isso:
Uma mensagem sobre o cenário "console locked" é encontrada ao tentar acessar a interface de depuração do Werkzeug, indicando a necessidade de um PIN para desbloquear o console. A sugestão é explorar o PIN do console analisando o algoritmo de geração de PIN no arquivo de inicialização de depuração do Werkzeug (__init__.py
). O mecanismo de geração de PIN pode ser estudado no repositório de código-fonte do Werkzeug, embora seja aconselhável obter o código do servidor real por meio de uma vulnerabilidade de travessia de arquivos devido a possíveis discrepâncias de versão.
Para explorar o PIN do console, são necessárias duas conjuntos de variáveis, probably_public_bits
e private_bits
:
probably_public_bits
username
: Refere-se ao usuário que iniciou a sessão Flask.
modname
: Geralmente designado como flask.app
.
getattr(app, '__name__', getattr(app.__class__, '__name__'))
: Geralmente resolve para Flask.
getattr(mod, '__file__', None)
: Representa o caminho completo para app.py
dentro do diretório Flask (por exemplo, /usr/local/lib/python3.5/dist-packages/flask/app.py
). Se app.py
não for aplicável, tente app.pyc
.
private_bits
uuid.getnode()
: Obtém o endereço MAC da máquina atual, com str(uuid.getnode())
traduzindo-o para um formato decimal.
Para determinar o endereço MAC do servidor, deve-se identificar a interface de rede ativa usada pelo aplicativo (por exemplo, ens3
). Em casos de incerteza, leak /proc/net/arp
para encontrar o ID do dispositivo, em seguida, extraia o endereço MAC de /sys/class/net/<device id>/address
.
A conversão de um endereço MAC hexadecimal para decimal pode ser realizada como mostrado abaixo:
get_machine_id()
: Concatena dados de /etc/machine-id
ou /proc/sys/kernel/random/boot_id
com a primeira linha de /proc/self/cgroup
após a última barra (/
).
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)