Masscan

Masscan

https://telega.at/blackhat25

Это массовый сканер IP портов. Это самый быстрый сканер портов Интернета. Отправляя 10 миллионов пакетов в секунду, он может сканировать весь интернет за 6 минут. Этот инструмент полезен для обзора сетей большого масштаба — таких как Интернет или внутренние сети. Хотя скорость по умолчанию ограничена 100 пакетами в секунду, программа может разгоняться до 25 миллионов пакетов в секунду, при такой скорости весь (по одному порту на IP) Интернет будет просканирован за 3 минуты.

Он создаёт результат схожий с nmap, самым знаменитым сканером портов. Внутри он работает подобно scanrand, unicornscan и ZMap, используя асинхронную передачу. Главным отличием является то, что он быстрее этих сканеров. Дополнительно, он более гибкий, позволяет произвольные диапазоны адресов и портов.

Masscan использует кастомный (специально изготовленный) TCP/IP стек. Любое другое, что выходит за пределы простого сканирования, приведёт к конфликту с локальным TCP/IP стеком. Это означает, что вам либо нужно использовать опцию -S для использования раздельных IP адресов, либо настроить операционную систему так, чтобы файервол обрабатывал порт, который использует masscan.

Домашняя страница: https://github.com/robertdavidgraham/masscan


Справка по Masscan

Использование:

masscan <ip адрес/диапазон> -p порты опции

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

Чтобы просканировать порт 80 и диапазон портов с 8000 по 8100 (всего 102 порта) сети 10.x.x.x на скорости 10 тысяч пакетов в секунду наберите команду:

masscan -p80,8000-8100 10.0.0.0/8 --rate=10000

Программа поддерживает некоторые опции совместимые с nmap. Чтобы их увидеть наберите:

masscan --nmap

Для сохранения результатов в бинарном формате в <имя_файла> сделайте так:

masscan -p80 10.0.0.0/8 --banners -oB <имя_файла>

Прочитать результаты сканирования из бинарного файла <имя_файла> и сохранить их в формате xml <файл для сохранения>:

masscan --open --banners --readscan <имя_файла> -oX <файл для сохранения>

Для сканирования порта 80 (здесь разные веб-сервера, роутеры, файловые хранилища, веб-камеры и другая похожая «утварь») сети 10.x.x.x с дефолтной скоростью отправки пакетов (100 пакетов в секунду)

masscan 10.0.0.0/8 -p80

Программа автоматически определяет настройки интерфейса/адаптера, если это не произошло вы должны установить их вручную Это пример всех параметров, которые нам нужны:

--adapter-ip 192.168.10.123

--adapter-mac 00-11-22-33-44-55

--router-mac 66-55-44-33-22-11

Параметры могут быть установлены как в командной строке, так и в конфигурационном файле. Имена параметров везде одинаковые. В конфигурационном файле эти же настройки выглядели бы так:

adapter-ip = 192.168.10.123

adapter-mac = 00-11-22-33-44-55

router-mac = 66-55-44-33-22-11

Все параметры с одной чёрточкой имеют эквивалент с двумя чёрточками. Так '-p80' это то же самое что и '--ports 80' (или 'ports = 80' в конфигурационном файле).

Для использования конфигурационного файла наберите

masscan -c <имя_файла>

Для генерации конфигурационного файла из текущих настроек наберите опцию --echo. Это остановит программу от обычного запуска и вместо этого она просто напечатает текущую конфигурацию Это полезно для генерации вашего первого конфигурационного файла или для просмотра списка параметров о которых вы не знаете.


Руководство по Masscan

ОПЦИИ

<ip/диапазон>

всё в командной строке, что не имеет префикса ´-´ предполагается IP адресом или диапазоном. Существует три валидных формата. Первый: одиночный IPv4 адрес вроде "192.168.0.1". Второй: диапазон вроде "10.0.0.1-10.0.0.100". Третий: CIDR адрес, вроде "0.0.0.0/0". Должна быть указана хотя бы одна цель. Можно указать много целей. Это можно сделать как несколькими опциями, разделёнными пробелом, или это может быть единичная опция, разделённая запятой, такая как 10.0.0.0/8,192.168.0.1.

--range <ip/диапазон>

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

-p <порты>, --ports <порты>

задаёт порт(ы) для сканирования. Можно указать единичный порт вроде -p80. Можно указать диапазон портов вроде -p 20-25. Можно указать список портов/диапазонов вроде -p80,20-25. Можно указать UDP порты, это делается так --ports U:161,U:1024-1100.

--banners

даёт указания собирать баннеры, такие как версия HTTP серверов, поле заголовка HTML и т. д. Поддерживаются только несколько протоколов.

--rate <пакетов-в-секунду>

указывает желаемую скорость передачи пакетов. Это может быть очень маленькая величина вроде 0.1 ждя передачи пакетов на скорости один в 10 секунд, так и очень большие числа вроде 10000000, при которые программа пытается передать 10 миллионов пакетов в секунду. На опыте автора программы, Windows может передавать 250 тысяч пакетов в секунду, а последние версии Linux могут 2.5 миллиона пакетов в секунду. Для 25 миллионов пакетов в секунду нужен PF_RING драйвер.

-c <имя_файла>, --conf <имя_файла>

читает конфигурационный файл. Формат конфигурационного файла описан ниже.

--resume <имя_файла>

то же самое, что и --conf, кроме того, что некоторые опции устанавливаются автоматически, среди них --append-output. Формат конфигурационного файла описан ниже.

--echo

не запускать, но вместо этого сбросить текущий конфигурационный файл. Этот файл может использоваться с опцией -c. Формат вывода описа ниже в «КОНФИГУРАЦИОННОМ ФАЙЛЕ».

-e <имя_интерфейса>, --adapter <имя_интерфейса>

использовать названный сырой сетевой интерфейс, такой как "eth0" или "dna1". Если не указан, будет использоваться первый найденный сетевый интерфейс с дефолтным шлюзом.

--adapter-ip <ip-address>

отправлять пакеты используя этот IP адрес. Если не указан, то будет использоваться первый связанный с сетью интерфейс. Вместо единичного IP адреса можно указать диапазон. ПРИМЕЧАНИЕ: размер диапазона должен представлять число в степени 2, такой как 1, 2, 4, 8, 16, 1024 и т.д.

--adapter-port <порт>

отправлять пакеты используя этот порт как источник. Если не указан, то будет выбран случайный порт в диапазоне от 40000 до 60000. Этот порт должен фильтроваться файерволом хоста (таким как iptables) для предотвращения прерывания сетевого стека хоста присланными пакетами. Вместо единичного порта, можно указать диапазон вроде 40000-40003. ПРИМЕЧАНИЕ: размер диапазона должен представлять число в степени 2 как в предыдущем примере, где в общей сложности 4 порта.

--adapter-mac <mac-address>

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

--router-mac <mac адрес>

отправлять пакеты на этот MAC адрес как на конечный пункт. Если указан, то адрес шлюза сетевого интерфейса будет отARPтан.

--ping

показывает, что сканирование должно включать ICMP эхо запрос. Его можно включать с TCP и UDP и сканированием.

--exclude <ip/диапазон>

чёрный список IP адресов или диапазонов, этот список не сканируется. Он переписывает любые указания цели и гарантирует, что этот адрес/диапазон не будет просканирован. Имеет тот же формат, что и указание цели.

--excludefile <имя_файла>

читает список исключаемых диапазонов из файла, формат в файле такой же как описанный выше для определения цели. Этот диапазон переписывает любые цели, предотвращая их от сканирования.

--append-output

приводит к тому, что вывод добавляется к файлу, а не перезаписывает этот файл.

--iflist

составить список доступных сетевых интерфейсов, а затем выйти.

--retries

количество попыток для отправки в 1 секундные интервалы. Поскольку сканер «безстатусный», то попытки отправляются независимо от того, получен ли уже ответ или нет.

--nmap

печатает помощь о совместимых с nmap альтернативах этих опций.

--pcap-payloads

читает пакеты из файла libpcap, содержащего пакеты, и извлекает полезную нагрузку UDP и связывает эту полезную нагрузку с портом назначения. Эти полезные нагрузки затем будут использоваться когда отправляются UDP пакеты с соответствующим портом назначения. Только полезная нагрузка будет запомнена для порта. Аналогично --nmap-payloads.

--http-user-agent <user-agent>

при HTTP запросах заменяет существующее поле пользовательского агента на указанное значение.

--open-only

сообщает только об открытых, а не закрытых портах.

--pcap <имя_файла>

сохраняет полученные пакеты (но не переданные пакеты) в файл в формате libpcap.

--packet-trace

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

--pfring

принуждает использовать драйвер PF_RING. Программа завершит работу, если PF_RING DNA драйвер недоступен.

--resume-index

указатель на сканирование, когда оно было поставлено на паузу.

--resume-count

максимальное количество зондов для отправки перед выходом. Это полезно с --resume-index для нарезки и расщепления задачи на множество экземпляров, хотя опция --shards была бы лучше.

--shards <x>/<y>

расщепляет сканирование на экземпляры, x — это id для этого сканирования, а y — общее число экземпляров. Например, --shards 1/2 говорит экземпляру отправлять каждый другой пакет, начиная с индекса 0. Точно так же --shards 2/2 отправляет каждый другой пакет, но начинает с индекса 1, таким образом он не будет перекрываться с первым примером.

--rotate <время>

ротировать файл вывода, переименовывать его в соответствии с текущей временной меткой, отправлять в отдельную директорию. Время может указываться как количество секунд, например "3600" — это один час. Или могут быть указаны единицы времени, такие как "hourly" или "6hours" или "10min".

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

--rotate-offset <время>

сдвиг по времени. Это подстройка под временные зоны.

--rotate-dir <директория>

при ротации файлов, она указывает, в какую директорию перемещать файл. Полезная директория это /var/log/masscan.

--seed <целое число>

целое число, которое является источниками для генератора случайных числе. Использование различных источников станет причиной отправки пакетов в различном случайном порядке. Вместо числа можно указать строку времени, и её источники будут использоваться для локальной временной метки, автоматически генерируя различные случайные последовательности сканирований. Если источник не указан, то используется время.

--regress

запустить регрессивный тест, возвращает ´0´ при успехе и ´1´ при неудаче.

--ttl <число>

указывает TTL исходящих пакетов, по умолчанию 255.

--wait <секунды>

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

--offline

не отправлять по-настоящему пакеты. Это полезно при низкой скорости и --packet-trace для просмотра, какие пакеты были бы отправлены. Или это полезно с --rate 100000000, чтобы провести бенчмарк, насколько большая скорость работала бы (подразумевается драйвер zero-overhead). PF_RING примерно на 20% медленнее чем результаты бенчмарка в оффлайновом режиме.

-sL

она не делает сканирования, а вместо этого создаёт список случайных адресов. Это полезно для импортирования их в другие инструменты. Опции --shard--resume-index и --resume-countмогут быть полезными с этой функцией.

--interactive

показывать результаты в режиме реального времени в консоли. Это не имеет эффекта, если используется с --output-format или --output-filename.

--output-format <формат>

указывает формат выходного файла, им может быть xml, binary, grepable, list или JSON. Должна быть указана опция --output-filename.

--output-filename <имя_файла>

Файл в которых сохранить результаты. Если указан параметр --output-format, то будет использоваться значение по умолчанию xml

-oB <имя_файла>

устанавливает формат вывода на двоичный и сохраняет в данный файл. Это эквивалент использования параметров --output-format и --output-filename. Опция --read-scan может быть использована для чтения бинарного файла. Бинарные файлы намного меньше чем их XML эквиваленты, но требуют отдельного шага для конвертации обратно в XML и другой читаемый формат.

-oX <имя_файла>

устанавливает формат вывода на XML и сохраняет в данный файл. Это эквивалент использования параметров --output-format xml и --output-filename.

-oG <имя_файла>

устанавливает формат вывода на grepable и сохраняет вывод в данный файл. Это эквивалент использования параметров --output-format grepable и --output-filename.

-oJ <имя_файла>

устанавливает формат вывода на JSON и сохраняет вывод в данный файл. Это эквивалент использования параметров --output-format json и --output-filename.

-oL <имя_файла>

устанавливает формат вывода на формат простого списка и сохраняет вывод в данный файл. Это эквивалент использования параметров --output-format list и --output-filename.

--readscan <бинарные-файлы>

читает файлы, созданные опцией -oB из сканирования, затем выводит их в одном из других форматах, в зависимости от параметров командной строки. Другими словами, она принимает бинарную версию вывода и конвертирует его в форматы XML или JSON.

ФОРМАТ ФАЙЛА КОНФИГУРАЦИИ

Конфигурационный файл использует те же имена параметров, как и командная строка, но без префикса --, и со знаком = между именем и значением. Примером конфигурационного файла может быть:

# цели

range = 10.0.0.0/8,192.168.0.0/16

range = 172.16.0.0/14

ports = 20-25,80,U:53

ping = true

# адаптер

adapter = eth0

adapter-ip = 192.168.0.1

router-mac = 66-55-44-33-22-11

# другие

exclude-file = /etc/masscan/exludes.txt

По умолчанию программа считывает дефолтный конфигурационный файл из /etc/masscan/masscan.conf. Это полезно для специфичных под данную систему настройках, таких как опция --adapter-xxx. Это также полезно для исключения IP адресов для сканирования всего Интернета чтобы не сделать случайную ошибку и не сканировать опасные адреса вроде тех, которые принадлежат DoD.

ПОВЕДЕНИЕ CONTROL-C

Когда пользователь нажимает ctrl-c сканирование останавливается и текущее состояние сканирования сохраняется в файл ´paused.conf´. Сканирование может быть возобновлено опцией --resume:

masscan --resume paused.conf

Программа не выходит немедленно, она будет ждать дефолтные 10 секунд для сохранения результатов из Интернета и сохранения результатов перед полным выходом. Это время можно изменить опцией --wait.


Примеры запуска Masscan

ПРОСТЫЕ ПРИМЕРЫ

Следующий пример сканирует всю частные сети на наличие устройств, прослушивающих 80 порт (веб-серверы, роутеры, IP-камеры и т. д.) и печатает все найденные открытые порты.

masscan 10.0.0.0/8 192.168.0.0/16 172.16.0.0/12 -p80 --open-only

Следующий пример сканирует весь Интернет на DNS сервера, собирает их версии, затем сохраняет результаты в файл XML.

masscan 0.0.0.0/0 --excludefile no-dod.txt -pU:53 --banners --output-filename dns.xml

Вы должны быть в состоянии импортировать XML в базу данных или что-то такое.

Следующий пример читает результаты сканирования из бинарного файла под названием bin-test.scan и печатает его результаты в консоли:

masscan --readscan bin-test.scan

Следующий пример читает результаты сканирования из бинарного файла под названием bin-test.scan и создаёт выводной XML файл под названием bin-test.xml.

masscan --readscan bin-test.scan -oX bin-test.xml

ПРОДВИНУТЫЕ ПРИМЕРЫ

Допустим вы хотите просканировать весь Интернет и распределить сканирование по трём машинам. Тогда Masscan нужно запустить на трёх машинах следующим образом:

masscan 0.0.0.0/0 -p0-65535 --shard 1/3

masscan 0.0.0.0/0 -p0-65535 --shard 2/3

masscan 0.0.0.0/0 -p0-65535 --shard 3/3

Альтернативой является использование функции «возобновления». Сканирования имеет внутренний индекс, который начинается с нуля до числа количества портов затем количества IP адресов. Следующий пример показывает разделение сканирования на куски каждый по 1000 пунктов:

masscan 0.0.0.0/0 -p0-65535 --resume-index 0 --resume-count 1000

masscan 0.0.0.0/0 -p0-65535 --resume-index 1000 --resume-count 1000

masscan 0.0.0.0/0 -p0-65535 --resume-index 2000 --resume-count 1000

masscan 0.0.0.0/0 -p0-65535 --resume-index 3000 --resume-count 1000

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

СБРОС ПАРАЗИТНОГО ТРАФИКА

При сканировании TCP с использованием дефолтного IP адреса вашего адаптера, встроенный стек будет генерировать RST пакеты. Это не даст собрать баннеры. Есть два способа решить это. Первый способ — это создать правило файервола для блокировки порта из видимости стека. Конкретное решение зависит от вашей операционной системы, но в Linux это выглядит примерно так:

iptables -A INPUT -p tcp -i eth0 --dport 61234 -j DROP

Затем, при сканировании, этот же порт должен использоваться как источник:

masscan 10.0.0.0/8 -p80 --banners --adapter-port 61234

Альтернативой является «спуфинг» (подмена на) другой IP адрес. Этот IP адрес должен быть внутри диапазона локальной сети, но при этом не должен использоваться вашим собственным компьютером или другим компьютером в сети. Пример этого выглядит примерно так:

masscan 10.0.0.0/8 -p80 --banners --adapter-ip 192.168.1.101

Настройте таким путём вашего IP адрес источника является предпочитаемым способом запуска сканера.

Установка Masscan

Программа предустановлена в Kali Linux.

Установка в Debian, Mint, Ubuntu

sudo apt-get install git gcc make libpcap-dev

git clone https://github.com/robertdavidgraham/masscan

cd masscan

make

Это поместит программу в подкаталог masscan/bin. Если вы хотите установить её куда-то в систему, то вы должны вручную скопировать её куда-нибудь вроде usr/local/bin.

Исходник состоит из множества маленьких файлов, поэтому сборка пройдёт намного быстрее, если будете использовать многопоточную сборку:

make -j

Хотя Linux является главной целевой платформой, код хорошо запускается на многих других системах. Вот дополнительная информация о них:

Установка в Windows

Windows с Visual Studio: используйте проект VS10

Windows с MingGW: просто наберите make

Windows с cygwin: не работает

Установка в Mac OS X

Mac OS X с XCode: используйте проект XCode4

Mac OS X с cmdline: просто наберите make

Установка в FreeBSD

Наберите gmake.

По другим системам информации нет. Автора они не интересуют.


Графический интерфейс Masscan

Offensive Security подготовила веб-интерфейс для Masscan: https://www.offensive-security.com/offsec/masscan-web-interface/

Установите и настройте ваш веб-сервер, скопируйте файлы MASSCAN web-ui:

apt-get install apache2 php5 php5-mysql mysql-server

git clone https://github.com/offensive-security/masscan-web-ui

mv masscan-web-ui/* /var/www/html/

cd /var/www/html/

Если вы вдруг забыли (или не знали) пароль от MySQL в Kali Linux, то сделайте так:

/etc/init.d/mysql stop

mkdir -p /var/run/mysqld

chown mysql:mysql /var/run/mysqld

mysqld_safe --skip-grant-tables &

В другом терминале

mysql -u root mysql

update user set password=PASSWORD("НОВЫЙ ПАРОЛЬ") where User='root';

flush privileges;

quit

/etc/init.d/mysql restart

Создайте базу данных, пользователя, импортируйте базу данных.

mysql -u root -p

create database masscan;

CREATE USER 'masscan'@'localhost' IDENTIFIED BY 'changem3';

GRANT ALL PRIVILEGES ON masscan.* TO 'masscan'@'localhost';

exit

mysql -u root -p masscan < db-structure.sql

rm db-structure.sql index.html README.md

Обновите файл веб конфигурации, подправив данные о пользователе и пароле:

gedit config.php

define('DB_HOST',       'localhost');

define('DB_USERNAME',   'masscan');

define('DB_PASSWORD',   'changem3');

define('DB_DATABASE',   'masscan');

Теперь вы можете использовать masscan для сканирования ваших целей, при этом указав XML в качестве формата вывода.

masscan 10.0.0.0/8 -p80,21,53 --banners --max-rate 1000 -oX scan-01.xml

Теперь давайте импортируем результаты сканирования.

ls -l scan*                                    

-rw-r--r-- 1 root root 33680 янв  4 16:57 scan-01.xml

php import.php scan-01.xml

Запускаем сервер:

service apache2 start

Переходим по адресу http://localhost/

Теперь нам доступен веб-интерфейс с удобным просмотром и возможностью поиска.


Простое сканирование с помощью Masscan

К примеру, нас интересуют порт 80, а также диапазон портов с 8000 по 8100 в сети 10.0.0.0/8, при этом мы хотим запустить сканирование на скорости десять тысяч пакетов в секунду. Тогда команда будет выгладить так:

sudo masscan -p80,8000-8100 10.0.0.0/8 --rate=10000

Кажется довольно просто, но подвохом здесь является скорость. Например, в моих условиях, если я указываю слишком большую скорость, то часть данных просто теряется. Вам нужно экспериментально подбирать скорость для себя, у меня более-менее реальной является 500-1000 пакетов в секунду. Ещё я сократил количество интересующих меня портов (для увеличения скорости):

sudo masscan -p80,8080 10.0.0.0/8 --rate=500

Понять, что вы установили слишком большую скорость можно по неработающему во время сканирования Интернету (канал забит), а также по тому признаку, что результатов очень мало, хотя вы натравили программу на «живую» сеть. Это не ограничение программы — это ограничение Интернет-подключения.


Возобновление прерванного сканирования

Это совсем просто. Если вам понадобилось выключить / перезагрузить компьютер, то нажмите CTRL+C и дождитесь остановки программы. Промежуточные результаты будут автоматически сохранены в paused.conf. Для возобновления сканирования с того же места, где вы остановились, наберите команду:

sudo masscan --resume paused.conf


Распределённое сканирование с помощью Masscan

Я уже расхваливал удобство организации распределённого сканирования с Masscan по разным машинам, теперь конкретные примеры.

Допустим вы хотите просканировать весь Интернет и распределить сканирование по трём машинам. Тогда Masscan нужно запустить на трёх машинах следующим образом:

masscan 0.0.0.0/0 -p0-65535 --shard 1/3

masscan 0.0.0.0/0 -p0-65535 --shard 2/3

masscan 0.0.0.0/0 -p0-65535 --shard 3/3

Альтернативой является использование функции «возобновления». Сканирования имеет внутренний индекс, который начинается с нуля до числа количества портов затем количества IP адресов. Следующий пример показывает разделение сканирования на куски каждый по 1000 пунктов:

masscan 0.0.0.0/0 -p0-65535 --resume-index 0 --resume-count 1000

masscan 0.0.0.0/0 -p0-65535 --resume-index 1000 --resume-count 1000

masscan 0.0.0.0/0 -p0-65535 --resume-index 2000 --resume-count 1000

masscan 0.0.0.0/0 -p0-65535 --resume-index 3000 --resume-count 1000

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


Как в Masscan сканировать IP из файла

У Masscan есть опции, которые один в один совместимы с nmap. Их довольно много, но самыми интересными, на мой взгляд, являются следующие:

-iL <имя_файла>: Ввод из файла списка хостов/сетей

-p <диапазон портов>: Сканировать только указанные порты

--banners: если есть прослушивающие службы, то получить их баннеры.

-oL/-oJ/-oG/-oB/-oX <файл>: Вывод сканирования в файл Список/JSON/Grepable/Двоичный/XML формат, в соответствии с именем данного файла. Сокращение для --output-format <формат> --output-file <файл>

Как видно, мы можем указать файл, из которого Masscan будет брать IP и диапазоны адресов. Ещё можно собирать банеры с опцией --banners.


Сбор банеров и их анализ в графическом интерфейсе

Для сбора банеров используется опция --banners. Для меня интересны порты 80,21,53,8080. Чтобы воспользоваться графическим интерфейсом для анализа полученных данных, сохраните результаты в формате XML:

sudo masscan 10.0.0.0/8 -p80,21,53,8080 --banners --max-rate 500 -oX scan-01.xml


Пока происходит сканирование, установите и настройте ваш веб-сервер, скопируйте файлы MASSCAN web-ui:

apt-get install apache2 php5 php5-mysql mysql-server

git clone https://github.com/offensive-security/masscan-web-ui

sudo mkdir /var/www/html/masscan/

sudo mv masscan-web-ui/* /var/www/html/masscan

cd /var/www/html/masscan

Чуть подправим файлы:

sudo find ./ -type f -exec sed -i 's/\/assets/\/masscan\/assets/g' {} \;

sed -i "s/url:'\//url:'\/masscan\//g" /var/www/html/masscan/assets/scripts.js

sed -i "s/url='\/export.php/url='\/masscan\/export.php/g" /var/www/html/masscan/assets/scripts.js

Запускаем службу MySQL:

sudo service mysql start


Создайте базу данных, пользователя, импортируйте базу данных.

mysql -u root -p

create database masscan;

CREATE USER 'masscan'@'localhost' IDENTIFIED BY 'changem3';

GRANT ALL PRIVILEGES ON masscan.* TO 'masscan'@'localhost';

exit

mysql -u root -p masscan < db-structure.sql

sudo rm db-structure.sql README.md

Обновите файл веб конфигурации, подправив данные о пользователе и пароле (если нужно):

gedit config.php

define('DB_HOST',       'localhost');

define('DB_USERNAME',   'masscan');

define('DB_PASSWORD',   'changem3');

define('DB_DATABASE',   'masscan');

Теперь давайте импортируем результаты сканирования. Мы начали сканирование, будучи в домашней директории. Поэтому и файл с результатами сканирования там. Для успешного импорта нам нужно, чтобы файл с результатами (scan-01.xml) находился в каталоге /var/www/html/masscan

Проверим, действительно ли результаты в домашней директории::

ls -l ~/scan*

-rw-r--r-- 1 root root 111771 фев 18 06:13 /home/mial/scan-01.xml

Копируем результаты:

sudo cp ~/scan-01.xml .

Импортируем:

sudo php import.php scan-01.xml

Запускаем сервер:

sudo service apache2 start

Переходим по адресу http://localhost/masscan

Теперь нам доступен веб-интерфейс с удобным просмотром и возможностью поиска.

Вот мои результаты:

Поиск прекрасно работает:

Я нашёл сеть из любопытных устройств Spectrum Analyzer:

Заключение

Если так пойдет и дальше, то через несколько лет, когда терабитные каналы станут более обычным делом, чуть ли не каждый школьник сможет просканировать интернет со своего домашнего ПК.


Report Page