recursos CTF
um dos truques de esteganografia mais comuns é ocultar um arquivo dentro de uma imagem. O arquivo será aberto normalmente como uma imagem, mas também manterá arquivos ocultos dentro, geralmente zip, texto e até mesmo outros arquivos de imagem.
o motivo pelo qual isso funciona é porque, quando um arquivo de imagem é lido, ele tem bytes iniciais e finais ditando o tamanho da imagem. O visualizador de imagens que você usa usará as informações entre esses bytes para apresentar uma imagem para você, ignorando qualquer coisa após o byte de terminação.
por exemplo, o byte de terminação para um JPEG é FF D9 Em hex, portanto, usando um visualizador hexadecimal (xxd é bom para linux ou algo como HxD para windows), você pode descobrir onde a imagem termina. Esses bytes às vezes são difíceis de encontrar em um mar de números, portanto, olhar para o despejo do hex (o texto representando os bytes hexadecimais) também pode ajudá-lo a encontrar oculto .txt ou .arquivos zip.
exemplo
uma implementação muito simples desta estratégia é usada no exemplo.arquivo jpg neste diretório. Se você salvá-lo em seu computador e abri-lo com um visualizador de imagens, será apresentada uma imagem jpg simples.
agora vamos tentar encontrar a bandeira. Abra a imagem em seu editor hexadecimal favorito e comece a procurar algo estranho (você pode encontrar a própria bandeira do despejo neste momento, mas por uma questão de exemplo, tente extraí-la). Próximo à parte inferior do arquivo, você deve ver o byte de terminação de um jpg ffd9
:
01e17a0: 685c 7fab 8eb4 5b32 61f1 c4ff d950 4b03 h\....[2a....PK.
Outra parte importante desta linha é o PK
perto do fim. PK
são as iniciais de Phil Katz, o inventor do arquivo zip, e indicam que um arquivo zip começa nesse ponto.
usando essas informações, podemos usar outra ferramenta útil do linux, dd
). O comando dd
é muito versátil e permite a cópia e conversão de uma infinidade de arquivos. No nosso caso, vamos usá-lo para extrair o arquivo zip.
sabemos onde está a localização do arquivo zip, mas dd
leva apenas valores decimais, então convertemos a localização hexadecimal 0x01e17ad de hex para decimal para obter 1972141.
conectando isso ao dd:
dd if=example.jpg bs=1 skip=1972141 of=foo.zip
isso leva no exemplo da imagem.jpg, o’ no arquivo ‘ se, lê um bloco de cada vez, ‘Tamanho do bloco’ bs, pula para bloquear 1972141, pular e grava no zip ‘out file’ que chamamos de foo.postal. Quando isso for concluído, você deve ter um arquivo zip que você pode descompactar facilmente para acessar o arquivo de texto dentro.
este é o longo caminho para resolver um simples problema de esteganografia, mas mostra como a estratégia funciona. Na seção de resolução, métodos mais concisos e eficientes são descritos.
detectando
esses desafios geralmente são apresentados como uma imagem simples sem outras instruções, e cabe ao concorrente executá-lo por meio de um editor Hexadecimal para descobrir se envolve esteganografia. Se você receber uma imagem e nenhuma instrução, sua aposta mais segura é que ela tenha algo oculto após as tags de fechamento da imagem.
resolvendo
embora seja possível e às vezes prático resolver essas tarefas usando ferramentas linux como dd
, existem algumas ferramentas que tornam muito mais fácil. Binwalk
é uma ferramenta imensamente útil que detecta e extrai automaticamente arquivos ocultos com ferramentas de esteganografia
exemplo CTF
a esteganografia desse tipo geralmente não é pontuada muito, mas é decentemente difundida. BackdoorCTF 2014 criou um que é geralmente simples, ctfexample.jpg, mas envolve várias camadas.
XXD
HxD
DD
Binwalk