День 16. Активная разведка
1. Введение
Мы сосредоточимся на активной разведке и основных инструментах, связанных с ней. Мы учимся использовать веб-браузер для сбора дополнительной информации о нашей цели. Кроме того, мы обсуждаем использование простых инструментов, таких как ping
, traceroute
, telnet
, и nc
для сбора информации о сети, системе и услугах.
Как мы узнали в предыдущей комнате, пассивная разведка позволяет вам собирать информацию о вашей цели без какого-либо прямого взаимодействия или связи. Вы наблюдаете издалека или проверяете общедоступную информацию.
Активная разведка требует, чтобы вы установили какой-то контакт с вашей целью. Этот контакт может быть телефонным звонком или визитом в целевую компанию под каким-то предлогом для сбора дополнительной информации, обычно в рамках социальной инженерии . В качестве альтернативы это может быть прямое подключение к целевой системе, будь то посещение ее веб-сайта или проверка того, открыт ли ее брандмауэром порт SSH . Думайте об этом так, как будто вы внимательно осматриваете окна и дверные замки. Следовательно, важно помнить, что не следует заниматься активной разведывательной работой, пока не получите подписанное юридическое разрешение от клиента.
В этой комнате мы сосредоточимся на активной разведке. Активная разведка начинается с прямых подключений к целевой машине. Любое такое подключение может оставить информацию в журналах, показывающую IP-адрес клиента, время подключения и продолжительность подключения, среди прочего. Однако не все подключения подозрительны. Можно позволить вашей активной разведке выглядеть как обычная клиентская активность. Рассмотрим просмотр веб-страниц; никто не заподозрит браузер, подключенный к целевому веб-серверу, среди сотен других законных пользователей. Вы можете использовать такие методы в своих интересах, работая в составе красной команды (атакующих) и не желая тревожить синюю команду (защитников).
В этой комнате мы рассмотрим различные инструменты, обычно входящие в комплект большинства операционных систем или легкодоступные. Начнем с веб-браузера и его встроенных инструментов разработчика; кроме того, мы покажем вам, как веб-браузер может быть «вооружен», чтобы стать эффективной разведывательной средой. После этого мы обсудим другие безвредные инструменты, такие как ping
, traceroute
, и telnet
. Все эти программы требуют подключения к цели, и, следовательно, наши действия будут подпадать под активную разведку.
2. Веб-браузер
Веб-браузер может быть удобным инструментом, особенно потому, что он легко доступен на всех системах. Существует несколько способов, с помощью которых вы можете использовать веб-браузер для сбора информации о цели.
На транспортном уровне браузер подключается к:
- TCP- порт 80 по умолчанию при доступе к веб-сайту через HTTP
- TCP- порт 443 по умолчанию при доступе к веб-сайту через HTTPS
Поскольку 80 и 443 являются портами по умолчанию для HTTP и HTTPS, веб-браузер не отображает их в адресной строке. Однако можно использовать пользовательские порты для доступа к службе. Например, https://127.0.0.1:8834/ подключится к 127.0.0.1 (localhost) на порту 8834 по протоколу HTTPS. Если на этом порту прослушивается HTTPS-сервер, мы получим веб-страницу.
При просмотре веб-страницы вы можете нажать Ctrl+Shift+I
на ПК или Option + Command + I
( ⌥ + ⌘ + I
) на Mac, чтобы открыть Developer Tools в Firefox. Аналогичные сочетания клавиш также позволят вам начать работу с Google Chrome или Chromium. Developer Tools позволяет вам проверять множество вещей, которые ваш браузер получил и которыми обменял с удаленным сервером. Например, вы можете просматривать и даже изменять файлы JavaScript (JS), проверять файлы cookie, установленные в вашей системе, и обнаруживать структуру папок содержимого сайта.
Также есть множество дополнений для Firefox и Chrome, которые могут помочь в тестировании на проникновение. Вот несколько примеров:
- FoxyProxy позволяет быстро менять прокси- сервер, который вы используете для доступа к целевому веб-сайту. Это расширение для браузера удобно, когда вы используете такой инструмент, как Burp Suite , или если вам нужно регулярно переключать прокси- серверы. Вы можете получить FoxyProxy для Firefox здесь .
- User-Agent Switcher and Manager дает вам возможность притворяться, что вы заходите на веб-страницу из другой операционной системы или другого веб-браузера. Другими словами, вы можете притворяться, что просматриваете сайт с помощью iPhone, когда на самом деле вы заходите на него из Mozilla Firefox. Вы можете скачать User-Agent Switcher and Manager для Firefox здесь .
- Wappalyzer предоставляет сведения о технологиях, используемых на посещаемых веб-сайтах. Такое расширение удобно, в первую очередь, когда вы собираете всю эту информацию во время просмотра веб-сайта, как любой другой пользователь. Скриншот Wappalyzer показан ниже. Вы можете найти Wappalyzer для Firefox здесь .
Перейдите на следующий веб-сайт и убедитесь, что вы открыли Developer Tools на AttackBox Firefox или браузер на вашем компьютере. Используя Developer Tools, выясните общее количество вопросов. (8)
3. Пинг
Ping – это инструмент, который работает по принципу игры в пинг-понг: вы отправляете пакет ICMP Echo и ждете ответа, чтобы проверить доступность удаленной системы. Если система отвечает ICMP Echo Reply, значит, она в сети, а маршрут до нее не заблокирован брандмауэрами.
На терминале AttackBox можно использовать команды вида:
- Linux:
ping MACHINE_IP
илиping -c 10 MACHINE_IP
(для отправки 10 пакетов) - Windows:
ping -n 10 MACHINE_IP
Таким образом, ping позволяет убедиться, что удаленная система подключена к сети, прежде чем проводить более глубокое сканирование.
В приведенном выше примере мы ясно увидели, что целевая система отвечает. Выходные данные ping являются индикатором того, что она находится в сети и доступна. Мы передали пять пакетов и получили пять ответов. Мы замечаем, что в среднем ответу потребовалось 0,475 мс (миллисекунды), чтобы достичь нашей системы, а максимальное значение составило 0,636 мс.
С точки зрения тестирования на проникновение мы попытаемся узнать больше об этой цели. Мы попытаемся узнать как можно больше, например, какие порты открыты и какие службы запущены.
Давайте рассмотрим следующий случай: мы выключили целевую виртуальную машину, а затем попытались выполнить ping 10.10.78.79
. Как и следовало ожидать в следующем примере, мы не получили никакого ответа.
В этом случае мы уже знаем, что мы выключили целевой компьютер с адресом 10.10.78.79. На каждый пинг система, которую мы используем, в данном случае AttackBox, отвечает «Destination Host Unreachable». Мы видим, что мы передали пять пакетов, но ни один не был получен, что приводит к 100% потере пакетов.
Вообще говоря, когда мы не получаем ответ на ping, есть несколько объяснений, почему мы не получили ответ на ping, например:
- Конечный компьютер не отвечает; возможно, он все еще загружается или выключен, или произошел сбой ОС .
- Он отключен от сети, или на пути к нему находится неисправное сетевое устройство.
- Брандмауэр настроен на блокировку таких пакетов. Брандмауэр может быть частью программного обеспечения, работающего в самой системе, или отдельным сетевым устройством. Обратите внимание, что брандмауэр MS Windows блокирует ping по умолчанию.
- Ваша система отключена от сети.
4. Трассировка
Как следует из названия, команда traceroute отслеживает маршрут, пройденный пакетами от вашей системы до другого хоста. Целью traceroute является поиск IP-адресов маршрутизаторов или переходов, которые проходит пакет по пути от вашей системы до целевого хоста. Эта команда также показывает количество маршрутизаторов между двумя системами. Она полезна, поскольку указывает количество переходов (маршрутизаторов) между вашей системой и целевым хостом. Однако обратите внимание, что маршрут, пройденный пакетами, может измениться, поскольку многие маршрутизаторы используют протоколы динамической маршрутизации, которые адаптируются к изменениям в сети.
В Linux и macOS необходимо использовать команду traceroute 10.10.78.79
, а в MS Windows — tracert 10.10.78.79
. traceroute
пытается обнаружить маршрутизаторы на пути от вашей системы к целевой системе.
Не существует прямого способа обнаружить путь от вашей системы до целевой системы. Мы полагаемся на ICMP, чтобы «обмануть» маршрутизаторы и заставить их раскрыть свои IP-адреса. Мы можем сделать это, используя небольшое время жизни ( TTL ) в поле заголовка IP. Хотя T в TTL означает время, TTL указывает максимальное количество маршрутизаторов/прыжков, через которые пакет может пройти, прежде чем будет отброшен; TTL не является максимальным количеством единиц времени. Когда маршрутизатор получает пакет, он уменьшает TTL на единицу, прежде чем передать его следующему маршрутизатору. На следующем рисунке показано, что каждый раз, когда IP-пакет проходит через маршрутизатор, его значение TTL уменьшается на 1. Первоначально он покидает систему со значением TTL , равным 64; он достигает целевой системы со значением TTL , равным 60, после прохождения через 4 маршрутизатора.
Однако если TTL достигает 0, он будет отброшен, а ICMP Time-to-Live exceeded будет отправлено исходному отправителю. На следующем рисунке система устанавливает TTL в 1 перед отправкой его маршрутизатору. Первый маршрутизатор на пути уменьшает TTL на 1, в результате чего TTL становится равным 0. Следовательно, этот маршрутизатор отбросит пакет и отправит сообщение об ошибке ICMP time exceeded in-transit. Обратите внимание, что некоторые маршрутизаторы настроены не отправлять такие сообщения ICMP при отбрасывании пакета.
В Linuxtraceroute
начнется с отправки UDP- датаграмм в IP-пакетах с TTL , равным 1. Таким образом , это приведет к тому, что первый маршрутизатор столкнется с TTL = 0 и отправит обратно ICMP Time-to-Live exceeded. Следовательно, TTL , равный 1, раскроет вам IP-адрес первого маршрутизатора. Затем он отправит еще один пакет с TTL = 2; этот пакет будет отброшен на втором маршрутизаторе. И так далее. Давайте попробуем это на реальных системах.
В следующих примерах мы запускаем одну и ту же команду traceroute tryhackme.com
из TryHackMe's AttackBox. Мы замечаем, что разные запуски могут приводить к разным маршрутам, по которым проходят пакеты.
В выводе traceroute выше у нас есть 14 пронумерованных строк; каждая строка представляет один маршрутизатор/переход. Наша система отправляет три пакета с TTL , установленным на 1, затем три пакета с TTL , установленным на 2, и так далее. В зависимости от топологии сети мы можем получить ответы от 3 разных маршрутизаторов, в зависимости от маршрута, пройденного пакетом. Рассмотрим строку номер 12, двенадцатый маршрутизатор с указанным IP-адресом отбросил пакет три раза и отправил сообщение ICMP о превышении времени в пути. Строка 12 99.83.69.207 (99.83.69.207) 17.603 ms 15.827 ms 17.351 ms
показывает время в миллисекундах, необходимое для достижения нашей системы каждым ответом.
С другой стороны, мы видим, что получили только один ответ на третьей строке. Две звезды в выводе 3 * 100.66.16.176 (100.66.16.176) 8.006 ms *
указывают на то, что наша система не получила два ожидаемых сообщения ICMP time exceeded in-transit.
Наконец, в первой строке вывода мы видим, что пакеты, покидающие AttackBox, идут разными маршрутами. Мы видим два маршрутизатора, которые ответили, что TTL равен единице. Наша система так и не получила третье ожидаемое сообщение ICMP.
Во втором запуске программы traceroute мы заметили, что на этот раз пакеты прошли более длинный маршрут, пройдя через 26 маршрутизаторов. Если вы запускаете traceroute для системы в своей сети, маршрут вряд ли изменится. Однако мы не можем ожидать, что маршрут останется фиксированным, когда пакетам нужно будет пройти через другие маршрутизаторы за пределами нашей сети.
Подводя итог, можно отметить следующее:
- Количество переходов/маршрутизаторов между вашей системой и целевой системой зависит от времени запуска traceroute. Нет гарантии, что ваши пакеты всегда будут следовать по одному и тому же маршруту, даже если вы находитесь в одной и той же сети или повторяете команду traceroute в течение короткого времени.
- Некоторые маршрутизаторы возвращают публичный IP-адрес. Вы можете проверить несколько из этих маршрутизаторов в зависимости от области предполагаемого тестирования на проникновение.
- Некоторые маршрутизаторы не возвращают ответ.
5. Телнет
Протокол TELNET (Teletype Network) был разработан в 1969 году для связи с удаленной системой через интерфейс командной строки ( CLI ). Следовательно, команда telnet
использует протокол TELNET для удаленного администрирования. Порт по умолчанию, используемый telnet, — 23. С точки зрения безопасности, telnet
отправляет все данные, включая имена пользователей и пароли, в открытом тексте. Отправка в открытом тексте позволяет любому, кто имеет доступ к каналу связи, легко украсть учетные данные для входа. Безопасной альтернативой является протокол SSH (Secure SHell).
Однако клиент telnet, благодаря своей простоте, может использоваться и для других целей. Зная, что клиент telnet использует протокол TCP , вы можете использовать Telnet для подключения к любой службе и захвата ее баннера. Используя telnet 10.10.78.79 PORT
, вы можете подключиться к любой службе, работающей на TCP, и даже обменяться несколькими сообщениями, если она не использует шифрование.
Допустим, мы хотим узнать больше информации о веб-сервере, прослушивающем порт 80. Мы подключаемся к серверу через порт 80, а затем взаимодействуем с помощью протокола HTTP . Вам не нужно углубляться в протокол HTTP ; вам просто нужно выполнить GET / HTTP/1.1
. Чтобы указать что-то, кроме страницы индекса по умолчанию, вы можете выполнить GET /page.html HTTP/1.1
, который запросит page.html
. Мы также указали удаленному веб-серверу, что хотим использовать версию HTTP 1.1 для связи. Чтобы получить допустимый ответ, вместо ошибки вам нужно ввести некоторое значение для хоста host: example
и дважды нажать Enter. Выполнение этих шагов предоставит запрошенную страницу индекса.
Особый интерес для нас представляет обнаружение типа и версии установленного веб-сервера, Server: nginx/1.6.2
. В этом примере мы общались с веб-сервером, поэтому использовали базовые команды HTTP . Если мы подключаемся к почтовому серверу, нам нужно использовать правильные команды на основе протокола, например SMTP и POP3 .
6. Netcat
Netcat или просто nc
имеет различные приложения, которые могут быть очень полезны для пентестера. Netcat поддерживает протоколы TCP и UDP . Он может функционировать как клиент, который подключается к прослушиваемому порту; в качестве альтернативы он может выступать в качестве сервера, который прослушивает порт по вашему выбору. Таким образом, это удобный инструмент, который вы можете использовать как простой клиент или сервер по TCP или UDP .
Во-первых, вы можете подключиться к серверу, как вы делали это с Telnet, чтобы получить его баннер, используя nc MACHINE_IP PORT
, что очень похоже на наш предыдущий telnet MACHINE_IP PORT
. Обратите внимание, что вам может потребоваться нажать SHIFT+ENTER после строки GET.
В терминале, показанном выше, мы использовали netcat для подключения к порту MACHINE_IP 80 с помощью nc MACHINE_IP 80
. Затем мы выполнили команду get для страницы по умолчанию с помощью GET / HTTP/1.1
; мы указываем целевому серверу, что наш клиент поддерживает HTTP версии 1.1. Наконец, нам нужно дать имя нашему хосту, поэтому мы добавили на новой строке host: netcat
; вы можете назвать свой хост как угодно, так как это не повлияет на это упражнение.
На основании полученных данных Server: nginx/1.6.2
можно сказать, что на порту 80 у нас Nginx версии 1.6.2 прослушивает входящие соединения.
Вы можете использовать netcat для прослушивания TCP- порта и подключения к прослушивающему порту на другой системе.
На серверной системе, где вы хотите открыть порт и прослушивать его, вы можете выполнить nc -lp 1234
или, что еще лучше, nc -vnlp 1234
, что эквивалентно nc -v -l -n -p 1234
, как вы помните из Linux room. Точный порядок букв не имеет значения, пока номеру порта непосредственно предшествует -p
.
- эта опция
-p
должна располагаться непосредственно перед номером порта, который вы хотите прослушивать. - эта опция
-n
позволит избежать DNS -поиска и предупреждений. - Для прослушивания портов с номерами менее 1024 требуются права root.
На стороне клиента вы бы выдали nc MACHINE_IP PORT_NUMBER
. Вот пример использования nc
echo. После того, как вы успешно установите соединение с сервером, все, что вы введете на стороне клиента, будет отображено на стороне сервера и наоборот.
7. Собираем все вместе
В этой комнате мы рассмотрели множество различных инструментов. Легко объединить несколько из них с помощью скрипта оболочки, чтобы построить примитивный сетевой и системный сканер. Вы можете использовать traceroute
для отображения пути к цели, ping
для проверки того, отвечает ли целевая система на ICMP Echo, и telnet
для проверки того, какие порты открыты и доступны, пытаясь подключиться к ним. Доступные сканеры делают это на гораздо более продвинутых и сложных уровнях, как мы увидим в следующих четырех комнатах с nmap
.
Модуль завершен + 1 в копилку.
Основная группа обучения ИБ
Lab-группу с полезным софтом / книгами / аудио.
Чат для обсуждений, задавай свои вопросы.
P.S. С вами был @Fnay_Offensive
До новой встречи, user_name!