Данный пост представляет собой небольшую шпаргалку по сканеру портов Nmap, а также утилитам, идущим с ним в комплекте — Ncrack, Ncat, Ndiff и Nping. Уметь пользоваться Nmap полезно не только злобным хакерам, но и системным администраторам, а также devops. Как еще, например, проверить, не осталось ли в системе лишних открытых портов? Или избавиться от сигнатур, по которым можно удаленно определить используемую на сервере ОС? Как обычно, здесь мы рассмотрим самые основные параметры и флаги, а более подробную информацию всегда можно найти в man.
Далее, если для выполнения команды требуются права суперпользователя, она выполняется через sudo. Если такие права не требуются, sudo не используется.
Установка Nmap в Debian/Ubuntu:
Установка утилиты Ncrack (на момент написания поста она находится в альфе и потому не содержится в deb-пакете):
tar -xvzf ncrack-0.4ALPHA.tar.gz
cd ncrack-0.4ALPHA
. / configure
make
sudo ckeckinstall
Сканируем 1000 наиболее часто используемых портов:
Указываем список портов:
Сканирование подсети:
Сканирование списка хостов из файла:
Генерировать списки случайных IP можно, например, таким скриптом на Perl :
use strict ;
use warnings ;
my $cnt = 0 ;
my %filter ;
my $gen_number = shift ;
if ( ! $gen_number ) {
die «Usage: $0 <number>» ;
}
while ( $cnt < $gen_number ) {
my $x = 1 + int ( rand ( 239 ) ) ;
my $y = int ( rand ( 256 ) ) ;
my $z = int ( rand ( 256 ) ) ;
my $w = 1 + int ( rand ( 254 ) ) ;
# see https://en.wikipedia.org/wiki/Reserved_IP_addresses
if ( ( $x == 10 ) || ( $x == 127 ) ) { next ; }
if ( ( $x == 100 ) && ( $y >= 64 ) && ( $y <= 127 ) ) { next ; }
if ( ( $x == 169 ) && ( $y == 254 ) ) { next ; }
if ( ( $x == 172 ) && ( $y >= 16 ) && ( $y <= 31 ) ) { next ; }
if ( ( $x == 192 ) && ( $y == 0 ) && ( $z == 0 ) ) { next ; }
if ( ( $x == 192 ) && ( $y == 0 ) && ( $z == 2 ) ) { next ; }
if ( ( $x == 192 ) && ( $y == 88 ) && ( $z == 99 ) ) { next ; }
if ( ( $x == 192 ) && ( $y == 168 ) ) { next ; }
if ( ( $x == 198 ) && ( $y == 18 ) ) { next ; }
if ( ( $x == 198 ) && ( $y == 19 ) ) { next ; }
if ( ( $x == 198 ) && ( $y == 51 ) && ( $z == 100 ) ) { next ; }
if ( ( $x == 203 ) && ( $y == 0 ) && ( $z == 113 ) ) { next ; }
if ( ( $x >= 224 ) && ( $x <= 239 ) ) { next ; }
my $ip = «$x.$y.$z.$w» ;
if ( $filter { $ip } ) { next ; }
$filter { $ip } = 1 ;
print «$ip n » ;
$cnt ++;
}
Сканирование методом установки TCP соединения:
SYN-сканирование:
Прочие виды сканирования: FIN, Xmas Tree и NULL:
sudo nmap -p22, 80 -sX 12.34.56.78
sudo nmap -p22, 80 -sN 12.34.56.78
Не определять доменные имена для сканируемых IP:
Показывать причину, по которой определенный порт считается «открытым»:
Определение версии сервисов:
Определение операционной системы:
Пингануть хосты для проверки, онлайн ли они, но не сканировать порты:
Сканировать хосты, даже если они не отвечают на пинги:
Считать, что хост онлайн, если он отвечает на SYN, посланный на порт 443:
Сканирование UDP (работает медленнее обычного сканирования TCP):
Ограничиваем время, которое можно потратить на один хост:
Управление степенью параллелизма:
nmap -p22 —min-parallelism 2 12.34.56.78
Делаем паузу прежде, чем перейти к следующему хосту:
Ограничение на число пакетов, посылаемых в секунду:
Использование NSE (Nmap Scripting Engine) :
sudo nmap —script-updatedb
# натравляем все скрипты из группы default:
nmap —script default 12.34.56.78
# все скрипты, название которых начинается на http
nmap —script http- * 12.34.56.78
Ломаем SSH с помощью Ncrack:
ncrack —user root ssh: // 12.34.56.78
Fun fact! Существуют и другие утилиты для подбора паролей, заметно отличающиеся между собой поддерживаемыми протоколами и опциями. В частности, стоит обратить внимание на утилиты hydra и medusa .
Указываем списки логинов и паролей для Ncrack:
Выводим больше отладочной информации, включая подбираемые логины и пароли:
Используем Ncrack совместно с Nmap:
ncrack -iX scan.xml
Использование Ndiff:
Пример использования Nping:
Примеры использования Ncat:
ncat -l > received.txt
Использование Ncat в качестве бэкдора:
ncat localhost 3344
Ncat для пробрасывания портов:
—sh-exec «ncat 192.168.2.15 22»
ssh user @ 10.1.2.3 -p 2222
Ncat для расшифровки SSL:
—sh-exec «ncat —ssl encrypted.google.com 443»
С сохранением трафика в файл:
—sh-exec «ncat —ssl encrypted.google.com 443»
Такая вот незамысловатая шпаргалка. Если вам есть, что к ней добавить, не стесняйтесь воспользоваться комментариями.