
En este artículo, recordamos las colisiones en las funciones hash y resolvemos la segunda tarea desde el sitio
pwnable.kr .
Información organizacionalEspecialmente 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.
Colisiones de función hash
Una colisión de función hash es un par de bloques
x e
y , el resultado de la
función hash hash () a partir de la cual se obtiene el mismo bloque
z .
hash (x) = hash (y) = zLas colisiones son posibles para absolutamente cualquier función hash, ya que el conjunto de entradas es mucho mayor que el conjunto de salidas de la función hash.

Por lo tanto, la estabilidad de la función hash está determinada por tres características:
- irreversibilidad: la incapacidad de recuperar un mensaje por hash;
- resistencia a colisiones del primer tipo: para un solo mensaje es imposible encontrar un segundo mensaje que dé el mismo hash con el primero;
- resistencia a colisiones del segundo tipo: no puede recoger un par de mensajes cuyo hash será el mismo.
Solución de trabajo de colisión
Hacemos clic en el segundo ícono con la colisión de firma, y nos dicen que debemos conectarnos a través de SSH con la contraseña de invitado.

Cuando está conectado, vemos el banner correspondiente.

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

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

Del código se deduce que el programa toma una cadena de 20 caracteres como parámetro, la pasa a una función que calcula el hash y lo compara con el valor de referencia.


Dentro de la función, nuestra cadena se divide en 5 bloques de 4 bytes, que se convierten en números, después de lo cual se suman estos números. Por lo tanto, necesitamos 5 números, que en total darán 0x21dd09ec. Satisfaga la condición: 0xd1d905e8 y 0x01010101.

Ahora necesita pasar caracteres no imprimibles a la línea de comando como parámetro para el programa. Para hacer esto, usamos la sintaxis bash y el intérprete de python. Es importante tener en cuenta que cuando estén en la memoria de la computadora, estos números se almacenarán en el orden inverso, por lo que los entregaremos.
./col $(python - “print('\x01\x01\x01\x01'*4 + '\xe8\x05\xd9\x1d')”)

Como resultado, obtenemos tres puntos.

Ahora hemos examinado un ejemplo muy simple de una colisión, y en el próximo artículo resolveremos la tercera tarea y analizaremos una vulnerabilidad como el desbordamiento del búfer en la pila. Nos vemos en los siguientes artículos.
Estamos en un canal de telegramas: un
canal en Telegramas .