https://ctf.devechio.com/flag.php?evento=24
Ao abrir o link do desafio obtemos uma página com um vídeo do SimpsonWave tocando de fundo e um espaço para pesquisar, também pode se notar no titulo da página "PatoPatoVai" que traduzindo para o inglês temos DuckDuckGo que é um motor de busca muito conhecido na internet.
Como a maioria dos desafios que envolvem WEB possuem alguma dica/segredo no robots.txt
vamos olhar o que tem no robots.txt
:
Achamos um arquivo chamado flag
suspeito, ao entrar no arquivo temos a seguinte mensagem:
{"status":"failed","msg":"IP não faz parte da rede interna"}
Parece que ele aceita apenas quem faz parte da sua rede interna, ou seja: quem tiver o ip da rede interna do desafio pode vizualiar a suposta flag
.
Voltando ao motor de busca vamos entender um pouco de seu funcionamento.
Ao pesquisa qualquer coisa no motor de busca ele abre uma janela com a seguinte url: http://159.89.47.242/search/***sua pesquisa***
.
Ele tira uma screenshot da seguinte url https://duckduckgo.com/***sua pesquisa***
e faz o upload no servidor do desafio.
No código fonte da página a gente consegue vizualizar uma parte do script:
<script> setTimeout(function() { document.getElementById("page").src="http://159.89.47.242/pics/4qllo5bq4tahxmufh8uzw9igu2moef69.png"; }, 10000); </script>
Ele salva a imagem da busca em /pics/
e depois manda a imagem na página.
- O motor de busca funciona basicamente assim: Você pesquisa > o motor de busca acessa o DuckDuckGo com a sua pesquisa > Ele tira uma screenshot da página de pesquisa > Salva no site do desafio > E por fim ele carrega a imagem na página de busca.
O que podemos fazer é estar procurando por falhas ou tricks no DuckDuckGo, eu pesquisei por BugBounty no DuckDuckGo e então em um dos links encontrei uma poc de Open Redirection no DuckDuckGo:
Essa falha no caso utiliza o y.js
que está presente no DuckDuckGo para redirecionar para páginas que o usuario colocar, demonstração:
Payload: y.js?redir_token=k6BmVRzCEuHaPwUZ-LUDdqOIw818MTUxMzgyNTY1MEAxNTEzNzM5MjUw&u3=https://google.com
Para funcionar temos que encodar o payload em URL ENCODE
Payload Encodado: y.js%3Fredir_token%3Dk6BmVRzCEuHaPwUZ-LUDdqOIw818MTUxMzgyNTY1MEAxNTEzNzM5MjUw%26u3%3Dhttps%3A%2F%2Fgoogle.com
Agora testamos no nosso desafio:
E pronto, redirecionado com sucesso para o Google, agora para pegar a flag basta por o link do desafio com o /flag
.
que foda! parabéns