Reconnoitre: помощник в анализе веб-приложений
Уже рассмотрено немало разных любительских сканеров и «фреймворков». Обычно они довольно простые (а иногда ещё и глючные ) . Но всё равно мне интересно с ними знакомиться, так как довольно часто они содержат какую-то изюминку — интересную функцию, которая может однажды понадобиться.
Инструмент Reconnoitre был создан для автоматизации рутинных действий при проведении лабораторных работ OSCP. Это довольно простой скрипт, и умеет он следующее:
- ищет живые хосты
- для найденных хостов выполняет сканирование, составляет список обнаруженных служб
- для обнаруженных служб составляет команды по запуску других инструментов
- умеет искать из большого числа хостов DNS серверы
- пытается определить имя хостов и виртуальные хосты
- может искать устройства, отвечающие на SNMP протокол
Собранные данные сохраняет в структуре папок отдельно для каждого хоста — удобно при работе с подсетями, когда хостов много.
Как установить Reconnoitre в Kali Linux
Инструмент представляет собой несколько скриптов на Python, можно выполнить обычную установку и запускать по имени программы, или можно запускать прямо из того места, куда были скачены файлы программы.
Пример запуска без установки:
git clone https://github.com/codingo/Reconnoitre cd Reconnoitre/Reconnoitre/ python2 ./reconnoitre.py -h
Каждый раз, когда вы захотите использовать Reconnoitre, вам нужно будет перейти в указанную папку и использовать python2 ./reconnoitre.py вместо имени программы (reconnoitre) как в следующих командах.
Для выполнения установки:
git clone https://github.com/codingo/Reconnoitre cd Reconnoitre/ find . -type f -print0 | xargs -0 sed -i 's/from lib.file_helper/from file_helper/g' #fix sudo python setup.py install reconnoitre -h
Как видно, используется небольшой фикс — автор использовал обратный фикс для возможности запуска без установки, но поломал программу в случае если делается установка… Возможно, он ещё найдёт универсальное решение, а пока перед установкой нужно применять указанную команду с пометкой #fix.
Как запустить Reconnoitre
Обязательных опций фактически три:
- -t после которой нужно указать хост или диапазон хостов. Можно также указать файл с этими данными
- -o — после этой опции нужно указать директорию для сохранения результатов. В ней для каждого хоста будут созданы поддиректории
- также нужно указать опцию с действием, например --pingsweep или --services или какую-то другую
Поиск активных (живых хостов) из диапазона IP
В качестве примера я буду анализировать соседей suip.biz (бедные соседи — сколько уже можно ). Я возьму диапазон 185.117.153.1-255. Данные я буду сохранять в папку suip-neighbors в текущей директории. Для поиска живых хостов используется опция --pingsweep. Тогда команда получается следующая:
reconnoitre -t 185.117.153.1-255 -o suip-neighbors --pingsweep
Кстати, папка, которую в этой команде указываем для сохранения данных, также будет использоваться в сгенерированных командах (они тоже будут сохранять данные на диск), поэтому рекомендуется указывать абсолютный путь:
reconnoitre -t 185.117.153.1-255 -o /home/mial/suip-neighbors --pingsweep
Результат:
[*] Found 190 live hosts [*] Created target list suip-neighbors/targets.txt
То есть найдено 190 живых хостов (те, кто онлайн в данный момент) и все они сохранены в файл suip-neighbors/targets.txt.
Можно посмотреть содержимое этого файла:
cat suip-neighbors/targets.txt
Поиск запущенных служб и генерация команд для дальнейшего анализа
Для сбора служб используется опция --services. Алгоритм её работы следующий:
- выполняется быстрое сканирование
- генерируется файл для данного хоста с новыми командами для запуска
- в отношении этого же хоста выполняется более точное сканирование служб
Кстати, все сканирования служб выполняется простой программой Nmap. Так вот, третий этап — он долгий, а если хостов много, то он очень долгий. Поэтому можно добавить опцию --quick для пропуска глубокого сканирования.
Несмотря на то что теперь хосты будут браться из файла targets.txt (и если этот файл не сгенерирован с помощью опции --pingsweep, то программа будет завершать работу с ошибкой), нам всё равно при запуске нужно указать опцию -t:
reconnoitre -t 185.117.153.1-255 -o suip-neighbors --services --quick
И только после того, как предыдущая команда наглухо повесила систему (в виртуальной машине), а затем ещё пару раз наглухо повесила систему уже с выделенной ей 11 Гигабайтами оперативной памяти, я понял, как правы разработчики! В общем, для ускорения процесса все сканирования Nmap запускаются одновременно. Несмотря на нетребовательность Nmap к ресурсам, у этой программы бывают пиковые нагрузки на оперативную память и на процессор. И одновременный запуск нескольких сотен экземпляров Nmap может повесить систему, которая уже не оклемается.
Поэтому с помощью опции -t разбиваю подсеть на диапазоны поменьше:
reconnoitre -t 185.117.153.1-30 -o suip-neighbors --services --quick
Программа создаст много папок и запустит быстрое сканирование:
Для каждого хоста будут сделаны следующие подпапки:
- scans
- exploit
- loot
Если я правильно понял описание, программа записывает данные только в scans. Что касается exploit и loot (добыча), то они сделаны только для нашего удобства и туда мы сами должны сохранять добытые другими способами данные.
В папке scans будет создано несколько файлов — в основном это результаты сканирования Nmap в разных форматах. Но файл вида ХОСТ_findings.txt содержит команды для последующего анализа или атаки на найденные службы.
Пример такого файла:
То есть в нём содержаться сгенерированные команды для анализа каждой службы. Инструменты в командах выбраны с учётом вида службы, также учтены используемый порт, предусмотрено сохранение результатов в файл. Например, если HTTP/HTTPS служба на 1500 порту, то именно он будет указан в команде для запуска.
Обратите внимание, что на примере этого файла видно, что данные могут дублироваться — используйте его внимательно.
Классификация предлагаемых команд:
- Enumeration — Перечисление (поиск интересных файлов, виртуальных хостов и т.п.
- Find users — Поиск пользователей
- Bruteforcing — Подбор учётных данных
- Use nmap to automate banner grabbing and key fingerprints, e.g. - Использование nmap для сбора баннера и отпечатков
- Check out the server for web applications with sqli vulnerabilities — Проверка сервера на веб-приложения с уязвимостью sqli
Поиск имён хостов
Для определения имён хостов используется опция --hostnames, пример запуска:
reconnoitre -t 185.117.153.1-255 -o suip-neighbors --hostnames
Результаты:
Если честно, я эти результаты не понимаю. Если кто-то знает, что такое WIN-344VU98D3RU, WIN-32VTGRUNTN0 и даже IH999345, то поясните, плиз, в комментариях.
Поиск виртуальных хостов
Чтобы лучше понимать, что за виртуальные хосты предполагается искать, рекомендуется статья «Поиск виртуальных хостов веб-сервера» - там, кстати, рассказывается о другой программе для этого. Но поскольку у неё тот же автор, что и у Reconnoitre, то, надо думать, что код одинаковый.
Для поиска виртуальных хостов используется опция --virtualhosts. Также нужно обязательно указать путь до словаря с опцией -w. В папке с Reconnoitre имеется небольшой словарик по пути: Reconnoitre/wordlists/virtual-host-scanning.txt
Пример запуска:
reconnoitre -t 185.117.153.1-255 -o suip-neighbors -w bin/Reconnoitre/Reconnoitre/wordlists/virtual-host-scanning.txt --virtualhosts
Поиск DNS серверов в указанном диапазоне адресов
Если вам нужно из большого массива хостов найти те, на которых настроен сервер имён, то запустите Reconnoitre с опцией --dns:
reconnoitre -t 185.117.153.1-255 -o suip-neighbors --dns
Заключение
Итак, мы рассмотрели примеры использования Reconnoitre. Полный список опцией (там есть ещё несколько полезных), вы найдёте на странице: https://kali.tools/?p=4691
Дальше рассмотрены ошибки, которые не должны у вас возникнуть, если вы всё делали по данной инструкции. Тем не менее если вы что-то пропустили, то следующий раздел должен помочь вам.
Решение проблем
Ошибка PermissionError: [Errno 13] Permission denied:
В зависимости от способа установки, указание папки для сохранения в виде относительного пути может вызывать ошибку вроде следующей:
Traceback (most recent call last): File "/usr/share/reconnoitre/Reconnoitre/lib/file_helper.py", line 7, in check_directory os.stat(output_directory) FileNotFoundError: [Errno 2] No such file or directory: 'suip-neighbors' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "reconnoitre.py", line 146, in <module> main() File "reconnoitre.py", line 87, in main arguments.quiet) File "/usr/share/reconnoitre/Reconnoitre/lib/ping_sweeper.py", line 7, in ping_sweeper check_directory(output_directory) File "/usr/share/reconnoitre/Reconnoitre/lib/file_helper.py", line 9, in check_directory os.mkdir(output_directory) PermissionError: [Errno 13] Permission denied: 'suip-neighbors'
Причина ошибки в том, что с опцией -o указан относительный путь до папки сохранения — в этом примере это suip-neighbors. В данном случае для программы рабочей директорией является папка, в которую у неё не хватает прав для записи. Поэтому для исправления рекомендуется указать полный путь до директории для которой у текущего пользователя есть разрешения на запись, например -o /home/mial/suip-neighbors.
Ошибка TypeError: a bytes-like object is required, not 'str'
Traceback (most recent call last): File "reconnoitre.py", line 146, in <module> main() File "reconnoitre.py", line 87, in main arguments.quiet) File "/usr/share/reconnoitre/Reconnoitre/lib/ping_sweeper.py", line 12, in ping_sweeper lines = call_nmap_sweep(target_hosts) File "/usr/share/reconnoitre/Reconnoitre/lib/ping_sweeper.py", line 27, in call_nmap_sweep lines = str(results).encode("utf-8").split("\n") TypeError: a bytes-like object is required, not 'str'
Данная ошибка уже исправлена в последней версии Reconnoitre, поэтому вам достаточно обновиться. Если в вашем репозитории отсутствуют обновления, то скачайте непосредственно с GitHub:
git clone https://github.com/codingo/Reconnoitre cd Reconnoitre/Reconnoitre/ python2 ./reconnoitre.py -h
Ошибка «TypeError: not all arguments converted during string formatting»
При выполнении SNMP сканирования могут появиться сообщения вроде таких:
[+] Performing SNMP scans for 185.117.153.18 to suip-neighbors/185.117.153.18/scans/snmp/ [>] Performing snmpwalk on public tree for: 185.117.153.18 - Checking for System Processes Process Process-18: Traceback (most recent call last): File "/usr/lib/python2.7/multiprocessing/process.py", line 267, in _bootstrap self.run() File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run self._target(*self._args, **self._kwargs) File "/usr/local/lib/python2.7/dist-packages/Reconnoitre-1.0-py2.7.egg/Reconnoitre/lib/snmp_walk.py", line 73, in snmp_scans ip_address, output_directory, ip_address) TypeError: not all arguments converted during string formatting
Для исправления откройте файл snmp_walk.py:
gedit /usr/local/lib/python2.7/dist-packages/Reconnoitre-1.0-py2.7.egg/Reconnoitre/lib/snmp_walk.py
Найдите там строку:
ip_address, output_directory, ip_address)
и замените её на:
ip_address, output_directory)
Ошибка «ImportError: No module named lib.file_helper»
Если после установки при выполнении любой команды вы видите примерно следующее:
Traceback (most recent call last): File "/usr/local/bin/reconnoitre", line 11, in <module> load_entry_point('Reconnoitre==1.0', 'console_scripts', 'reconnoitre')() File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 489, in load_entry_point return get_distribution(dist).load_entry_point(group, name) File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2793, in load_entry_point return ep.load() File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2411, in load return self.resolve() File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2417, in resolve module = __import__(self.module_name, fromlist=['__name__'], level=0) File "/usr/local/lib/python2.7/dist-packages/Reconnoitre-1.0-py2.7.egg/Reconnoitre/reconnoitre.py", line 7, in <module> from lib.find_dns import find_dns File "/usr/local/lib/python2.7/dist-packages/Reconnoitre-1.0-py2.7.egg/Reconnoitre/lib/find_dns.py", line 3, in <module> from lib.file_helper import check_directory ImportError: No module named lib.file_helper
То выполните установку следующим образом:
git clone https://github.com/codingo/Reconnoitre cd Reconnoitre/ find . -type f -print0 | xargs -0 sed -i 's/from lib.file_helper/from file_helper/g' #fix sudo python setup.py install reconnoitre -h
Связанные статьи:
- Поиск виртуальных хостов веб-сервера (79.1%)
- Анализ периметра при аудите безопасности сайтов (78.8%)
- Как узнать имена хостов для большого количества IP адресов (69.2%)
- Обход файерволов веб приложений Cloudflare, Incapsula, SUCURI (69.2%)
- Азы работы с веб-сервером для пентестера (68.8%)
- Как сохранить всю информацию из профилей Facebook (RANDOM - 1.5%)
НЕ РАБОТАЕТ
Один раз запустилась произвел цикл сканов,после сменил др. айпии усе на глухо пересталазапускатся.Переустанавливал мягко говоря МНОГО разитог тот же не рабртает.Фиксил ошибки по вашей инструкции не помогает.Да и крайний "фикс" в финале статьи где речь идет о -(То выполните установку следующим образом: ) собственно метод ни одним симоволом не отличается от метода в начале статьи забавно.Еще заметил если поэкспериментировать с количеством например 192.168.1.0-255, 192.168.1.0-70 ,192.168.1.0-255 40 и т.д иногда запускается.Интересная програмулька но ошибки раздражают.Посмотрите может опечатка в крайнем"фиксе" реально ни чем от начального не отвечает.Печально
Извините, но я ничего не понял из вашего сообщения…
Если ошибка, то какая именно ошибка, почему бы сразу не привести её текст и не приложить скриншот?
Если ошибка сразу после установки (то есть даже не получается вывести справку), то какой из двух описанных способов установки вы выбрали?
Я для проверки удалил программу:
Заново скачал и установил:
У меня успешно вывелась справка:
И успешно отработал пробный запуск:
Если у вас ошибка при запуске сканирования, то укажите команду, которая вызывает проблему. В этом смысле Reconnoitre довольно капризная программа и требует выполнения последовательных действий (как в этой инструкции) — начальное сканирование живых хостов и т.д.
А «Решение проблем» - это что-то вроде справочного материала. В том числе для тех, кто пришёл из поиска (85% посетителей приходят из поиска).