Neste artigo, analisaremos: o que é um descritor de arquivo, como os processos acessam determinados fluxos de entrada / saída e resolvemos a primeira tarefa do 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 computação forense, 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.
Descritores de arquivo
Um descritor de arquivo é um número não negativo que identifica um fluxo de entrada / saída que pode estar associado a arquivos, diretórios ou soquetes.

A tabela de arquivos do sistema (SFT - Tabela de arquivos do sistema) e a tabela do inode (tabela INode) contêm as informações necessárias para o processo acessar os dados do arquivo. Se vários processos solicitarem acesso ao mesmo arquivo, cada um desses processos receberá seu próprio elemento da tabela de arquivos do sistema, apesar de trabalhar com o mesmo arquivo.
O kernel fornece o descritor de arquivo para o processo quando obtém acesso ao arquivo. Podemos dizer que um descritor de arquivo é um índice de uma matriz de arquivos abertos que é exclusiva para cada processo. Mas os três primeiros índices estão firmemente fixos:
- 0 - entrada padrão (stdin);
- 1 - saída padrão (stdout);
- 2 - fluxo de erro padrão (stderr).
Portanto, as funções gets () e printf () da biblioteca padrão C usam stdin e stdout, o que permite que os shells redirecionem adequadamente a entrada e a saída dos processos.
Solução de trabalho Fd
Clicamos no primeiro ícone com a assinatura fd e informamos que precisamos conectar via SSH com a senha guest.

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 fd com os direitos do proprietário (o bit fixo está definido). Vamos dar uma olhada no código fonte.

Segue-se do código que o programa pega um número como parâmetro, subtrai 0x1234 e o usa como descritor para obter uma string que deve ser igual a "LETMEWIN".

Portanto, precisamos enviar ao programa a string "LETMEWIN" através do fluxo de entrada padrão (stdin). Para isso, o descritor que é passado para a função read () deve ser 0. Ou seja, o número 0x1234 deve ser usado como o parâmetro do programa. Converta em decimal.

Agora execute o programa com o parâmetro 4660, solte a linha desejada e pegue a bandeira.

Como resultado, obtemos o primeiro ponto.

O Pwnable.kr começa com uma tarefa tão fácil, graças à qual foi necessário lidar com descritores. Vejo você nos seguintes artigos!
Estamos em um canal de telegrama: um
canal no telegrama .