Reconnoitre: помощник в анализе веб-приложений


Уже рассмотрено немало разных любительских сканеров и «фреймворков». Обычно они довольно простые (а иногда ещё и глючные smiley) . Но всё равно мне интересно с ними знакомиться, так как довольно часто они содержат какую-то изюминку — интересную функцию, которая может однажды понадобиться.

Инструмент 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 (бедные соседи — сколько уже можно angry). Я возьму диапазон 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

Рекомендуется Вам:

2 комментария to Reconnoitre: помощник в анализе веб-приложений

  1. Velizar:

    НЕ РАБОТАЕТ

    Один раз запустилась произвел цикл сканов,после сменил др. айпии усе на глухо пересталазапускатся.Переустанавливал мягко говоря МНОГО разитог тот же не рабртает.Фиксил ошибки по вашей инструкции не помогает.Да и крайний "фикс" в финале статьи где речь идет о -(То выполните установку следующим образом: ) собственно метод ни одним симоволом не отличается от метода в начале статьи забавно.Еще заметил если поэкспериментировать с количеством например 192.168.1.0-255, 192.168.1.0-70 ,192.168.1.0-255 40 и т.д иногда запускается.Интересная програмулька но ошибки раздражают.Посмотрите может опечатка в крайнем"фиксе" реально ни чем от начального не отвечает.Печально

    • Alexey:

      Извините, но я ничего не понял из вашего сообщения…

      Если ошибка, то какая именно ошибка, почему бы сразу не привести её текст и не приложить скриншот?

      Если ошибка сразу после установки (то есть даже не получается вывести справку), то какой из двух описанных способов установки вы выбрали?

      Я для проверки удалил программу:

      rm /usr/local/bin/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

      И успешно отработал пробный запуск:

      reconnoitre -t 185.117.153.1-255 -o suip-neighbors --pingsweep

      Если у вас ошибка при запуске сканирования, то укажите команду, которая вызывает проблему. В этом смысле Reconnoitre довольно капризная программа и требует выполнения последовательных действий (как в этой инструкции) — начальное сканирование живых хостов и т.д.

      А «Решение проблем» — это что-то вроде справочного материала. В том числе для тех, кто пришёл из поиска (85% посетителей приходят из поиска).

Добавить комментарий для Velizar Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *