Nse скрипты. Справочное руководство Nmap (Man Page)

Если вы когда-нибудь сталкивались с ОС Linux, вы наверняка слышали слово «терминал». Новички обычно воспринимают терминал как что-то страшное и зловещее. Но не все так страшно.

find — синтаксис и зачем оно нужно

find — утилита поиска файлов по имени и другим свойствам, используемая в UNIX‐подобных операционных системах. С лохматых тысячелетий есть и поддерживаться почти всеми из них.

Базовый синтаксис ключей (забран с Вики):

  • -name — искать по имени файла, при использовании подстановочных образцов параметр заключается в кавычки. Опция `-name‘ различает прописные и строчные буквы; чтобы использовать поиск без этих различий, воспользуйтесь опцией `-iname‘;
  • -type — тип искомого: f=файл, d=каталог, l=ссылка (link), p=канал (pipe), s=сокет;
  • -user — владелец: имя пользователя или UID;
  • -group — владелец: группа пользователя или GID;
  • -perm — указываются права доступа;
  • -size — размер: указывается в 512-байтных блоках или байтах (признак байтов — символ «c» за числом);
  • -atime — время последнего обращения к файлу (в днях);
  • -amin — время последнего обращения к файлу (в минутах);
  • -ctime — время последнего изменения владельца или прав доступа к файлу (в днях);
  • -cmin — время последнего изменения владельца или прав доступа к файлу (в минутах);
  • -mtime — время последнего изменения файла (в днях);
  • -mmin — время последнего изменения файла (в минутах);
  • -newer другой_файл — искать файлы созданные позже, чем другой_файл;
  • -delete — удалять найденные файлы;
  • -ls — генерирует вывод как команда ls -dgils;
  • -print — показывает на экране найденные файлы;
  • -print0 — выводит путь к текущему файлу на стандартный вывод, за которым следует символ ASCII NULL (код символа 0);
  • -exec command {} \; — выполняет над найденным файлом указанную команду; обратите внимание на синтаксис;
  • -ok — перед выполнением команды указанной в -exec, выдаёт запрос;
  • -depth или -d — начинать поиск с самых глубоких уровней вложенности, а не с корня каталога;
  • -maxdepth — максимальный уровень вложенности для поиска. «-maxdepth 0» ограничивает поиск текущим каталогом;
  • -prune — используется, когда вы хотите исключить из поиска определённые каталоги;
  • -mount или -xdev — не переходить на другие файловые системы;
  • -regex — искать по имени файла используя регулярные выражения;
  • -regextype тип — указание типа используемых регулярных выражений;
  • -P — не разворачивать символические ссылки (поведение по умолчанию);
  • -L — разворачивать символические ссылки;
  • -empty — только пустые каталоги.
find - синтаксис и зачем оно нужно

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

Читайте также:  Как быстрее набрать первую тысячу подписчиков на YouTube

find -help

Результатам будет нечто такое из чего можно вычленять справку по отдельному ключу или команде (кликабельно):

В качестве развлечения можно использовать:

man find

find - синтаксис и зачем оно нужно

Дабы получить мануал из самой системы по базису и ключам (тоже кликабельно);

Немного о примерах использования. Точно так же, оттуда же и тп. Просто для понимания как оно работает вообще. Наиболее просто, конечно, осознать это потренировавшись в той же консоли на реальной системе.

Узнать открытые порты в Linux через lsof

Утилита lsof позволяет посмотреть все открытые в системе соединения, в том числе и сетевые, для этого нужно использовать опцию i.

Утилита командной строки lsof (List Open Files) используется для получения информации об открытых различными процессами файлах (а с точки зрения unix все является файлами — каталоги, устройства, сокеты и т. д.).

Давайте разберемся с практическим применением lsof. Если ввести команду lsof без аргументов, можно увидеть все файлы, принадлежащие процессам. Утилита lsof умеет отображать процессы, которые работают с определенным файлом или сокетом.

Список всех сетевых соединений lsof -i

Список процессов, работающих с портом 80 lsof -i :80

Вы можете использовать следующую команду: lsof -i -P |grep pid

Заключение, несколько советов

Мы рассмотрели основные команды Linux с примерами, надеемся, что они окажутся вам полезными. Напоследок приведем несколько советов по использованию терминала одной строкой.

Двойной символ & (амперсанд)

Предназначен для выполнения нескольких команд последовательно:

команда1 && команда2 && команда3

Вертикальная черта | (pipe)

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

ps axu | grep имя_процесса

Стрелки вверх и вниз на клавиатуре

Помогают осуществлять навигацию по последним командам. Стрелка вверх — предыдущая выполненная команда, стрелка вниз — следующая.

Читайте также:  Вышел полноценный джейлбрейк для iPhone 12

history — история

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

Новая вкладка bash

Не всегда удобно иметь несколько окон. Терминал, как браузер, дает возможность открыть несколько вкладок сочетанием клавиш Ctrl+Shift+T.

Копирование и вставка, прерывание команды

Пробовали ли вы копировать текст и вставлять в терминал? Пробовали Ctrl+C? Ctrl+C прервет выполнение текущей команды, например таблицы процессов, сбросит текст, введенный в строку. Скопировать текст из bash — Ctrl+Shift+C. Вставить текст в bash — Ctrl+Shift+V.

Постановка задачи

Как уже было сказано, сегодня мы будем заниматься расширением функционала Nmap за счет написания собственных скриптов. Любой взлом/пентест обычно начинается с разведки и сбора данных. Одним из первых проверяется наличие на исследуемом хосте открытых портов и идентификация работающих сервисов. Лучшего инструмента для сбора такой информации, чем Nmap, пожалуй, нет. Следующим шагом после сканирования обычно бывает либо поиск сплоита под найденный уязвимый сервис, либо подбор пары логин:пароль с помощью метода грубой силы.

Допустим, ты активно используешь брутфорсер THC-Hydra для подбора паролей нескольких сервисов (например, HTTP-Basic, SSH, MySQL). В таком случае приходится натравливать гидру на каждый сервис отдельно, нужно запоминать особенности сервисов и необходимые для запуска гидры флаги. А если появится необходимость брутить намного больше, чем пять сервисов?.. Почему бы не автоматизировать это?

Поэтому давай напишем простенький скрипт, который будет автоматизировать процесс запуска Hydra для подбора логинов/паролей к одному сервису (например, PostgreSQL). Для этого нам понадобятся следующие инструменты:

  • Nmap;
  • THC-Hydra;
  • любой текстовый редактор.

Если у тебя еще не установлен Nmap и/или Hydra, немедленно исправь это:

$ sudo apt-get install nmap hydra

О’кей, начнем. Скрипты для Nmap представляют собой обычные текстовые файлы с расширением *.nse . Поэтому открывай свой любимый текстовый редактор и создавай новый файл. Я буду использовать Vim:

$ vim

Пару слов про Nmap

Уверена, что большинство читателей журнала «Хакер» знают, что такое Nmap, и наверняка не раз использовали его для исследования сети и сбора информации. Для тех же, кто подзабыл или не знает, на всякий случай напомню:

  • Nmap — кросс-платформенный инструмент для сканирования сети, проверки ее безопасности, определения версий ОС и различных сервисов и многого другого. Это очень гибкая и легко расширяемая утилита, а делает ее такой скриптовый движок NSE;
  • NSE (Nmap Scripting Engine) — компонент Nmap, обладающий мощными возможностями, что позволяет пользователям писать скрипты для автоматизации широкого круга сетевых задач: более гибкого взаимодействия с имеющимися возможностями Nmap, обнаружения и эксплуатации уязвимостей и прочего. В основе NSE — интерпретатор языка Lua;
  • Lua — скриптовый язык, похожий на JavaScript.
Читайте также:  Как включить адаптер беспроводной сети на ноутбуке?

sed: синтаксический анализ и преобразование текста

sed — это специальный потоковый редактор, который ищет шаблон в тексте и применяет к нему необходимые изменения.

Данный редактор может быть в том числе пакетным или неинтерактивным редактором. Его функции заключаются в том, что он считывает из файла или из stdin (при наличии каналов) по одной строке за раз. При этом исходный входной файл остается неизменным (так как sed также является фильтром), после чего результаты преобразуются в стандартные выходные данные.

Анатомия типичной sed-команды Linux-терминала

Опции sed:

  • адрес — может быть номером строки, диапазоном или совпадением. Может быть оставлен по умолчанию, либо являться файлом целиком;
  • команда — s:substitute (замена), p:print (печать), d:delete (удалить), a:append (добавить), i:insert (вставить), q:quit (завершить);
  • regex — регулярные выражения;
  • знак-разграничитель — в данном случае необязательно использовать «/», можно также применять  «|» или «:» или любой другой символ;
  • модификатор — его роль может выполнять число n, которое применяет команду к N-му вхождению, g применяет ко всей строке в целом;
  • общие признаки состояния sed — -n (без печати), -e (несколько операций), -f (чтение sed из файла), -i (на месте редактирования).

Полезные примеры sed:

  • sed -n ‘5,9 p’ — печать строк с 5 по 9;
  • sed ‘20,30 s|New|Old|1’ — влияет на 1-е вхождение в стр. 20–30;
  • sed -n ‘$p’ — печать последней строки;
  • sed ‘1,3 d’ — удалить первые 3 строки;
  • sed ‘/^$/d’ — удалить все пустые строки;
  • sed ‘/York/!s/New/Old/’ — заменить всё, кроме  York;
  • kubectl -n kube-system get configmap/kube-dns -o yaml | sed ‘s/8.8.8.8/1.1.1.1/’ | kubectl replace -f -.

В следующей части разберём основные инструменты терминала Linux.

Ксения Широкова Перевод материала «Linux Terminal Tools»

LinuxДля начинающихИнструменты командной строкиИнструменты терминала Linux Поделиться Копировать ссылку ВКонтакте Facebook Twitter Pocket Telegram