
smbcrawler ist ein unkompliziertes Tool, das Anmeldedaten und eine Liste von Hosts entgegennimmt und durch diese Freigaben 'crawlt' (oder 'spidered').
SmbCrawler ist ein anspruchsloses Tool, das Anmeldedaten und eine Liste von Hosts nimmt und durch diese Freigaben 'crawlt' (oder 'spidert'). Funktionen:
Wenn Sie Anweisungen zur Installation eines Python-Pakets benötigen, empfehle ich, sicherzustellen, dass Sie pipx installiert haben und führen Sie pipx install smbcrawler aus.
SmbCrawler kann einige Binärdateien wie PDF, XLSX, DOCX, ZIP usw. mithilfe von MarkItDown automatisch in Klartext konvertieren. Da dieses Paket viele Abhängigkeiten mit sich bringt, ist es als Extra markiert. Es wird jedoch dringend empfohlen, es zu installieren, um die besten Ergebnisse zu erzielen. Wenn Sie Binärdateien automatisch konvertieren möchten, installieren Sie SmbCrawler wie folgt:
pipx install 'smbcrawler[binary-conversion]'
Das Hinzufügen der Shell-Vervollständigung wird dringend empfohlen. Als Python-App, die die click-Bibliothek verwendet, können Sie die Tab-Vervollständigung für bash, zsh und fish mit dem üblichen Mechanismus hinzufügen.
Ausführen wie folgt (10 Threads, maximale Tiefe 5):
$ smbcrawler crawl -i hosts.txt -u pen.tester -p iluvb0b -d contoso.local -t 10 -D 5
SmbCrawler wurde grundlegend überarbeitet. Die wesentlichsten Änderungen sind:
Die alten CLI-Argumente zu "interessanten Dateien", "langweiligen Freigaben" usw. waren umständlich und verwirrend. Stattdessen verwenden wir nun "Profile"; siehe unten für Details.
Außerdem habe ich erkannt, dass ich im Grunde relationale Datenbanken neu erfunden habe, nur sehr schlecht, also warum nicht direkt SQLite verwenden? Der SQLite-Ansatz ermöglicht es uns, einen schönen interaktiven HTML-Bericht mit guter Leistung zu erstellen. Sie können die Ergebnisse weiterhin in verschiedenen Formaten exportieren, wenn Sie die Daten in einer Tool-Pipeline verwenden müssen.
Die alte Art und Weise, wie SmbCrawler Berechtigungen meldete, war manchmal nicht sehr nützlich. Beispielsweise ist es nicht ungewöhnlich, dass Sie Leseberechtigungen im Stammverzeichnis der Freigabe haben, aber alle Unterverzeichnisse geschützt sind, z. B. für Benutzerprofile. SmbCrawler meldet nun, wie tief es den Verzeichnisbaum einer Freigabe lesen konnte und ob es die maximale Tiefe erreicht hat oder tiefer hätte gehen können, wenn Sie einen höheren Wert für das Argument --depth angegeben hätten.
Wenn Sie die alte Version bevorzugen, ist sie weiterhin auf PyPI verfügbar und kann z. B. mit pipx install smbcrawler==0.2.0 installiert werden.
Während der Laufzeit können Sie die folgenden Tasten verwenden:
p: Pausieren des Crawlers und Überspringen einzelner Hosts oder Freigaben<Leertaste>: Anzeigen des aktuellen Fortschrittss: Anzeigen einer detaillierteren StatusaktualisierungFür weitere Informationen führen Sie smbcrawler -h aus.
Selbst in mittelgroßen Netzwerken wird SmbCrawler Unmengen von Daten finden. Die Herausforderung besteht darin, Fehlalarme zu reduzieren.
Es ist wichtig zu verstehen, dass Berechtigungen auf Dienstebene und auf Dateisystemebene greifen können. Der entfernte SMB-Dienst kann Ihnen die Authentifizierung erlauben, und Ihr Benutzerkonto kann grundsätzlich Leseberechtigungen haben, aber es könnte diese Berechtigungen auf dem Dateisystem nicht besitzen.
SmbCrawler meldet, ob Sie Berechtigungen haben:
--depth)Da es nicht trivial ist, Berechtigungen von SMB-Freigaben zu überprüfen, ohne die betreffende Aktion zu versuchen, wird SmbCrawler versuchen, auf jeder Freigabe ein Verzeichnis zu erstellen. Sein Name ist smbcrawler_DELETEME_<8 zufällige Zeichen> und wird sofort gelöscht, seien Sie sich dessen jedoch bewusst.
[!WARNING] Manchmal haben Sie die Berechtigung, Verzeichnisse zu erstellen, aber nicht, sie zu löschen, sodass Sie ein leeres Verzeichnis hinterlassen.
Um zu entscheiden, was mit bestimmten Freigaben, Dateien oder Verzeichnissen geschehen soll, verfügt SmbCrawler über eine Funktion namens "Profile". Werfen Sie einen Blick auf das Standardprofil.
Profile werden aus Dateien mit den Endungen *.yml oder *.yaml von diesen Speicherorten geladen:
$XDG_DATA_HOME/smbcrawler/ (standardmäßig ~/.local/share/smbcrawler)--extra-profile-directory definierte Zusatzverzeichnis--extra-profile-file definierten ZusatzdateienProfile von jedem Speicherort überschreiben vorherige Definitionen.
Der regex-Wert definiert, ob ein Profil zutrifft, und das letzte zutreffende Profil wird verwendet. Alle regulären Ausdrücke sind case-insensitiv, was dem häufigsten Verhalten in der Windows-Welt entspricht.
Da es verwirrend sein kann, wie Profile aus verschiedenen Quellen zusammenwirken, stellen Sie sicher, dass Sie den Parameter --dry-run verwenden. Er zeigt Ihnen die effektive Konfiguration und tut nichts weiter.
Schauen wir uns jeden Abschnitt an, der immer eine Liste von Dictionaries ist. Jeder der Schlüssel des Dictionaries ist ein beliebiges Label, und jeder der Werte ist wiederum ein Dictionary mit verschiedenen Eigenschaften.
comment: Ein hilfreicher String, der dieses Profil beschreibtregex: Ein regulärer Ausdruck, der definiert, auf welche Dateien dieses Profil zutrifft. Der letzte Regex, der zutrifft, zählt.regex_flags: Ein Array von Flags, die an die match-Funktion des regulären Ausdrucks übergeben werdenhigh_value (Standard: false): Wenn eine Datei "hochwertig" ist, wird ihr Vorhandensein gemeldet, aber sie wird nicht unbedingt heruntergeladen (denken Sie an virtuelle Festplatten – wichtig, aber zu groß für den automatischen Download)download (Standard: true): Wenn true, werden die ersten 200KiBi heruntergeladen (oder die gesamte Datei, wenn high_value=true) und auf Geheimnisse analysiertcomment, regex, regex_flags: Wie obenhigh_value: ihr Vorhandensein wird gemeldet und die Crawling-Tiefe auf unendlich geändertcrawl_depth: Crawlen Sie diese Freigabe oder dieses Verzeichnis bis zu einer anderen Tiefe als durch das Argument --depth definiertcomment, regex_flags: Wie obenregex: Ein regulärer Ausdruck, der auf das Geheimnis zutrifft. Das Geheimnis selbst kann eine benannte Gruppe mit dem Namen secret sein.Es ist sinnvoll, SmbCrawler zunächst mit einer Crawling-Tiefe von 1 auszuführen, um eine Vorstellung davon zu bekommen, womit Sie es zu tun haben. In diesem ersten Durchlauf können Sie die Schreibprüfung mit -w aktivieren:
$ smbcrawler -C permissions_check.crwl crawl -D1 -t10 -w \
-i <EINGABEDATEI> -u <BENUTZER> -d <DOMÄNE> -p <PASSWORT>
Beachten Sie, dass dies nur die Schreib- und Leseberechtigungen im Stammverzeichnis jeder Freigabe überprüft. Erst ein vollständiger Durchlauf wird Ihnen mehr darüber verraten, wie tief die Leseberechtigungen reichen.
Nach der ersten Berechtigungsprüfung können Sie interessante und langweilige Freigaben für Ihren nächsten oder mehrere Durchläufe identifizieren. Einige Freigaben wie SYSVOL und NETLOGON erscheinen oft mehrmals, daher sollten Sie die Crawling-Tiefe in Ihrem nächsten Durchlauf auf Null setzen und einen Host auswählen, um diese doppelten Freigaben in einem dritten Durchlauf zu scannen. Hier ist ein Beispiel:
$ smbcrawler -C dc_only.crwl crawl -D -1 <DC-IP> \
-u <BENUTZER> -d <DOMÄNE> -p <PASSWORT>
$ smbcrawler -C full.crwl crawl -D5 -t10 -i <NEUE EINGABEDATEI> \
-u <BENUTZER> -d <DOMÄNE> -p <PASSWORT> \
--extra-profile-file skip_sysvol.yml
Hier wäre skip_sysvol.yml:
shares:
sysvol:
comment: "SYSVOL- und NETLOGON-Freigabe überspringen"
regex: 'SYSVOL|NETLOGON'
crawl_depth: 0
Fügen Sie hier gerne andere Freigaben hinzu, die Ihrer Meinung nach nicht gecrawlt werden müssen.
Die Rohdaten befinden sich in einer SQLite-Datenbank und einem Verzeichnis (standardmäßig output.crwl und output.crwl.d). Das Verzeichnis enthält zwei weitere Verzeichnisse: eines mit den heruntergeladenen Dateien, eindeutig gemacht durch den Hash-Inhalt, und ein Verzeichnis, das alle Freigaben mit Symlinks zu den Inhaltsdateien spiegelt. Letzteres eignet sich gut zum Durchsuchen aller heruntergeladenen Dateien mit grep.
Die Daten können in verschiedene Formate umgewandelt werden. Sie können auch einfach mit sqlitebrowser auf die Datenbank zugreifen, zum Beispiel. Es wurden einige nützliche Ansichten vordefiniert. Oder Sie geben JSON aus und verwenden jq, um die Daten zu manipulieren.
Wenn Sie alle Freigaben, die Sie über das Stammverzeichnis hinaus lesen konnten, in einer LaTeX-Tabelle anzeigen möchten, verwenden Sie diese Abfrage:
SELECT target_id || " & " || name || " & " || remark || " \\"
FROM share
WHERE read_level > 0
ORDER BY target_id, name
Es gibt auch eine experimentelle HTML-Ausgabefunktion. Sie ist für große Datenmengen möglicherweise noch nicht vollständig nutzbar.
Wenn Ihnen viele Fehlalarme oder Fehltreffer bei den gemeldeten Geheimnissen auffallen, helfen Sie bitte mit und lassen Sie es mich wissen. Community-Beiträge sind wichtig, um die automatische Erkennung zu verbessern. Idealerweise stellen Sie einen Pull-Request mit Änderungen an der Standard-Profil-Datei zur Verfügung.
Adrian Vollmer, SySS GmbH
MIT-Lizenz; siehe LICENSE für Details.