Se me cayo un exploit

SEGURIDAD INFORMÁTICA

HACKING . PROGRAMACIÓN . ELECTRÓNICA . GNU/LINUX

Se me cayó un exploit en tu server.... por @UnaPibaGeek

shei@unapibageek:~# ./Ingeniería-Inversa

Ingeniería inversa de TODO! Necesito saber cómo están hechas las cosas :)

Reversing III: Expandir secciones del ejecutable

reversing-3.png

En la segunda entrada de esta serie de notas de reversing estuvimos viendo las cabeceras PE, una de ellas es “Image Section Header” que contiene información sobre las secciones del ejecutable. Nuestro objetivo esta vez será alterar cierta información de esa cabecera para que podamos expandir una sección ya existente dentro del ejecutable ¿Para qué? Para tener el espacio suficiente para inyectar código propio dentro de cualquier .exe.

Cabe mencionar que hacer esto no es necesario si el código que planeamos inyectar cabe sin problemas en algún espacio que pudo haber quedado sin utilizar en una sección. Por ejemplo, podríamos encontrarnos con que al final de una sección hay una gran cantidad de bytes con el opcode 90 o 00, lo cual implica que es un espacio que no contiene instrucciones necesarias para el programa y entonces podríamos aprovecharlo para inyectar el código que deseemos en ese lugar.

Mayormente esto no ocurrirá, por lo tanto, tendremos que hacernos el espacio manualmente expandiendo o creando una nueva sección.

EXPANDIR UNA SECCIÓN
La primera pregunta que surge al momento de expandir una sección es: ¿Cuál de todas? La mejor respuesta es: la última. Si expandimos cualquier sección que no sea la última, nos encontraremos con varios pasos más que tendremos que hacer, tal como actualizar todas las RVA que apuntan al comienzo de cada una de las secciones, etc. Por lo tanto, lo mejor es que alarguemos la última sección.

Para ello abrimos el LordPE, presionamos en “PE Editor” y elegimos el ejecutable que vamos a modificar.



Allí, hacemos click en “Sections” para ver la información de todas las secciones dentro del ejecutable.



En la ventana que allí vemos, hacemos click secundario en la última sección y elegimos la opción “Edit section header…” del menú desplegable.

Al hacerlo, se nos abrirá la siguiente ventana:



Desde allí podremos modificar todo lo que necesitamos para alargar la sección. El primer paso es hacer que la misma sea “writeable” y “readable” (escritura y lectura) y además su contenido se ejecute como código.

Para ello editaremos los Flags: hacemos click en el botón “…” y marcamos los casilleros indicados en la siguiente imagen:



Presionamos OK para guardar y nos quedamos en la ventana de “Edit Section Header”. Allí alargaremos esa sección, sumando tanto a RawSize como a VirtualSize los bytes que necesitemos. En mi caso, sumaré 100h a ambos campos, quedando de la siguiente manera:

ANTES:



DESPUÉS:



Guardamos presionando OK y Save en la ventana principal de PE Editor.

Ahora abriremos el ejecutable modificado con un editor hexadecimal, y nos dirigiremos a la última parte de la sección que modificamos. Para ello debemos sumarle al RawOffset, la longitud (RawSize) original de la sección. Si nos fijamos, esa información se encuentra dentro de la que estuvimos editando previamente.



En mi caso, ROffset es A4E00h y el RSize original era de 6000h. Entonces, el final de la sección se encuentra en el offset A4E00h + 6000h, o sea en el AAE00h.

Podemos utilizar el buscador del editor hexadecimal para posicionarnos en ese offset.



Como podemos observar en la imagen, al final de la sección se encontraba un espacio con algunos bytes en 00h, esto finaliza precisamente en el offset AAE00h.

Nuestro último paso será añadir antes de ese offset, los 100h que hemos sumado a esta sección.



Los bytes en rojo son los que hemos añadido, ahora podemos notar que la sección finaliza en el offset AAF00h en lugar de AAE00h y esto es correcto, ya que ahora tenemos 100h más.

Guardamos y ejecutamos el .exe para asegurarnos que no rompimos nada :)



Perfect! El binario que elegí editar fue el cliente de Putty de 32bits.

En la próxima entrega añadiremos código útil en este hueco que nos hemos hecho manualmente y modificaremos el Entry Point del .exe para que sea lo primero que se ejecute al iniciar el programa :)

Allí nos leemos! Saludos!

¿Te cansaste de leer? Tomate un café (share):

Fecha: 10/06/2017

Sheila A. Berta

Sheila A. Berta

shei@unapibageek:~# cd shei

¡Suscribite!

Aprendé más en...