Обнаружение баннеров служб в Nmap

NmapNmapBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабе вы научитесь определять баннеры сервисов с использованием Nmap. Основная цель - собрать информацию о сетевых сервисах, работающих на целевой машине, таких как имена сервисов, версии и операционные системы. Вы запустите скрипт для определения баннеров на целевом IP-адресе, сканируете конкретные порты, добавляете подробность сканирования, сохраняете результаты и анализируете и сравниваете баннеры в терминале Xfce.

Вы начнете с использованием команды nmap --script banner для сканирования всех стандартных портов на цели. Затем вы будете сканировать конкретные порты, повышать подробность для более детального вывода, сохранять результаты в файл и, наконец, анализировать баннеры, чтобы понять, какие сервисы работают на цели.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/output_formats("Output Formats") nmap/NmapGroup -.-> nmap/save_output("Save Output to File") nmap/NmapGroup -.-> nmap/port_scanning("Port Scanning Methods") nmap/NmapGroup -.-> nmap/target_specification("Target Specification") nmap/NmapGroup -.-> nmap/verbosity("Verbosity Levels") nmap/NmapGroup -.-> nmap/os_version_detection("OS and Version Detection") nmap/NmapGroup -.-> nmap/service_detection("Service Detection") nmap/NmapGroup -.-> nmap/scripting_basics("Scripting Engine Basics") nmap/NmapGroup -.-> nmap/script_management("Script Categories and Updating") subgraph Lab Skills nmap/output_formats -.-> lab-547095{{"Обнаружение баннеров служб в Nmap"}} nmap/save_output -.-> lab-547095{{"Обнаружение баннеров служб в Nmap"}} nmap/port_scanning -.-> lab-547095{{"Обнаружение баннеров служб в Nmap"}} nmap/target_specification -.-> lab-547095{{"Обнаружение баннеров служб в Nmap"}} nmap/verbosity -.-> lab-547095{{"Обнаружение баннеров служб в Nmap"}} nmap/os_version_detection -.-> lab-547095{{"Обнаружение баннеров служб в Nmap"}} nmap/service_detection -.-> lab-547095{{"Обнаружение баннеров служб в Nmap"}} nmap/scripting_basics -.-> lab-547095{{"Обнаружение баннеров служб в Nmap"}} nmap/script_management -.-> lab-547095{{"Обнаружение баннеров служб в Nmap"}} end

В этом шаге мы будем использовать скрипт для определения баннера Nmap, чтобы определить, какие сервисы работают на целевой машине. Определение баннера - это техника, используемая для сбора информации о сетевом сервисе путем анализа баннера, который он передает при установке соединения. Этот баннер часто содержит такие сведения, как имя сервиса, версия и операционная система.

Сначала давайте разберем команду, которую мы будем использовать:

nmap --script banner 192.168.1.1

  • nmap: Это командная строка для сканирования сети.
  • --script banner: Эта опция сообщает Nmap использовать скрипт banner, который предназначен для определения баннеров с открытых портов.
  • 192.168.1.1: Это целевой IP-адрес. Вам нужно заменить это фактическим IP-адресом машины в вашей сети, для которой у вас есть разрешение на сканирование. Для этого лабораторного окружения мы будем использовать 127.0.0.1 (localhost) в качестве цели. Это гарантирует, что вы сканируете свою собственную машину и избавляет вас от любых потенциальных этических или юридических вопросов.

Теперь давайте выполним команду. Откройте терминал Xfce и введите следующее:

nmap --script banner 127.0.0.1

эта команда будет сканировать все стандартные порты на 127.0.0.1 и пытаться определить баннеры с любых открытых сервисов.

Возможно, вы увидите вывод, похожий на этот (точный вывод зависит от сервисов, работающих на вашей машине):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000072s latency).
Other addresses for localhost (alias(es)): localhost

PORT   STATE SERVICE
22/tcp open  ssh
| banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
|_

Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds

В этом примере Nmap нашел службу SSH, работающую на порту 22. Баннер показывает, что это OpenSSH версии 8.2p1, работающий на Ubuntu.

Если на вашей машине не запущены никакие сервисы, вы, возможно, не увидите никакой информации о баннерах. Не беспокойтесь, команда все еще работает. В последующих шагах мы настроим сервисы, чтобы убедиться, что у нас есть баннеры для захвата.

В предыдущем шаге мы сканировали все стандартные порты с использованием скрипта для определения баннера. Теперь мы сосредоточимся на сканировании конкретных портов. Это полезно, когда вы знаете, какие сервисы вас интересуют, или когда вы хотите сократить время сканирования.

Команда, которую мы будем использовать, выглядит так:

nmap --script banner -p 22,80 127.0.0.1

Разберём эту команду:

  • nmap: Сканер сети.
  • --script banner: Указывает скрипт для определения баннера.
  • -p 22,80: Эта опция сообщает Nmap только сканировать порты 22 и 80. Порт 22 обычно используется для SSH (Secure Shell), а порт 80 - для HTTP (веб-сервера).
  • 127.0.0.1: Целевой IP-адрес (localhost).

Прежде чем запустить команду, убедимся, что на этих портах запущены сервисы. Виртуальная машина LabEx по умолчанию должна запускать SSH на порту 22. Мы установим простой веб-сервер на порту 80.

Откройте терминал Xfce и выполните следующие команды для установки базового HTTP-сервера с использованием Python:

sudo apt update
sudo apt install -y python3-pip
sudo python3 -m pip install http.server

Теперь запустите HTTP-сервер на порту 80. Перейдите сначала в директорию ~/project.

cd ~/project
python3 -m http.server 80

Оставьте это окно терминала открытым и работающим HTTP-сервером. Откройте новое окно терминала Xfce, чтобы продолжить с Nmap-сканированием.

Теперь в новом окне терминала выполните команду Nmap:

nmap --script banner -p 22,80 127.0.0.1

Вам должно показаться что-то вроде этого вывода:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:05 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000072s latency).
Other addresses for localhost (alias(es)): localhost

PORT   STATE SERVICE
22/tcp open  ssh
| banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
|_
80/tcp open  http
| banner: Server: SimpleHTTP/3.10 Python/3.10
|_

Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds

Этот вывод показывает, что Nmap отсканировал порты 22 и 80, определил баннеры и вывел информацию о сервисах. Вы можете увидеть баннер SSH и баннер простого HTTP-сервера.

Не забудьте остановить python-http-сервер после завершения этого шага, нажав Ctrl+C в терминале, где он запущен.

В этом шаге мы добавим подробность к нашему сканированию с использованием Nmap. Подробность предоставляет более детальную информацию о процессе сканирования, которая может помочь при отладке или понимании того, что делает Nmap "под капотом".

Команда, которую мы будем использовать, выглядит так:

nmap -v --script banner 127.0.0.1

Разберём эту команду:

  • nmap: Сканер сети.
  • -v: Эта опция увеличивает уровень подробности. Вы можете использовать -vv для ещё большей подробности.
  • --script banner: Указывает скрипт для определения баннера.
  • 127.0.0.1: Целевой IP-адрес (localhost).

Прежде чем запустить команду, убедитесь, что python-http-сервер по-прежнему работает из предыдущего шага. Если нет, запустите его снова в отдельном окне терминала:

cd ~/project
python3 -m http.server 80

Теперь в новом окне терминала выполните команду Nmap с подробностью:

nmap -v --script banner 127.0.0.1

Вам должно показаться что-то вроде этого вывода (точный вывод зависит от сервисов, работающих на вашей машине):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:10 UTC
Initiating Ping Scan at 10:10
Scanning localhost (127.0.0.1) [2 ports]
Completed Ping Scan at 10:10, 0.00s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 10:10
Completed Parallel DNS resolution of 1 host. at 10:10, 0.00s elapsed
Initiating Connect Scan at 10:10
Scanning localhost (127.0.0.1) [1000 ports]
Discovered open port 22/tcp on 127.0.0.1
Discovered open port 80/tcp on 127.0.0.1
Completed Connect Scan at 10:10, 0.00s elapsed (1000 total ports)
Initiating Service scan at 10:10
Scanning 2 services on localhost (127.0.0.1)
Completed Service scan at 10:10, 0.01s elapsed (2 services total)
Initiating NSE script scan at 10:10
Scanning localhost (127.0.0.1)
Completed NSE script scan at 10:10, 0.09s elapsed
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000072s latency).
Other addresses for localhost (alias(es)): localhost

PORT   STATE SERVICE
22/tcp open  ssh
| banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
|_
80/tcp open  http
| banner: Server: SimpleHTTP/3.10 Python/3.10
|_

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds

Обратите внимание на дополнительную информацию, предоставленную опцией -v. Вы можете увидеть разные этапы сканирования, такие как Ping Scan, DNS-разрешение и Connect Scan. Это может быть очень полезно для понимания того, как работает Nmap и для диагностики любых проблем.

Не забудьте остановить python-http-сервер после завершения этого шага, нажав Ctrl+C в терминале, где он запущен.

В этом шаге мы сохраним результаты сканирования с использованием Nmap в файл. Это полезно для последующего анализа или для отчетов.

Команда, которую мы будем использовать, выглядит так:

nmap --script banner -oN banners.txt 127.0.0.1

Разберём эту команду:

  • nmap: Сканер сети.
  • --script banner: Указывает скрипт для определения баннера.
  • -oN banners.txt: Эта опция сообщает Nmap сохранить результаты в "обычном" формате в файл с именем banners.txt. Доступны и другие форматы вывода (например, -oG для вывода, подходящего для grep, -oX для XML-вывода), но -oN - это человекочитаемый формат.
  • 127.0.0.1: Целевой IP-адрес (localhost).

Прежде чем запустить команду, убедитесь, что python-http-сервер по-прежнему работает из предыдущего шага. Если нет, запустите его снова в отдельном окне терминала:

cd ~/project
python3 -m http.server 80

Теперь в новом окне терминала выполните команду Nmap для сохранения результатов в файл:

nmap --script banner -oN banners.txt 127.0.0.1

На этот раз вы не увидите результаты сканирования напечатанные в терминале. Вместо этого Nmap сохранит вывод в файл banners.txt в вашей текущей директории (~/project).

Для проверки того, что файл был создан и содержит результаты сканирования, вы можете использовать команду cat:

cat banners.txt

В терминале вам должно показаться что-то вроде этого:

## Nmap 7.80 scan initiated Fri Oct 27 10:15:00 2023
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000072s latency).
Other addresses for localhost (alias(es)): localhost

PORT   STATE SERVICE
22/tcp open  ssh
| banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
|_
80/tcp open  http
| banner: Server: SimpleHTTP/3.10 Python/3.10
|_

## Nmap done at Fri Oct 27 10:15:00 2023 -- 1 IP address (1 host up) scanned in 0.10 seconds

Это подтверждает, что результаты сканирования были сохранены в файл banners.txt.

Не забудьте остановить python-http-сервер после завершения этого шага, нажав Ctrl+C в терминале, где он запущен.

Просмотр деталей баннера в терминале Xfce

В этом шаге мы рассмотрим детали баннера, которые мы сохранили в файле banners.txt на предыдущем шаге. Мы будем использовать терминал Xfce для просмотра содержимого файла и понимания информации, которую он содержит.

Во - первых, убедитесь, что у вас есть файл banners.txt в директории ~/project. Если вы не завершили предыдущий шаг, сделайте это перед продолжением.

Для просмотра содержимого файла banners.txt откройте окно терминала и используйте команду cat:

cat banners.txt

Вывод будет отображать содержимое файла, которое должно выглядеть примерно так:

## Nmap 7.80 scan initiated Fri Oct 27 10:20:00 2023
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000072s latency).
Other addresses for localhost (alias(es)): localhost

PORT   STATE SERVICE
22/tcp open  ssh
| banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
|_
80/tcp open  http
| banner: Server: SimpleHTTP/3.10 Python/3.10
|_

## Nmap done at Fri Oct 27 10:20:00 2023 -- 1 IP address (1 host up) scanned in 0.10 seconds

Рассмотрим вывод:

  • Nmap scan report for localhost (127.0.0.1): Это указывает, что сканирование было выполнено на локальном компьютере (127.0.0.1).
  • Host is up: Это подтверждает, что целевой хост доступен.
  • PORT STATE SERVICE: Эта секция предоставляет информацию о открытых портах на целевом хосте.
  • 22/tcp open ssh: Это указывает, что порт 22 открыт и работает служба SSH.
  • | banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5: Это информация о баннере для службы SSH. Она показывает версию SSH и операционную систему.
  • 80/tcp open http: Это указывает, что порт 80 открыт и работает служба HTTP.
  • | banner: Server: SimpleHTTP/3.10 Python/3.10: Это информация о баннере для службы HTTP. Она показывает программное обеспечение сервера и версию.

Просмотрев детали баннера, вы можете получить ценную информацию о службах, работающих на целевом хосте. Эта информация может быть использована для анализа уязвимостей или для выявления потенциальных рисков безопасности.

Не забудьте остановить python-http-сервер после завершения этого шага, нажав Ctrl+C в терминале, где он запущен.

Сравнение баннеров по разным портам в терминале Xfce

В этом шаге мы сравним информацию о баннерах, полученную с разных портов. Это поможет нам определить службы, работающие на этих портах, и понять их версии. Мы будем использовать терминал Xfce и команду grep для извлечения и сравнения информации о баннерах из файла banners.txt.

Во - первых, убедитесь, что у вас есть файл banners.txt в директории ~/project, который содержит результаты сканирования Nmap из предыдущих шагов.

Для извлечения информации о баннере для порта 22 (SSH) используйте следующую команду:

grep "22/tcp" banners.txt

Это выведет строку, содержащую информацию о порте 22, включая баннер:

22/tcp open  ssh
| banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
|_

Аналогично, для извлечения информации о баннере для порта 80 (HTTP) используйте следующую команду:

grep "80/tcp" banners.txt

Это выведет строку, содержащую информацию о порте 80, включая баннер:

80/tcp open  http
| banner: Server: SimpleHTTP/3.10 Python/3.10
|_

Теперь сравним информацию о баннерах. Мы видим, что:

  • На порту 22 работает SSH, и баннер показывает, что это OpenSSH версии 8.2p1 на Ubuntu.
  • На порту 80 работает HTTP, и баннер показывает, что это SimpleHTTP - сервер, реализованный на Python 3.10.

Сравнив информацию о баннерах, мы можем быстро определить службы, работающие на этих портах, и их версии. Эта информация ценна для безопасности и анализа уязвимостей. Например, знание конкретной версии SSH или HTTP - сервера позволяет проверить на наличие известных уязвимостей, связанных с этими версиями.

В этом простом примере мы сравнивали только два порта. Однако вы можете расширить эту технику для сравнения баннеров по множеству разных портов и хостов, чтобы получить полное понимание сетевых служб, работающих в вашей среде.

Не забудьте остановить python - http - сервер после завершения этого шага, нажав Ctrl+C в терминале, где он запущен.

Резюме

В этом практическом занятии участники получают опыт использования Nmap для обнаружения баннеров служб. Они начинают с запуска скрипта для получения баннера с помощью команды nmap --script banner на целевом IP - адресе, используя 127.0.0.1, чтобы избежать этических и юридических проблем. Также они узнают, как сканировать конкретные порты, добавлять подробность к сканированию и сохранять результаты в файл. Наконец, они обсуждают и сравнивают детали баннеров в терминале Xfce.