r300 – Russian Roullet

Home / Wiki / r300 – Russian Roullet

r300 – Russian Roullet

> Hacking N' Roll > Hacking N' Roll 4 > r300 - Russian Roullet

Um canditato infiltrado nas eleicoes tentou derrubar seus oponentes. Existem boatos que ele estava sendo apoiado pela Digital Chipmunks, com grandes ambicoes que é conhecido por sua falta de misericordia. Com este candidato foi encontrado um plano de ataque aos canditados, que utilizava a nova tecnologia desenvolvida pela empresa. Alguns dizem que tal tecnologia ainda nem existe.Eduardo Genro, Aecio Jorge, Eduardo Fidelix, Levy Rousseff, Dilma Neves, Luciana Silva e Marina Campos. NESTA ORDEM. Tambem percebemos que há algo escondido no seu plano, parece um cadeado que precisa de uma combinacao, talvez se abrirmos podemos conseguir alguma informacao importante!

Solução

Baixe o arquivo.

Pela execução do comando file, podemos verificar que se trata de um arquivo binário ELF de 64 bits.

Dê permissão de execução para o arquivo.

Quando executarmos o arquivo, veremos que são chamadas várias funções matemáticas antes da exibição de uma mensagem e, consequentemente, o término da execução.

Porém, se executarmos o arquivo várias vezes, veremos que a ordem das chamadas das funções matemáticas é escolhida aleatoriamente.

Usando o comando readelf, podemos destacar alguns símbolos.

Execute o edb-debugger.

Ao analisarmos a função main, encontramos as seguintes instruções:

wu-russian-roullet-01

Se compararmos com o que foi obtido pelo comando readelf, podemos observar que op é um array de ponteiros para as seguintes funções:

wu-russian-roullet-03

Podemos deduzir que existe um índice sendo calculado de maneira aleatória e isso explicaria a variação na ordem das chamadas das funções matemáticas em cada execução.

Ao analisarmos a função hint, que exibe a mensagem que aparece antes do término da execução, encontramos as seguintes instruções:

wu-russian-roullet-02

Encontramos uma chamada para a função puts que nunca acontecerá (a comparação entre 1 e 0 é sempre false), com a mensagem “If I was you I would call another function instead of this one ;)”, encontrada no endereço 0x401338.

Vamos substituir a chamada para a função hint pela chamada para a função key. Para isso, vamos editar o arquivo binário e procurar pela sequência E8 D1 FD FF FF. Mude a sequência para E8 12 F7 FF FF. Eu usei o GHex para isso.

wu-russian-roullet-o4

Após mudar a sequência de bytes, salve o arquivo como copy, dê permissão de execução e execute o mesmo.

Você notará que agora aparece uma mensagem embaralhada, e esta mesma mensagem muda conforme a ordem de execução das funções matemáticas. Você pode optar por dois caminhos:

  1. Seguir executando o programa várias vezes até que a flag apareça (tenha muita paciência);
  2. Manipular a ordem de execução das funções matemáticas para encontrar a flag.

Se você optou pelo último caminho, vamos mudar, explicitamente, o índice calculado. Para isso, vamos executar o edb-debugger com o novo arquivo criado

e adicionar um breakpoint na seguinte linha:

wu-russian-roullet-05

Execute o programa. Para cada vez que o breakpoint for alcançado, altere o valor de RAX para obedecer à sequência:  1 – 3 – 5 – 6 – 4 – 0 – 2. Ao término da execução, você terá a seguinte saída:

Flag

 

 

Recent Posts
Comments
  • Zelson Miguel Almeida Borges

    Boa tarde, como vc chegou na sequência 1 – 3 – 5 – 6 – 4 – 0 – 2?