Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
Próxima revisão | Revisão anterior | ||
sas:buffer_overflow_-_informacoes_adicionais [2014/03/07 19:57] – created maziero | sas:buffer_overflow_-_informacoes_adicionais [2014/08/01 20:20] (atual) – [Roteiro do experimento] maziero | ||
---|---|---|---|
Linha 1: | Linha 1: | ||
+ | ====== Buffer Overflow - Informações adicionais ====== | ||
+ | |||
+ | Baseado no experimento de [[http:// | ||
+ | |||
+ | <note warning> | ||
+ | Deve ser usado como informação complementar, | ||
+ | </ | ||
+ | |||
+ | ==== Roteiro do experimento ==== | ||
+ | |||
+ | Desligar proteção ASLR (//Adress Space Layout Randomization// | ||
+ | |||
+ | < | ||
+ | sudo sysctl -w kernel.randomize_va_space=0 | ||
+ | </ | ||
+ | |||
+ | Compilar '' | ||
+ | |||
+ | < | ||
+ | cc stack.c -o stack -fno-stack-protector -g | ||
+ | </ | ||
+ | |||
+ | Desligar o flag NX (No Executable Stack) no cabecalho do executável ELF: | ||
+ | |||
+ | < | ||
+ | sudo apt-get install execstack | ||
+ | execstack stack | ||
+ | execstack -s stack | ||
+ | execstack stack | ||
+ | </ | ||
+ | |||
+ | Ajustar usuário e permissões do executável '' | ||
+ | |||
+ | < | ||
+ | sudo chown root.root stack | ||
+ | sudo chmod 4755 stack | ||
+ | </ | ||
+ | |||
+ | Gerar um '' | ||
+ | |||
+ | < | ||
+ | echo "um teste..." | ||
+ | </ | ||
+ | |||
+ | Depurar '' | ||
+ | |||
+ | < | ||
+ | gdb stack | ||
+ | br 13 // insere breakpoint na linha 13 (strcpy) | ||
+ | | ||
+ | print /x str // obtém o valor do ponteiro str | ||
+ | | ||
+ | </ | ||
+ | |||
+ | Usar o valor obtido do ponteiro '' | ||
+ | |||
+ | * compreenda a estrutura da pilha do programa '' | ||
+ | * descubra que posição da variável '' | ||
+ | * escreva o código necessário em '' | ||
+ | * Para ver o conteúdo de '' | ||
+ | |||
+ | Compilar e executar '' | ||
+ | |||
+ | < | ||
+ | cc exploit.c -o exploit | ||
+ | ./exploit | ||
+ | </ | ||
+ | |||
+ | Usar o '' | ||
+ | |||
+ | < | ||
+ | ./stack | ||
+ | whoami | ||
+ | </ | ||
+ | |||
+ | Se tudo estiver certo, deve retornar um //prompt// de root (#) e o comando '' | ||
+ | |||
+ | * se estiver em uma partição de disco montada com o flag '' | ||
+ | * se a arquitetura do // | ||
+ | |||
+ | No caso de arquiteturas de 64 bits, [[http:// | ||
+ | |||
+ | ==== Contornar a proteção ASLR ==== | ||
+ | |||
+ | Religar a proteção ASLR do kernel: | ||
+ | |||
+ | < | ||
+ | sudo sysctl -w kernel.randomize_va_space=2 | ||
+ | </ | ||
+ | |||
+ | Executar o ataque continuamente, | ||
+ | |||
+ | < | ||
+ | while true ; do ./stack ; done | ||
+ | </ | ||