Great Lakes Security Conference CTF — Hackeando Apps NodeJS — Parte 5
Mr. Roboto
Esta é a parte 5 da Série Great Lakes Security Conference CTF — Hackeando Apps NodeJS.
Este desafio começa com a tela abaixo:
Não tem nenhum input e nenhum local pra post. O código-fonte também não apresenta nenhuma pista:
<!DOCTYPE html> <html lang="en"> <body> <div>Mr Roboto sez: The flag is not on this page.</div> <div>Note: dirbuster, nikto, etc.. are not needed</div> </body> </html>
Esse desafio é mais no modo mais scavenger hunt (caça ao tesouro), com pistas que levam à próxima pista. A pista é o próprio nome do desafio: “Mr Roboto”. Ele indica que deve ter algo no robots.txt que nos ajude.
Tem duas pistas aí, mas vamos entender o conteúdo do arquivo escondido /hidden892734569.html. Guarde esse user-agent (kilroy) na cabeça por enquanto, porque ele chama a atenção.
A dica, bem óbvia, é procurar o arquivo de estilos CSS (stylesheet). Aqui há uma brincadeira do desafio, onde ele faz uma série de redirects (HTTP 302), até levar você onde está o arquivo style.css correto, no path /css/style.css.
Com isso, chegamos ao CSS que interessa:
Ele diz que já passamos por uma interesting clue (pista interessante). Além do que já analisamos (conteúdo de páginas e códigos), o que ficou pra trás foram os conteúdos dentro da comunicação HTTP: os headers. De fato, um header chama a atenção em um dos redirects:
Esse cabeçalho interesting não é padrão do HTTP e chama a atenção. Ele também tem um conteúdo que é base64 (denunciado pelo ‘=’ no final). Decodificar esse conteúdo é muito simples, via comando base64 no Linux. Se estiver no Windows, dá pra encontrar uma solução também (eu uso o Git Bash quando estou no Windows), mas tem muitos sites que fazem isso (Google “decode base64 online”).
$ echo "TXIuIFJvYm90byBzZXo6IFRyeSBnb2luZyB0byAvY3NzL3N0eWxlNzU2NDg3NS5jc3M=" | base64 -dMr. Roboto sez: Try going to /css/style7564875.css
A pista aqui é direta para o arquivo específico /css/style7564875.css.
Chegamos a uma nova pista, mas ele pede pra testar com um User-Agent diferente. Qual seria? Pra nossa sorte, ele deu a dica lá em cima (lembra do Kilroy no arquivo robots.txt?). Com isso, é fácil testar um user-agent diferente via comando cURL no Linux (ou via algum plugin no navegador).
curl 'https://host/css/style7564875.css' -H 'user-agent: kilroy'% Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent Left Speed100 54 100 54 0 0 66 0 --:--:-- --:--:-- --:--:-- 66Mr. Roboto is proud of you! GLSC{d0m0_4r19470u_h4ck3r}
Mais uma flag pra conta! :)
Referências
- Parte 1 da série: https://neptunian.medium.com/great-lakes-security-conference-ctf-hackeando-apps-nodejs-parte-1-6e0f90a6b9a3
- Perfil do CTF — no CTF Time: https://ctftime.org/event/1051
- Meu perfil no CTF Time: https://ctftime.org/team/122851
- Link Direto do Evento: https://glsc.tech/
- Robots.txt: https://portswigger.net/kb/issues/00600600_robots-txt-file
- User Agent Spoofing e Ataques: https://betanews.com/2017/03/22/user-agent-based-attacks-are-a-low-key-risk-that-shouldnt-be-overlooked/
- Twitter: @NeptunianHacks