Temptation
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
$codee um de espaçamento antes doselfO statement
$codesó 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

Atualizado