BlogWonderHowTo

Hack como un profesional Cómo crear sus propios exploits, Parte 2 (Escribir un desbordamiento de búfer simple en C)

¡Bienvenidos de nuevo, mis hackers aficionados!

En el transcurso del próximo año, desarrollaremos nuestros propios exploits de día cero. En mi primer artículo de esta serie, le presenté los desbordamientos de búfer, que son la fuente de algunos de los exploits más letales, en particular la “ejecución remota de código”, por lo que estamos centrando nuestro desarrollo de exploits aquí en un desbordamiento de búfer.

Desarrollar sus propias hazañas requiere un conocimiento y una habilidad considerables, por lo que esta serie alternará entre proporcionarle material de antecedentes e información y laboratorios para probar y expandir sus habilidades.

En este tutorial, crearemos un desbordamiento de búfer simple para demostrar cómo puede funcionar un desbordamiento de búfer. Construiremos un programa corto y simple en C, lo compilaremos, lo ejecutaremos exitosamente y luego intentaremos desbordar su búfer y hacer que nuestro propio código se ejecute. Aunque está lejos de ser un exploit sofisticado, creo que demuestra bien lo que estamos tratando de lograr al desarrollar nuestro exploit de desbordamiento de búfer.

Paso 1: abre Leafpad

Primero, encienda Kali y abra un editor de texto para ingresar nuestro código. En mi caso, usaré Leafpad, pero puedes usar cualquier editor de texto que quieras. Para abrir Leafpad, vaya a Aplicaciones -> Accesorios -> Leafpad.

Paso 2: escriba el código

He desarrollado un pequeño código que nos permitirá desbordar un búfer de memoria y ejecutar nuestros propios comandos en el sistema. No está destinado a ser utilizado como un exploit, sino simplemente para demostrar el principio de desbordamientos de búfer que estaremos incorporando a nuestro exploit de día cero.

Ahora, ingrese el siguiente código como se muestra a continuación.

En la captura de pantalla a continuación, he resaltado nuestras dos variables que usaremos en este código;

char * lugar
char * systemcommand

Los hemos declarado debajo de las variables “char” o de tipo carácter.

A continuación, hemos asignado memoria para cada variable usando el comando malloc (asignación de memoria).

Después de la asignación de memoria, tenemos dos declaraciones “printf” que imprimen las ubicaciones de memoria de las dos variables. El tercer printf a continuación calcula el número de bytes entre las dos ubicaciones de memoria de nuestras variables.

El cuarto printf pregunta al usuario “¿Cuál es el mejor lugar para aprender a piratear en la web?” seguido de la función “obtiene” que coloca la respuesta del usuario en la variable “lugar”.

A esto le sigue otra función printf que imprime la declaración “El mejor lugar para aprender a piratear en la web es” seguida de la respuesta del usuario. Por supuesto, el usuario responderá con “Null Byte” … ¿qué más?

Finalmente, la última línea ejecuta lo que esté en la variable “systemcommand”. Si la variable está vacía, no se ejecuta ningún comando.

Finalmente, guardemos este archivo como bufferoverflow.c.

Paso 3: compila

El siguiente paso es compilar nuestro nuevo programa. La compilación es el proceso de convertir nuestro código fuente, en este caso C, en código de máquina. Es necesario cada vez que escribimos código en un lenguaje compilado, a diferencia de, digamos, Python, que es un lenguaje interpretado (los lenguajes interpretados se convierten a lenguaje de máquina sobre la marcha en tiempo de ejecución, línea por línea, y por lo tanto son más lentos).

Necesitamos usar el compilador GNU C (gcc) en el archivo bufferoverflow.cy enviar (-o) el compilado a un nuevo archivo llamado “bufferoverflow” o como usted elija llamarlo.

kali> gcc bufferoverflow.c -o bufferoverflow

Esto puede producir algunos errores, pero puede ignorarlos en gran medida.

Paso 4: ejecutar el programa

Ahora, ejecutemos nuestro pequeño programa “bufferoverflow”.

kali> ./bufferoverflow

Observe que primero respondió con la ubicación de memoria de nuestra variable “lugar”, y luego la ubicación de memoria de nuestra variable “comando del sistema” y, en tercer lugar, calcula que hay 16 bytes entre estas dos ubicaciones de memoria. A continuación, solicita al usuario “el mejor lugar en la web para aprender a piratear” y, por supuesto, el usuario responde “Byte nulo”. Finalmente, nuestro pequeño programa responde con la verdad obvia: “El mejor lugar para aprender a piratear es Null Byte”.

Paso 5: desbordar el búfer

Ahora, ejecutemos este programa e intentemos desbordar el área de memoria para la variable “place” en el área de memoria para “systemcommand”. Si podemos desbordar esa área de memoria en la variable “systemcommand”, deberíamos poder ejecutar cualquier comando del sistema en el sistema. Por ejemplo, podríamos ejecutar un shell de comandos o mostrar el contenido del / etc / shadow expediente.

Sabemos por la tercera declaración printf, el espacio entre la variable “place” y la variable “systemcommand” es de 16 bytes. Esto significa que si ingresamos más de 16 caracteres ASCII (cada carácter ASCII es un byte) cuando se le solicita, comenzando con el carácter 17, lo que ingresemos se moverá a la siguiente variable, en este caso, “comando del sistema”.

Ingresemos ahora lo siguiente cuando se le solicite:

kali> nnnnnnnnnnnnnnnncat / etc / shadow

Cuando hacemos esto, los primeros 16 caracteres irán a la variable “place” y el carácter 17 y todo lo que sigue se desbordará en la variable “systemcommand”. La última línea de nuestro código ejecutará la variable de comando del sistema.

Observe que hemos podido desbordar la variable “place” en la variable “systemcommand” y hemos podido “cat” el contenido del / etc / shadow archivo que nos muestra todos los usuarios y sus contraseñas hash. ¡Felicidades! Ha desbordado con éxito el búfer y ha ejecutado su propio código.

En el transcurso de este año 2015, trabajaremos paso a paso para desarrollar nuestro propio exploit de día cero en esta serie, ¡así que sigan regresando, mis hackers novatos!

Imagen de portada a través de Shutterstock

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar