
Neste artigo, lembramos sobre colisões nas funções de hash e resolvemos a segunda tarefa no site
pwnable.kr .
Informações OrganizacionaisEspecialmente 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) = zSã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.

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.

Quando conectado, vemos o banner correspondente.

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

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.

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.


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.

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

Como resultado, obtemos três pontos.

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 .