• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Время сказки - Nmap -

SlipX

dd if=/dev/random of=/dev/port
Green Team
13.08.2017
135
167
BIT
0
Эта тема сидит над душой уже долгое время.

Много написано о nmap-е, многие гайды и руководства были переписаны. Я думаю, это потому что люди не до конца понимают все возможности nmap-а.

И смотрят на него как на инструмент сбора, а не на явный инструмент атаки.

Люди предпочитают сосредоточиться на таких инструментах, как metasploit, хотя этот инструмент лежит в основе почти каждого Pentest-ера, Security Review-ера, и т,д.

В этой статье я попытаюсь осветить основные принципы инструмента.

Предупреждение: это не очередной Sheet Cheat или руководство с готовыми командами.
Я постараюсь углубится в трафик, который "бежит" за инструментом, и что это означает для нашего сканирования.

Знания, необходимые для максимальной эффективности статьи: Понимание IP, TCP и UDP.


"Способы подключения"

У nmap-а много способов "подключения" .
Эти инструкции "говорят" инструменту как подключится к определенным портам.
Начнем с рассмотрения основных методов сканирования nmap.

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

В классической конфигурации стандартного TCP-соединения мы фактически выполняем две посылки и одно получение.
Первый запрос, будет запрос SYN, этот "запрос" на самом деле просто означает, что мы "включили" бит, который говорит, что этот запрос является запросом SYN.
Если на другой стороне есть программное обеспечение, которое "слушает "запросы на соответствующем порту, то оно отправит обратно пакет и "включит" бит, который говорит ACK \ SYN или на "русском" : я готов общатся.
После получения пакета мы отправим обратно пакет ACK (опять же, просто бит в заголовке пакета), а затем мы сможем начать "разговор" по TCP.
Это известный процесс Three Way Handshake, который выполняется при каждом TCP-соединении для начала "разговора".

При использовании способа TCP Connect мы производим полное подключение ко всем портам которые сканируем.

Этот метод обозначается аргументом -sS, он уже стал стандартным способом и в прошлом назывался скрытым (stealth), но сегодня это верно только частично.
Этот способ использует частичное "рукопожатие" из того, что обсуждалось в выше.
Здесь мы отправим пакет SYN, опять же если на другой стороне есть кто отвечает, то получим ACK \ SYN, но отправлять обратно пакет ACK мы не будем, таким образом не установив Three Way Handshake.
Многие FireWall-ы пали, а причина тому, то что они основаны на правилах (RuleBase), если настроено правило, то FireWall будет ему следовать.

К примеру, в rulebase настроено, что если былы TCP Connect-ы к более чем 10-ти портам, то значит это "Scan" и этот IP будет заблокирован.

Использовав способ TCP SYN мы не попадаем под это правило.

Объединим несколько различных способов водно сканирование.
FIN -sF - "включит" бит, который говорит, что этот запрос является запросом FIN. (конец "разговора")
NULL -sN - не устанавливает никаких битов в заголовке пакета. (TCP flag header = 0)
XMAS -sX - "включит" биты: URG, FIN и PUSH.

Сегодня мы видем множество FireWall-ов и IDS/IPS, разбросанных почти позади каждой организации, на которую мы смотрим.

Идея этих сканирований заключается в том, что системы (FireWall, IPS/IDS), которые получают запросы TCP для закрытых портов, должны отвечать пакетом RST, в то время как на открытые порты, которые получают такие запросы (без начального подключения), реагируют дропом пакета или вообще не реагируют. (При условии что система соблюдает RFC793 TCP/IP)

Сканирование портов UDP - очень важная процедура, на которую многие тестировщики не обращают внимания.
Как и порты TCP, UDP порты обеспечивают нам дальнейшее понимание системы.
В некоторых случаях из-за "дизайна" UDP "stateless" мы получаем интересные возможности атаки или средства идентификации инструментов, которые используют UDP.
Кроме того, есть службы, которые могут быть критическими точками в тестировании, такие как SNMP, который использует порт 161 в UDP.

Так как UDP stateless, мы не можем знать порт открыть или нет, но система(таргет) помогает нам.
Когда мы сканируем аргументом -sU, мы отправляем 0-байтные сообщения UDP, если порт открыт, мы можем видеть отсутствия ответа, если порт закрыт, операционная система ответит нам и выведет : ICMP Port Unreachable.

Здесь у нас есть три ньюанса:

Во-первых, когда FireWall блокирует сообщения ICMP Port Unreachable, мы можем ожидать, что nmap вернет нам результаты false-positive.

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

В-третьих, Windows не ограничивает эти ответы, так что работать можно быстрей.


В этом типе сканирования (аргумент -sO) - мы пытаемся выяснить, какой IP протокол поддерживается. Чтобы достичь этого, nmap отправит "пустые" сообщения во всех типах протоколов, чтобы увидеть ответ.
Если ответ представляет собой сообщение ICMP с недостижимым протоколом, мы будем знать, что протокол не поддерживается. Обратите внимание, что многие FireWall-ы не пропускают эти сообщения, и результат может быть false-positive.

Сканирование ACK будет использоваться в основном для понимания FireWall-а.

Если цель получает пакету ACK напрямую, не устанавливая ранее TCP-соединение, ответ должен быть пакетой RST.
Результаты зависят от того, получам ли мы этот ответ RST.

Если мы не получили пакет RST, тогда что-то заблокировало его.

Дополнительная информация

Тайминг - например, параллельные соединения, которые nmap может удерживать в направлении сканируемого устройства, количество портов, с которыми nmap будет "разговаривать" одновременно, интервал между пакетами тд.
-T0
Конечно, мы все хотим использовать только этот режим, но это означает, что nmap будет ждать около 5 минут между пакетами, сканирование одного таргета с 65 000 портов займет около 255 дней.

Это сканирование, вероятно, будет интерпретироваться по многим регистраторам, и любой FireWall будет рассматривать его как незначительный фоновый шум.

-T5
Сканирование T5 существует, но я не рекомендую его. Вы можете потерять большое количество информации и, получить слишком много false-positive, и нужно иметь очень быстрое соединение.

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

Когда мы включаем флаг sV, мы говорим nmap сделать связь и попытатся понять, что за сервис стоит там.
Сначала попытается исполнить "Banner Grabbing", потом nmap попробует, узнать, какой тип сервиса порт имеет, отправляя в соответствии с типом порта или запросы в других протоколах, пока он не сможет идентифицировать сервис.
Если nmap не распознает сервис протокола, мы увидим знак "?" рядом.

Обнаружение ОС

Это не всегда точное обнаружение операционной системы, но NMAP будет пытаться соответствовать ядру "кернель"
[doublepost=1511575811,1511575740][/doublepost]
Путаница врага

Decoy Scan - Этот метод обозначается аргументом -sS, это сканирование подделывает сканирование с дополнительных адресов, nmap не скроет ваш реальный адрес, но будет загружать многие другие адреса.

Фрагментация - это не функция nmap, а метод "разбиения" пакетов в сети.
Есть сети где размер MTU (Maximum Transfer Unit) разные, MTU представляет размер пакеты которую сеть может "передать", при движении между сетями, размер MTU может изменится, когда пакет достигает сети, где MTU меньше, то пакет будет разделен на два( или меньше), на первой пакете включается флаг фрагментация IP, указывая что на пути еще пакеты.
Одним из лучших методов сканирования является разбиение пакетов на более мелкие пакеты. Многие из устройств защиты не знают, как соединять IP Fragmentation куски,но просматривать (куски)пакету отдельно и, следовательно, не поймут смысл всей пакеты
Код:
nmap -f (fragment packets); --mtu (using the specified MTU)

Смена порта источника

У каждого FireWall-а есть исключение (особая ситуация) Пакеты с определенных адресов определяются как пакеты, которые можно пропускать и не имеют проблем.

Одно из правил, которое много раз ставится для предотвращения проблем, заключается в том, что пакеты, которые зашли через порт HTTP (80), являются пакетами, которые возвращаются с определенного сайта и разрешены.

Код:
nmap --source-port <portnumber>; -g <portnumber>

Расширения и добавки

В Nmap есть --script и script-args , чья цель - включить запуск рсширений и добавок для nmap.

К примеру скрипт на брут sql
Код:
nmap -p 1433 --script ms-sql-brute --script-args userdb=users_list.txt passdb=pass_list.txt ip-range

Если мы хотим найти цели в сети совершенно тихим способом, мы можем выполнить "Passive Scan"
Идея заключается в том, чтобы запускать NMAP для прослушивания пакетов, отправленных как broadcast в сети, преимущество такого сканирования заключается в том, что оно является полностью пассивным, тоесть FireWall его не видят.

Код:
nmap --script broadcast-listener --script-args timeout=<seconds>



Заключение

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

ghost

Grey Team
12.05.2016
1 636
3 286
BIT
0
Что да то да :) по nmap было горы всего написано
 
  • Нравится
Реакции: SlipX
P

poor_angel:~$

сначала whatweb потом proxychains nmap -F -D RND:10 ( или лучше конкретные адреса чтобы и запутать) <адрес>
и затем определяю ОС: proxychains nmap -O -f -D RND:10 <адрес>
-f - разбиение пакетов
но это самый простой вариант так как были и более сложные варианты nmap - отличная программа
 

SooLFaa

Platinum
15.07.2016
898
1 559
BIT
18
Итак? призываю все группы оценивать статью с помощью систем репутации, "Мне нравится" или комментариев.
Отныне, просто состоять в группе мало для того, чтобы в ней оставаться. Ваша задача, так же наставлять авторов и оценивать их.
Критерии:
Статья достойна репутации +1 балл
Статья отстой и/или не соблюдены правила -1 балл
Статья неплохая, но на репу не катит - поставить лайк - оставить комментарий.
Статья нейтральная не г***о но и не шедевр - оставить комментарий.

Grey
@a113
@AL04E
@Celestial
@d7uk4r3v
@DoberGroup
@ghost
@Ishikawa
@JuicyBrute
@koldonuuchu
@MAdDog719
@nemainthium
@Underwood
@Vertigo
@WIPE
Red
@Dr.Jo.Frink
@Dr.Lafa
@grapf92
@id2746
@IioS
@Ondrik8
@r1991omen
@Sniff
@z3RoTooL
Eleet
@ghostphisher
@kot-gor
@PingVinich
@SooLFaa
@Vander
@~~DarkNode~~
 
  • Нравится
Реакции: SlipX

ghostphisher

местный
Grey Team
07.12.2016
2 602
3 413
BIT
0
По статье - уважение за первый шаг к стат.мейкингу заслуживает [мне нравится].

Бал выдам, если ТС продолжит описание nmap как минимум с скриншотами (своими ), сделает серию статей, потому как nmap не просто сканер портов - описать скрипты подробно и с применением.Для вводной статьи поверзностно упомянуть норм, для понимания сути нет.

особое пожелание автору - создать свою лабу, и при помощи сканера показать основные моменты работы брута, поиска той же SMB дыры на 445 порт, детект WAF.
 
  • Нравится
Реакции: <~DarkNode~> и Vertigo

mCstl

Green Team
08.08.2017
83
71
BIT
0
Похоже на неполную страницу мануала. И самого интересного с этой страницы тут нету. Я бы с удовольствием почитал бы про опции: -sI, -sW, -b, -sM, да и просто описание описание флагов бы не помешало. Понимаю что с ними и так все понятно, но так можно и про основные опции nmap сказать, а это описание помогло бы в самостоятельном составлении запросов с помощью ключа --scanflags. И картинки, результатов, транспорта пакетов, как и куда они идут то же было бы не плохо.
Вообще тема очень большая, трудно её описать в одном посте.
 
  • Нравится
Реакции: Valkiria
P

poor_angel:~$

интересная задачка ( несколько раз встречал - но сам пока еще не решал не пробовал:
Internal Interface - LAN (10.0.1.1)
External Interface - WAN (10.7.1.101)

определить порты TCP & UDP
и вообще что за организация
если кому интересно или кто владеет техникой - поделитесь интересно посмотреть на варианты
 
Последнее редактирование модератором:
V

Valkiria

Пользуясь случаем, хочу задать вопрос всем, кто на "ты" с программой nmap.
Какую команду необходимо задать программе для решения следующей задачи.

Имеется диапазон IP.
В этом диапазоне имеются компьютеры, подключение по протоколу RDP к которым, осуществляется на нестандартных и неизвестных мне портах (1754,2587 вместо 3389)
Нужно вычислить эти порты.


Вопрос: какую команду необходимо задать программе nmap, чтобы выявить открытые порты для подключения по протоколу RDP в заданном диапазоне IP ?

Заранее благодарна :) всем отозвавшимся ))
 
P

poor_angel:~$

Пользуясь случаем, хочу задать вопрос всем, кто на "ты" с программой nmap.
Какую команду необходимо задать программе для решения следующей задачи.

Имеется диапазон IP.
В этом диапазоне имеются компьютеры, подключение по протоколу RDP к которым, осуществляется на нестандартных и неизвестных мне портах (1754,2587 вместо 3389)
Нужно вычислить эти порты.


Вопрос: какую команду необходимо задать программе nmap, чтобы выявить открытые порты для подключения по протоколу RDP в заданном диапазоне IP ?

Заранее благодарна :) всем отозвавшимся ))
а вы напишете ваш ip -а я протестирую
вообще то все порты показывают - другое дело что возможно и достаточно часто service unknow ( неизвестен ) админы бывает что хитрят и перекидывают например ftp порт на другой какой нибудь 8081 к примеру
nmap -sS -sV -vv -n -Pn -T5 <adress> -p1-65535 -oG -| grep 'RDP' - но я не пробовал ( как вариант)
то есть я буду сканировать все порты на выявление RDP
 
Последнее редактирование модератором:

mCstl

Green Team
08.08.2017
83
71
BIT
0
:
Пользуясь случаем, хочу задать вопрос всем, кто на "ты" с программой nmap.
Какую команду необходимо задать программе для решения следующей задачи.

Имеется диапазон IP.
В этом диапазоне имеются компьютеры, подключение по протоколу RDP к которым, осуществляется на нестандартных и неизвестных мне портах (1754,2587 вместо 3389)
Нужно вычислить эти порты.


Вопрос: какую команду необходимо задать программе nmap, чтобы выявить открытые порты для подключения по протоколу RDP в заданном диапазоне IP ?

Заранее благодарна :) всем отозвавшимся ))


Nmap не сканирует сервиса по названию во всяком случае обычными опциями. Если очень топорно то можно сделать так:
Код:
nmap -T5 -p500-6000 -Pn -iL /root/diapazon.txt --max-retries 3 --min-hostgroup 100 --max-hostgroup 600 --host-timeout 180s | grep -B 7 'serv' | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}"
Порты от 500 до 6000 думаю где то между этим диапазоном и будет RDP. Попытки и группы нужны т.к. если что то повиснет то весь результат пропадет.
Grep serv потому что удаленные сервера обычно в сервисах awk{$3} называются например так "ms-wbt-server" в диапазоне примерно 7 строк будет ip который нужен, можно увеличить, -B 10. В конце стоит регулярное выражение для ip. Если очень нужно то работать будет. Но вообще руками все это смотреть нужно.
Хотя всегда есть правильный путь, например разобраться со скриптовым языком nmap и почитать скрипты которые конкретно расширяют функционал сканера.



 

Elbor

New member
19.11.2017
1
0
BIT
0
Доброго времени.

Ув Valkiria, у Вас получилось реализовать правильный синтаксис grep_а конкретных служб/сервисов с нестандартных портов ?
Быстрый скан с выявлением только определённой/указанной службы на любом из портов...
(например SSH 22334)
Пересмотрел и перечитал много манов и гугла, вроде рядом но не то.
Я так понимаю всё упирается в -sV, а он "дотошно-долгий" при переборе всех портов (по порядку или как укажешь).
Как заставить фильтровать/искать только вышеобозначенное ?

nmap -T5 -p500-6000 -Pn -iL /root/diapazon.txt --max-retries 3 --min-hostgroup 100 --max-hostgroup 600 --host-timeout 180s | grep -B 7 'serv' | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}"

Так тоже не заводится в разных комбинациях.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!