Resolución de problemas con pwnable.kr 01 - fd. Descriptores de archivo y procesos

imagen

En este artículo analizaremos: qué es un descriptor de archivo, cómo acceden los procesos a ciertas secuencias de entrada / salida y cómo resolver la primera tarea desde el sitio pwnable.kr .

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);
  • 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 del conocimiento y los métodos obtenidos como resultado de estudiar este documento.

Descriptores de archivo


Un descriptor de archivo es un número no negativo que identifica una secuencia de entrada / salida que puede estar asociada con archivos, directorios o sockets.

imagen

La tabla de archivos del sistema (SFT - Tabla de archivos del sistema) y la tabla de inodo (Tabla INode) contienen la información necesaria para que el proceso acceda a los datos del archivo. Si varios procesos solicitan acceso al mismo archivo, cada uno de estos procesos recibirá su propio elemento de la tabla de archivos del sistema, a pesar de que funcionarán con el mismo archivo.

El núcleo proporciona el descriptor de archivo para el proceso cuando accede al archivo. Podemos decir que un descriptor de archivo es un índice de una matriz de archivos abiertos que es único para cada proceso. Pero los primeros tres índices están firmemente fijados:

  • 0 - entrada estándar (stdin);
  • 1 - salida estándar (stdout);
  • 2 - flujo de error estándar (stderr).

Por lo tanto, las funciones gets () e printf () de la biblioteca estándar de C usan stdin y stdout, lo que permite que los shells redirijan correctamente la entrada y la salida de los procesos.

Solución de trabajo de fd


Hacemos clic en el primer ícono con la firma fd, 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 el programa fd con los derechos del propietario (se establece el bit fijo). Veamos el código fuente.

imagen

Del código se deduce que el programa toma un número como parámetro, le resta 0x1234 y lo usa como descriptor para obtener una cadena que debería ser igual a "LETMEWIN".

imagen

Por lo tanto, debemos enviar al programa la cadena "LETMEWIN" a través de la secuencia de entrada estándar (stdin). Para esto, el descriptor que se pasa a la función read () debe ser 0. Es decir, el número 0x1234 debe usarse como parámetro del programa. Convierte a decimal.

imagen

Ahora ejecute el programa con el parámetro 4660, suelte la línea deseada y levante la bandera.

imagen

Como resultado, obtenemos el primer punto.

imagen

Pwnable.kr comienza con una tarea tan fácil, gracias a la cual fue necesario tratar con descriptores. ¡Nos vemos en los siguientes artículos!

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

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


All Articles