Изучение и создание скриптов Nmap

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

Введение

В этом практическом занятии (лабораторной работе) вы узнаете о Скриптовом движке Nmap (Nmap's Scripting Engine, NSE) и о том, как классифицировать и обновлять скрипты Nmap. Nmap - это мощный открытый инструмент для сетевого обнаружения и аудита безопасности, функциональность которого расширяется за счет NSE. NSE позволяет пользователям писать и обмениваться скриптами для автоматизации различных сетевых задач.

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

Исследование категорий скриптов Nmap

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

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

cd /home/labex/project

Эта команда изменяет текущую рабочую директорию на /home/labex/project.

Теперь проверим версию Nmap, установленную на нашей системе. Знание версии важно, так как разные версии могут иметь разные функции и совместимость. Выполните эту команду в терминале:

nmap --version

Вывод будет похож на следующий:

Nmap version 7.80 ( https://nmap.org )
Platform: x86_64-pc-linux-gnu
Compiled with: liblua-5.3.3 openssl-1.1.1f libpcre-8.39 libpcap-1.9.1 nmap-libdnet-1.12 ipv6
Compiled without:
Available nsock engines: epoll poll select

Далее мы рассмотрим доступные категории скриптов Nmap. Скрипты Nmap хранятся в директории /usr/share/nmap/scripts/. Чтобы понять, какие скрипты доступны, мы можем вывести их список и отсортировать по именам. Выполните эту команду в терминале:

ls /usr/share/nmap/scripts/ | grep -v .lua | sort | head -10

Эта команда сначала выводит список всех файлов в директории /usr/share/nmap/scripts/. Затем она использует grep -v .lua для исключения файлов с расширением .lua. После этого она сортирует оставшиеся файлы по именам и показывает первые 10 результатов. Вывод будет похож на:

address-info.nse
afp-brute.nse
afp-ls.nse
afp-path-vuln.nse
afp-serverinfo.nse
afp-showmount.nse
ajp-auth.nse
ajp-brute.nse
ajp-headers.nse
ajp-methods.nse

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

grep -r categories /usr/share/nmap/scripts/*.nse | grep -o "categories = {[^}]*}" | sort | uniq | head -10

Эта команда ищет строку "categories" во всех файлах скриптов .nse в директории /usr/share/nmap/scripts/. Затем она извлекает информацию о категориях, сортирует ее, удаляет все дубликаты и показывает первые 10 результатов. Вывод будет выглядеть примерно так:

categories = {"auth", "brute", "intrusive"}
categories = {"auth", "default", "discovery", "safe"}
categories = {"auth", "discovery", "safe"}
categories = {"auth", "intrusive"}
categories = {"auth", "safe"}
categories = {"broadcast", "discovery"}
categories = {"broadcast", "discovery", "safe"}
categories = {"default", "discovery"}
categories = {"default", "discovery", "safe"}
categories = {"default", "discovery", "safe", "version"}

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

mkdir -p /home/labex/project/NmapScripts/vulnerability
mkdir -p /home/labex/project/NmapScripts/discovery
mkdir -p /home/labex/project/NmapScripts/authentication

Команда mkdir -p создает директории. Если родительские директории не существуют, она создает их также.

Теперь скопируем некоторые скрипты, связанные с уязвимостями, в нашу только что созданную директорию для уязвимостей. Выполните эту команду в терминале:

cp /usr/share/nmap/scripts/smb-vuln* /home/labex/project/NmapScripts/vulnerability/

Эта команда копирует все скрипты в директории /usr/share/nmap/scripts/, имена которых начинаются с smb - vuln, в директорию /home/labex/project/NmapScripts/vulnerability/.

Проверим, были ли файлы скопированы правильно. Выполните эту команду в терминале:

ls -la /home/labex/project/NmapScripts/vulnerability/

Вывод покажет скопированные скрипты для уязвимостей:

total 88
drwxr-xr-x 2 labex labex  4096 Mar 15 12:30 .
drwxr-xr-x 4 labex labex  4096 Mar 15 12:30 ..
-rw-r--r-- 1 labex labex  3355 Mar 15 12:30 smb-vuln-conficker.nse
-rw-r--r-- 1 labex labex  8045 Mar 15 12:30 smb-vuln-cve2009-3103.nse
-rw-r--r-- 1 labex labex  5100 Mar 15 12:30 smb-vuln-cve-2017-7494.nse
-rw-r--r-- 1 labex labex  9595 Mar 15 12:30 smb-vuln-ms06-025.nse
-rw-r--r-- 1 labex labex 11645 Mar 15 12:30 smb-vuln-ms07-029.nse
-rw-r--r-- 1 labex labex 12558 Mar 15 12:30 smb-vuln-ms08-067.nse
-rw-r--r-- 1 labex labex  9719 Mar 15 12:30 smb-vuln-ms10-054.nse
-rw-r--r-- 1 labex labex  7326 Mar 15 12:30 smb-vuln-ms10-061.nse
-rw-r--r-- 1 labex labex  8091 Mar 15 12:30 smb-vuln-ms17-010.nse
-rw-r--r-- 1 labex labex  4245 Mar 15 12:30 smb-vuln-regsvc-dos.nse

Аналогично скопируем некоторые скрипты для обнаружения и аутентификации в соответствующие директории. Выполните эти команды в терминале:

cp /usr/share/nmap/scripts/dns-* /home/labex/project/NmapScripts/discovery/
cp /usr/share/nmap/scripts/ssh-* /home/labex/project/NmapScripts/authentication/

Теперь вы организовали некоторые скрипты Nmap по категориям в соответствии с их функциональностью, что упрощает поиск и использование их для конкретных задач.

Понимание функциональности скриптов

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

Начнем с того, что подробно рассмотрим один из скриптов для проверки уязвимостей, который мы скопировали на предыдущем этапе. Мы используем команду cat для отображения содержимого скрипта, а затем head -20, чтобы показать только первые 20 строк. Таким образом, мы можем быстро увидеть важную информацию в начале скрипта.

cat /home/labex/project/NmapScripts/vulnerability/smb-vuln-ms17-010.nse | head -20

Вывод покажет начало скрипта. Чаще всего в этой части содержатся сведения о том, для чего предназначен скрипт и как им пользоваться.

local smb = require "smb"
local vulns = require "vulns"
local stdnse = require "stdnse"
local string = require "string"

description = [[
Attempts to detect if a Microsoft SMBv1 server is vulnerable to a remote code
execution vulnerability (ms17-010, a.k.a. EternalBlue). The vulnerability affects
Windows Vista, 7, 8.1, 10, Server 2008, Server 2008 R2, Server 2012 Gold and R2, and Server 2016.

The script connects to the $IPC tree, executes a transaction on FID 0 and
checks if the error "STATUS_INSUFF_SERVER_RESOURCES" is returned to
determine if the target is not patched against ms17-010. Additionally it checks
for a matching error code on EternalChampion.

References:
* https://technet.microsoft.com/en-us/library/security/ms17-010.aspx
* https://blogs.technet.microsoft.com/msrc/2017/05/12/customer-guidance-for-wannacrypt-attacks/
* https://msrc-blog.microsoft.com/2017/05/12/customer-guidance-for-wannacrypt-attacks/
* https://github.com/rapid7/metasploit-framework/pull/8654/files

Этот скрипт предназначен для проверки, имеет ли сервер Microsoft SMBv1 уязвимость MS17 - 010, также известную как EternalBlue.

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

  1. Раздел описания: Здесь рассказывается, что делает скрипт. Это как краткое изложение, которое помогает быстро понять назначение скрипта.
  2. Раздел об авторе: Здесь указывается автор скрипта. Важно знать, кто создал скрипт, особенно если вам нужно связаться с ним или найти другие скрипты от того же автора.
  3. Категории: Они группируют схожие скрипты. Например, скрипты, связанные с сканированием на уязвимости, могут находиться в категории "vuln". Это упрощает поиск и управление скриптами.
  4. Правила: Они определяют, когда должен запускаться скрипт. Существует несколько типов правил, таких как portrule и hostrule. Например, hostrule может указать, что скрипт должен запускаться только на определенных хостах.
  5. Основная функция действия: Именно здесь происходит основная работа скрипта. В ней содержится код, выполняющий задачу, например, проверку на уязвимость или получение информации о хосте.

Создадим собственный простой скрипт Nmap, чтобы увидеть, как работает эта структура. Мы используем команду cat для создания нового файла и записи в него скрипта.

cat << 'EOF' > /home/labex/project/my-ping-check.nse
description = [[
A simple script that checks if a host responds to ICMP echo requests (ping).
]]

author = "LabEx User"

categories = {"discovery", "safe"}

-- The rule section determines when the script should be run
hostrule = function(host)
  return true  -- Run the script for all hosts
end

-- The action section contains the main function of the script
action = function(host)
  local output = "Host status: "
  
  if host.pingresponse then
    output = output .. "Responds to ping"
  else
    output = output .. "Does not respond to ping"
  end
  
  return output
end
EOF

Разберем этот скрипт:

  • В разделе description четко объясняется, что скрипт проверяет, отвечает ли хост на запросы ping.
  • В разделе author указано, что скрипт был создан пользователем LabEx.
  • В разделе categories этот скрипт группируется с другими скриптами для обнаружения и безопасными скриптами. Скрипты для обнаружения используются для получения информации о хостах, а безопасные скрипты не наносят ущерба целевому объекту.
  • Функция hostrule настроена так, чтобы возвращать true, что означает, что скрипт будет запускаться для всех хостов.
  • Функция action содержит основную логику. Она проверяет, есть ли у хоста ответ на ping, и затем возвращает сообщение, указывающее, отвечает ли хост на ping или нет.

Теперь запустим наш пользовательский скрипт на локальном хосте (127.0.0.1). Мы используем команду nmap с опцией --script, чтобы указать наш пользовательский скрипт.

nmap --script /home/labex/project/my-ping-check.nse 127.0.0.1

Вы должны увидеть вывод, похожий на следующий:

Starting Nmap 7.80 ( https://nmap.org )
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000091s latency).
Not shown: 998 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
| my-ping-check: Host status: Responds to ping
3001/tcp open  nessus
|_my-ping-check: Host status: Responds to ping

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

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

Создание и добавление пользовательских скриптов в Nmap

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

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

cat << 'EOF' > /usr/share/nmap/scripts/port-check.nse
description = [[
A script that checks if a specific port is open and reports its status.
]]

author = "LabEx User"
license = "Same as Nmap--See https://nmap.org/book/man-legal.html"
categories = {"discovery", "safe"}

-- The portrule determines when the script should be run
portrule = function(host, port)
  return port.protocol == "tcp" and port.state == "open"
end

-- The action section contains the main function of the script
action = function(host, port)
  local output = string.format("Port %d is open on host %s", port.number, host.ip)
  return output
end
EOF

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

Обратите внимание, что мы создали этот скрипт непосредственно в директории скриптов Nmap (/usr/share/nmap/scripts/). Это важно, так как Nmap ищет скрипты в этой директории. Однако просто создать скрипт недостаточно. Nmap должен знать о новом скрипте, поэтому нам нужно обновить базу данных скриптов Nmap.

Чтобы обновить базу данных скриптов Nmap, выполните следующую команду:

sudo nmap --script-updatedb

Вывод должен быть похож на следующий:

Starting Nmap 7.80 ( https://nmap.org )
NSE: Updating rule database.
NSE: Script Database updated successfully.
Nmap done: 0 IP addresses (0 hosts up) scanned in 0.36 seconds

Этот вывод показывает, что база данных скриптов успешно обновлена. Теперь проверим, был ли наш скрипт добавлен в базу данных скриптов Nmap. Мы можем сделать это, выполнив поиск нашего скрипта в файле script.db.

grep port-check /usr/share/nmap/scripts/script.db

Вы должны увидеть вывод, похожий на следующий:

Entry { filename = "port-check.nse", categories = { "discovery", "safe", } }

Это подтверждает, что наш скрипт был успешно добавлен в базу данных скриптов Nmap.

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

cat << 'EOF' > /usr/share/nmap/scripts/http-headers-check.nse
description = [[
A script that retrieves and displays HTTP headers from web servers.
]]

author = "LabEx User"
license = "Same as Nmap--See https://nmap.org/book/man-legal.html"
categories = {"discovery", "safe"}

local http = require "http"
local shortport = require "shortport"
local stdnse = require "stdnse"

-- The portrule determines when the script should be run
portrule = function(host, port)
  return shortport.http(host, port)
end

-- The action section contains the main function of the script
action = function(host, port)
  local response = http.get(host, port, "/")
  
  if not response or not response.status then
    return "Failed to retrieve HTTP headers"
  end
  
  local output = stdnse.output_table()
  output["Status"] = response.status
  
  if response.header then
    output["Headers"] = {}
    for name, value in pairs(response.header) do
      output["Headers"][name] = value
    end
  end
  
  return output
end
EOF

Этот скрипт использует несколько библиотек Nmap:

  • http для выполнения HTTP-запросов. Эта библиотека позволяет нашему скрипту взаимодействовать с веб-серверами и получать от них информацию.
  • shortport для определения, запускается ли на порту, вероятно, HTTP-сервис. Она помогает нам понять, используется ли определенный порт на хосте для веб-трафика.
  • stdnse для форматирования вывода. Это делает информацию, полученную от веб-сервера, более удобной для чтения.

Обновим базу данных скриптов еще раз, чтобы Nmap знал о нашем новом скрипте:

sudo nmap --script-updatedb

Теперь запустим наш новый скрипт на веб-сервере. В демонстрационных целях мы будем использовать локальный веб-сервер на порту 3001 (который часто используется разработчиками).

nmap --script http-headers-check -p 3001 127.0.0.1

Если на порту 3001 не запущен веб-сервер, вывод будет указывать, что порт закрыт или фильтруется. Если веб-сервер запущен, вы увидите полученные HTTP-заголовки.

Наконец, запустим оба наших пользовательских скрипта вместе. Таким образом, мы сможем сразу увидеть результаты обоих скриптов.

nmap --script "port-check,http-headers-check" -p 22,3001 127.0.0.1

Эта команда запустит оба наших пользовательских скрипта на портах 22 и 3001 на локальном хосте. Порт 22 обычно используется для SSH (Secure Shell) подключений.

Вывод покажет, открыт ли эти порты, и, если на порту 3001 запущен HTTP-сервис, он отобразит HTTP-заголовки.

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

Запуск категорий скриптов и управление выводом скриптов

На этом этапе мы узнаем, как запускать скрипты Nmap по категориям и управлять выводом результатов сканирования этих скриптов. Это очень полезный навык, так как позволяет запускать несколько связанных скриптов без необходимости указывать каждый из них отдельно.

Скрипты Nmap группируются по разным категориям в зависимости от их функциональности. Понимание этих категорий помогает быстро найти и запустить нужные скрипты. Вот некоторые общие категории:

  • auth: Это скрипты, связанные с аутентификацией. Они могут помочь проверить, безопасны ли механизмы аутентификации на целевом объекте.
  • broadcast: Скрипты этой категории отправляют широковещательные пакеты в локальной сети. Они полезны для обнаружения устройств и сервисов в одной сети.
  • brute: Это скрипты для перебора паролей. Они пытаются различными паролями получить несанкционированный доступ к сервису.
  • default: Когда вы используете опцию -sC в Nmap, эти скрипты запускаются по умолчанию. Они являются хорошим стартовым пунктом для базового сканирования.
  • discovery: Эти скрипты используются для обнаружения хостов и сервисов. Они могут определить, какие хосты доступны в сети и какие сервисы они запускают.
  • dos: Скрипты для осуществления отказа в обслуживании (Denial of Service) предназначены для перегрузки целевой системы и ее недоступности. Будьте осторожны при использовании этих скриптов, так как они могут причинить реальный вред.
  • exploit: Скрипты для эксплойта используются для использования известных уязвимостей в системе. Они могут быть использованы для тестирования безопасности, но должны применяться ответственно.
  • external: Эти скрипты могут отправлять данные в сторонние базы данных. Они могут предоставить дополнительную информацию о цели, но вы должны быть осведомлены о вопросах конфиденциальности.
  • fuzzer: Скрипты - фаззеры используют фазинг - технологии. Они отправляют случайные или неправильно сформированные данные на цель, чтобы проверить, могут ли они вызвать ошибки или раскрыть уязвимости.
  • intrusive: Скрипты этой категории могут привести к сбою сервисов или быть рассмотрены как инвазивные. Используйте их с осторожностью, особенно в производственной среде.
  • malware: Скрипты для обнаружения вредоносного ПО используются для проверки, заражен ли целевой компьютер вредоносным ПО.
  • safe: Эти скрипты считаются безопасными и неинвазивными. Они не причинят никакого вреда целевой системе.
  • version: Скрипты для определения версии помогают узнать версию программного обеспечения, запущенного на целевом сервисе. Эта информация может быть полезна для выявления потенциальных уязвимостей.
  • vuln: Скрипты для обнаружения уязвимостей используются для поиска уязвимостей безопасности в целевой системе.

Теперь посмотрим, как запускать скрипты из определенной категории. Например, если вы хотите запустить все скрипты из категории "discovery", вы можете использовать следующую команду:

nmap --script discovery 127.0.0.1

Эта команда сообщает Nmap запустить все скрипты для обнаружения на локальном хосте (127.0.0.1). Вывод будет довольно длинным, так как он показывает результаты всех скриптов для обнаружения.

Иногда вы можете захотеть запустить скрипты из нескольких категорий. Вы можете сделать это, разделив имена категорий запятой. Вот пример:

nmap --script "discovery,safe" -p 1-100 127.0.0.1

Эта команда запускает все скрипты из категорий discovery и safe на портах от 1 до 100 на локальном хосте.

Вы также можете исключить определенные категории, используя оператор not. Например:

nmap --script "discovery and not broadcast" 127.0.0.1

Эта команда запускает скрипты для обнаружения, но исключает те, которые также входят в категорию broadcast.

Далее рассмотрим различные способы форматирования и сохранения вывода сканирования скриптов Nmap. Nmap предлагает несколько форматов вывода, полезных для разных целей:

  1. Нормальный вывод (по умолчанию): Это стандартный текстовый вывод, который Nmap показывает на экране.
  2. Вывод в формате XML: XML - это структурированный формат, который может быть легко проанализирован другими инструментами.
  3. Вывод в grep - совместимом формате: Этот формат предназначен для удобного поиска с использованием таких инструментов, как grep.
  4. Вывод в формате JSON (с соответствующим скриптом): JSON - это еще один структурированный формат, широко используемый для обмена данными.

Чтобы сохранить вывод в формате XML, вы можете использовать следующую команду:

nmap --script vuln -p 1-1000 127.0.0.1 -oX /home/labex/project/scan_results.xml

Эта команда запускает все скрипты для обнаружения уязвимостей на портах от 1 до 1000 на локальном хосте и сохраняет результаты в формате XML в файл /home/labex/project/scan_results.xml.

Проверим содержимое XML - файла:

head -20 /home/labex/project/scan_results.xml

Эта команда показывает первые 20 строк вывода в формате XML. Вы увидите информацию о сканировании, использованных опциях и результатах сканирования.

Для вывода в grep - совместимом формате вы можете использовать такую команду:

nmap --script "default" 127.0.0.1 -oG /home/labex/project/scan_results.gnmap

Эта команда сохраняет результаты в формате, который легко проанализировать с помощью таких инструментов, как grep.

Проверим содержимое файла gnmap:

cat /home/labex/project/scan_results.gnmap

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

Если вы хотите сохранить вывод одновременно в нормальном и XML - форматах, вы можете использовать такую команду:

nmap --script "default" 127.0.0.1 -oX /home/labex/project/scan_results2.xml -oN /home/labex/project/scan_results.txt

Эта команда сохраняет вывод одновременно в обычном текстовом формате и в формате XML.

Наконец, вы можете использовать опцию -oA, чтобы сохранить вывод сразу в трех форматах (нормальном, XML и grep - совместимом):

nmap --script "default" 127.0.0.1 -oA /home/labex/project/all_formats

Эта команда создает три файла:

  • /home/labex/project/all_formats.nmap (нормальный вывод)
  • /home/labex/project/all_formats.xml (вывод в формате XML)
  • /home/labex/project/all_formats.gnmap (вывод в grep - совместимом формате)

Освоив эти методы запуска скриптов по категориям и управления выводом скриптов, вы сможете эффективно проводить сетевые сканирования и организовать результаты для дальнейшего анализа.

Резюме

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

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