Buffer Overflow: Entendendo e explorando
Neste artigo venho explicar de forma direta e com exemplos práticos como funciona um buffer overflow.
Parte 4: Chegando ao ponteiro de retorno
Até aqui já transbordamos o buffer e provocamos a quebra do programa, agora resta saber o que fazer para chegar ao ponteiro de retorno...
Bem, tente executar o programa de novo informando a variável "012345678901234567891234AAAAA". Vai dar "core dumped" de novo, daí passe o GDB de novo e terá uma nova:
#0 0x08040041 in ?()
Em ASCII a letra A seria 41. Chegamos ao ponteiro de retorno a partir de 29 bytes. Se aumentar os caracteres "A", o ponteiro será sobrescrito...
Dica: Para "disassemblar", basta o comando "gdb programa", depois o comando "disass main", assim ele irá "disassemblar" o programa principal.
Outra dica: Se você possui o código-fonte de um programa vulnerável em mãos, pode usar um truque para descobrir o endereço em que o buffer está. Ex.:
Onde está buffer você coloca o nome do programa. Assim sempre que o buffer for usado, o endereço aparecerá na tela.
Primeiros passos para criar um exploit de buffer overflow:
Bem, isto só foi uma introdução a buffer overflow, em outras palavras só foi um pontapé. Na internet tem muito material para o estudo do mesmo.
Como exemplo:
Bem, tente executar o programa de novo informando a variável "012345678901234567891234AAAAA". Vai dar "core dumped" de novo, daí passe o GDB de novo e terá uma nova:
#0 0x08040041 in ?()
Em ASCII a letra A seria 41. Chegamos ao ponteiro de retorno a partir de 29 bytes. Se aumentar os caracteres "A", o ponteiro será sobrescrito...
Dica: Para "disassemblar", basta o comando "gdb programa", depois o comando "disass main", assim ele irá "disassemblar" o programa principal.
Outra dica: Se você possui o código-fonte de um programa vulnerável em mãos, pode usar um truque para descobrir o endereço em que o buffer está. Ex.:
printf("0x%x\n",(int) buffer);
Onde está buffer você coloca o nome do programa. Assim sempre que o buffer for usado, o endereço aparecerá na tela.
Primeiros passos para criar um exploit de buffer overflow:
- Pegar uma source vulnerável e analisar bem;
- Determinar o endereço do buffer vulnerável;
- Fazer um ou 2 loops com "for" para ir adicionando as variáveis;
- Escolher um shellcode, mas antes disso testar como exploit local antes de deixar remoto com algumas libs.
Bem, isto só foi uma introdução a buffer overflow, em outras palavras só foi um pontapé. Na internet tem muito material para o estudo do mesmo.
Como exemplo: