
Python-скрипт для эффективного поиска файлов в UNIX-подобных файловых системах с определёнными свойствами (быстрее, чем find)
После получения доступа к удалённой машине во время пентеста вам может понадобиться найти интересные конфигурационные файлы или бинарники для попытки повышения привилегий.
Скрипт самодостаточен и работает как на Python3, так и на Python2.7, поэтому он совместим и с современными машинами (где python2 по умолчанию отсутствует), и с не очень свежими.
Вместо выполнения нескольких команд find этот простой скрипт просто отслеживает такие наборы, выполняя один проход по всему дереву каталогов диска и применяя все предикаты (функции с суффиксом _p или _filep для предикатов, применяемых только к файлам).
Всё ещё WIP, но код очень компактный, и писать собственные предикаты очень легко: для этого нужна лишь функция, которая принимает путь к файлу и возвращает булево значение.
В конце все наборы файлов сохраняются в словаре d, ключами которого являются имена предикатов. Чтобы получить к нему доступ, просто выполните python3 -i diskwalk.py. Вы попадёте в Python REPL, а поскольку это множества Python, вы легко можете выполнять такие операции, как
d['executable_files'] & d['writable_files']
Чтобы получить множество файлов, которые одновременно являются записываемыми и исполняемыми
d['executable_files'] - d['readable_files']
Чтобы получить исполняемые, но не читаемые файлы
d['owned_by_nobody_dirs'] | d['owned_by_nobody_files']
Чтобы получить объединение каталогов и файлов, принадлежащих пользователю nobody
Полученные данные сохраняются в сериализованный (pickle) и сжатый файл dump.gz — просто передайте его аргументом, чтобы загрузить данные и избежать повторного сканирования диска
python -i diskwalk.py dump.gz
Из-за особенностей работы pickle в Python здесь действуют обычные ограничения: например, вы не сможете загрузить этот же файл в интерпретаторе Python, отличном от того, в котором он был создан.