
Script em Python para encontrar eficientemente arquivos em sistemas de arquivos tipo UNIX com propriedades específicas (mais rápido que o find)
Após obter acesso a uma máquina remota durante um teste de penetração, você pode querer encontrar arquivos de configuração ou binários interessantes para tentar uma escalada de privilégios.
O script é autocontido e funciona tanto em Python3 quanto em Python2.7, de modo a ser compatível tanto com máquinas recentes (que não trazem python2 por padrão) quanto com as nem tão recentes.
Em vez de executar vários comandos find, este script simples apenas mantém o controle deles fazendo uma única passagem por toda a estrutura da árvore do disco, aplicando todos os predicados (as funções que terminam em _p ou _filep para predicados que devem ser aplicados apenas a arquivos).
Ainda é um trabalho em andamento, mas o código é bem enxuto e é muito fácil escrever seus próprios predicados: basta ser uma função que recebe um caminho de arquivo e retorna um booleano.
Ao final, todos os conjuntos de arquivos são armazenados em um dicionário chamado d, cujas chaves são os nomes dos predicados. Para ter acesso a ele, basta executar python3 -i diskwalk.py. Você será levado a um repl do python e, como são conjuntos python, você pode facilmente fazer operações como
d['executable_files'] & d['writable_files']
Para obter o conjunto de arquivos que são graváveis e executáveis
d['executable_files'] - d['readable_files']
Para obter os arquivos executáveis, mas não legíveis
d['owned_by_nobody_dirs'] | d['owned_by_nobody_files']
Para obter a união de diretórios e arquivos pertencentes ao usuário nobody
Os dados obtidos serão salvos em um arquivo compactado e serializado com pickle chamado dump.gz; basta fornecê-lo como argumento para carregá-lo e evitar escanear o disco novamente
python -i diskwalk.py dump.gz
Devido ao funcionamento do pickle do python, as ressalvas usuais se aplicam: você não conseguirá carregar esse mesmo arquivo em um interpretador python diferente daquele usado para gerar o arquivo, por exemplo.