CTF-Elytron-write-up
Write-up do CTF realizado pela Elytron Security em parceria com a Universidade Mackenzie.
- Encoding and Cryptography
- Forensics
- Traffic Analysis
- Web
Encoding and Cryptography
Unbase the secrets 01
Pontuação 100
Enunciado
Para resolver este desafio, é necessário conseguir reconhecer padrões no texto. Extraia a flag a partir do texto abaixo:
VFVGRFMzdE5lVjltTVhKek4xOHpibU13WkRGdVoxOW1iRFJuZlE9PQo=
Resolução
De cara se nota que trata-se de um base64. Mas, para ter certeza, pode-se confirmar utilizando algum identificador de hashes.
TUFDS3tNeV9mMXJzN18zbmMwZDFuZ19mbDRnfQ==
Ao decodificar o texto, obtemos um novo texto codificado (também em base64). Para solucionar o problema, deve-se decodificar o novo texto gerado. O resultado será a flag.
MACK{My_f1rs7_3nc0d1ng_fl4g}
Unbase the secrets 02
Pontuação 150
Enunciado
Agora que você já consegue reconhecer padrões de base64, é hora de partir para algo não tão utilizado assim. Decifre o texto abaixo para garantir a flag:
JJLECVKHKMZTGSKJGJCEWTJSG5DU2WSGGYZEYVCMGVKEQSZTKM3UOUKZKRBVQM2EI5JFSRCDJZNF KTSRGJMDEPJ5HUFA====
Resolução
A hash possui erroneamente um espaço em branco no meio. Deve-se juntar as duas partes em uma só hash e decodificá-la.
JJLECVKHKMZTGSKJGJCEWTJSG5DU2WSGGYZEYVCMGVKEQSZTKM3UOUKZKRBVQM2EI5JFSRCDJZNFKTSRGJMDEPJ5HUFA====
Ao colocar o texto codificado em um identificador de hashes, notamos que trata-se de base32. Essa flag funciona de maneira semelhante à anterior. Ao decodificarmos a primeira base32, obtemos outro texto codificado.
JVAUGS33II2DKM27GMZF62LTL5THK3S7GQYTCX3DGRYDCNZUNQ2X2===
Devemos novamente decodificar esse texto utilizando base32 para obtermos a flag.
MACK{B453_32_is_fun_411_c4p174l5}
Files as stream of data
Pontuação 200
Enunciado
Arquivos são nada mais que dados agregados em uma forma específica. É possível transformar arquivos em texto de diversas formas. Tente recuperar o arquivo executável que foi convertido para uma sequência de códigos hexadecimais, armazenados no arquivo anexo.
<dump.hex>
Resolução
O enunciado inclui um arquivo com a extensão .hex que deve ser baixado. Ao abrir o arquivo em um editor de texto é possível perceber que trata-se de uma sequência de bytes em hexadecimal. Como o enunciado diz que esse arquivo foi "convertido para uma sequência de códigos hexadecimais", o mais óbvio é tentar "desconverter" esses valores.
Para isso, devemos utilizar um conversor para obtermos o texto limpo. Ao convertermos o arquivo .hex obtemos o que parece ser um arquivo .elf. Podemos tentar executar esse arquivo binário ou simplesmente buscarmos pela flag dentro das strings do arquivo. Isso pode ser feito utilizando-se o programa strings ou simplesmente abrindo o arquivo em um editor de texto e procurar pela flag.
MACK{Hello, World!}
Forensics
Find me between bytes
Pontuação 200
Enunciado
Este desafio requer cavar um pouco mais fundo do que apenas "strings" para encontrar a flag correta. Analise o binário anexo e pontue com a flag oculta.
<only_a_binary>
Resolução
Esse desafio inclui um arquivo executável no formato elf que deve ser baixado. O arquivo imprime um flag decoy ao ser executado.
Podemos analisar a possibilidade de bufferoverflow, apesar de nada indicar que o arquivo recebe qualquer entrada de dados. Ao procurarmos por symbols, torna-se claro que o programa não recebe nenhum input:
nm -D only_a_binary
Ao utilizarmos o strings no arquivo não é possível encontrar nenhuma outra string que indique a flag. Entretanto, encontra-se os bytes que formam 'JFIF', o que nos indica um possível header de um arquivo de imagem. Além disso, outras sequências de bytes são caraterísticas de arquivos de imagem.
Devemos então extrair o arquivo .jfif contido dentro do binário. Para isso podemos editar os bytes do arquivo, mantendo apenas o que está entre a sequência FF D8 e a sequência FF D9. Abrimos o arquivo resultante como um jfif e obtemos a flag.
Entretanto, o jeito mais fácil de obter a flag é utilizar o foremost.
foremost only_a_binary -t all
Como saída obtemos um arquivo com a extensão .jfif. A flag está justamente impressa na imagem.
MACK{Foremost_is_the_easiest_way_to_find_me}
Traffic Analysis
Investigação de Tráfego Suspeito 01
Pontuação 300
Enunciado
Uma denuncia anônima foi feita pelo canal de comunicação interno de uma empresa alegando que um dos funcionários estaria extraindo informações sigilosas para fora da empresa. Foi dito que ele estaria vazando informações diversas sobre a infraestrutura da rede interna e que estaria fazendo isso de forma furtiva pela rede. Uma captura de tráfego foi realizada durante um determinado tempo para tentar descobrir se a informação era verídica.
Qual foi o protocolo utilizado para exfiltrar as informações?
A flag deve estar no formado MACK{nomesemespacoeminusculo}
<captura.pcap>
Resolução
O enunciado inclui um arquivo .pcap. Ao abrirmos o arquivo no Wireshark encontramos mais de 12000 linhas. É possível filtrar os protocolos existentes no arquivo. Como o desafio solicita apenas o nome do protocolo, o jeito menos trabalhoso é tentar diferentes protocolos na flag. Outra maneira é analizar o conteúdo dos pacotes enviados e recebidos e notar que existem bytes extras nos pacotes ICMP.
MACK{icmp}
Investigação de Tráfego Suspeito 02
Pontuação 500
Enunciado
Uma denuncia anônima foi feita pelo canal de comunicação interno de uma empresa alegando que um dos funcionários estaria extraindo informações sigilosas para fora da empresa. Foi dito que ele estaria vazando informações diversas sobre a infraestrutura da rede interna e que estaria fazendo isso de forma furtiva pela rede. Uma captura de tráfego foi realizada durante um determinado tempo para tentar descobrir se a informação era verídica.
Encontre a informação exfiltrada e responda às informações abaixo:
1 - Qual o nome do arquivo confidencial mencionado na mensagem de exfiltração? 2 - A que horas ocorrerá a reunião do diretor mencionada na mensagem? 3 - Com qual empresa será fechado um contrato de 7 milhões de dólares? 4 - Qual a data marcada para o fechamento do contrato?
Formatos das flags: MACK{99:99} MACK{dd/mm/aaaa} MACK{Arquivo.ext}
Resolução
Como já sabemos que o protocolo alvo é o ICMP, devemos analisar o conteúdo dos pacotes ICMP recebidos e enviados. É possível notar alguns bytes adicionais no final dos pacotes. Ao convertermos esses bytes para texto claro, percebemos que trata-se de uma espécie de conversa.
Após muito trabalho traduzindo a conversa, obtemos as informações necessárias para resolver o desafio:
obs.: apenas uma das flags basta para resolver o desafio
MACK{15h30}
MACK{13/05/2017}
MACK{ReuniaoContratoMaio.pdf}
Web
Todas os desafios possuem a URL https://mackenzie-web-challenges.chals.io
Web the flags 01
Pontuação 100
Enunciado
Este é o primeiro desafio de web. Ao acessar o serviço exposto, procure pela flag nos locais mais fáceis.
Resolução
Ao inspecionarmos o código-fonte do html, encontramos a flag como um comentário.
MACK{First_flag_in_the_html_source_code}
Web the flags 02
Pontuação 100
Enunciado
A segunda flag desta aplicação web super insegura precisa ser encontrada tentando um pouco mais do que o que se pode contar...
Resolução
A página inicia possui uma sequência de posts. Nota-se que cada post encontra-se em um arquivo .txt que possui um ID numérico:
/posts.php?id=1.txt, /posts.php?id=2.txt, /posts.php?id=3.txt, /posts.php?id=4.txt, /posts.php?id=5.txt
Como sugerido pelo enunciado, devemos fazer o fuzzing dos IDs até encontrarmos o arquivo 9.txt, que possui a flag.
MACK{Second_flag_Always_look_a_little_bit_further}
Web the flags 03
Pontuação 300
Enunciado
Agora que você conseguiu enumerar algumas informações a mais na aplicação super vulnerável, é hora de ir um pouco mais além...
O que será que tem no source code PHP da aplicação?
Encontre a próxima flag lendo o conteúdo do arquivo index.php.
Resolução
Apesar de ser a terceira flag, é mais fácil resolver os outros desafios antes desse. Como a aplicação aceita inputs de novos arquivos (desafio 6), devemos inserir um payload php que nos permita acessar o conteúdo do index.php.
Ao inserirmos o arquivo ../payload.php com o conteúdo
<?php$homepage = file_get_contents(index.php');echo $homepage;?>
Ao acessarmos o arquivo inserido em ../payload.php, temos impresso no html o conteúdo do index.php. A flag encontra-se nos comentários e para encontrá-la devemos inspecionar o html da página.
MACK{Third_flag_PhP_source_code}
Web the flags 04
Pontuação 150
Enunciado
Você é um robô???
Resolução
Como a dica sugere, devemos acessar o arquivo robots.txt. Além da flag, o arquivo nos indica o caminho /admin que deverá ser utilizado nos próximos desafios.
MACK{Fourth_flag_I_am_not_a_robot}
Web the flags 05
Pontuação 200
Enunciado
Agora você precisa encontrar um arquivo oculto no backend. Seu nome não é previsível. Para encontrá-lo, você precisa conseguir ver o que está no diretório acima.
Resolução
Devemos inserir um arquivo com o nome ../payload.php e um corpo com o nosso payload.
<?php
$fileList = glob('.');
foreach($fileList as $filename){
echo $filename, '<br>';
}
Ao acessarmos o arquivo /posts.php?id=../payload.php, teremos impressos todos os arquivos. Encontramos um arquivo .txt na pasta. Ao abrirmos, encontramos a flag:
MACK{Fith_flag_G0t_RCE}
Web the flags 06
Pontuação 200
Enunciado
Você consegue mostrar a flag na tela ao acessar adicionar_post.php? Analise os dados da requisição e veja o que consegue.
Resolução
Ao acessarmos /admin/adicionar_post.php, somos avisados por um alert que devemos incluir na requisição os parâmetros nome e corpo. Ao realizarmos testes, vemos que o arquivo que inserirmos aparecerá na página inicial.
Ao adicionarmos um arquivo, somos redirecionados para uma página que possui a flag impressa.
obs.: não consegui replicar essa solução novamente, por algum motivo os parametros não eram aceitos.