• XSS.stack #1 – первый литературный журнал от юзеров форума

Masscan и ложные срабатывания

Ar3s

Старожил форума
Легенда
Регистрация
30.12.2004
Сообщения
3 357
Реакции
1 404
Всем привет. Столкнулся с интересным эффектом.
Пишу статейку одну и надо было для нее набрать сотню-другую сервисов висящих на определенном порту.
По привычке запустил masscan. Быстренько собрал лист, запустил чек и немного обалдел.
Скажем так. Из 5 сотен найденных открытых портов реально рабочими было штук 7. Остальные были закрыты.
Подскажите кто пользуется сканером - это нормально для него, аль я что-то не так делаю?
Код:
masscan -p8001 0.0.0.0-50.0.0.0 --rate=2000 -oG result.txt
Проверяю открытые порты обычным питоном
Python:
def isOpen(ip):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.settimeout(timeout)
    try:
        s.connect((ip, port))
        s.shutdown(socket.SHUT_RDWR)
        return True
    except:
        return False
    finally:
        s.close()
 
Может дело в SYN запросах от masscan? На подключение по сокетам ось может реагировать по разному.
Какие результаты nmap, rustscan дают?
 
Не тестил их. Но обычный курл говорит "закрыто".
У меня кончились варианты, разве, что попробовать свой SYN сканер на питоне) https://coderoad.ru/39024816/
 
У меня кончились варианты, разве, что попробовать свой SYN сканер на питоне) https://coderoad.ru/39024816/
Теряется эффективность. Расчет был на то что масскан очень быстро находит таргеты, передает в скрипт, скрипт отсеивает сервисы не попадающие под шаблон.
Скорость работы масскана и питона сравнивать не приходится.
 
Теряется эффективность. Расчет был на то что масскан очень быстро находит таргеты, передает в скрипт, скрипт отсеивает сервисы не попадающие под шаблон.
Скорость работы масскана и питона сравнивать не приходится.
masscan
--open: Показать только открытые (или возможно открытые) порты
 
Он и так их показывает как открытые
# Masscan 1.0.3 scan initiated Tue Apr 27 13:26:45 2021
# Ports scanned: TCP(1;8001-8001) UDP(0;) SCTP(0;) PROTOCOLS(0;)
Host: 43.243.47.2 () Ports: 8001/open/tcp////
Host: 45.207.62.123 () Ports: 8001/open/tcp////
Host: 49.255.248.178 () Ports: 8001/open/tcp////
Host: 45.41.81.28 () Ports: 8001/open/tcp////
Host: 34.80.254.186 () Ports: 8001/open/tcp////
Host: 45.43.224.190 () Ports: 8001/open/tcp////
Host: 45.41.92.40 () Ports: 8001/open/tcp////
Host: 18.163.146.191 () Ports: 8001/open/tcp////
Host: 43.245.41.71 () Ports: 8001/open/tcp////
 
Проверил один ip из списка, показывает сотню открытых портов. Ложные срабатывания возможны по причине настроенного firewall/honeypot на сканируемых адресах. При подозрении проблем с masscan, советую проверить через Nmap отсканированные порты. Можно использовать Zmap, если проблемы с masscan.
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Теряется эффективность. Расчет был на то что масскан очень быстро находит таргеты, передает в скрипт, скрипт отсеивает сервисы не попадающие под шаблон.
Скорость работы масскана и питона сравнивать не приходится.
Вы все же обратите внимание на rustscan ( довольно шустрая вещь по сравнению с аналогами. Лежит тут - https://github.com /RustScan/RustScan ).

  • Scans all 65k ports in 3 seconds.
  • Full scripting engine support. Automatically pipe results into Nmap, or use our scripts (or write your own) to do whatever you want.
  • Adaptive learning. RustScan improves the more you use it. No bloated machine learning here, just basic maths.
  • The usuals you would expect. IPv6, CIDR, file input and more.
  • Automatically pipes ports into Nmap.
 
Просканировал через masscan заданный автором поста код. Через несколько секунд masscan хвастался найденными открытыми портами, их было несколько десятков. Остановил сканер и попробовал проверить один хост через nmap.
Код:
nmap -p8001 xxx.xxx.xxx.xxx
Получил ответ
Код:
Host seems down. If it is really up, but blocking our ping probes, try -Pn
Перевод: Хост, похоже, не работает. Если он действительно работает, но блокирует наши ping-зонды, попробуйте -Pn. Поэтому далее использовал nmap с параметром фрагментирования пакетов, чтобы обойти систему обнаружения.
Код:
nmap -p8001 -f  xxx.xxx.xxx.xxx
Попытка увенчалась успехом и nmap отобразил.
Код:
8001/tcp filtered vcom-tunnel
Значит сервер защищён, поэтому точно понять так просто открыт порт или нет, не получится. Masscan не понял ответ от firewall и поэтому решил, раз порт отвечает, значить он открыт. Попытался найти в нём какую то полезную команду по обходу брандмауера, не нашёл. При том, что он обещает интеграцию с nmap командами, но каждый раз выдаёт нелепые ошибки о его отличительных методах обнаружения.

KAJIT Можешь описать его отличительные способности сканирования? Мельком глянул сравнение с другими популярными сканерами.
r1.png
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Можешь описать его отличительные способности сканирования?
Он используется для предварительного составлениея диабазонов айпи с открытыми портами. Его отличие от nmap-а в том что они там переписали по своему работу со стеком TCP\IP. ТС если у Вас предполагается скан хорошо защищенных таргетов - быстро сделать это не возможно.Вообще растскан это обертка вогруг nmap-a, оно ускоряет процесс, но качество падает.
 
Последнее редактирование:
Всем привет. Столкнулся с интересным эффектом.
Пишу статейку одну и надо было для нее набрать сотню-другую сервисов висящих на определенном порту.
По привычке запустил masscan. Быстренько собрал лист, запустил чек и немного обалдел.
Скажем так. Из 5 сотен найденных открытых портов реально рабочими было штук 7. Остальные были закрыты.
Подскажите кто пользуется сканером - это нормально для него, аль я что-то не так делаю?
Код:
masscan -p8001 0.0.0.0-50.0.0.0 --rate=2000 -oG result.txt
Проверяю открытые порты обычным питоном
Python:
def isOpen(ip):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.settimeout(timeout)
    try:
        s.connect((ip, port))
        s.shutdown(socket.SHUT_RDWR)
        return True
    except:
        return False
    finally:
        s.close()
Это нормально что masscan фильтруемые порты отправляет в открытые, поскольку он работает по технике TCP SYN сканирования, которое не всегда корректно работает на открытых/фильтруемых портах , в твоем случае, я бы просто прогонял файл result.txt через nmap с добавлением флагов на выбор -sA, -sN, --scanflags, в этом случае кореектно отоборазятся открытые/фильтруемые порты, но по времени так себе
Код:
masscan 0.0.0.0-50.0.0.0 -p8001 -Pn -n --rate=2000 --open | awk {'print $6'} | awk -F/ {'print $1'} > results.txt
Код:
nmap -iL results.txt -p8001 -sA --open >open.txt
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Проверяю открытые порты обычным питоном
Python:
def isOpen(ip):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.settimeout(timeout)
    try:
        s.connect((ip, port))
        s.shutdown(socket.SHUT_RDWR)
        return True
    except:
        return False
    finally:
        s.close()
Функция на питоне для использования масскан

Python:
def mass_scaning(input_file, output_file):
    print(tcLtBL  + " Очевидным является факт, что сканирование возможно при указании пользователем\n номера сканируемого порта и количества потоков." + tcRESET)
    port = str(input_port())
    rate = str(input_rate())
    fraza = " Начинаю сканирование CIDR-диапазонов из файла \"" + input_file + "\" на наличие открытого порта: " + port + "."   
    for i in range(len(fraza)):
        sleep(0.04)
        print(tcDkG + fraza[i] + tcRESET, end='', flush=True)           # Красивая декоративная горизонтальная надпись
    masscan_cmd = (" sudo masscan -iL " + input_file + " --open --rate " + rate + " -p" + port + "| awk '{print $6 \":\" $4}'| cut -d/ -f1 >> " + output_file)                                 
    check_call(masscan_cmd, shell=True) 
    sleep(1)
Но эта функция потянет за сосбою зависимости. Думаю, нет смысла выкладывать полностью весь код - ведь в этом нет нужды.



Скрипт для проверки всех портов удалённого хоста на наличие открытых портов.
Python:
def scan_allport_socket(target_ip, min_port, max_port, good_file):
    """ Многопоточное TCP - cканирование портов с использованием socket + ThreadPoolExecutor """

    def socket_TCP_scan(target_port):
        """ TCP - cканирование портов с использованием модуля socket """
        sock = socket(AF_INET, SOCK_STREAM)                             # Cоздаем сокет
        sock.settimeout(1.5)                                            # Устанавливаем таймаут, чтобы скрипт не приостанавливался, если сокет открыт:
        try:
            print("{0:>72}".format(target_port), end = '\b' * 72, flush = True)     # Выводим информацию о сканируемом сокете
            print(" Cканирую порт:" + " " * 50 + "|", end = '\b' * 66, flush = True)
            sock.connect((target_ip, target_port))                      # подключемся к серверному сокету
                                                                        # возвращает 0, если соединение установлено успешно, иначе возникает ошибка
            print("{0:65}| {1:<15}".format(" Обнаружен открытый порт: ", str(target_port)))                 # Выводим информацию на экран           
            sock.close()                                                # останавливаем прослушивание и освобождаем порт
            target_port_list.append(target_port)                        # добавляем открытый порт в список target_port_list
            with open(good_file, 'a+') as f:
                print("{0:65}| {1:<15}".format(" Обнаружен открытый порт: ", str(target_port)), file = f)   # Записываем информацию в файл
        except Exception as err:
            pass

    fraza = tcDkG + " Начинаю поиск открытых портов." + tcRESET + "\n"
    for i in range(len(fraza)):
        sleep(0.02)
        print(fraza[i], end='', flush = True)                           # Красивая декоративная горизонтальная надпись
    print("{0:65}| {1:<15}".format(" При сканировании используется модуль", "socket"))
    print("{0:65}| {1:<15}".format(" Ждите. Производится сканирование портов: ", str(min_port) + "-" + str(max_port)))
    with ThreadPoolExecutor(max_workers = 10) as executor:
        executor.map(socket_TCP_scan, [port for port in range(min_port, max_port + 1)]) #### socket_TCP_scan

    fraza = tcDkG + " Собираю баннеры открытых портов." + tcRESET + "\n"
    for i in range(len(fraza)):
        sleep(0.02)
        print(fraza[i], end='', flush = True)                           # Красивая декоративная горизонтальная надпись
    for target_port in target_port_list:
        banner = grab_banner(target_ip, target_port)
        print("{0:65}| {1:<15}".format(" Порт " + str(target_port) + " :", banner))
        with open(good_file, 'a+') as f:
            print("{0:65}| {1:<15}".format(" Порт " + str(target_port) + " :", banner), file = f)   # Записываем информацию в файл
]
 
Его отличие от nmap-а в том что они там переписали по своему работу со стеком TCP\IP
Где они его переписали? Я вижу сокеты из stdlib
 
Зачем вообще сравнивать несравнимое? nmap это комбайн из кучи техник, rustscan - сканер портов, который может дёрнуть nmap.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Я вижу сокеты из stdlib
Все верно мэн - ты абсолютно прав - путаю я, щас пошел сам посмотрел. У меня в голове почему - то, такая мысля была, что они юзают либу - PF_ring - тоже очень шустрая вещь - это не так. PF_RING библиотека используется имено в масскане ( хотя эти ребята и пишут мол - NOTE: masscan uses its own ad hoc TCP/IP stack).
Зачем вообще сравнивать несравнимое
Сравнить все-таки можно тк в этих тулзах есть функции, реализующие почти одну и туже логику, написаные на раздных ЯП, но вот толку то от этого, чтоб узнать кто лучше справляется с определенной задачей надо тестить обе софтины в боевых условиях именно на конкретной. Ведь результат сканирования же не только от сканера зависит а от таргета также.
corax Хотел поинтересоваться у тебя у тебя кто из них с waf-om лучше бореться мб знаешь ты, но это глупый вопрос все опять от конкретного кейса зависит везде условия разные(фрагментация сети\настройки файерволла\таблицы маршрутизации). Я пока для себя усек наверняка один момент сканить курупные диабазоны ---> нужно десяток не одна и не две машины, а 3 - 5 хотя бы.
 
KAJIT да никто ни с кем не борется, ни с waf, ни с обычным firewall'ом. nmap умеет анализировать пакеты, masscan/rustscan не умеет и от него это не требуется.
Не надо собирать ботнет чтобы сканить диапазоны, masscan хорош именно на пиздатом оборудовании с подключением в магистраль. А наш человек, в лучшем случае, сканит на гигабите. Это как забивать гвозди микроскопом.
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
да никто ни с кем не борется, ни с waf, ни с обычным firewall'ом.
точняк - лучше и не скажешь. одна софтина(nmap) - анализирует пакет детально, масскан\растскан - чекает простой логикой.
 
Вы все же обратите внимание на rustscan
RustScan, пропускает на 60% меньше, по заявлениям очевидцев)
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх