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.
1 2 |
file cd5c82df-d553-4c37-85dc-860b0156cbc8.7de3c8b4586a95b1c6911389b2409498 cd5c82df-d553-4c37-85dc-860b0156cbc8.7de3c8b4586a95b1c6911389b2409498: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=2a35e6a36c46f5fb6d50a815e786aea052ada42d, not stripped |
Dê permissão de execução para o arquivo.
1 |
chmod +x cd5c82df-d553-4c37-85dc-860b0156cbc8.7de3c8b4586a95b1c6911389b2409498 |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
./cd5c82df-d553-4c37-85dc-860b0156cbc8.7de3c8b4586a95b1c6911389b2409498 Enter a number to check if it is a palindrome or not 1 1 is a palindrome number. Enter the number of terms 1 First 1 terms of Fibonacci series are :- 0 Enter number of rows 1 * Enter two integers 1 1 Greatest common divisor of 1 and 1 = 1 Least common multiple of 1 and 1 = 1 Enter the number of rows of Floyd's triangle to print 1 1 Enter an integer in decimal number system 1 1 in binary number system is: 00000000000000000000000000000001 Enter a number 1 Entered number is an armstrong number. 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! |
Porém, se executarmos o arquivo várias vezes, veremos que a ordem das chamadas das funções matemáticas é escolhida aleatoriamente.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
./cd5c82df-d553-4c37-85dc-860b0156cbc8.7de3c8b4586a95b1c6911389b2409498 Enter number of rows 1 * Enter the number of terms 1 First 1 terms of Fibonacci series are :- 0 Enter an integer in decimal number system 1 1 in binary number system is: 00000000000000000000000000000001 Enter the number of rows of Floyd's triangle to print 1 1 Enter two integers 1 1 Greatest common divisor of 1 and 1 = 1 Least common multiple of 1 and 1 = 1 Enter a number 1 Entered number is an armstrong number. Enter a number to check if it is a palindrome or not 1 1 is a palindrome number. 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! |
Usando o comando readelf, podemos destacar alguns símbolos.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
readelf -s cd5c82df-d553-4c37-85dc-860b0156cbc8.7de3c8b4586a95b1c6911389b2409498 _ITM_deregisterTMCloneTab 55: 00000000004007d5 550 FUNC GLOBAL DEFAULT 13 key 57: 0000000000400c90 150 FUNC GLOBAL DEFAULT 13 floydstriangle 60: 00000000004009fb 208 FUNC GLOBAL DEFAULT 13 palindrome 61: 0000000000400acb 300 FUNC GLOBAL DEFAULT 13 diamond __libc_start_main@@GLIBC_ 70: 0000000000400bf7 153 FUNC GLOBAL DEFAULT 13 dectobin 71: 0000000000400f00 177 FUNC GLOBAL DEFAULT 13 foo 72: 0000000000400de1 179 FUNC GLOBAL DEFAULT 13 fibonacci 78: 0000000000400fb1 281 FUNC GLOBAL DEFAULT 13 main 79: 0000000000400e94 108 FUNC GLOBAL DEFAULT 13 hint 80: 0000000000601c60 56 OBJECT GLOBAL DEFAULT 25 op 84: 0000000000400d26 187 FUNC GLOBAL DEFAULT 13 armstrong |
Execute o edb-debugger.
1 |
edb --run russian-roullet/cd5c82df-d553-4c37-85dc-860b0156cbc8.7de3c8b4586a95b1c6911389b2409498 |
Ao analisarmos a função main, encontramos as seguintes instruções:
Se compararmos com o que foi obtido pelo comando readelf, podemos observar que op é um array de ponteiros para as seguintes funções:
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:
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.
Após mudar a sequência de bytes, salve o arquivo como copy, dê permissão de execução e execute o mesmo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
./copy Enter a number to check if it is a palindrome or not 1 1 is a palindrome number. Enter the number of terms 1 First 1 terms of Fibonacci series are :- 0 Enter two integers 1 1 Greatest common divisor of 1 and 1 = 1 Least common multiple of 1 and 1 = 1 Enter number of rows 1 * Enter an integer in decimal number system 1 1 in binary number system is: 00000000000000000000000000000001 Enter a number 1 Entered number is an armstrong number. Enter the number of rows of Floyd's triangle to print 1 1 V>ID>EcM- 06:c;WUW[<WLW[B]UJQ[e |
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:
- Seguir executando o programa várias vezes até que a flag apareça (tenha muita paciência);
- 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
1 |
edb --run russian-roullet/copy |
e adicionar um breakpoint na seguinte linha:
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
Enter number of rows 1 * Enter the number of rows of Floyd's triangle to print 1 1 Enter the number of terms 1 First 1 terms of Fibonacci series are :- 0 Enter two integers 1 1 Greatest common divisor of 1 and 1 = 1 Least common multiple of 1 and 1 = 1 Enter a number 1 Entered number is an armstrong number. Enter a number to check if it is a palindrome or not 1 1 is a palindrome number. Enter an integer in decimal number system 1 1 in binary number system is: 00000000000000000000000000000001 The Flag is: HNR4{SomosTodosZumbis} |
Flag
1 |
HNR4{SomosTodosZumbis} |
Boa tarde, como vc chegou na sequência 1 – 3 – 5 – 6 – 4 – 0 – 2?