hydraulic-press
I'm starting a new website where we can blog about dogs! Could you write us an article? Note: The website is at http://localhost:3000/ for the xssbot.
Web Exploitation
Autor do writeup: Luiz Felipe
Você pode acessar os arquivos do desafio no nosso repositório https://github.com/HawkSecUnifei/Writeups
O desafio fornece um arquivo chamado flag.txt
. O objetivo do desafio é decodificar e descomprimir este arquivo para descobrir a flag.
Resolução do desafio
Analisando o arquivo flag.txt
com o comando file flag.txt
, obtemos:
Não detectamos nenhum tipo de compressão. Contudo, se o decodificarmos com base85 por meio do código python:
E executar o comando file flag1.txt
, obteremos:
Descobrimos que o arquivo flag1.txt
foi comprimido pelo zlib. Usando o código a seguir, tentemos descomprimí-lo múltiplas vezes:
Este código executa a descompressão um bloco de arquivo por vez (chunk), evitando assim o estouro da memória RAM. Na quarta descompressão, percebemos uma demora muito grande, bem como o uso bem alto do espaço de armazenamento. Por isso, interrompemos o processo antes de seu término. Examinando os bytes do arquivo flag5.txt
por meio do comando hexdump -C flag5.txt
, notamos uma quantidade imensa de bytes 0x00 no arquivo. Fazendo o mesmo procedimento no arquivo flag4.txt
, notamos sequências muito longas de bytes 0xAA e 0x55. Essas sequências de bytes no arquivo flag4.txt
são as responsáveis por gerar a vastidão de bytes 0x00 no arquivo flag5.txt
. Sendo assim, criamos uma função que exclua essas sequências antes de descompactar o arquivo flag4.txt
, facilitando assim o processo de descompactação:
Criamos também uma nova função de descompressão específica para flag5.txt
. Diferente da anterior, esta não vai escrever todos os bytes descomprimidos no arquivo de saída, mas somente aqueles que não sejam 0x00. Além disso, também foi colocada uma condição de parada para quando for encontrado os bytes 0x7D, significando que encontramos um caracter "}", ou seja, o término de uma possível flag.
Agora, verificando o arquivo flag6.txt
, obtemos:
Atualizado