
En este artículo resolveremos la tarea 25 del sitio .
Información organizativaEspecíficamente para aquellos que quieren aprender algo nuevo y desarrollarse en cualquiera de las áreas de la seguridad informática, escribiré y hablaré sobre las siguientes categorías:
- PWN;
- criptografía (Crypto);
- tecnologías de red (Network);
- ingeniería inversa (Reverse Engineering);
- esteganografía (Stegano);
- búsqueda y explotación de vulnerabilidades en la WEB.
Además de esto, compartiré mi experiencia en la informática forense, análisis de malware y firmware, ataques a redes inalámbricas y redes computacionales locales, realización de pentests y escritura de exploits.
Para que puedan conocer nuevos artículos, software y otra información, he creado y en el área de seguridad informática. También consideraré personalmente y responderé a todas sus solicitudes, preguntas, propuestas y recomendaciones .
Toda la información se presenta exclusivamente con fines educativos. El autor de este documento no asume ninguna responsabilidad por cualquier daño causado a cualquier persona como resultado del uso de los conocimientos y métodos adquiridos al estudiar este documento.
Solución de la tarea otp
Continuamos con la segunda sección. Diremos de inmediato que es más complicada que la primera, pero esta vez nos proporcionan el código fuente del programa. No olviden sobre la discusión aquí (https://t.me/RalfHackerPublicChat) y aquí (https://t.me/RalfHackerChannel). Empecemos.
Hacemos clic en el ícono con la etiqueta otp. Nos dan la dirección y el puerto para conectarnos.

Nos conectamos y exploramos el servidor.

La bandera que no podemos leer, el programa y su código fuente. Vamos a ver el código fuente.

Lo desensamblamos. El programa toma como argumento una contraseña.

Luego se guarda en la variable otp 16 bytes aleatorios.

En la carpeta tmp se crea un archivo con un nombre aleatorio (los primeros 8 bytes de otp) y se escriben 8 bytes aleatorios (los segundos 8 bytes de otp).

Por alguna razón, se lee el valor del archivo creado y se compara con la contraseña ingresada.

Aquí es donde está la vulnerabilidad. Consiste en que el número generado se guarda temporalmente en un archivo. Podemos limitar el tamaño del archivo, por ejemplo, a 0, de modo que al escribir y leer con la contraseña se comparará con 0. Esto se puede hacer así.
# ulimit -f 0 ![]()
Ahora ejecutemos el programa.
![]()
Recibimos un error. No te preocupes, se puede manejar con el mismo Python.
python -c "import os, signal; signal.signal(signal.SIGXFSZ, signal.SIG_IGN); os.system('./otp 0')" ![]()
Obtenemos la bandera y nuestros fáciles 100 puntos. Y continuamos: en el próximo artículo hablaremos sobre Web. Puedes unirte a nosotros en .
Fuente: habr.com
