Resolución de problemas con pwnable.kr 06 - aleatorio y 09 - error

imagen

En este artículo, aprendemos cómo interceptar los datos transferidos entre la función de la biblioteca y el programa, recordar los descriptores de archivos y resolver las tareas sexta y novena del sitio pwnable.kr.

Información organizacional
Especialmente para aquellos que quieran 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);
  • búsqueda y explotación de vulnerabilidades WEB.

Además de esto, compartiré mi experiencia en informática forense, análisis de malware y firmware, ataques a redes inalámbricas y redes de área local, realización de pentests y escritura de exploits.

Para que pueda conocer nuevos artículos, software y otra información, creé un canal en Telegram y un grupo para discutir cualquier problema en el campo de ICD. Además, consideraré personalmente sus solicitudes personales, preguntas, sugerencias y recomendaciones personalmente y responderé a todos .

Toda la información se proporciona solo con fines educativos. El autor de este documento no tiene ninguna responsabilidad por los daños causados ​​a alguien como resultado del uso de los conocimientos y métodos obtenidos como resultado de estudiar este documento.

La solución al azar


Hacemos clic en el icono con la firma al azar, y nos dicen que debemos conectarnos a través de SSH con la contraseña de invitado.

imagen

Cuando está conectado, vemos el banner correspondiente.

imagen

Veamos qué archivos hay en el servidor y qué derechos tenemos.

ls -l 

imagen

Por lo tanto, podemos leer el código fuente del programa, ya que existe el derecho de leer para todos, y ejecutar el programa al azar con los derechos del propietario (se establece el bit fijo). Veamos el resultado del código.

imagen

El programa genera un número aleatorio, aplica la operación XOR (OR exclusivo) y, si el resultado de la operación XOR es igual al valor de referencia, muestra un indicador.

El hecho es que la función rand () se usa en este programa. Esta función genera un número pseudoaleatorio, convirtiendo el "grano" generado por la función srand (). La función srand (número) debe llamarse cada vez antes de llamar a rand (). Si esto no sucede, entonces srand (1) se activa antes que rand () por defecto.

Por lo tanto, en este programa, un generador de números pseudoaleatorio convierte el mismo "grano" cada vez de acuerdo con el mismo algoritmo. Necesitamos encontrar el número que devuelve la función rand () y el proxory con el valor de referencia. Dado que la operación XOR es reversible, luego de pasar el valor recibido a la entrada del programa, obtenemos un indicador.

Interceptemos los datos entre la función de biblioteca rand () y nuestro programa. Para hacer esto, use la utilidad ltrace.

 ltrace ./random 

imagen

Vemos con qué parámetros se llama la función rand () y qué valor devuelve. Ahora proxorite este valor con la referencia.

imagen

Enviamos el número resultante a la entrada de nuestro programa.

imagen

Pasamos la bandera y obtenemos un punto para una tarea tan fácil.

imagen

Solución al error.


Hacemos clic en el icono con la firma de error y se nos dice que debemos conectarnos a través de SSH con la contraseña de invitado.

imagen

Cuando está conectado, vemos el banner correspondiente.

imagen

Veamos qué archivos hay en el servidor y qué derechos tenemos.

 ls -l 

imagen

Por lo tanto, podemos leer el código fuente del programa, ya que existe el derecho de leer para todos y ejecutar un programa de error con los derechos del propietario (se establece un bit fijo). Veamos el resultado del código.

imagen

Al comienzo del programa, se abre un archivo y se crea un descriptor. Sobre los descriptores de archivos, ya escribí en detalle en ESTE artículo. Pero el hecho es que la condición cometió un error. Por lo tanto, primero se realiza una comparación, cuyo resultado es una mentira, y luego la asignación de este resultado falso (es decir, 0) a la variable fd.

imagen

A continuación, se llama a la función de suspensión y, sin sugerir una entrada a la variable pw_buf, se leen los datos. Pero debido a un error en la condición, no se leen desde un archivo abierto con una contraseña, sino desde una entrada estándar (identificador 0).

Luego, ingresamos 10 caracteres, que carácter por carácter pelean con 1 y se comparan con una contraseña.

imagen

Por lo tanto, ingresamos dos líneas, cuyos caracteres deberían resultar en un resultado de la operación XOR. Encontraremos dos caracteres, si los proxor, obtenemos 1.

imagen

Estos son los caracteres A y @. Ahora ingrese dos líneas en el programa, uno de los 10 caracteres 'A' y el otro - '@'.

imagen

Entregamos la bandera y obtenemos un punto más.

imagen

¡Nos vemos en los siguientes artículos!

Estamos en un canal de telegramas: un canal en Telegramas .

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


All Articles