
Script Python per trovare in modo efficiente i file su file system simili a UNIX con proprietà specifiche (più veloce di find)
Dopo aver ottenuto accesso a una macchina remota durante un penetration test, potresti voler trovare file di configurazione o binari interessanti per tentare un'elevazione dei privilegi.
Lo script è autonomo e funziona sia con Python3 che con Python2.7, in modo da essere compatibile sia con le macchine recenti (che non includono python2 di default) sia con quelle meno recenti.
Invece di eseguire diversi comandi find, questo semplice script tiene traccia di essi facendo un'unica passata sull'intera struttura ad albero del tuo disco, applicando tutti i predicati (le funzioni che terminano in _p o _filep per i predicati da applicare solo ai file).
È ancora un WIP, ma il codice è molto compatto ed è molto facile scrivere i propri predicati: basta che sia una funzione che riceve un percorso di file e restituisce un booleano.
Alla fine, tutti gli insiemi di file vengono salvati in un dizionario chiamato d, le cui chiavi sono i nomi dei predicati. Per accedervi basta eseguire python3 -i diskwalk.py. Verrai lasciato in una repl di python e, poiché si tratta di insiemi python, puoi facilmente fare operazioni come
d['executable_files'] & d['writable_files']
Per ottenere l'insieme dei file che sono sia scrivibili che eseguibili
d['executable_files'] - d['readable_files']
Per ottenere i file eseguibili ma non leggibili
d['owned_by_nobody_dirs'] | d['owned_by_nobody_files']
Per ottenere l'unione di directory e file posseduti dall'utente nobody
I dati ottenuti verranno salvati in un file compresso e serializzato con pickle dump.gz: basta fornirlo come argomento per caricarlo ed evitare di scansionare di nuovo il disco
python -i diskwalk.py dump.gz
A causa di come funziona il pickle di python, valgono le solite avvertenze: ad esempio, non potrai caricare questo stesso file in un interprete python diverso da quello che hai usato per generare il file.