Кролики — это не только ценный мех, но и три — четыре килограмма диетического, легкоусвояемого мяса.

Сегодня мы рассмотрим один из наиболее универсальных инструментов пентестера — Nmap — культовый кроссплатформенный сканер, который расшифровывается как «Network Mapper». Инструмент сам по себе довольно мощный, но его чаще всего используют в связке с другими утилитами, не предполагая, что, помимо способности сканировать сеть, Nmap имеет массу других возможностей. Основная из них — это использование скриптов с помощью NSE (Nmap Scripting Engine) — компонента Nmap, в основе которого лежит скриптовый язык Lua, напоминающий JavaScript. Именно NSE делает Nmap таким универсальным.

Допустим, мы просканировали хост и увидели открытые порты:

root@kali:~# nmap site.test.lan
Starting Nmap 7.70 ( https://nmap.org ) at 2019-05-31 11:58 MSK
Nmap scan report for site.test.lan (192.168.60.50)
Host is up (0.000030s latency).
Not shown: 995 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
80/tcp   open  http
90/tcp   open  dnsix
3306/tcp open  mysql
MAC Address: 6E:93:12:AA:1F:6D (Unknown)

В первую очередь, нас интересует 80 порт. Вероятно, здесь «крутится» сайт. Если запустить скрипт http-enum, то он будет искать всю полезную информацию на веб-сервере точно так же, как это делает сканер уязвимостей Nikto:

nmap site.test.lan --script http-enum

Сбор информации

Узнав, что сайт на WordPress, запустим скрипт http-wordpress-enum.

nmap -p80 --script http-wordpress-enum --script-args http-wordpress-enum.search-limit=all site.test.lan

Сбор информации

Но это еще не все. В стандартном наборе Nmap имеется почти 600 скриптов, а если нет нужного – можно написать свой.
Поищем на сайте страницы с авторизацией, если они есть. И в этом нам поможет скрипт http-auth-finder:

nmap -p80 --script http-auth-finder site.test.lan

Авторизация

Если использовать команду nmap --script=auth, то к хосту будут применены по очереди все скрипты из раздела auth.
Когда форма авторизации найдена, попробуем подобрать пароль к какой-нибудь учетной записи, используя очередной скрипт http-form-brute:

nmap -p-80 --script=http-form-brute --script-args=http-form-brute.path=/wp-login.php site.test.lan

Brute-force

Весьма неплохо для “сканера портов”. Применяя различные скрипты и используя при этом лишь «сканер портов», мы получили довольно много информации. Но здесь стоит отметить, что, в отличие от Nmap, WPScan выводит не только названия компонентов, но и указывает на их возможные уязвимости.

Далее мы видим открытый 22 порт SSH и пробуем подобрать пароль от сервиса, используя скрипт ssh-brute:

nmap -p22 --script ssh-brute site.test.lan

SSH

Также мы видим открытый 21 порт, который, предположительно, указывает на наличие FTP-сервера. Мы можем получить некоторую информацию о сервере при помощи скрипта ftp-syst:

nmap -p21 --script ftp-syst site.test.lan

FTP

Далее произведем перебор пользователей FTP-сервера:

nmap -p21 192.168.60.50 --script ftp-brute --script-args userdb=/root/user.txt,passdb=/root/pass.txt

brute-force FTP

Еще у нас есть MySQL и его открытый порт 3306.

Скрипт mysql-info покажет некоторую информацию о MySQL (для этого необходимо запустить Nmap с ключами -sV -sC):

nmap -p3306 -sV -sC site.test.lan

MySQL

Скрипт подключается к серверу MySQL и выводит информацию, такую как номер протокола и версии, идентификатор потока, состояние, возможности и соль пароля.

Помимо этого, мы можем перечислить «валидных» пользователей MySQL:

nmap -p3306 --script mysql-enum site.test.lan

Еще MySQL

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