En este artículo, resolveremos la 25a tarea desde el sitio
pwnable.kr .
Información organizacionalEspecialmente 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.
Solución de trabajo otp
Continuamos la segunda sección. Diré de inmediato que es más difícil que el primero, pero esta vez nos 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. Nos dan la dirección y el puerto para la conexión.

Nos conectamos y miramos alrededor en el servidor.

Una bandera que no podemos leer, un programa y su código fuente. Veamos la fuente.

Analicémoslo. El programa toma una contraseña como argumento.

A continuación, se almacenan 16 bytes aleatorios en la variable otp.

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

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

Aquí es donde está la vulnerabilidad. Consiste en el almacenamiento intermedio del número generado en un archivo. Podemos limitar el tamaño del archivo, por ejemplo, a 0, luego, al escribir y leer con la contraseña se comparará 0. Esto se puede hacer así.

Ahora ejecuta el programa.

Recibimos un error. No importa, porque puede procesarse usando la misma python.
python -c "import os, signal; signal.signal(signal.SIGXFSZ, signal.SIG_IGN); os.system('./otp 0')"

Obtenemos la bandera y nuestros pulmones 100 puntos. Y continuamos: en el próximo artículo tocaremos en la Web. Puedes unirte a nosotros en
Telegram .