
Exploração Binária e Engenharia Reversa (de assembly para C)
Explore desmontagem, exploração binária & engenharia reversa através de 10 pequenos desafios.
Na pasta de cada nível você encontrará:
flag - senha para o próximo nível
README.md - como encontrar a senha
source.c - o binário com engenharia reversa
dissasembly_notes.md - notas sobre asm
Veja o subject para mais detalhes.
Para mais diversão com gdb & exploração confira o projeto anterior RainFall.
Primeiro, baixe de 42 OverRide.iso.
No Mac OSX, instale o VirtualBox.
No VirtualBox, crie uma nova VM (clique em New).
Continue por todas as próximas etapas com as configurações padrão:
Em seguida, clique em Configurações > Rede > Adaptador 1 > Conectado a: Adaptador Bridge.
Ainda nas configurações, clique em Armazenamento > À direita de "Controlador: IDE", há um ícone de CD com um sinal de + (adicionar unidade óptica). Clique em Adicionar Imagem de Disco e selecione OverRide.iso.
Clique em Iniciar para iniciar a VM. Quando estiver em execução, ela deve mostrar o endereço IP da VM e solicitar que o usuário faça login.
Faça login de um shell separado como usuário level00 com a senha level00.
ssh level00@{VM_IP} -p 4242
Como usuário level00, o objetivo é ler a senha do usuário level01, encontrada em /home/users/level01/.pass. No entanto, o usuário level00 não tem permissões para ler este arquivo.
Na pasta home do usuário level00 há um binário level00 com SUID definido e proprietário level01.
Isso significa que quando executamos o binário level00, o fazemos com as permissões do usuário level01.
Devemos encontrar uma vulnerabilidade no binário level00 com gdb. Em seguida, explorar a vulnerabilidade para executar system("/bin/sh"), abrindo um shell como usuário level01 onde temos permissões para ler a senha.
cat /home/users/level01/.pass
Em seguida, faça login como usuário level01.
su level01
Repita para cada nível.
Para cada nível, fizemos engenharia reversa do source.c original examinando o disassembly gdb do binário.
0 - Senha codificada
1 - Ataque Ret2Libc
2 - Ataque de string de formato printf()
3 - Força bruta de senha
4 - Estouro de pilha gets() + Ataque Return-to-libc
5 - Shellcode em variável de ambiente + Ataque de string de formato printf()
6 - Valor de hash descoberto com gdb
7 - Ataque Ret2Libc em tabela de dados desprotegida
8 - Binário faz backup de senha via link simbólico
9 - Erro de off-by-one
Escrevi este projeto em equipe com o super talentoso @dfinnis.