Solução de problemas com pwnable.kr 02 - colisão. Colisão de Hash

imagem

Neste artigo, lembramos sobre colisões nas funções de hash e resolvemos a segunda tarefa no site pwnable.kr .

Informações Organizacionais
Especialmente para aqueles que desejam aprender algo novo e se desenvolver em qualquer uma das áreas de segurança da informação e da informática, escreverei e falarei sobre as seguintes categorias:

  • PWN;
  • criptografia (criptografia);
  • tecnologias de rede (rede);
  • reverso (engenharia reversa);
  • esteganografia (estegano);
  • pesquisa e exploração de vulnerabilidades na WEB.

Além disso, compartilharei minha experiência em análise forense de computadores, análise de malware e firmware, ataques a redes sem fio e redes locais, realização de protestos e explorações por escrito.

Para que você possa descobrir sobre novos artigos, software e outras informações, criei um canal no Telegram e um grupo para discutir quaisquer questões no campo da CID. Além disso, considerarei pessoalmente seus pedidos, perguntas, sugestões e recomendações pessoais e responderei a todos .

Todas as informações são fornecidas apenas para fins educacionais. O autor deste documento não se responsabiliza por nenhum dano causado a alguém como resultado do uso dos conhecimentos e métodos obtidos como resultado do estudo deste documento.

Colisões da função Hash


Uma colisão de função hash é um par de blocos xey , o resultado da função hash () a partir da qual produz o mesmo bloco z .

hash (x) = hash (y) = z

São possíveis colisões para absolutamente qualquer função hash, uma vez que o conjunto de entradas é muito maior que o conjunto de saídas da função hash.

imagem

Portanto, a estabilidade da função hash é determinada por três características:

  • irreversibilidade - a incapacidade de recuperar uma mensagem por hash;
  • resistência a colisões do primeiro tipo - para uma única mensagem é impossível encontrar uma segunda mensagem que fornecerá o mesmo hash com a primeira;
  • resistência a colisões do segundo tipo - você não pode receber um par de mensagens cujo hash será o mesmo.

Solução de trabalho de colisão


Clicamos no segundo ícone com a colisão de assinaturas e somos informados de que precisamos nos conectar via SSH com a senha de convidado.

imagem

Quando conectado, vemos o banner correspondente.

imagem

Vamos descobrir quais arquivos estão no servidor e quais direitos temos.

ls -l 

imagem

Assim, podemos ler o código fonte do programa, pois existe o direito de ler para todos, e executar o programa col com os direitos do proprietário (o bit fixo está definido). Vamos olhar para o resultado do código.

imagem

Segue-se do código que o programa pega uma cadeia de 20 caracteres como parâmetro, passa-o para uma função que calcula o hash e o compara com o valor de referência.

imagem

imagem

Dentro da função, nossa string é dividida em 5 blocos de 4 bytes, que são convertidos em números, após o que esses números são somados. Portanto, precisamos de 5 números, que no total fornecerão 0x21dd09ec. Satisfaça a condição: 0xd1d905e8 e 0x01010101.

imagem

Agora você precisa passar caracteres não imprimíveis para a linha de comando como um parâmetro para o programa. Para fazer isso, usamos a sintaxe bash e o interpretador python. É importante observar que, quando estiverem na memória do computador, esses números serão armazenados na ordem inversa, para que possamos revertê-los.

 ./col $(python - “print('\x01\x01\x01\x01'*4 + '\xe8\x05\xd9\x1d')”) 

imagem

Como resultado, obtemos três pontos.

imagem

Agora examinamos um exemplo muito simples de uma colisão e, no próximo artigo, resolveremos a terceira tarefa e analisaremos uma vulnerabilidade, como o estouro de buffer na pilha. Vejo você nos seguintes artigos.

Estamos em um canal de telegrama: um canal no telegrama .

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


All Articles