👾 NSE-скрипты Nmap — полный гайд
📌 Что такое NSE
NSE (Nmap Scripting Engine) — движок скриптов внутри Nmap. Это отдельные мини-программы на языке Lua, которые запускаются после сканирования портов и делают то, что обычными флагами невозможно.
Флаги отвечают на вопрос — "что открыто?" Скрипты отвечают на вопрос — "что с этим можно сделать?"
Пример разницы:
nmap -sV 10.0.0.1
Скажет: на порту 80 работает Apache 2.4.49
nmap --script vuln 10.0.0.1
Скажет: Apache 2.4.49 уязвим к CVE-2021-41773, вот подробности
📂 Где хранятся скрипты
По умолчанию все скрипты лежат в одной папке:
/usr/share/nmap/scripts/
Посмотреть сколько их:
ls /usr/share/nmap/scripts/ | wc -l
Обычно ~600 скриптов из коробки. Каждый скрипт — файл с расширением .nse.
Посмотреть список:
ls /usr/share/nmap/scripts/ # все скрипты
ls /usr/share/nmap/scripts/ | grep http # только HTTP
ls /usr/share/nmap/scripts/ | grep smb # только SMB
ls /usr/share/nmap/scripts/ | grep brute # только брутфорс
Прочитать описание конкретного скрипта:
nmap --script-help http-enum
Или посмотреть исходный код (скрипты открыты — можно изучать и учиться):
cat /usr/share/nmap/scripts/http-enum.nse | head -30
Есть ещё файл-индекс с описанием всех скриптов:
/usr/share/nmap/scripts/script.db
🚀 Как запускать
По имени — конкретный скрипт
nmap --script http-enum 10.0.0.1
По категории — все скрипты этой группы
nmap --script vuln 10.0.0.1
Несколько скриптов через запятую
nmap --script http-enum,http-headers,http-methods 10.0.0.1
По маске — все скрипты подходящие под паттерн
nmap --script "http-*" 10.0.0.1 # все HTTP-скрипты
nmap --script "smb-*" 10.0.0.1 # все SMB-скрипты
nmap --script "dns-*" 10.0.0.1 # все DNS-скрипты
Комбинация категорий
nmap --script "vuln and safe" 10.0.0.1 # уязвимости, но безопасные
nmap --script "default or safe" 10.0.0.1 # дефолтные или безопасные
nmap --script "not intrusive" 10.0.0.1 # всё кроме агрессивных
nmap --script "(http-*) and not http-brute" 10.0.0.1 # HTTP но без брутфорса
Свой скрипт — по полному пути
nmap --script /home/user/my-script.nse 10.0.0.1
С аргументами — передать параметры скрипту
nmap --script http-brute --script-args userdb=users.txt,passdb=passwords.txt 10.0.0.1
📋 Категории скриптов
Каждый скрипт принадлежит одной или нескольким категориям. Это позволяет запускать группы скриптов одной командой.
auth — проверка аутентификации (анонимный доступ, дефолтные пароли)
broadcast — обнаружение хостов через широковещательные запросы
brute — брутфорс паролей к сервисам (FTP, SSH, HTTP, SMB)
default — запускаются при -sC. Безопасные, полезные, не агрессивные
discovery — сбор информации о сервисах и сети
dos — проверка на уязвимость к отказу в обслуживании (осторожно!)
exploit — попытка эксплуатации уязвимости (осторожно!)
external — отправляют данные на внешние сервисы (whois, virustotal)
fuzzer — отправка случайных данных для поиска багов
intrusive — агрессивные скрипты, могут нарушить работу цели
malware — обнаружение вредоносного ПО на цели
safe — безопасные, не влияют на работу цели
version — расширенное определение версий сервисов
vuln — проверка на известные уязвимости (CVE)
🔑 Связь с флагом -sC
Флаг -sC — это то же самое что --script=default. Запускает все скрипты категории default:
nmap -sC 10.0.0.1
# идентично:
nmap --script=default 10.0.0.1
А флаг -A (aggressive) включает -sC + -sV + -O + traceroute:
nmap -A 10.0.0.1
# идентично:
nmap -sC -sV -O --traceroute 10.0.0.1
⭐ Самые полезные скрипты
Разведка веб-серверов
nmap --script http-enum -p 80,443 10.0.0.1
http-enum — перебирает популярные директории и файлы: /admin, /login, /backup, /phpmyadmin, robots.txt, .git. Находит то, что забыли закрыть.
nmap --script http-headers -p 80 10.0.0.1
http-headers — показывает заголовки ответа. Видно серверную ОС, фреймворк, версии.
nmap --script http-methods -p 80 10.0.0.1
http-methods — какие HTTP-методы разрешены (PUT, DELETE — потенциально опасные).
nmap --script http-title -p 80 10.0.0.1
http-title — заголовок страницы. Быстро понять что на порту — дефолтная страница, панель управления или приложение.
nmap --script http-robots.txt -p 80 10.0.0.1
http-robots.txt — содержимое robots.txt. Часто выдаёт скрытые директории которые админ хотел спрятать от поисковиков.
nmap --script http-sql-injection -p 80 10.0.0.1
http-sql-injection — базовая проверка на SQL-инъекции в параметрах URL.
Windows / SMB
nmap --script smb-enum-shares -p 445 10.0.0.1
smb-enum-shares — список расшаренных папок на Windows. Часто находятся папки с открытым доступом.
nmap --script smb-os-discovery -p 445 10.0.0.1
smb-os-discovery — версия Windows, имя компьютера, домен, время.
nmap --script smb-enum-users -p 445 10.0.0.1
smb-enum-users — список пользователей Windows.
nmap --script smb-vuln-ms17-010 -p 445 10.0.0.1
smb-vuln-ms17-010 — проверка на EternalBlue (WannaCry). Одна из самых известных уязвимостей.
FTP
nmap --script ftp-anon -p 21 10.0.0.1
ftp-anon — проверяет можно ли зайти анонимно (без пароля). Удивительно часто находит открытые FTP.
nmap --script ftp-vsftpd-backdoor -p 21 10.0.0.1
ftp-vsftpd-backdoor — проверка на известный бэкдор в vsftpd 2.3.4.
SSH
nmap --script ssh-auth-methods -p 22 10.0.0.1
ssh-auth-methods — какие методы аутентификации разрешены (пароль, ключ, none).
nmap --script ssh2-enum-algos -p 22 10.0.0.1
ssh2-enum-algos — список алгоритмов шифрования. Показывает устаревшие/слабые.
DNS
nmap --script dns-brute example.com
dns-brute — брутфорс поддоменов: mail.example.com, admin.example.com, dev.example.com...
nmap --script dns-zone-transfer -p 53 ns1.example.com
dns-zone-transfer — попытка скачать всю DNS-зону. Если сервер неправильно настроен — отдаст все записи.
Брутфорс паролей
nmap --script http-brute -p 80 10.0.0.1
http-brute — брутфорс HTTP-авторизации.
nmap --script ftp-brute -p 21 10.0.0.1
ftp-brute — брутфорс FTP.
nmap --script ssh-brute -p 22 10.0.0.1
ssh-brute — брутфорс SSH. Медленный но работает.
Передать свои словари:
nmap --script ssh-brute --script-args userdb=users.txt,passdb=pass.txt -p 22 10.0.0.1
Поиск уязвимостей
nmap --script vuln 10.0.0.1
Запускает все скрипты категории vuln. Проверяет десятки CVE за раз. Шумно, но эффективно для быстрой оценки.
nmap --script vulners -sV 10.0.0.1
vulners — определяет версии сервисов и ищет CVE в базе vulners.com. Нужен -sV для определения версий.
SSL/TLS
nmap --script ssl-cert -p 443 10.0.0.1
ssl-cert — информация о сертификате: кому выдан, срок, издатель.
nmap --script ssl-enum-ciphers -p 443 10.0.0.1
ssl-enum-ciphers — список поддерживаемых шифров. Показывает слабые (DES, RC4, NULL).
Базы данных
nmap --script mysql-info -p 3306 10.0.0.1
mysql-info — версия MySQL, статус, возможности.
nmap --script mysql-empty-password -p 3306 10.0.0.1
mysql-empty-password — проверка на пустой пароль root.
nmap --script ms-sql-info -p 1433 10.0.0.1
ms-sql-info — информация о Microsoft SQL Server.
🧠 Готовые комбо со скриптами
Полная разведка веб-сервера
nmap -sV --script "http-*" -p 80,443,8080,8443 10.0.0.1
Аудит Windows-машины
nmap -sV --script "smb-*" -p 139,445 10.0.0.1
Поиск всех уязвимостей
nmap -sV --script vuln -p- -T4 10.0.0.1
Тихая разведка (только безопасные скрипты)
nmap -sV --script safe -T2 10.0.0.1
Быстрая проверка на дефолтные пароли
nmap --script auth -p 21,22,80,445,3306 10.0.0.1
CTF-комбо (всё и сразу)
nmap -sV -sC --script vuln,discovery -p- -T4 -oA ctf-scan 10.0.0.1
⚙️ Аргументы скриптов (--script-args)
Многие скрипты принимают параметры. Передаются через --script-args:
# Свои словари для брутфорса
nmap --script ssh-brute --script-args userdb=users.txt,passdb=passwords.txt -p 22 10.0.0.1
# Указать путь для http-enum
nmap --script http-enum --script-args http-enum.basepath=/api/ -p 80 10.0.0.1
# Увеличить потоки брутфорса
nmap --script http-brute --script-args brute.threads=10 -p 80 10.0.0.1
# User-Agent для HTTP-скриптов
nmap --script http-enum --script-args http.useragent="Mozilla/5.0" -p 80 10.0.0.1
Посмотреть какие аргументы принимает скрипт:
nmap --script-help http-enum
🔄 Обновление скриптов
База скриптов обновляется вместе с Nmap. Но можно обновить отдельно:
nmap --script-updatedb
Это пересканирует папку /usr/share/nmap/scripts/ и обновит индекс script.db. Полезно если добавил свои скрипты в папку.
✍️ Свои скрипты
Скрипты пишутся на Lua. Простейший пример — сохрани как my-banner.nse:
description = [[Грабит баннер сервиса]]
categories = {"discovery", "safe"}
portrule = function(host, port)
return port.state == "open"
end
action = function(host, port)
local socket = nmap.new_socket()
socket:connect(host, port)
local status, data = socket:receive_lines(1)
socket:close()
if status then
return data
end
end
Запуск:
nmap --script ./my-banner.nse -p 21,22,80 10.0.0.1
Или скопируй в общую папку:
cp my-banner.nse /usr/share/nmap/scripts/
nmap --script-updatedb
nmap --script my-banner 10.0.0.1
⚠️ Важные моменты
safe vs intrusive — скрипты категории safe не влияют на цель. Скрипты intrusive, dos, exploit могут нарушить работу сервиса. В реальном пентесте — всегда согласовывай с заказчиком.
Скрипты шумят — IDS легко детектирует запуск NSE-скриптов. Для тихой разведки лучше ручные запросы.
Скорость — некоторые скрипты (особенно brute) работают долго. Используй --script-timeout 30s чтобы ограничить время на скрипт.
nmap --script vuln --script-timeout 30s 10.0.0.1
Комбинируй с -sV — многие скрипты (особенно vuln) работают лучше когда знают версию сервиса. Всегда добавляй -sV:
nmap -sV --script vuln 10.0.0.1