Aula de buffer overflow

Started by Anonymous, 06 de June , 2006, 07:35:50 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Anonymous

Tutorial escrito por ccoder aka c0d3r__ ou cppcoder
c0d3r__@hotmail.com");
 
  /* Senao temos 2 argumentos mostre o uso da aplicacao e saia */
  if (argc != 3)
  {
    puts("Uso: appname ");
    return 0;
  }
 
  cCaractere = argv[1][0];
  iQuantidade = atoi(argv[2]);
 
  funcao();
 
  system("pause");
}

/* Definicao da funcao que demonstrara o buffer overflow */
void funcao(void)
{
  /* Declarado 2 buffers */
  char buf1[40], buf2[40];
 
  /* Colocamos dados dentro de buf1 */
  strcpy(buf1, "Isso eh o que sera sob-escrito"); /* Copiamos 30 bytes + NULL */
  printf("buf1 contem: %s\n", buf1);
 
  /* Agora utilizamos memset pra sobescrever buf1 na stack */
  /* buf1 - buf2 ira nos dar a distancia entre os buffers em outras palavras
  "o tamanho real de alocacao de buf1" + quantidade sera a quantidade
  de bytes que vamos preencher buf2. */
  memset(buf2, cCaractere, buf1 - buf2 + iQuantidade);
 
  /* Observamos que buf foi sob-escrito */
  printf("buf1 depois: %s\n", buf1);
 
}

Compile o codigo fonte acima, e execute o mesmo pela linha de comando dessa forma:
programa A 29

Dessa forma iremos sob-escrever buf2 e chegar ate buf1 com A's e sob-escrever buf1 com
29 A's

Observe os diagramas abaixo para maior entedimento:

Primeiro vamos ter

<--- STACK CRESCE PRA TRAZ, OU SEJA ENDERECOS MENORES                
BUF2                                     BUF1                                            4096
+-----------------------------------------+------------------------------------------+-----+
|NAO-INICIALIZADO                |Isso eh o que sera sob-escrito  |...  |
+-----------------------------------------+------------------------------------------+-----+

Depois de menset()

<--- STACK CRESCE PRA TRAZ, OU SEJA ENDERECOS MENORES       
            
BUF2                                     BUF1                                           4096
+-----------------------------------------+------------------------------------------+-----+
|AAAAAAAAAAAAAAAAAAAAA|AAAAAAAAAAAAAAAA           |...   |
+-----------------------------------------+------------------------------------------+-----+

Como viram no exemplo de buffer overflow eh possivel sob-escrever um buffer e alcancar
 outras areas na memoria, a pergunta agora serah e se sob-escrevemos buf1 a ponto de
alcancar a area desconhecida ateh agora, que eh os ...

Teriamos algo, como segmentation fault, ou access violation no windows, facam seus testes
sabendo que o buffer tem no minimo 40 bytes tentem chamar o programa assim:

programa A 200

Vera que teremos uma crash, pq corrompemos a area ... da stack.

Abracos ateh a proxima, sugestoes, comentarios, duvidas, escrevam ai.

Anonymous

No textarea os diagramas ficaram alinhados mas na visualizacao nao ficaram, droga!

slul

amigo meus parabens pelo tutorioal fico mto contente que vc ao inves de ficar c]discutin]do com o apoca faça tutoriais como esse pra ajudar a galera

meus parabens!

Anonymous

Parabens, amigo vai ajudar muita gente.. que se interresa e que não são poucos !!

_Dr4k0_

100% Livre!!!Livre para escolher o que há de melhor no Windows e Linux. Livre de preconceito direto ou inverso!
Adote essa filosofia e tenha mais chance de sucesso profissional.

Anonymous


Anonymous


HadeS

Muito bom! Gostei, de verdade.

Parabéns.

HadeS