Tutoriais
ENTENDENDO BUFFER OVERFLOW PARTE 1 By ThorKing
Bem amigos vamos começar a colocar nessa área avançada assuntos avançados, então decidi começar a escrever sobre Buffer Overflow.
DEFINIÇÃO:
Buffer Overflow é um estouro de memória, programas que
manipulam variáveis necessitam de buffers ( locais na memora
onde são guardados os dados recebidos pela variável).
Todo programador sabe que quando se declara uma variável tem
que declaram um tamanho para a mesma.
Mas o usuário ou qualquer pessoa que use o programa colocar
o valor da variável maior do que ela suporta acaba ocasionando
o chamado Buffer Overflow que é um estouro de memória
como disse acima.
Isso acaba complicando quando um hacker ou melhor dizermos um cracker
descobre esse bug do programa e se aproveita pra reescrever no espaço
interno da pilha e colocar o que quiser geralmente códigos prejudiciais
na a´rea de armazenamento de memória, que poderá ser
executado como parte de argumento (variável) passado ao programa.
Você poderá ver exemplos de códigos Buffer Overflow
nos links abaixos:
http://en.wikipedia.org/wiki/Buffer_overflow
http://www.cic.unb.br/docentes/pedro/trabs/buffer_overflow.htm
Abaixo vamos analisar um código que é feito na plataforma
Linux
Obs: pra compilar na shell execute o seguinte comando gcc –o
buffer buffer.c
#include <stdio>
#include (stdlib.h>
Main ( int argc, char *argv{} ) {
Char buffer[10];
if (argc <2){
printf(“programa de teste de buffer overflow !! \n”);
printf(“uso: %s<vari>\n”,ardv[0]);
exit (0); }
strcpy (buffer,argv[1]);
printf (“ voce digitou %s !!\n”,buffer);
return 0;
}
Depois de compilado é só executar
# ./buffer AAAAA
Você digitou AAAA
Até o momento ta tudo normal pois declaramos o tamanho da variável buffer de 10 bytes e usamos apenas 5 bytes pra quem não sabe 1 caracter é igual a 1 byte independente do caracter que você colocar ele vai tratar como “char” .
Agora vamos obeservar o que ocorre se colocarmos mais de 10 bytes na variável buffer.
#./buffer AAAAAAAAAA
Você digitou AAAAAAAAAAA
Segmentation Fault
#
O programa terminou de forma estranha,somente porque ultrapassamos
op limite de 10 bytes e colocamos 11 bytes 1 bytes a mais é suficiente
para um buffer overflow e acabamos escreverndo em outro lugar na memória
onde não era pra ser.
Essa foi a parte 1 da matéria sobre buffer overflow espero que vocês tenham gostado em em breve estarei postando a parte 2.
Abraço a todos!