Nmap
https://t.me/joinchat/AAAAAEum5yc-wzg24hy3MgNmap - это лучший сканер портов и главный инструмент пинтестера.
Nmap умеет сканировать диапазоны IP, подсети и отдельные хосты и может определить ОС, сервисы на портах и их версии. Функционал расширяется за счет сторонних скриптов, которые можно писать и самому. Итак первое с чего можно начать это
# nmap localhost
В манах часто пишут, что nmap сканирует только првые 1024 порта по умолчанию, ну во-первых: можно задать диапазон портов в ручную через опцию -p
# nmap localhost -p 1-65535
А во-вторых: список портов которые nmap будет сканировать по дефолту определен в файле "/usr/share/nmap/nmap-services". Nmap также может попытаться определить версию сервиса, для этого надо указать опцию -sV
# nmap localhost -sV
А опция -O попросит утилиту определить ОС хоста. Есть возможность более детального сканирования (агрессивного) с помощью опции -A. Ниже я приведу список примеров сканирований.
Настройка диапазонов портов
# nmap localhost -p 22,21,80,100-200
Сканируем подсеть
# nmap 192.168.0.0/24 -p 22
Сканирование списка хостов из файла
# nmap -p 22 -iL hosts.txt
TCP сканирование (будет использован системный вызов Connect())
# nmap -p22 -sT localhost
SYN, FIN, Xmas, TCP Null сканирования
# nmap -p22 -sS localhost
# nmap -p22 -sF localhost
# nmap -p22 -sX localhost
# nmap -p22 -sN localhost
Не определять доменные имена
# nmap -n -p22 localhost
Показывать причину, по которой определенный порт считается «открытым»:
# nmap -p22,80,100-200 --reason localhost
Пингануть хосты для проверки, онлайн ли они, но не сканировать порты:
# nmap -sn 192.168.0.0/24
Сканировать хосты, даже если они не отвечают на пинги:
# nmap -p22,80 -Pn localhost
Считать, что хост онлайн, если он отвечает на SYN, посланный на порт 443:
# nmap -p22,80,443 -PS 443 192.168.0.0/24
Сканирование UDP (работает медленнее обычного сканирования TCP):
# nmap -sU -p111 localhost
Ограничиваем время, которое можно потратить на один хост:
# nmap -p22 --host-timeout 1m localhost
Управление степенью параллелизма:
# nmap -p22 --max-parallelism 2 localhost
# nmap -p22 --min-parallelism 2 localhost
Делаем паузу прежде, чем перейти к следующему хосту:
# nmap -p22 --scan-delay 5s 192.168.0.0/24
Ограничение на число пакетов, посылаемых в секунду:
# nmap -p22 --min-rate 1 --max-rate 100 localhost
Обновить базу данных скриптов NSE (Nmap Scripting Engine)
# nmap --script-updatedb
Натравляем все скрипты из группы default:
# nmap --script default localhost
Все скрипты, название которых начинается на http
# nmap --script http-* localhost
Не пинговать перед сканированием (при игнорировании ICMP)
# nmap -p22 -P0 localhost
Сохранить результат в файл
# nmap -p22 -o scan.log localhost
Указываем адреса по маске, диапазону, диапазонам, вся сеть по маске 255.255.0.0
# nmap 192.168.*.*
# nmap 192.168.0-255.0-255
# nmap 192.168.1-50,51-255.1,2,3,4,5-255
# nmap 192.168.0.0/16
Обход брэндмауеров
Разные методы сканирования необходимы для обхода IDS (это система обранужения вторжений) и брендмауеров. Для фильтрафии порта брендмауер отбрасывает пакеты ASK, которые отправляются при созднии нового соединения, а пакеты SYN, которые отправляются в рамках текущего соеинения, проходят свободно. А еще есть stateful-брандмауэры. Они более детальнее анализируют приходящие пакеты и могут определить пакеты nmap отправленные в рамках сканировани. Iptables такое умеет, например. А выяснить, какой тип брандмауэра используется, можно, выполнив SYN-сканирование и сразу за ним — ACK-сканирование. Если порты, отмеченные во время SYN-сканирования как filtered, стали unfiltered, значит, перед тобой не stateful-брандмауэр. Кроме того, можно попробовать обойти брандмауэр с помощью изменения номера исходящего порта:
# nmap --source-port 53 192.168.0.1
Это эксплуатация старой как мир ошибки настройки брандмауэра, которая заключается в том, что админ открывает доступ всему входящему трафику (включая протокол TCP) с порта 53, чтобы позволить приложениям беспрепятственно выполнять DNS-запросы. Сегодня такое встречается редко, но, как показывает практика, некомпетентность со временем не исчезает. Кроме всего прочего, в Nmap есть средства для скрытия факта сканирования от глаз брандмауэров и IDS:
# nmap -f 192.168.0.1
В этом случае Nmap будет разбивать пакеты на крохотные фрагменты размером 8 байт. Делает он это в надежде на то, что брандмауэр или IDS не сможет собрать пакет из фрагментов и проанализировать его заголовок (по причине плохой реализации или в угоду производительности) и просто пропустит пакет или отбросит.
# nmap --mtu 16 192.168.0.1
Та же история, только с возможностью контролировать размер пакета (в данном случае 16). Можно использовать против брандмауэров и IDS, которые умеют ловить факты сканирования с помощью Nmap, анализируя размер фрагмента.
# nmap --data-length 25 192.168.0.1
Добавляет в конец пакета указанное количество рандомных байтов. Цель та же, что и в предыдущем случае: обмануть IDS, которая может быть способна обнаружить сканирование, анализируя размер пакета (Nmap всегда посылает пакеты длиной 40 байт при использовании протокола TCP).
Расширение функционала с помощью скриптов.
Nmap поставляется с более чем 500 скриптами, которые могут относиться к одной или нескольким из четырнадцати категорий.
- auth — проверка возможности логина. Например, скрипт ftp-anon пробует выполнить анонимный логин на FTP-сервер.
- broadcast — различные виды обнаружения хостов в сети. Пример: broadcast-upnp-info — скрипт для поиска UPnP-сервисов.
- brute — реализация техник брутфорса паролей. Пример: http-brute — брутфорс паролей от веб-сервера.
- default — скрипты, запускаемые автоматически при указании опции
-A
или-sC
. Обычно это простые быстрые скрипты, собирающие дополнительную информацию о машине, вроде уже приведенного выше ftp-anon. - discovery — практически аналог broadcast. Пример: smb-enum-shares — поиск расшаренных с помощью протокола SMB дисков.
- dos — скрипты для организации DoS-атак. Пример: smb-vuln-regsvc-dos — выводит из строя Windows 2000 путем эксплуатации уязвимости MSRC8742.
- exploit — эксплуатация или проверка на уязвимость. Пример: smb-vuln-ms06-025 — проверка машин Windows на уязвимость MS06-025.
- external — скрипты, использующие внешние ресурсы для получения дополнительной информации о машине. Пример: whois.
- fuzzer — скрипты, посылающие удаленной стороне неожиданные и неправильно сформированные данные с целью поиска уязвимостей или попытки выполнить DoS. Пример: dns-fuzz.
- intrusive — скрипты, выполняющие активные действия в отношении машины. Пример: snmp-brute — брутфорс SNMP-сервера.
- malware — проверка на зараженность машины вирусами и бэкдорами. Пример: smtp-strangeport — поиск SMTP-сервера на нестандартном порте, что может быть свидетельством заражения машины трояном, рассылающим спам.
- safe — «безопасные» скрипты, которые не совершают активных действий в отношении машины, не забивают канал пакетами и не эксплуатируют уязвимости. Пример: ssh-hostkey — получает публичные ключи SSH-сервера.
- version — получение версий работающих служб. Пример: pptp-version — выводит на экран дополнительную информацию о PPTP-сервере.
- vuln — проверка служб на уязвимости.
Если указать опции -A
или -sC
, скрипты категории default
будут запускаться автоматически. Все скрипты расположены по пути: /usr/share/nmap/scripts и ты можешь сам писать себе скрипты, ну если надумаешь выучить язык Lua.
Шесть состояний порта Nmap
- open — порт открыт.
- closed — порт закрыт.
- filtered — порт фильтруется, неизвестно, закрыт или открыт.
- unfiltered — порт не фильтруется, неизвестно, закрыт или открыт (такой результат может дать только ACK-сканирование).
- open|filtered — порт либо открыт, либо фильтруется.
- closed|filtered — порт либо закрыт, либо фильтруется (такой результат может дать только Idle-сканирование).
Также рекомендую добавить плагин vulners, который при сканировании с флагом -sV соберет известные уязвимости для сервиса, работающим на этом порту.