Neonify
Atualizado
Atualizado
É hora de uma brilhante revelação de um nunca antes visto "neonificador" de texto. Venha testar nosso mais novo website e faça qualquer texto brilhar como um tubo de neon de lo-fi.
Esse desafio consiste numa aplicação web em Ruby que estiliza a entrada do usuário para que ela receba um efeito Neon.
A aplicação possui apenas um campo para entrada de dados e um botão para enviar o texto informado.
Como o desafio fornece o código-fonte, podemos realizar uma análise para entender seu funcionamento. No index, perceba que a aplicação usa um template para carregar o texto informado pelo usuário:
Esse template é alimentado pelo arquivo neon.erb
, que por sua vez recebe a entrada do usuário por meio de uma requisição POST
, realiza uma validação e renderiza na página.
Esse código valida o parâmetro POST neon
por meio de regular expression e identifica a presença de caracteres que não sejam numerais ou letras de A a Z. Logo a seguir, esse parâmetro é retornado para alimentar o template na página index
.
Pesquisando, descobri que é possível o bypass da expressão regular informando um payload de Server-Side Template Injection logo antes de uma quebra de linha. Dessa forma, a aplicação não consegue validar o payload malicioso e permite a injeção de templates na página.
O payload final ficou da seguinte forma:
Atente-se à quebra de linha antes do bypassed
, é ela que permite o funcionamento do payload. Interceptando o envio da requisição e definindo esse payload, obtemos o seguinte resultado: