Temptation
Atualizado
Atualizado
The attempted attempt to tempt the untempted into a tempting but contemptible scheme was an untempting temptation that exemplified not only contempt but also a preemptive exemption from any redemptive attempts.
Autor do writeup: @jackskelt
Autor do desafio: @gehaxelt
Você pode acessar os arquivos do desafio no nosso repositório https://github.com/HawkSecUnifei/Writeups
Ao acessar o site, nos deparamos com um campo de input e a pergunta: "Qual a sua tentação?"
Ao digitar qualquer coisa e enviar, o site nos retorna a resposta: "Too tempted!"
Ao inspecionar o código da página, vemos um comentário
Assim podemos acessar o código do backend ao mandar uma requisição para /?source=1
O código é um servidor web.py
. Não podemos colocar o texto "flag" na entrada, que é adicionada a um template, de forma insegura
Para obtermos a flag, precisamos que o texto resultado do template seja "FLAG"
. O sistema de template do web.py
é chamado Templetor, e, como a nossa entrada está sendo passada de forma insegura, podemos aproveitar de funcionalidades do sistema de templates para a execução de código. Nesse caso, podemos utilizar o statement $code
para execução arbitrária de código python. Nossa payload fica dessa maneira:
Para enviar, temos que nos atentar em algumas coisas:
Python é uma linguagem orientada a identação, então para o bloco funcionar, precisamos de uma quebra de linha após o $code
e um de espaçamento antes do self
O statement $code
só funciona se for o início da linha, então precisamos de uma quebra de linha inicial, pois o início da primeira linha é "Your temptation is: "
.
Dito isso, teremos basicamente o código a seguir:
Agora temos que fazer um URL encoding para passar como parâmetro. Temos que o é %0a
e o é %09
, ficando com a seguinte payload
Enviando como POST, recebemos a flag