Solução de problemas com pwnable.kr 06 - aleatório e 09 - erro

imagem

Neste artigo, aprendemos como interceptar os dados transferidos entre a função de biblioteca e o programa, lembre-se dos descritores de arquivos e resolva as tarefas 6 e 9 do 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.

A solução para a tarefa aleatória


Clicamos no ícone com a assinatura aleatória e informamos que precisamos conectar via SSH com a senha guest.

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 aleatoriamente com os direitos do proprietário (o bit fixo está definido). Vamos ver o resultado do código.

imagem

O programa gera um número aleatório, aplica a operação XOR (OR exclusivo) e, se o resultado da operação XOR for igual ao valor de referência, ele exibe um sinalizador.

O fato é que a função rand () é usada neste programa. Esta função gera um número pseudo-aleatório, convertendo o “grão” gerado pela função srand (). A função srand (número) deve ser chamada todas as vezes antes de chamar rand (). Se isso não acontecer, srand (1) é acionado antes de rand () por padrão.

Assim, neste programa, um gerador de números pseudo-aleatórios converte o mesmo "grão" a cada vez, de acordo com o mesmo algoritmo. Precisamos descobrir o número que a função rand () retorna e proxory com o valor de referência. Como a operação XOR é reversível, passando o valor recebido para a entrada do programa, obtemos um sinalizador.

Vamos interceptar os dados entre a função da biblioteca rand () e nosso programa. Para fazer isso, use o utilitário ltrace.

 ltrace ./random 

imagem

Vemos com quais parâmetros a função rand () é chamada e qual valor ela retorna. Agora proxorit este valor com a referência.

imagem

Nós enviamos o número resultante para a entrada do nosso programa.

imagem

Passamos a bandeira e obtemos um ponto para uma tarefa tão fácil.

imagem

Solução para o erro


Clicamos no ícone com a assinatura de erro e informamos que precisamos 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 um programa de erro com os direitos do proprietário (o bit fixo está definido). Vamos ver o resultado do código.

imagem

No início do programa, um arquivo é aberto e um descritor é criado. Sobre os descritores de arquivos, já escrevi em detalhes neste artigo. Mas o fato é que a condição cometeu um erro. Assim, uma comparação é realizada primeiro, cujo resultado é uma mentira e, em seguida, a atribuição desse resultado falso (ou seja, 0) à variável fd.

imagem

Em seguida, a função sleep é chamada e, sem sugerir entrada para a variável pw_buf, os dados são lidos. Porém, devido a um erro na condição, eles não são lidos em um arquivo aberto com uma senha, mas na entrada padrão (identificador 0).

Em seguida, inserimos 10 caracteres, que caracterizam cada caractere com 1 e são comparados com uma senha.

imagem

Assim, inserimos duas linhas, cujos caracteres devem resultar em uma operação XOR.Encontraremos dois caracteres, se os proxorizarmos, obteremos 1.

imagem

Estes são os caracteres A e @. Agora digite duas linhas no programa, um dos 10 caracteres 'A' e o outro - '@'.

imagem

Entregamos a bandeira e conseguimos mais um ponto.

imagem

Vejo você nos seguintes artigos!

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

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


All Articles