
smbcrawler è un tool senza fronzoli che prende credenziali e una lista di host e 'crawls' (o 'spiders') attraverso quelle condivisioni
SmbCrawler è uno strumento senza fronzoli che prende credenziali e un elenco di host e 'crawl' (o 'spider') attraverso quelle condivisioni. Caratteristiche:
Se hai bisogno di istruzioni su come installare un pacchetto Python, ti consiglio di assicurarti di avere pipx installato ed esegui pipx install smbcrawler.
SmbCrawler può convertire automaticamente alcuni file binari come PDF, XLSX, DOCX, ZIP, ecc. in testo semplice usando MarkItDown. Poiché questo pacchetto richiede molte dipendenze, è contrassegnato come extra. Tuttavia, è altamente raccomandato per ottenere i migliori risultati. Se vuoi convertire automaticamente i binari, installa SmbCrawler in questo modo:
pipx install 'smbcrawler[binary-conversion]'
Aggiungere il completamento shell è altamente raccomandato. Come app Python che utilizza la libreria click, puoi aggiungere il completamento tramite tab a bash, zsh e fish usando il meccanismo usuale.
Eseguilo in questo modo (10 thread, profondità massima 5):
$ smbcrawler crawl -i hosts.txt -u pen.tester -p iluvb0b -d contoso.local -t 10 -D 5
SmbCrawler ha subito una profonda rielaborazione. Le modifiche più significative sono:
I vecchi argomenti della CLI riguardanti "file interessanti", "condivisioni noiose" e così via erano goffi e confusi. Invece ora usiamo "profili"; vedi sotto per i dettagli.
Inoltre, mi sono reso conto di aver sostanzialmente reinventato i database relazionali, ma in modo molto scarso, quindi perché non usare direttamente sqlite? L'approccio sqlite ci consente di produrre un bel report HTML interattivo con buone prestazioni. Puoi comunque esportare i risultati in vari formati se hai bisogno di utilizzare i dati in qualche pipeline di strumenti.
Il vecchio modo di SmbCrawler di segnalare i permessi a volte non era molto utile. Ad esempio, non è raro avere permessi di lettura nella directory principale della condivisione, ma tutte le sottodirectory sono protette, ad esempio per i profili utente. SmbCrawler ora segnalerà quanto profondamente è stato in grado di leggere l'albero delle directory di una condivisione e se ha raggiunto il massimo o avrebbe potuto andare più in profondità se avessi fornito un valore più alto per l'argomento della profondità massima.
Se preferisci la versione precedente, è ancora disponibile su PyPI e installabile con pipx install smbcrawler==0.2.0, per esempio.
Durante l'esecuzione, puoi usare i seguenti tasti:
p: metti in pausa il crawler e salta singoli host o condivisioni<spazio>: stampa il progresso correntes: stampa un aggiornamento dettagliato dello statoPer maggiori informazioni, esegui smbcrawler -h.
Anche in reti di medie dimensioni, SmbCrawler troverà tonnellate di dati. La sfida è ridurre i falsi positivi.
È importante rendersi conto che i permessi possono applicarsi a livello di servizio e a livello di file system. Il servizio SMB remoto potrebbe consentirti di autenticarti e il tuo account utente potrebbe avere teoricamente permessi di lettura, ma potrebbe non averli sul file system.
SmbCrawler segnalerà se hai i permessi per:
--depth)Poiché non è banale controllare i permessi delle condivisioni SMB senza tentare l'azione in questione, SmbCrawler tenterà di creare una directory su ogni condivisione. Il suo nome è smbcrawler_DELETEME_<8 caratteri casuali> e verrà eliminata immediatamente, ma sii comunque consapevole.
[!WARNING] A volte hai il permesso di creare directory, ma non di eliminarle, quindi lascerai una directory vuota.
Per decidere cosa fare con determinate condivisioni, file o directory, SmbCrawler ha una funzionalità chiamata "profili". Dai un'occhiata al profilo predefinito.
I profili vengono caricati da file con estensione *.yml o *.yaml da queste posizioni:
$XDG_DATA_HOME/smbcrawler/ (~/.local/share/smbcrawler di default)--extra-profile-directory--extra-profile-fileI profili di ogni posizione sovrascrivono le definizioni precedenti.
Il valore regex definisce se un profilo corrisponde, e verrà utilizzato l'ultimo profilo corrispondente. Tutte le espressioni regolari sono case-insensitive, rispecchiando il comportamento più comune nel mondo Windows.
Poiché può essere confuso come i profili provenienti da diverse fonti interagiscono, assicurati di utilizzare il parametro --dry-run. Mostra la configurazione effettiva e non fa altro.
Diamo un'occhiata a ogni sezione, che è sempre un elenco di dizionari. Ogni chiave del dizionario è un'etichetta arbitraria e ogni valore è a sua volta un dizionario con proprietà diverse.
comment: Una stringa utile che descrive questo profiloregex: Un'espressione regolare che definisce a quali file si applica questo profilo. L'ultima regex che corrisponde è quella che conta.regex_flags: Un array di flag che verranno passati alla funzione match di regexhigh_value (default: false): Se un file è di "alto valore", la sua presenza verrà segnalata, ma non verrà necessariamente scaricato (pensa a dischi virtuali - importanti, ma troppo grandi per essere scaricati automaticamente)download (default: true): Se true, i primi 200KiBi verranno scaricati (o l'intero file se high_value=true) e analizzati per cercare segreticomment, regex, regex_flags: Come soprahigh_value: la sua presenza verrà segnalata e la profondità di crawling modificata a infinitocrawl_depth: Scansiona questa condivisione o directory fino a una profondità diversa da quella definita dall'argomento --depthcomment, regex_flags: Come sopraregex: Un'espressione regolare che corrisponde al segreto. Il segreto stesso può essere un gruppo nominato con il nome secret.Ha senso eseguire prima SmbCrawler con profondità di crawling 1 per farti un'idea di ciò con cui hai a che fare. In questa prima esecuzione, puoi abilitare il controllo di scrittura con -w:
$ smbcrawler -C permissions_check.crwl crawl -D1 -t10 -w \
-i <FILE INPUT> -u <UTENTE> -d <DOMINIO> -p <PASSWORD>
Nota che questo controlla solo i permessi di lettura e scrittura nella directory principale di ogni condivisione. Solo un'esecuzione completa ti dirà di più su quanto in profondità arrivano i permessi di lettura.
Dopo il controllo iniziale dei permessi, puoi identificare condivisioni interessanti e noiose per la tua prossima esecuzione o più esecuzioni. Alcune condivisioni come SYSVOL e NETLOGON compaiono molte volte, quindi dovresti impostare la profondità di crawling a zero nella tua prossima esecuzione e scegliere un host per scansionare queste condivisioni duplicate in una terza esecuzione. Ecco un esempio:
$ smbcrawler -C dc_only.crwl crawl -D -1 <IP DC> \
-u <UTENTE> -d <DOMINIO> -p <PASSWORD>
$ smbcrawler -C full.crwl crawl -D5 -t10 -i <NUOVO FILE INPUT> \
-u <UTENTE> -d <DOMINIO> -p <PASSWORD> \
--extra-profile-file skip_sysvol.yml
Qui, skip_sysvol.yml sarebbe:
shares:
sysvol:
comment: "Salta la condivisione sysvol e netlogon"
regex: 'SYSVOL|NETLOGON'
crawl_depth: 0
Sentiti libero di includere altre condivisioni qui che potresti ritenere non valga la pena scansionare.
I dati grezzi sono contenuti in un database SQLite e una directory (default output.crwl e output.crwl.d). La directory contiene altre due directory: una con i file scaricati resi unici tramite l'hash del contenuto e una directory che rispecchia tutte le condivisioni con collegamenti simbolici che puntano ai file di contenuto. Quest'ultima è utile per fare grep attraverso tutti i file scaricati.
I dati possono essere trasformati in vari formati. Puoi anche semplicemente accedere al database con sqlitebrowser, per esempio. Sono state predefinite alcune viste utili. Oppure puoi produrre JSON e usare jq per manipolare i dati.
Se vuoi visualizzare tutte le condivisioni che sei stato in grado di leggere oltre la directory principale in una tabella LaTeX, ad esempio, usa questa query:
SELECT target_id || " & " || name || " & " || remark || " \\"
FROM share
WHERE read_level > 0
ORDER BY target_id, name
C'è anche una funzionalità sperimentale di output HTML. Potrebbe non essere ancora del tutto utile per grandi quantità di dati.
Se noti molti falsi positivi o falsi negativi nei segreti segnalati, per favore aiutaci e fammelo sapere. Il contributo della community è importante per migliorare il rilevamento automatico. Scenario migliore: fornisci una pull request con modifiche al file del profilo predefinito.
Adrian Vollmer, SySS GmbH
Licenza MIT; vedi LICENSE per i dettagli.