Werkzeug / Flask Debug
Configuração instantaneamente disponível para avaliação de vulnerabilidades e teste de penetração. Execute um pentest completo de qualquer lugar com mais de 20 ferramentas e recursos que vão desde a reconhecimento até a geração de relatórios. Não substituímos os pentesters - desenvolvemos ferramentas personalizadas, módulos de detecção e exploração para dar a eles mais tempo para aprofundar, abrir shells e se divertir.
RCE no Console
Se a depuração estiver ativa, você pode tentar acessar /console
e obter RCE.
Também existem vários exploits na internet como este ou um no metasploit.
Protegido por PIN - Traversal de Caminho
Em algumas ocasiões, o endpoint /console
estará protegido por um PIN. Se você tiver uma vulnerabilidade de travessia de arquivo, pode vazar todas as informações necessárias para gerar esse PIN.
Exploração de PIN da Console Werkzeug
Forçar uma página de erro de debug no aplicativo para ver isso:
Um cenário de "console bloqueado" é encontrado 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 real do servidor 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ários dois conjuntos de variáveis, probably_public_bits
e private_bits
:
probably_public_bits
probably_public_bits
username
: Refere-se ao usuário que iniciou a sessão do Flask.modname
: Geralmente designado comoflask.app
.getattr(app, '__name__', getattr(app.__class__, '__name__'))
: Geralmente resolve para Flask.getattr(mod, '__file__', None)
: Representa o caminho completo paraapp.py
dentro do diretório do Flask (por exemplo,/usr/local/lib/python3.5/dist-packages/flask/app.py
). Seapp.py
não for aplicável, tenteapp.pyc
.
private_bits
private_bits
uuid.getnode()
: Obtém o endereço MAC da máquina atual, comstr(uuid.getnode())
traduzindo-o para um formato decimal.Para determinar o endereço MAC do servidor, é necessário identificar a interface de rede ativa usada pelo aplicativo (por exemplo,
ens3
). Em casos de incerteza, vaze/proc/net/arp
para encontrar o ID do dispositivo, em seguida, extraia o endereço MAC de/sys/class/net/<id do dispositivo>/address
.A conversão de um endereço MAC hexadecimal para decimal pode ser realizada conforme 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 (/
).
Last updated