Для подписчиковНа всех этапах продвижения по внутренней сети перед пентестером стоит задача быстро разобрать все, что лежит на открывшихся общих ресурсах. С каждым новым уровнем доступа объем таких файлов растет лавинообразно. Вот бы в локалке был свой Google! Сегодня попробуем его создать самостоятельно.
На всех этапах продвижения по внутренней сети перед пентестером стоит задача быстро разобрать все, что лежит на открывшихся общих ресурсах. С каждым новым уровнем доступа объем таких файлов растет лавинообразно. Вот бы в локалке был свой Google! Сегодня попробуем его создать самостоятельно.
Это исследование получило второе место на Pentest Award 2025 в категории Out of scope. Соревнование ежегодно проводится компанией Awillix.
Публичные сетевые шары в любой локалке — кладезь неструктурированных данных. Но если ты пентестер, копаться в них тяжело, особенно когда сроки поджимают. Для защитников это та же боль: сетевые диски зарастают мусором годами, и на это привычно закрывают глаза.
При анализе защищенности сетевые диски и шары часто изучают вручную — бегло просматривают «интересные» файлы и типовые каталоги (например, ищут слово «пароль»). Но таких шар может быть десятки и даже сотни. Возможности ручного труда ограничены: просмотр быстро превращается в профанацию, и этот вектор почти не отрабатывают. Вдобавок часть файлов может быть доступна и по другим протоколам: FTP, NFS, rsync и даже HTTP.
Моя разработка пытается решить эту проблему. Она одинаково полезна и атакующим — чтобы быстро искать пароли и другие чувствительные данные, — и защитникам: можно поднять непрерывный краулинг и держать его включенным.

Система на 99% собрана из готовых компонентов — почти без дополнительного кода. Для развертывания тебе хватит пары команд.
Искать чувствительные данные можно двумя способами. Самый очевидный — анализ по имени файла и его расположению. Он быстрый и сканирует все файлы на сетевых шарах. Ты делаешь рекурсивный обход директорий, собираешь имена, размеры, время изменения — этого хватает, чтобы прикинуть актуальность. Но содержимое при таком подходе остается загадкой: ты судишь только по названию. А оно часто врет. Люди прячут важное в 1.txt, 123.docx или дают файлу имя, понятное только автору. В итоге ранжирование по имени — подход слабенький.
Анализ по содержимому файлов дает самый полный результат. Но он медленнее — приходится гонять больше трафика. Плюс всплывает еще одна проблема: существует множество форматов, которые нельзя анализировать одним и тем же способом, например при помощи grep. И именно тут отпадает большинство готовых решений.
Многим привычнее все делать в Microsoft Word, и тогда чувствительные данные могут оказаться в документе вроде того, что на скриншоте ниже.

Есть еще и Excel, где часто лежат списки учеток. Сюда же добавь остальные офисные форматы, обожаемые в корпсегменте: PDF, PowerPoint, Visio и так далее.
В исполняемых файлах тоже попадаются вшитые строки — например, ODBC-строки подключения к базе данных вместе с паролями.
И наконец — архивы: ZIP, RAR, TAR, 7z. В них может быть все, что перечислено выше.
И ни один из этих форматов не возьмешь текстовым поиском — каждому нужен свой парсер.
ИдеяИдея простая: не пилить парсеры, а использовать консольные утилиты GNU в Linux. Они вытащат текст даже из самых экзотических форматов. В Linux для любой задачи найдется команда. И для любого типа файлов — утилита или конвейер, который молча, без лишних вопросов и ошибок, прогонит файл и вернет хранящийся в нем текст.
Вместо десятков строк кода — одна команда!Вместо того чтобы писать все с нуля, я попробовал решить вопрос с минимальными трудозатратами. К тому же чем проще архитектура, тем легче будет ее масштабировать. А на базе утилит GNU все работает надежно: эти инструменты проверены десятилетиями.
Такой подход работает не только с файлами, но и с протоколами. Сейчас краулер понимает HTTP, FTP, SMB, NFS и rsync — самые ходовые способы доступа к файлам в корпоративных сетях. Для всех этих протоколов в Linux есть консольные утилиты. Например, с SMB и NFS ты просто монтируешь сетевую шару в свою файловую систему — и она выглядит как локальная. В итоге можно полностью абстрагироваться от протокола.

Смонтировав удаленный сетевой диск в локальную файловую систему, ты работаешь с файлами без полного скачивания — читаешь только нужные куски. Это экономит трафик и ускоряет краулинг.
ПоискИз‑за всем известных проблем с NDA я буду показывать работу не на реальных примерах, а на Hello World версиях.
Краулер устроен просто. Он работает как цепочка из следующих компонентов:
mount/Wget → find → file → парсер → CSV-индекс → SQLite/OpenSearch
В зависимости от протокола используется либо утилита mount (для SMB и NFS), либо Wget — для HTTP и FTP. Этими утилитами ты делаешь удаленное содержимое доступным локальному краулеру.
Как только удаленное содержимое становится доступным, стартует утилита find.

Find — это сердце краулера. У этой утилиты куча опций для тонкой настройки: лимит размера файлов, глубина, игнор путей и расширений и так далее. Для контроля глубины используй -maxdepth (и при необходимости -mindepth), порядок обхода переключает -depth (собирать слоями, не «проваливаясь» вглубь), а чтобы не уползти на сетевые или другие файловые системы — -xdev (синоним -mount в GNU find). По размеру можно фильтровать при помощи -size — чтобы не трогать гигантские бэкапы. Игнорить пути и расширения удобно через -path/-prune и -name/-iname.
Вывод find отдаем утилите file — она говорит, что это за файл. И на основе типа файла выбирается тот или иной парсер.
Распространенные форматы
Задача парсера — вытащить из файла только полезные данные в виде обычного текста, чтобы их потом можно было обработать на этапе поиска.
Например, если краулер встречает HTML-документ, он рендерит страницу и сохраняет только полезное — без верстки.

В Linux для этой задачи подойдет сразу несколько консольных браузеров. Мы будем использовать lynx.
С помощью утилиты uchardet можно автоматически определять кодировку, а при необходимости тулза iconv ее правит.

Если на вход попался файл Excel, он прогоняется через xls2csv — на выходе получим текст.

По сути, есть два формата файлов Excel: старый .xls и новый .xlsx. Они сильно отличаются друг от друга, поэтому парсить их приходится по‑разному.

С Word та же история: .doc вытаскиваем через catdoc, а .docx — обычным unzip.

Если краулер натыкается на PDF, он прогоняет его через pdf2txt.py.


Если краулер натыкается на презентацию PowerPoint, он прогоняет файл через такой пайплайн и вытаскивает текст.


Если используешь Microsoft Visio, то тут свой конвейер — смотри скриншоты.


Фреймворк Radare2 может распарсить почти любой исполняемый формат — EXE, DLL, SYS, ELF и другие — и вытащить из бинарника строки.


Если попадется картинка, вытаскиваем из нее текст через Tesseract.


Если это аудиофайл, текст в нем можно распознать утилитой Vosk.



Когда краулер натыкается на видео, он через FFmpeg с нужным FPS вытащит кадры и сохранит их как изображения.

| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | Локальный Deep Research. Совершенствуем собственный ИИ-поисковик | 0 | 7 | 04-06-2026 |
| 2 | Как избавиться от слежки Google: 5 простых шагов | 0 | 7 | 01-10-2018 |
| 3 | Мастерская хакeра. Лезем в недра системы и работаем с файлами | 5 | 7 | 23-04-2026 |
| 4 | Почему Google не индексирует страницы, хотя технически всё в порядке | 0 | 5 | 28-06-2026 |
| 5 | Регулируй регулярки! Выбираем инструменты для работы с RegEx | 5 | 7 | 25-11-2025 |
| 6 | В работе Google произошел сбой | 0 | 0 | 19-08-2019 |
| 7 | Роскомнадзор оштрафовал Google на 700 тыс. рублей | 0 | 0 | 18-07-2019 |
| 8 | Интересное. | 0 | 5 | 27-10-2025 |
| 9 | Drag & Drop заливка файлов | 2 | 6 | 29-11-2011 |
| 10 | Создаем SOHO-сервер на базе Zentyal. Часть 1 | 0 | 5 | 27-07-2011 |