SlideShare uma empresa Scribd logo
1 de 24
Baixar para ler offline
INTRODUÇÃO AO
EXPLOITATION
WHOAMI
Kaique Bonato
Analista de Segurança & Ethical Hacking, amante de tecnologias open source.
OWASP Member e Hackthebox Player.
WTF IS EXPLOITATION ?
NÍVEIS DE SOFTWARE
- Estruturas Internas dos Softwares
- Camadas de abstração
- Níveis de abstração
- Esconder detalhes para as camadas acima
- Compilação: alto-nível para baixo-nível
- Binários
PE == Portable Executable
ELF == Executable and Linkable Format
NÍVEIS DE LINGUAGENS
Linguagens Alto-nível
Linguagens Baixo-nível
Código de Máquina
Microcódigo
Hardware
Linguagens Interpretadas6
1
2
3
4
5
Python, Ruby, Java, .NET
C, C++
Assembly
Opcodes
Firmware
Circuitos físicos
NÍVEIS DE ABSTRAÇÃO
STACK MEMORY
REGISTRADORES
ACX
EBX
ECX
EDX
ESI
EDI
ESP
EBP
EIP
AX AH AL
BX BH BL
CX CH CL
DX DH DL
32 BITS
16 BITS
FLAGS REGISTERS
UNIDADES
Bases: binária (0,1) / octal (0,7) / decimal (0-9) / hexadecimal(0-f)
1 bit
4 bits = 1 nibble
8 bits = 2 nibbles = 1 byte
16 bits = 4 nibbles = 2 bytes = 1 word
32 bits = 8 nibbles = 4 bytes = 2 words = 1 dword
64 bits = 16 nibbles = 8 bytes = 4 words = 2 dwords = 1 qword
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
ENDIANNESS
Little-endian Big-endian
byte menos significativo primeiro byte mais significativo primeiro
STACK (PILHA)
- Memória para funções: variáveis locais, parâmetros
- Controle do fluxo do programa
- PUSH (empilha), POP (desempilha)
- LIFO, last in, first out
- ESP (stack pointer) e EBP (base pointer)
- Alocação de endereços top-down
- O objetivo da Stack é chamar funções.
- Existem 2 registradores na CPU associados à Stack, o EBP (Extended Base
Pointer) e o ESP (Extended Stack Pointer)
- ESP aponta para o topo da Stack, e o EBP aponta para o início do frame.
- Quando uma função é chamada, argumentos, EIP e EBP são inseridos na stack.
- EBP é “setado” para o ESP, e o ESP é diminuído para criar espaço para as
variáveis locais das funções.
STACK LAYOUT
STACK FRAME LAYOUT
Nosso objetivo é manipular o fluxo do programa, assim fazendo com que ele
execute o que queremos.
Após controlarmos o fluxo, apontamos a próxima instrução para o executar o
shellcode.
FUZZING
O que é Fuzzing?
É um técnica cujo objetivo é identificar falhas em softwares por meio de
processos automatizados ou semi-automatizados.
Enviamos pacotes “mal formados” para testar as entradas de dados.
Testes automatizados utilizamos frameworks, como o sulley.
EXPLOIT DEVELOPMENT
- Exploit
Código que explora a vulnerabilidade.
- Payload
Payload é a carga que é transportada pela conexão.
- Shellcode
Este é o código que gera a conexão e nos da uma shell.
STACK BASED BUFFER
OVERFLOW
O que é Buffer ?
Na programação, o buffer é uma variável
(conhecida como array ou vetor) que
armazena uma quantidade X de bytes.
Por exemplo, se um buffer tiver a
capacidade de armazenar 10 bytes, só
conseguiria guardar uma palavra de 8
bytes(sendo cada carácter 1 byte), pois o
último byte é "nulo" para o programa
saber que a palavra termina ali.
char buffer[8];
Transbordando o buffer
- Nesta imagem nós transbordamos o buffer enviando mais
bytes do que ele suporta, executamos o software dentro do
GDB e o mesmo deu segmentation fault em 0x41414141.
Sobrescrevendo o EIP
- Olhando os registradores podemos ver que o EIP foi
sobrescrito por 0x41414141 como vimos no slide anterior, 41
em hexa corresponde a letra “A”.
PRÁTICA
?
DÚVIDAS ?
ISSO É TUDO PESSOAL!
Contatos:
Skype: kaique.bonato
Linkedin: Kaique Bonato
Email: kaiqueredivobonato@gmail.com

Mais conteúdo relacionado

Semelhante a Introdução a Exploração de Software

Construindo um analisador de executáveis
Construindo um analisador de executáveisConstruindo um analisador de executáveis
Construindo um analisador de executáveisFernando Mercês
 
Slide curso metasploit
Slide curso metasploitSlide curso metasploit
Slide curso metasploitRoberto Soares
 
Teste de Intrusão Em Redes corporativas
Teste de Intrusão Em Redes corporativasTeste de Intrusão Em Redes corporativas
Teste de Intrusão Em Redes corporativasSoftD Abreu
 
Módulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de ComputadoresMódulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de ComputadoresLuis Ferreira
 
Invasaocom exploits
Invasaocom exploitsInvasaocom exploits
Invasaocom exploitsNauber Gois
 
software tipos.ppt
software tipos.pptsoftware tipos.ppt
software tipos.pptLinaKelly3
 
Atividade programação script 2
Atividade programação script 2Atividade programação script 2
Atividade programação script 2Rtec Informatica
 
Buffer overflow slide prontos.pptx
Buffer overflow slide prontos.pptxBuffer overflow slide prontos.pptx
Buffer overflow slide prontos.pptxJomarRich
 
Conhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java PlatformConhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java PlatformMilfont Consulting
 
Processador CISC RISC SET de instruções
Processador CISC RISC SET de instruçõesProcessador CISC RISC SET de instruções
Processador CISC RISC SET de instruçõesCarlos Pereira
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2PrinceGuru MS
 

Semelhante a Introdução a Exploração de Software (20)

Construindo um analisador de executáveis
Construindo um analisador de executáveisConstruindo um analisador de executáveis
Construindo um analisador de executáveis
 
Buffer overflow group
Buffer overflow groupBuffer overflow group
Buffer overflow group
 
Slide curso metasploit
Slide curso metasploitSlide curso metasploit
Slide curso metasploit
 
Stack based overflow
Stack based overflowStack based overflow
Stack based overflow
 
Teste de Intrusão Em Redes corporativas
Teste de Intrusão Em Redes corporativasTeste de Intrusão Em Redes corporativas
Teste de Intrusão Em Redes corporativas
 
Assembly
AssemblyAssembly
Assembly
 
Desenvolvimento de malware
Desenvolvimento de malwareDesenvolvimento de malware
Desenvolvimento de malware
 
Curso Gratuito de Shell Script
Curso Gratuito de Shell ScriptCurso Gratuito de Shell Script
Curso Gratuito de Shell Script
 
Módulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de ComputadoresMódulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de Computadores
 
BUFFER OFFICIAL.pptx
BUFFER OFFICIAL.pptxBUFFER OFFICIAL.pptx
BUFFER OFFICIAL.pptx
 
Invasaocom exploits
Invasaocom exploitsInvasaocom exploits
Invasaocom exploits
 
software tipos.ppt
software tipos.pptsoftware tipos.ppt
software tipos.ppt
 
Atividade programação script 2
Atividade programação script 2Atividade programação script 2
Atividade programação script 2
 
Buffer overflow slide prontos.pptx
Buffer overflow slide prontos.pptxBuffer overflow slide prontos.pptx
Buffer overflow slide prontos.pptx
 
Conhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java PlatformConhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java Platform
 
Processador CISC RISC SET de instruções
Processador CISC RISC SET de instruçõesProcessador CISC RISC SET de instruções
Processador CISC RISC SET de instruções
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
Manual
ManualManual
Manual
 
PHP - Introdução
PHP - IntroduçãoPHP - Introdução
PHP - Introdução
 
Tutorial Shell Script
Tutorial Shell ScriptTutorial Shell Script
Tutorial Shell Script
 

Introdução a Exploração de Software

  • 2. WHOAMI Kaique Bonato Analista de Segurança & Ethical Hacking, amante de tecnologias open source. OWASP Member e Hackthebox Player.
  • 4. NÍVEIS DE SOFTWARE - Estruturas Internas dos Softwares - Camadas de abstração - Níveis de abstração - Esconder detalhes para as camadas acima - Compilação: alto-nível para baixo-nível - Binários PE == Portable Executable ELF == Executable and Linkable Format
  • 5. NÍVEIS DE LINGUAGENS Linguagens Alto-nível Linguagens Baixo-nível Código de Máquina Microcódigo Hardware Linguagens Interpretadas6 1 2 3 4 5 Python, Ruby, Java, .NET C, C++ Assembly Opcodes Firmware Circuitos físicos
  • 8. REGISTRADORES ACX EBX ECX EDX ESI EDI ESP EBP EIP AX AH AL BX BH BL CX CH CL DX DH DL 32 BITS 16 BITS
  • 10. UNIDADES Bases: binária (0,1) / octal (0,7) / decimal (0-9) / hexadecimal(0-f) 1 bit 4 bits = 1 nibble 8 bits = 2 nibbles = 1 byte 16 bits = 4 nibbles = 2 bytes = 1 word 32 bits = 8 nibbles = 4 bytes = 2 words = 1 dword 64 bits = 16 nibbles = 8 bytes = 4 words = 2 dwords = 1 qword 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  • 11. ENDIANNESS Little-endian Big-endian byte menos significativo primeiro byte mais significativo primeiro
  • 12. STACK (PILHA) - Memória para funções: variáveis locais, parâmetros - Controle do fluxo do programa - PUSH (empilha), POP (desempilha) - LIFO, last in, first out - ESP (stack pointer) e EBP (base pointer) - Alocação de endereços top-down - O objetivo da Stack é chamar funções. - Existem 2 registradores na CPU associados à Stack, o EBP (Extended Base Pointer) e o ESP (Extended Stack Pointer) - ESP aponta para o topo da Stack, e o EBP aponta para o início do frame. - Quando uma função é chamada, argumentos, EIP e EBP são inseridos na stack. - EBP é “setado” para o ESP, e o ESP é diminuído para criar espaço para as variáveis locais das funções.
  • 15. Nosso objetivo é manipular o fluxo do programa, assim fazendo com que ele execute o que queremos.
  • 16. Após controlarmos o fluxo, apontamos a próxima instrução para o executar o shellcode.
  • 17. FUZZING O que é Fuzzing? É um técnica cujo objetivo é identificar falhas em softwares por meio de processos automatizados ou semi-automatizados. Enviamos pacotes “mal formados” para testar as entradas de dados. Testes automatizados utilizamos frameworks, como o sulley.
  • 18. EXPLOIT DEVELOPMENT - Exploit Código que explora a vulnerabilidade. - Payload Payload é a carga que é transportada pela conexão. - Shellcode Este é o código que gera a conexão e nos da uma shell.
  • 19. STACK BASED BUFFER OVERFLOW O que é Buffer ? Na programação, o buffer é uma variável (conhecida como array ou vetor) que armazena uma quantidade X de bytes. Por exemplo, se um buffer tiver a capacidade de armazenar 10 bytes, só conseguiria guardar uma palavra de 8 bytes(sendo cada carácter 1 byte), pois o último byte é "nulo" para o programa saber que a palavra termina ali. char buffer[8];
  • 20. Transbordando o buffer - Nesta imagem nós transbordamos o buffer enviando mais bytes do que ele suporta, executamos o software dentro do GDB e o mesmo deu segmentation fault em 0x41414141.
  • 21. Sobrescrevendo o EIP - Olhando os registradores podemos ver que o EIP foi sobrescrito por 0x41414141 como vimos no slide anterior, 41 em hexa corresponde a letra “A”.
  • 24. ISSO É TUDO PESSOAL! Contatos: Skype: kaique.bonato Linkedin: Kaique Bonato Email: kaiqueredivobonato@gmail.com