NahamCon CTF — Write-Up: Seriously (Web Hacking)

Neptunian
4 min readJun 15, 2020

--

NahamCon CTF

Este CTF me chamou atenção pela quantidade de inscritos (3000 equipes) e pelo próprio naham, que é um hacker muito conhecido na comunidade internacional. E com muitos desafios web interessantes.

A competição acabou, mas os desafios continuam disponíveis.

https://ctf.nahamcon.com/challenges

Tela inicial dos desafios Web

Infelizmente tive pouco tempo e já iniciei somente no sábado à tarde (perdi toda a sexta). Também perdi muito tempo com o phphonebook, que não resolvi (lição aprendida — não gastar todo o tempo só com um maldito desafio).

Este desafio, chamado de Seriously, foi bem interessante e gratificante, porque, apesar de valer poucos pontos, só foi quebrado por 22 equipes. E eu estou na lista!

Iniciando o desafio

Então nós temos 5 “lojas de plantas”, que precisamos hackear pra obter a flag. De primeira achei que seria algum tipo de escalada de privilégios envolvendo lojas diferentes com níveis diferentes de acesso.

Já começamos com duas dicas:

  • Uma mensagem dizendo que o checkout está desabilitado devido a problemas de segurança.
  • O próprio nome do jogo (“seriously”), como percebi depois.

Tentei todas as lojas pra ver se tinha alguma com checkout aberto, mas não tinha nenhuma (lojas 3 e 4 estavam fora).

Tela de uma das lojas de plantas

Vulnerabilidade Encontrada

A URL /cart (carrinho de compras) usava um cookie também chamado cart pra armazenar os produtos selecionados, codificados em base64:

Base64:

Cookie: cart=eyJpdGVtcyI6eyIwIjp7Im5hbWUiOiJIYXdvcnRoaW9wc2lzIGF0dGVudWF0YSIsInByaWNlIjoxOS45OSwiY291bnQiOjF9LCIyIjp7Im5hbWUiOiJEcmFjYWVuYSB0cmlmYXNjaWF0YSIsInByaWNlIjoxNC45OSwiY291bnQiOjF9fX0K

Decodificado:

{"items":{"0":{"name":"Haworthiopsis attenuata","price":19.99,"count":1},"2":{"name":"Dracaena trifasciata","price":14.99,"count":1}}}

Com um erro 404, descubro que é uma aplicação JavaScript/NodeJS.

Erro 404, vazando a informação sobre tecnologia do site e paths importantes

E outra coisa interessante: a aplicação fica em /home/user/app.js. A flag provavelmente estaria nesse código ou nessa pasta.

Com isso, existe um ponto de ataque pra testar: Javascript Object Deserialization Vulnerability.

Primera tentativa: Comandos Linux (Shell)

Usando um payload que encontrei online, tentei chamar comandos do SO. O trecho abaixo tem a mesma estrutura do cart, mas mudei o name pra função evil:

O plano é serializar o objeto evil e enviar para o servidor.

Uma coisa importante sobre o () acima: se você colocar os parênteses nesse construtor, ele já vai rodar a função e a versão serializada não vai com a função, mas com o resultado da execução. Por isso, resolvi serializar primeiro e incluir o parêntese depois. O parêntese precisa estar lá pra que a função seja executada automaticamente no alvo.

E testando:

Agora eu tenho um payload. E funciona localmente quando eu simulo a deserialização (ele gera o arquivo nep10.txt). Mas eu não consegui fazer o shell funcionar no servidor (tentei fazer chamadas via curl).

Hackeando com Javascript

Eu não preciso realmente de um shell quando eu posso rodar código Javascript no servidor. Então vamos evoluir o objeto evil.

O plano é enviar o resultado dos comandos para o requestcatcher, que é uma ferramenta gratuita online pra receber/testar requests. Pra isso, criei o a url https://neptunian147.requestcatcher.com pra receber os meus resultados.

O plano inicial é listar os arquivos do diretório /home/user e ver se encontramos a flag.

E depois disso, sucesso! Estamos rodando código no servidor e recebendo os resultados. Flag encontrada no diretório.

Arquivos listados di /home/user do servidor

Então vamos incluir um trecho de código pra enviar o conteúdo da flag pro requestcatcher, em base64 pra evitar qualquer problema de codificação/protocolo:

E então recebemos:

Arquivos + Flag em Base64

E decodificando:

$ echo "ZmxhZ3tzZXJpb3VzbHlfZGVzZXJpYWxpemF0aW9uX3dpdGhfcGxhbnRzfQo=" | base64 -d
flag{seriously_deserialization_with_plants}

Owned!

Referências

Artigos sobre a técnica utilizada

Payload Final

Código completo do Exploit

Trecho de código do novo objeto evil, pra geração do payload:

Original em inglês: https://github.com/Neptunians/nahamcon-ctf/blob/master/seriously/README.md

--

--

Neptunian
Neptunian

Written by Neptunian

Hacker tiozão do pavê de final de semana

No responses yet