# 2. Практическая работа “Nmap”. Базовые возможности > ### Выполнил Тихонов Артём!!! ББСО-01-22 ### **Цель работы:** * Научиться работать с NMAP ## 1. Базовые возможности Для начала стоит определится с тем как запускать **nmap**. В зависимости от прав пользователся, **nmap** реализует TCP подключения по разному. Если root права отсутствуют, используется системный вызов connect(), в обратном случае **nmap** берет реализацию целиком на себя. В чем преимущество? В отсутсвии логгирования на стороне сервера и увеличении производительности.</p> По умолчанию **nmap** сканирует стандартные порты, однако это совсем не эффективно, так как порты сервисов можно перенастроить. Проведем скан портов в диапазоне 1-5000 используя TCP SYN ![](https://i.imgur.com/hrbJhi9.png) ### 1.1 Определяем название и версию сервиса на порте **nmap** способен определить имя службы, работующей на порте, однако результат не гарантирован. ![](https://i.imgur.com/JD1PtKw.png) Мы смогли получить версии двух из трех сервисов. Этого уже достаточно, чтобы сказать, что конечная машина - Raspberry pi. ## 2. Определяем имя и версию ОС Для более подробного исследования OC удаленной машины будем использовать ключ -O. Данное исследование базируется на определенных паттернах, таких как время ответа и значения TCP флагов. ![](https://i.imgur.com/VmQOt6F.png) Чтобы провести более детальный анализ служб с помощью скриптов NSE, используем ключ -A ![](https://i.imgur.com/PMRdeL9.png) ## 3. Повышаем скорость сканирования Для настройки агрессивности сканирования можно воспользоваться ключем -T (0-5), где 0 - самое скртыное, а 5 - самое агрессивное сканирование (задержка менее 5 мс). ![](https://i.imgur.com/sbDBaGe.png) ## 4. Скрываем следы Увеличение задержки между пробором портов - не единственный способ запутывания IDS. С помощью ключа -D можно запустить дополнительные потоки сканирования с фиктивными IP адресами возврата ![](https://i.imgur.com/MJMfbvM.png) Обратим внимание на отправляемые пакеты ![](https://i.imgur.com/Z3SJj7O.png) Еще более изощренным способом сокрытия следов - idle сканирование. Этот метод базируется на недостатке старых OC, инкрементирующих IPDC, поэтому техника не практична. ## 5. Обходим IDS и брандмауэры **nmap** может обнаружить брандмауэр даже без использования специальных параметров, так как по умолчанию используется TCP SYN сканирование. Обычно вместо отправки FIN пакета при попытке подключения к закрытому порту брандмауэр просто не отправляет ответ. **nmap** отслеживает, при пробе каких портов не было получено ответа, и помечает эти порты filtered. Еще одна техника обнаружения брандмауэра заключается в том, чтобы заставить **nmap** генерировать «невероятные пакеты», такие как NULL-пакеты (-sN), FIN-пакеты (-sF) и Xmas-пакеты, содержащие флаги FIN, PSH и URG (-sX). RFC описывает все эти ситуации, поэтому любое расхождение с RFC **nmap** интерпретирует как наличие брандмауэра. Многие брандмауэры блокируют новые TCP подключения, но они также обязаны пропускать существующие. Поэтому при помощи последовательной отправки SYN и ACK пакетов возможно точно определить наличие брандмауэра. ![](https://i.imgur.com/fpFTU5Y.png) Однако есть stateful-брандмауэры, отслеживающие состояние TCP соединений, определяющие какие соединения были открыты на самом деле. В данном случае ACK пакет был пропущен, значит это не stateful-брандмауэр. Для скрытия факта сканирования от IDS можно воспользоваться методом фрагментации запросов (-f), в надежде на то, что запрос не будет собран воедино. TCP заголовок запроса будет разбиваться по 8 байт. ![](https://i.imgur.com/lUvKJ1F.png) ![](https://i.imgur.com/uosKqwl.png)</p> Либо можно выставить размер TCP заголовка по своему желанию. ![](https://i.imgur.com/r9YlpGz.png) ![](https://i.imgur.com/WJFyRIi.png)</p> Некоторые IDS определяют факт сканирования по размеру пакета, поэтому в **nmap** предусмотрена возможность (--data-len) добавления случайных данных указанной длинны в пакет ![](https://i.imgur.com/DjlwO2v.png) ![](https://i.imgur.com/CtMA7xj.png) Кроме сканирования портов и исследования брандмауэров **nmap** подходит для поиска машин в сети. **nmap** имеет следующие типы сканирования: * ICMP Echo request (-PE) * SYN-пакет (-PS) * ACK-пакет (-PA) * ICMP timestamp request. (-PP) * UDP-пакет (-PU) Проверку доступности легко отключить, используя опцию -PN, о чем сам Nmap сообщит, если не сможет удостовериться в доступности порта ![](https://i.imgur.com/XvlixAP.png) Обычно в этом мало смысла, а вот обратная операция, то есть отключение сканера портов, очень даже полезна для проверки доступности множества хостов: ![](https://i.imgur.com/kOIipgJ.png) А так можно попросить **nmap** просканировать всю подсеть: ![](https://i.imgur.com/aqTkC1v.png) Типы сканирования можно комбинировать в одной команде ![](https://i.imgur.com/xI218Eh.png) Относительно новая фишка **nmap** — поддержка скриптов, расширяющих функциональность сканера. **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 будут запускаться автоматически. Для запуска скриптов других категорий можно использовать опцию --script. ![](https://i.imgur.com/iSz5C4i.png) ![](https://i.imgur.com/fQSNPmP.png) ## 6. Поднимаем веб-сервер В комплекте с **nmap** идет ncat - аналог netcat. С его помощью можно запустить простейший веб сервер. ![](https://i.imgur.com/E6QVwdg.png) Проверим работоспособность сервиса в браузере ![](https://i.imgur.com/1swbMpc.png) ### **Выводы:** * В ходе выполнения практической работы были изучены основные возможности NMAP, такие как: * сканирование портов * исследование брандмауэров и их обход * сканирование сетей * запуск встроенных скриптов * запуск простейшего web сервера