f500 – Question 4

Home / Wiki / f500 – Question 4

f500 – Question 4

> nullcon HackIM > nullcon HackIM 2015 > f500 - Question 4

This image contains a pagefile. Can you tell the size of it (in bytes)?

Password to open archive:Synergy@123

Flag format: flag{flag}

Image.rar

Solução

O objetivo é bem simples: identificar o tamanho do Pagefile.sys (arquivo de paginação do Windows).

O arquivo disponibilizado é um dump de memória, detectado como um ELF:

Esse formato é usado pela ferramenta WinPMEM, parte do Rekall Framework.

É possível usar o próprio framework do Rekall para fazer a análise de memória, mas para fins didáticos, vamos usar o Volatility.

Primeiramente, vamos converter a imagem para o formato RAW com o comando imagecopy:

Com a imagem no formato suportado pelo Volatility, prosseguimos identificando o profile do sistema operacional:

O sistema operacional da imagem é um Windows 7 SP1 64bits, com um sistema de arquivos NTFS.

Como nós estamos trabalhando com NTFS e só precisamos do tamanho do Pagefile.sys, basta seguir dois passos simples:

  1. Identificar quantos arquivos de paginação existem e o seu caminho de sistema (baseado na hive de registro SYSTEM);
  2. Extrair a MFT e fazer um parsing dos atributos do Pagefile.sys.

Para identificar e extrair a hive do registro, vamos usar os comandos hivelistdumpregistry:

Agora com a Hive extraída, conseguimos usar o RegRipper com o plugin pagefile:

Só temos um arquivo de paginação, localizado no root do sistema operacional.

Na segunda parte, precisamos extrair a MBR e fazer parsing dos metadados para identificar o tamanho do arquivo. Vamos começar localizando e extraindo a MBR no dump de memória:

Esse é um bug conhecido do volatility, ele exibe duas entradas de MFT, mas só uma delas é válida. No nosso caso, o arquivo correto é o “file.None.0xfffffa8001d9d380.vacb”, com 59MB. Vamos abri-lo com o MFTView.py, que faz parte da suíte INDXParse:

Screenshot-MFT File Viewer

Por alguma razão, o Pagefile.sys não está listado na MFT extraída. Vamos usar o plugin mftparser do volatility para ver se encontramos alguma informação adicional:

A MFT extraída não tinha as entradas no índice 59003. Para resolver o problema, vamos abrir a imagem com um editor hexadecimal, navegar até o offset 0x2b938c00 e extrair 1024 bytes contando a partir da string “FILE0” (tamanho da entrada na MFT):

2

3

Feito isto, basta fazer o parsing manual na entrada da MFT ou usar uma ferramenta como o MFTINDX no arquivo extraído anteriormente (mftentry-59003):

O sétimo campo (2146951168) identifica o tamanho lógico do Pagefile.sys (em bytes). Com isso, basta submeter a flag no formato definido pelo CTF.

1

Agora que já aprendemos sobre MFT, Pagefile.sys e forense de memória, vamos resolver o challenge da maneira (menos interessante) esperada pelos organizadores do CTF:

4

Flag:

flag{2146951168}

Criado por:

TheGoonies

Recent Posts