h3ll0, fr13nd. Esse post dá início a série voltada para guias de CTFs e wargames que foram resolvidos por membros do GRIS.
Mas o que é um CTF ou wargame?
Os capture the flags (CTFs) e wargames são ótimas formas de testar conhecimento na área da segurança. Nesses desafios temos aplicações projetadas com vulnerabilidades disponíveis para que a comunidade coloque em prática aquilo que foi estudado.
O intuito das postagens sobre esses desafios não é fornecer respostas, mas guiar o leitor através da linha de raciocínio utilizada para resolvê-los . Estamos fazendo isso pois é difícil encontrar esse tipo de material em português e, além disso, é uma forma de fornecer a comunidade um pouco daquilo que aprendemos no GRIS.
O primeiro desafio:
Como primeiro desafio teremos o level01 do IO netgarage. A temática dele é engenharia reversa (RE) em uma máquina IA-32.
O primeiro passo é se conectar ao servidor fornecido pelo wargame. para isso, utilizamos o protocolo SSH.
|
|
conforme a descrição do wargame, temos acesso somente ao programa correspondente ao usuário utilizado. E, além disso, os programas se encontram no diretório /levels. Portanto, acessamos esse diretório $ cd /levels
feito isso, executamos o level01 $./level01
e com isso, recebemos a output:
|
|
Então, precisamos descobrir a input necessária para que seja possível ler a senha do o level2 do wargame. Para descobrir a chave, utilizaremos o GDB (GNU debugger) da seguinte maneira $ gdb -q level01
O parâmetro -q é utilizado para o gdb não exibir sua “propaganda” habitual.
Feito isso, disassemblamos a função main do binário:
(gdb) disassemble main
e teremos como saída:
|
|
O código acima está comentado, o que facilita enxergar a solução do problema. Aposto que o número em hexa que está sendo comparado com o registrador eax tem algo de especial.