Presentación realizada para la Universidad Privada Domingo Savio,en la cual se hace una introducción al desarrollo de exploit sobre sistemas operativos Windows x86
3. EXPLOITING
“Exploiting a program is simply a clever way
of getting the computer to do what you want it
to do, even if the currently running program
was designed to prevent that action.”
Jon Erickson (2008) Hacking: The art of exploitation, 2nd Edition.
4. PROCESO DE DESAROLLLO
• Fuzzing (Crash)
• Control EIP
• Calcular offset para llegar a EIP
• Generar Shellcode
• Test Exploit
• Identificar y Eliminar los “Bad Characters”
5. REGISTROS
• Los registros son pequeños espacios de memoria en el CPU, cada
registro tiene una función específica.
Registro Nombre Función
EAX Accumulator Utilizado para operaciones aritméticas
ECX Counter Utilizado para las iteraciones (loops)
EDX Data Entrada y salida de datos
EBX Base Puntero de datos
ESP Stack Pointer Puntero a la cima (TOP) de la Pila (Stack)
EBP Base Pointer Puntero la base de la pila (Stack)
ESI Source Index Puntero al origen, operaciones con cadenas
EDI Destination Puntero al destino, operaciones con cadenas
EIP Instruction Pointer Puntero a la siguiente instrucción
https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/x86-architecture
6. PROCESO EN MEMORIA
Nombre Tipo Acceso Contenido
.text Código Solo lectura Código del programa (Instrucciones)
.data Dato Lectura / Escritura Variables inicializadas sin asignación y
que pueden ser modificadas
Bss Dato Lectura / Escritura
Heap Dato Lectura / Escritura /
Ejecución
Espacio que puede crecer
dinámicamente, por lo general son
utilizados para punteros a memoria
Stack Dato Lectura / Escritura /
Ejecución
Se almacenan Funciones , variables
7. PROCESO EN MEMORIA
Nombre Tipo
.text Código
.data static int x=19;
int c = 86;
Bss static int x;
int c;
Stack Funciones, parámetros
de funciones y variables
8. PROCESO EN MEMORIA
Nombre Tipo
.text Código
.data static int x=19;
int c = 86;
Bss static int x;
int c;
Stack Funciones, parámetros
de funciones y variables
10. STACK (PILA)
• La pila es una estructura LIFO por lo general se encuentra en la
parte más alta de la memoria, los registros ESP (Stack Pointer)
y EBP (Base Pointer) son los encargados de controlar el bloque
de memoria. Las variables locales, argumentos de las
funciones, funciones y direcciones de retornos son
almacenadas en la pila (Stack).
11. INSTRUCCIÓN PUSH
• Cuando se ejecuta la instrucción PUSH, el registro ESP
incrementa 4 bytes (x86) hacia la dirección más baja de la
memoria.
12. INSTRUCCIÓN POP
• Cuando se ejecuta la instrucción POP, el registro ESP
decrementa 4 bytes (x86) hacia la dirección más alta de la
memoria.
13. ENDIANESS
• Formato en el cual se almacena los datos en memoria.
• Little-Endian
• Big-Endian
Big-Endian
0x12345678
Little-Endian
0x78563412
0x12345678
MSB LSB
DMB
DMA
DMA
DMB
15. DEMO
• Analizar y reconstruir el exploit bajo una metodología
• Exploit : https://www.exploit-db.com/exploits/14373/
• Autor : Madjix (lemail ma3andkoum madirou bih)
• Tipo : Stack Buffer Over Flow (local)
19. LABORATORIO
• https://exploit-exercises.com/protostar/
(Algunos códigos pueden ser compilados y analizados sobre win32)
• https://www.root-me.org/?lang=es
• https://github.com/Kan1shka9/Exploiting-Simple-Buffer-Overflows-on-Win32
• https://github.com/nanotechz9l/Win32-Exploit-Dev-quiz-engine