En este artículo resolveremos la tarea número 25 del sitio.
información organizacionalEspecialmente para aquellos que quieran aprender algo nuevo y desarrollarse en cualquiera de las áreas de la información y la seguridad informática, escribiré y hablaré sobre las siguientes categorías:
- PWN;
- criptografía (cripto);
- tecnologías de red (Red);
- reversa (Ingeniería inversa);
- esteganografía (Stegano);
- búsqueda y explotación de vulnerabilidades WEB.
Además, compartiré mi experiencia en informática forense, análisis de malware y firmware, ataques a redes inalámbricas y redes de área local, pentesting y escritura de exploits.
Para que pueda conocer nuevos artículos, software y otra información, creé
Toda la información se proporciona únicamente 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 obtenidos como resultado del estudio de este documento.
Resolviendo la tarea otp
Seguimos con la segunda sección. Diré de inmediato que es más difícil que el primero, pero esta vez no proporcionan el código fuente del programa. No olvide la discusión aquí (https://t.me/RalfHackerPublicChat) y aquí (https://t.me/RalfHackerChannel). Empecemos.
Haga clic en el icono con la firma otp. Se nos da una dirección y un puerto para conectarnos.
Nos conectamos y miramos alrededor del servidor.
La bandera que no podemos leer es el programa y su código fuente. Veamos la fuente.
Vamos a retomarlo. El programa toma una contraseña como argumento.
Además, se almacenan 16 bytes aleatorios en la variable otp.
Se crea un archivo con un nombre aleatorio en la carpeta tmp (los primeros 8 bytes son otp) y se escriben en él 8 bytes aleatorios (los segundos 8 bytes son otp).
Por alguna razón, el valor del archivo creado se lee y se compara con la contraseña ingresada.
Aquí hay una vulnerabilidad. Consiste en el guardado intermedio del número generado en un archivo. Podemos limitar el tamaño del archivo, por ejemplo, a 0, luego al escribir y leer, se comparará 0 con la contraseña. Puedes hacerlo así.
# ulimit -f 0
Ahora ejecutemos el programa.
Recibimos un error. No importa, se puede procesar usando el mismo Python.
python -c "import os, signal; signal.signal(signal.SIGXFSZ, signal.SIG_IGN); os.system('./otp 0')"
Conseguimos la bandera y nuestros 100 puntos fáciles. Y seguimos: en el próximo artículo tocaremos la Web. Puedes unirte a nosotros en
Fuente: habr.com