Resolución de problemas con pwnable.kr 02 - colisión. Hash Collision

imagen

En este artículo, recordamos las colisiones en las funciones hash y resolvemos la segunda tarea desde el sitio pwnable.kr .

Información organizacional
Especialmente 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) = z

Las 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.

imagen

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.

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 col con los derechos del propietario (se establece el bit fijo). Veamos el resultado del código.

imagen

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.

imagen

imagen

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.

imagen

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')”) 

imagen

Como resultado, obtenemos tres puntos.

imagen

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 .

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


All Articles