O que esse comando realmente causa?

5

Uma vez, enquanto conversava com meu amigo, eu estava tentando brincar que poderíamos ter uma chance melhor de concluir nosso projeto se apenas executássemos muitos programas aleatórios e esperássemos que um deles resolvesse nosso problema. Para demonstrar isso, escrevi esta "prova de conceito":

while true; do

dd if=/dev/urandom of=pliczek count=1
chmod +x pliczek
./pliczek

done

Para meu espanto, quando executei este loop e chamei ls , notei muitos arquivos com nomes de arquivos de aparência aleatória no diretório atual (testado no Fedora Linux em x86 de 64 bits). Agora eu não consigo parar de pensar - o que poderia realmente ter acontecido?

    
por d33tah 12.01.2014 / 22:27

1 resposta

6

Você está escrevendo 512 bytes em um arquivo e o executa. Então o resultado poderia ser qualquer coisa que um programa com 512 bytes pudesse fazer. O que é isso depende da sua máquina. Mas 512 bytes são bastantes instruções, então basicamente tudo poderia ter acontecido como mudar a senha do root, criar arquivos aleatórios ou gerar um arquivo tar contendo o código-fonte do seu projeto.

Um cabeçalho ELF não é obrigatório. Texto ASCII simples é suficiente e será interpretado pelo shell em execução no momento (por causa da falta da linha shebang).

Um sinal maior que ( > ) redireciona a saída para um arquivo. Portanto, este byte específico já é suficiente para criar arquivos. Exemplo:

# this will create a file named abc123 in almost every shell
:>abc123

# another variant
>abc123^D

Isso demonstra que existem várias maneiras de criar arquivos usando uma pequena quantidade de bytes, o que aumenta a probabilidade de acontecer.

    
por 12.01.2014 / 23:41