Photon — это очень быстрый веб-краулер созданный для OSINT (сбора открытой информации) сайтов. В статье расскажу о возможностях Photon, а также о том, как его использовать.
Еще по теме: Обзор лучших сканеров уязвимостей
Сканирования сайтов используя Photon
Photon может извлекать разнообразную информацию:
- Внутренние и внешние урлы.
- Урлы с параметрами (например, site.com/gallery.php?id=2).
- Контактные данные (email, аккаунты соцсетей, API-ключи и т.д.).
- Файлы (pdf, png, xml и другие).
- Kлючи авторизации и API.
- JavaScript-файлы и их конечные точки.
- Поддомены и данные DNS.
Photon предлагает широкий спектр настроек для управления процессом сканирования: можно задать тайм-ауты, задержки между запросами, дополнительные начальные урлы, исключить адреса, совпадающие с регулярными выражениями, и многое другое.
Photon оптимизирует управление потоками и использует продуманные алгоритмы, что позволяет достичь высокой скорости работы. Photon способен получать урлы из archive.org с помощью опции --wayback.
Photon поддерживает плагины:
- wayback — для получения архивных URL-адресов
- dnsdumpster — для сбора данных о DNS
- Exporter — для экспорта данных
Запуск через Docker
Photon можно запустить с помощью Docker, используя легкий образ на базе Python-Alpine. Это быстрый способ установить Photon.
Для этого выполните следующие команды:
1 |
$ git clone https://github.com/s0md3v/Photon.git $ cd Photon $ docker build -t photon . $ docker run -it --name photon photon:latest -u google.com |
Для просмотра результатов можно либо перейти в локальный том Docker, который можно найти через команду docker inspect photon, либо смонтировать папку с целевыми данными:
1 |
$ docker run -it --name photon -v "$PWD:/Photon/google.com" photon:latest -u google.com |
Использование Photon
Для запуска Photon используется команда:
1 |
python photon.py [параметры] |
Photon поддерживает множество команд и параметров для гибкого управления процессом сканирования:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
-u, --url - корневой URL сайта для краулинга. -l, --level - количество уровней краулинга. -t, --threads - количество потоков для выполнения запросов. -d, --delay - задержка между запросами. -c, --cookie - куки. -r, --regex - регулярное выражение. -s, --seeds - дополнительные URL-ы для начала краулинга. -e, --export - экспорт результатов в формате. -o, --output - указание директории для сохранения результатов. -v, --verbose - вывод подробной информации. --keys - извлечение секретных ключей. --clone - клонирование сайта локально. --exclude - исключение URL-ов по регулярному выражению. --stdout - вывод переменной в стандартный поток. --timeout - время ожидания HTTP-запросов. --ninja - режим "ниндзя". --update - обновление Photon. --headers - добавление HTTP-заголовков. --dns - перечисление поддоменов и данных DNS. --only-urls - извлечение только URL-ов. --wayback - использование URL-ов из archive.org в качестве начальных. --user-agent - указание user-agent-ов. |
Теперь подробнее о каждом из них.
Чтобы начать краулинг одного сайта:
1 |
python photon.py -u "http://example.com" |
Для сохранения всех страниц сайта на диске:
1 |
python photon.py -u "http://example.com" --clone |
Опцияп -l позволяет задать глубину краулинга:
1 |
python photon.py -u "http://example.com" -l 3 |
Значение -l 3 указывает, что программа будет краулить до третьего уровня вложенности страниц.
Опция -t позволяет указать количество потоков для одновременных запросов:
1 |
python photon.py -u "http://example.com" -t 10 |
Можно задать задержку между HTTP-запросами:
1 |
python photon.py -u "http://example.com" -d 2 |
Для установки времени ожидания ответа от сервера:
1 |
python photon.py -u "http://example.com" --timeout=4 |
Если необходимо передавать лкуки, воспользуйтесь опцией -c:
1 |
python photon.py -u "http://example.com" -c "PHPSESSID=u5423d78fqbaju9a0qke25ca87" |
По умолчанию, результаты сохраняются в директории с именем домена целевого сайта. Если вы хотите изменить это, используйте опцию -o:
1 |
python photon.py -u "http://example.com" -o "mydir" |
Для отображения всех найденных страниц, файлов и ключей в процессе работы: -v:
1 |
python photon.py -u "http://example.com" -v |
Чтобы исключить из краулинга определенные урлы, соответствующие регулярному выражению, используйте --exclude:
1 |
python photon.py -u "http://example.com" --exclude="/blog/20[17|18]" |
Для добавления собственных урлов начального уровня используйте -s:
1 |
python photon.py -u "http://example.com" --seeds "http://example.com/blog/2018,http://example.com/portals.html" |
Вы можете указать свой user-agent с помощью опции --user-agent:
1 |
python photon.py -u "http://example.com" --user-agent "curl/7.35.0,Wget/1.15 (linux-gnu)" |
Для поиска данных, соответствующих регулярному выражению, используйте -r:
1 |
python photon.py -u "http://example.com" --regex "\d{10}" |
С помощью опции -e можно указать формат для экспорта данных:
1 |
python photon.py -u "http://example.com" --export=json |
Доступны форматы json и csv.
Для краулинга страниц, сохраненных на archive.org:
1 |
python photon.py -u "http://example.com" --wayback |
Если вам нужно извлечь только адреса, без дополнительных данных:
1 |
python photon.py -u "http://example.com" --only-urls |
Для проверки и загрузки обновлений:
1 |
python photon.py --update |
Photon может искать строки с высокой энтропией, которые могут быть ключами авторизации или хешами:
1 |
python photon.py -u "http://example.com" --keys |
Если нужно вывести переменную в стандартный поток вывода для дальнейшей обработки:
1 |
python photon.py -u "http://example.com" --stdout=custom | resolver.py |
Для запуска Photon в режиме «ниндзя», когда запросы посылаются через сторонние сайты, такие как Facebook или Pixlr:
1 |
python photon.py -u "http://example.com" --ninja |
Для сохранения поддоменов и других данных DNS:
1 |
python photon.py -u "http://example.com" --dns |
На этом всё! Инструмент Photon предоставляет множество опций для гибкой настройки краулинга, и, как видно из примеров, позволяет собрать большой объем информации с веб-сайтов.
Заключение
Photon — это гибкий инструмент для сканирования сайтов и извлечения данных. С его помощью можно настроить процесс сбора информации под конкретные задачи, будь то поиск ключей API, сканирование URL, или сбор данных о DNS.
ПОЛЕЗНЫЕ ССЫЛКИ:
- Лучшие инструменты для поиска уязвимостей сайтов
- Вот как я нашел уязвимость Reflected XSS на сайте NASA