
smbcrawler é uma ferramenta sem rodeios que recebe credenciais e uma lista de hosts e 'crawls' (ou 'spiders') através desses compartilhamentos
SmbCrawler é uma ferramenta prática que aceita credenciais e uma lista de hosts e 'rastreja' (ou 'spiders') por essas pastas compartilhadas. Funcionalidades:
Se você precisa de instruções sobre como instalar um pacote Python, recomendo que você certifique-se de ter o pipx instalado e execute pipx install smbcrawler.
SmbCrawler pode converter automaticamente alguns arquivos binários como PDF, XLSX, DOCX, ZIP, etc., para texto simples usando MarkItDown. Como este pacote puxa muitas dependências, ele está marcado como extra. No entanto, é altamente recomendado para obter os melhores resultados. Se você deseja converter binários automaticamente, instale SmbCrawler assim:
pipx install 'smbcrawler[binary-conversion]'
Adicionar autocompletar de shell é altamente recomendado. Sendo um aplicativo Python que usa a biblioteca click, você pode adicionar autocompletar com tab para bash, zsh e fish usando o mecanismo usual.
Execute assim (10 threads, profundidade máxima 5):
$ smbcrawler crawl -i hosts.txt -u pen.tester -p iluvb0b -d contoso.local -t 10 -D 5
SmbCrawler passou por uma grande reformulação. As mudanças mais significativas são:
Os argumentos antigos da CLI sobre "arquivos interessantes", "pastas compartilhadas chatas" etc. eram confusos e complicados. Em vez disso, agora usamos "perfis"; veja abaixo para detalhes.
Além disso, percebi que basicamente reinventei bancos de dados relacionais, mas de forma muito pobre, então por que não usar sqlite diretamente? A abordagem sqlite nos permite produzir um bom relatório HTML interativo com bom desempenho. Você ainda pode exportar resultados em vários formatos se precisar usar os dados em algum pipeline de ferramentas.
A maneira antiga como SmbCrawler relatava permissões às vezes não era muito útil. Por exemplo, não é incomum que você tenha permissões de leitura no diretório raiz da pasta compartilhada, mas todos os subdiretórios são protegidos, por exemplo, para perfis de usuário. SmbCrawler agora relatará até que profundidade conseguiu ler a árvore de diretórios de uma pasta compartilhada e se atingiu o limite máximo ou poderia ter ido mais fundo se você tivesse fornecido um valor maior para o argumento de profundidade máxima.
Se você prefere a versão antiga, ela ainda está disponível no PyPI e pode ser instalada com pipx install smbcrawler==0.2.0, por exemplo.
Durante a execução, você pode usar as seguintes teclas:
p: pausar o crawler e pular hosts ou pastas compartilhadas individuais<espaço>: imprimir o progresso atuals: imprimir uma atualização de status mais detalhadaPara mais informações, execute smbcrawler -h.
Mesmo em redes de médio porte, SmbCrawler encontrará toneladas de dados. O desafio é reduzir falsos positivos.
É importante perceber que as permissões podem se aplicar no nível do serviço e no nível do sistema de arquivos. O serviço SMB remoto pode permitir que você autentique e sua conta de usuário pode ter permissões de leitura em princípio, mas pode não ter essas permissões no sistema de arquivos.
O SmbCrawler informará se você tem permissões para:
--depth)Como não é trivial verificar permissões de pastas compartilhadas SMB sem tentar a ação em questão, SmbCrawler tentará criar um diretório em cada pasta compartilhada. Seu nome é smbcrawler_DELETEME_<8 caracteres aleatórios> e será deletado imediatamente, mas fique atento de qualquer forma.
[!AVISO] Às vezes você tem permissão para criar diretórios, mas não para deletá-los, então você deixará um diretório vazio lá.
Para decidir o que fazer com certas pastas compartilhadas, arquivos ou diretórios, SmbCrawler possui um recurso chamado "perfis". Dê uma olhada no perfil padrão.
Os perfis são carregados de arquivos com extensões *.yml ou *.yaml destes locais:
$XDG_DATA_HOME/smbcrawler/ (~/.local/share/smbcrawler por padrão)--extra-profile-directory--extra-profile-filePerfis de cada local substituem definições anteriores.
O valor regex define se um perfil corresponde, e o último perfil correspondente será usado. Todas as expressões regulares são insensíveis a maiúsculas/minúsculas, espelhando o comportamento mais comum no mundo Windows.
Como pode ser confuso como perfis de diferentes fontes funcionam juntos, certifique-se de usar o parâmetro --dry-run. Ele mostra a configuração efetiva e não faz mais nada.
Vamos olhar cada seção, que é sempre uma lista de dicionários. Cada uma das chaves do dicionário é um rótulo arbitrário e cada um dos valores é novamente um dicionário com diferentes propriedades.
comment: Uma string útil descrevendo este perfilregex: Uma expressão regular que define a quais arquivos este perfil se aplica. A última regex que corresponde é a que conta.regex_flags: Um array de flags que serão passadas para a função match da regexhigh_value (padrão: false): Se um arquivo é de "alto valor", sua presença será relatada, mas não será necessariamente baixado (pense em discos rígidos virtuais - importantes, mas grandes demais para serem baixados automaticamente)download (padrão: true): Se true, os primeiros 200 KiB serão baixados (ou o arquivo inteiro se high_value=true) e analisados em busca de segredoscomment, regex, regex_flags: Mesmo que acimahigh_value: sua presença será relatada e a profundidade de rastreamento alterada para infinitocrawl_depth: Rastreie esta pasta compartilhada ou diretório até uma profundidade diferente da definida pelo argumento --depthcomment, regex_flags: Mesmo que acimaregex: Uma expressão regular correspondente ao segredo. O próprio segredo pode ser um grupo nomeado com o nome secret.Faz sentido primeiro executar SmbCrawler com profundidade de rastreamento 1 para ter uma ideia do que se está lidando. Nesta primeira execução, você pode habilitar a verificação de escrita com -w:
$ smbcrawler -C permissions_check.crwl crawl -D1 -t10 -w \
-i <ARQUIVO DE ENTRADA> -u <USUÁRIO> -d <DOMÍNIO> -p <SENHA>
Observe que isso verifica permissões de escrita e leitura apenas no diretório raiz de cada pasta compartilhada. Apenas uma execução completa lhe dirá mais sobre até onde as permissões de leitura vão.
Após a verificação inicial de permissões, você pode identificar pastas compartilhadas interessantes e chatas para sua próxima execução ou várias execuções. Algumas pastas compartilhadas como SYSVOL e NETLOGON aparecem muitas vezes, então você deve definir a profundidade de rastreamento como zero na sua próxima execução e escolher um host para escanear essas pastas compartilhadas duplicadas em uma terceira execução. Exemplo:
$ smbcrawler -C dc_only.crwl crawl -D -1 <IP DO DC> \
-u <USUÁRIO> -d <DOMÍNIO> -p <SENHA>
$ smbcrawler -C full.crwl crawl -D5 -t10 -i <NOVO ARQUIVO DE ENTRADA> \
-u <USUÁRIO> -d <DOMÍNIO> -p <SENHA> \
--extra-profile-file skip_sysvol.yml
Aqui, skip_sysvol.yml seria:
shares:
sysvol:
comment: "Pular pastas compartilhadas sysvol e netlogon"
regex: 'SYSVOL|NETLOGON'
crawl_depth: 0
Sinta-se à vontade para incluir outras pastas compartilhadas aqui que você acha que não valem a pena rastrear.
Os dados brutos estão contidos em um banco de dados SQLite e um diretório (output.crwl e output.crwl.d por padrão). O diretório contém mais dois diretórios: um com os arquivos baixados únicos pelo hash do conteúdo e um diretório espelhando todas as pastas compartilhadas com links simbólicos apontando para os arquivos de conteúdo. O último é bom para pesquisar em todos os arquivos baixados.
Os dados podem ser transformados em vários formatos. Você também pode simplesmente acessar o banco de dados com sqlitebrowser, por exemplo. Algumas views úteis foram pré-definidas. Ou você pode gerar JSON e usar jq para manipular os dados.
Se você quiser exibir todas as pastas compartilhadas que conseguiu ler além do diretório raiz em uma tabela LaTeX, por exemplo, use esta consulta:
SELECT target_id || " & " || name || " & " || remark || " \\"
FROM share
WHERE read_level > 0
ORDER BY target_id, name
Há também um recurso experimental de saída HTML. Pode não ser totalmente útil ainda para grandes quantidades de dados.
Se você notar muitos falsos positivos ou falsos negativos nos segredos relatados, por favor ajude e me avise. A contribuição da comunidade é importante ao tentar melhorar a detecção automática. Melhor cenário: forneça um pull request com alterações no arquivo de perfil padrão.
Adrian Vollmer, SySS GmbH
Licença MIT; veja LICENSE para detalhes.