Ir al contenido principal

Entradas

Mostrando entradas de noviembre, 2020

Binary Exploitation (XXII): Buffer overflow (I)

Comienzo con éste una serie de posts en los que compartiré lo que voy aprendiendo sobre ciertas vulnerabilidades software y técnicas para explotarlas . En esta primera entrada de la miniserie me centraré en la vulnerabilidad de desbordamiento de 'buffer'   (en ingles, 'buffer overflow' ). En primer lugar,  un poco de teoría para recodar los conceptos fundamentales . ¿Qué es la  vulnerabilidad  'buffer overflow' ? : La vulnerabilidad 'buffer overflow' se produce cuando el tamaño de los datos que un usuario incluye por medio de un programa excede la cantidad de memoria asignada a la entrada , escribiéndose parte de los datos introducidos en posiciones de memoria adyacentes. Para evitar esta vulnerabilidad, los programas deben establecer un tamaño máximo para los datos de entrada y garantizar que no se supere éste. Cierta información de un programa en ejecución se almacena temporalmente de forma contigua en la memoria, en una zona llamada pila. La entrada

Binary Exploitation (XXI): Solución Reto ROP Emporium "write4"

Continúo poniendo las soluciones de un   sitio   que he encontrado  para aprender ROP , ‘ Return Oriented Programming’  (en español, Programación Orientada al Retorno),  a través de una serie de desafíos  diseñados para enseñar diversas técnicas. Como siempre utilizo la versión de 64 bits del desafío. En este post la  solución al reto que lleva por título "write4" , y que, en mi opinión, presenta un  nivel de dificultad alto (★★ ★ ★ ☆) . -  Enunciado : Además, se explica lo siguiente : On completing our usual checks for interesting strings and symbols in this binary we're confronted with the stark truth that our favourite string "/bin/cat flag.txt" is not present this time. Although you'll see later that there are other ways around this problem, such as resolving dynamically loaded libraries and using the strings present in those, we'll stick to the challenge goal which is learning how to get data into the target process's virtual address space via t

Binary Exploitation (XX): Solución Reto ROP Emporium "callme"

Continúo poniendo las soluciones de un   sitio   que he encontrado  para aprender ROP , ‘ Return Oriented Programming’  (en español, Programación Orientada al Retorno),  a través de una serie de desafíos  diseñados para enseñar diversas técnicas. Como siempre utilizo la versión de 64 bits del desafío. En este post la  solución al reto que lleva por título "callme" , y que, en mi opinión, presenta un  nivel de dificultad medio (★★ ★ ☆ ☆) . -  Enunciado : Además, se explica que la PLT ( 'Procedure Linkage Table' ) se utiliza para resolver en tiempo de ejecución direcciones de funciones en bibliotecas importadas, y a modo de instrucciones se proporcionan las siguientes : Important: To dispose of the need for any RE I'll tell you the following: You must call the callme_one() , callme_two() and callme_three() functions in that order, each with the arguments 0xdeadbeef , 0xcafebabe , 0xd00df00d e.g. callme_one(0xdeadbeef, 0xcafebabe, 0xd00df00d) to print the flag. F

Binary Exploitation (XIX): Solución Reto ROP Emporium "split"

Continúo poniendo las soluciones de un   sitio   que he encontrado para aprender ROP , ‘ Return Oriented Programming’  (en español, Programación Orientada al Retorno),  a través de una serie de desafíos  diseñados para enseñar diversas técnicas. Como siempre utilizo la versión de 64 bits del desafío. En este post la  solución al reto que lleva por título "split" , y que, en mi opinión, presenta un  nivel de dificultad medio (★★ ★ ☆☆) . -  Enunciado : -  Solución: 1.-  Se proporciona un ejecutable (split) ; lo primero que hago es ejecutarlo  y veo que es vulnerable a un ataque de desbordamiento de  'buffer'  (en inglés,  'buffer overflow' ): 2.-  Compruebo los mecanismos de seguridad del binario  utilizando  ‘checksec’   y veo que ‘NX’ está habilitado, lo que significa que  la pila es no ejecutable : 3.-  Decompilo el binario  usando  ‘Ghidra’   y veo que en la función   main()   se realiza una llamada a la función   pwnme() : En la función   pwnme() , que es d

Binary Exploitation (XVIII): Solución Reto ROP Emporium "ret2win"

He encontrado un sitio para aprender ROP , ‘ Return Oriented Programming’ (en español, Programación Orientada al Retorno), a través de una serie de desafíos diseñados para enseñar diversas técnicas. En la medida que sea capaz de ir resolviéndolos iré poniendo las soluciones a los mismos . Utilizaré siempre la versión de 64 bits del desafío. En este post la solución al reto que lleva por título "ret2win" , y que, en mi opinión, presenta un nivel de dificultad bajo (★★ ☆ ☆☆) . - Enunciado : - Solución: 1.- Se proporciona un ejecutable (ret2win) ; lo primero que hago es ejecutarlo y veo que es vulnerable a un ataque de desbordamiento de 'buffer' (en inglés, 'buffer overflow' ): 2.-  Compruebo los mecanismos de seguridad del binario utilizando ‘checksec’   y veo que ‘NX’ está habilitado, lo que significa que la pila es no ejecutable : 3.-  Decompilo el binario usando ‘Ghidra’   y veo que en la función main() se realiza una llamada a la función pwnme() :