
Python-Skript zum effizienten Auffinden von Dateien auf UNIX-ähnlichen Dateisystemen mit bestimmten Eigenschaften (schneller als find)
Nachdem du während eines Penetrationstests Zugriff auf einen entfernten Rechner erlangt hast, möchtest du vielleicht interessante Konfigurationsdateien oder Binärdateien finden, um eine Privilege Escalation zu versuchen.
Das Skript ist in sich geschlossen und funktioniert sowohl mit Python3 als auch mit Python2.7, sodass es sowohl mit neueren Rechnern (die standardmäßig kein Python2 mitbringen) als auch mit älteren kompatibel ist.
Anstatt mehrere find-Befehle auszuführen, verfolgt dieses einfache Skript sie, indem es einen einzigen Durchlauf über deine gesamte Verzeichnisbaumstruktur macht und dabei alle Prädikate anwendet (die Funktionen, die auf _p oder _filep enden, für Prädikate, die nur auf Dateien angewendet werden sollen).
Noch ein WIP, aber der Code ist wirklich kompakt, und es ist sehr einfach, eigene Prädikate zu schreiben: Es muss lediglich eine Funktion sein, die einen Dateipfad erhält und einen booleschen Wert zurückgibt.
Am Ende werden alle Dateimengen in einem Dictionary namens d gespeichert, dessen Schlüssel die Prädikatnamen sind. Um darauf zuzugreifen, führe einfach python3 -i diskwalk.py aus. Du landest in einer Python-REPL, und da es sich um Python-Sets handelt, kannst du problemlos Operationen wie die folgenden ausführen:
d['executable_files'] & d['writable_files']
Um die Menge der Dateien zu erhalten, die sowohl schreibbar als auch ausführbar sind
d['executable_files'] - d['readable_files']
Um die Dateien zu erhalten, die ausführbar, aber nicht lesbar sind
d['owned_by_nobody_dirs'] | d['owned_by_nobody_files']
Um die Vereinigung der Verzeichnisse und Dateien zu erhalten, die dem Benutzer nobody gehören
Die gewonnenen Daten werden in einer mit Pickle serialisierten und komprimierten Datei dump.gz gespeichert. Übergib sie einfach als Argument, um sie zu laden und einen erneuten Scan der Festplatte zu vermeiden.
python -i diskwalk.py dump.gz
Aufgrund der Funktionsweise von Pythons Pickle gelten die üblichen Einschränkungen: Du wirst diese Datei beispielsweise nicht in einem anderen Python-Interpreter laden können als dem, mit dem du sie erstellt hast.