Local Buffer Overflow

#1
Para a exploração de buffer overflow stack-based, requer um background em Stack e Assembly (básico).

Código:

Code: Select all

#include <stdio.h>
#include <stdlib.h>

void function()
{
	char c[8];
	gets(c);
}

int main()
{
	function();
	return 0;
}
A compilação deve ser feita da seguinte forma:
gcc code_name.c -o code_name -fno-stack-protector -z execstack -no-pie -w

-fno-stack-protector: Desabilita SSP (Stack Smashing Protector)
-z execstack: Desabilita NX (No eXecute)
-no-pie: Desabilita PIE
-w: oculta warnings

Recomendado: gdb-peda ou gdb gef

A exploração se resume em: sobrescrever o endereço de retorno da stack e passar o endereço que está alocando o shellcode.

Para começar a exploração, vamos descobrir com quantos bytes o endereço de retorno começa a ser sobrescrito,
usamos o "Pattern" para isso.

Code: Select all

gdb-peda$ pattern create 100
(pattern com 100 bytes)

gdb-peda$ run <<< (pattern)
segmentation fault
(segfault in (address))

gdb-peda$ pattern offset (address)
(address) offset in: 20
Agora sabemos que,
o endereço de retorno é sobrescrito de 20 bytes para frente.
Na arquitetura de 32 Bits, você vai precisar passar 4 Bytes para preencher o endereço
32 Bits = 4 Bytes
Na arquitetura de 64 Bits, você vai precisar passar 8 Bytes para preencher o endereço
64 Bits = 8 Bytes

Agora que você pode sobrescrever o endereço de retorno,
basta passar um shellcode para o endereço subsequente ao endereço de retorno.

Code: Select all

Stack:
0001| Stack1: 0xaddress1
0002| Stack2: 0xaddress2
no caso, o Stack1 é o nosso endereço de retorno e o Stack2 é o endereço subsequente
basta preencher o Stack1 com o endereço do Stack2
e passar o shellcode ao Stack2, dessa forma o endereço de retorno apontaria para o Stack2 e ele seria executado.

Payload:
'A'*20 -> junk
'\xaa\xaa\xaa\xaa' -> Stack2 address
'\xshellcode' -> shellcode

Dessa forma, o endereço de retorno seria sobrescrito com o stack2 que estaria alocando o shellcode e ele seria executado.

Meu vídeo: https://youtu.be/02JefNvzV9A
Explorando buffer overflow stack-based e executando shellcode.

Minha página: https://in4sax.github.io
Onde comento mais sobre o assunto.
2 x
cron