Bufferoverflowprep

Esta sala esta enfocada a practicar bufferOverFlow encontrando el numero offset, luego los badchars. Además aprenderemos el uso de la herramienta de Immunity Debugger y usaremos unos scripts en Python para realizar el fuzzing para encontrar el offset, encontrar los badchars, obtener una shell de la maquina victima.

20240223185041.png

OverFlow1

Offset

Para encontrar el offset procederemos a realizar el fuzzing, que consiste en que nuestro script va enviar una cierta cantidad de caracteres en la en programa crashea

Enumerando con el script encontraremos el offset

20240224210455.png

Haciendo uso de msf-pattern_create para crear caracteres aleatorios con el fin de usarlo para encontrar el numero con el que el programa se corrompe

20240224211246.png

Volvemos a ejecutar el script, pero haciendo uso de los caracteres que generamos

20240224211449.png

Ahora, copiaremos los caracteres en hexadecimal que están en el EIP

20240224211630.png

Ahora teniendo F43396E haremos uso de msf-pattern_offset podremos encontrar el offset

20240224211655.png

Control del EIP

Luego de encontrar el offset agregaremos BBBB con el fin de corroborar que se tiene control

20240224212109.png

Luego de ejecutar el script podemos observar el EIP y observamos 42424242

20240224212151.png

Estos 42 no son mas que las 4 B que ingresamos y lo podemos comprobar de la siguiente manera

Badchars

Haciendo uso de mona generaremos un array con el siguiente comando

El badchars que se debe de eliminar es \x00 que suele dar problemas en nuestro payload

Badchar N° 2

Luego ejecutaremos de nuevo nuestro script esto siempre y cuando que también quitemos el \x00 de nuestro script de Python, luego haremos uso de mona para realizar una comparación de los caracteres con el ESP.

Entonces nos encontraremos con lo siguiente

20240228004443.png

Debemos de tener en cuenta que si un carácter ocasiona un error esto puede causar que otro carácter también de un error, por lo que nuestro segundo badchar será \x07. Luego de obtener este badchar la quitaremos de nuestro bytearray de nuestro directorio de trabajo y nuestro script.

Badchar N° 3

Ejecutaremos nuestro script de nuevo, luego obtendremos el ESP para ejecutar lo siguiente

Luego de ejecutar obtendremos el tercer badchar que es \x2e

20240228005013.png

Luego de obtener este badchar la quitaremos de nuestro bytearray de nuestro directorio de trabajo y nuestro script.

Badchar N° 4

Ejecutaremos nuestro script de nuevo, luego obtendremos el ESP para ejecutar lo siguiente

Luego de ejecutar obtendremos el tercer badchar que es \xa0

20240228005403.png

Luego de obtener este badchar la quitaremos de nuestro bytearray de nuestro directorio de trabajo y nuestro scrip

Al ejecutar de nuevo nuestro script y luego hacer el proceso anterior, obtenemos el ESP y hacemos la comparación por lo que encontraremos.

Que ya no se tiene ningún badchar

20240228005718.png

Obteniendo la dirección de jmp ESP

Para obtener la dirección de jmp ESP haremos uso de los badchars con lo siguiente comando

Con el anterior podremos obtener la dirección de ESP, como podemos en la siguiente imagen

20240228005945.png

La dirección que obtenemos es: 0x625011AF

Lo que haremos con esta dirección será ponerla de manera contraria para luego colocarla en nuestro script

La siguiente imagen muestra la dirección colocada en nuestro script

20240228010817.png

Generando payload

Ahora usaremos msfvenom para generar nuestro payload y haciendo uso de los badchars que no queremos que tenga en cuenta al generar

Luego de generar nuestro payload, insertaremos en nuestro script y ejecutaremos, antes debemos de ponernos a la escucha con ncat

Shell

20240228010946.png

Luego de ejecutar nuestro script obtenemos nuestra shell de la maquina victima

OverFlow2

Offset

Para obtener una el offset haremos uso de fuzzing que enviara cierta cantidad de caracteres

20240228012136.png

Haciendo uso de msf-pattern_create generaremos 700 caracteres con el fin de hacer uso y encontrar el offset

Agregaremos a nuestro código los caracteres generados como se muestra en la siguiente imagen.

20240228012809.png

Luego de ejecutar y obtener lo que se encuentra en el EIP y haciendo uso de msf-pattern_offset obtendremos el offset que en este caso es 634

Control de EIP

Para comprobar si tenemos control del EIP agregaremos 4 B en nuestro código después de las 634 A como se hizo en la tarea anterior.

Badchars

Luego de tener el control del EIP procederemos a encontrar lo badchars

Badchar N° 1

El badchars que siempre se debe de considerar es el \x00 el cual suele dar inconvenientes

Debemos quitar de nuestro archivo bytearray y nuestro script de python

Badchar N° 2

Luego de volver a ejecutar nuestro script y obtener la dirección del ESP ejecutamos lo siguiente

20240228090512.png

Como se menciono en la primer overFlow un badchar puede ocasionar que otro genere inconvenientes y luego te reporte y así, por lo que solo debemos de tomar en cuenta el siguiente de \x00 o el primer badchar que nos da luego del ultimo. En nuestro caso es \x23.

Luego procederemos a quitarlo del bytearray y nuestro script de python

Badchar N° 3

Luego de volver a ejecutar nuestro script y obtener la dirección del ESP ejecutamos lo siguiente

Obtenemos el siguiente badchar que es: \x3c

20240228091023.png

Eliminamos el badchar que encontramos

Badchar N° 4

Luego de volver a ejecutar nuestro script y obtener la dirección del ESP ejecutamos lo siguiente

Obtenemos el siguiente badchar que es: \x83

20240228091648.png

Eliminamos el badchar que encontramos

Badchar N° 5

Luego de volver a ejecutar nuestro script y obtener la dirección del ESP ejecutamos lo siguiente

Obtenemos el siguiente badchar que es: \xba y eliminamos el badchar que encontramos

Luego de volver a repetir el proceso ya no nos mostrara ningun badchar

20240228092602.png

Obteniendo la dirección de jmp ESP

Para obtener la dirección de jmp ESP haremos uso de los badchars con lo siguiente comando

Con el anterior podremos obtener la dirección de ESP, como podemos en la siguiente imagen

20240228092705.png

La dirección que obtenemos es:0x625011AF

Lo que haremos con esta dirección será ponerla de manera contraria para luego colocarla en nuestro script

Generando payload

Ahora usaremos msfvenom para generar nuestro payload y haciendo uso de los badchars que no queremos que tenga en cuenta al generar

Luego de generar nuestro payload, añadiremos en nuestro script

20240228093230.png

Shell

Luego de generar nuestro payload, insertaremos en nuestro script y ejecutaremos, antes debemos de ponernos a la escucha con ncat

20240228093256.png

OverFlow3

Offset

Badchars

Obteniendo la dirección de jmp ESP

20240228095724.png

Generando payload

20240228100003.png

Shell

20240229025219.png

OverFlow4

Offset

Badchars

Obteniendo la dirección de jmp ESP

20240228165942.png

Generando payload

20240228170111.png

Shell

20240228170304.png

OverFlow5

Offset

Badchars

Obteniendo la dirección de jmp ESP

20240228172954.png

Generando payload

20240228173251.png

Shell

20240228173958.png

OverFlow6

Offset

Badchars

Obteniendo la dirección de jmp ESP

20240228175934.png

Generando payload

20240228180412.png

Shell

20240228180513.png

OverFlow7

Offset

Badchars

Obteniendo la dirección de jmp ESP

20240228183738.png

Generando payload

20240228185258.png

Shell

20240228185234.png

OverFlow8

Offset

Badchars

Obteniendo la dirección de jmp ESP

20240228214102.png

Generando payload

20240228215404.png

Shell

20240228215838.png

OverFlow9

Offset

Badchars

Obteniendo la dirección de jmp ESP

20240228233549.png

Generando payload

20240228233759.png

Shell

20240228233818.png

OverFlow10

Offset

Badchars

Obteniendo la dirección de jmp ESP

20240229000435.png

Generando payload

20240229000725.png

Shell

20240229000746.png

Last updated