Чтение и фильтрация вывода инструментов в Kali

LinuxBeginner
Практиковаться сейчас

Введение

Инструменты безопасности могут выдавать длинный вывод с заметками, повторными наблюдениями и диагностикой. Полезный результат — небольшой набор относящихся к делу находок, происхождение которых вы понимаете.

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

Прочитайте подготовленный файл вывода

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

Откройте подготовленную оболочку Kali:

kali

Выберите общую рабочую папку по абсолютному пути:

cd /home/labex/project

Файл observations.txt содержит короткие строки, начинающиеся с NOTE, OPEN или CLOSED. Здесь OPEN означает, что в образце наблюдения служба указана как открытая; это не доказывает уязвимость. Выведите небольшой файл целиком:

cat observations.txt

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

Для длинного файла less показывает по одной странице, не изменяя файл:

less observations.txt

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

head читает начало файла; tail — его конец. Параметр -n задаёт число выводимых строк. Просмотрите первые три строки:

head -n 3 observations.txt

Ожидаемый вывод:

NOTE supplied training observations
OPEN training-web:8080 http
CLOSED training-db:5432 postgresql

Теперь просмотрите последние две строки:

tail -n 2 observations.txt

Последняя строка — NOTE end of sample. Сохраните предварительный просмотр из трёх строк с помощью оператора >, изученного в первой работе:

head -n 3 observations.txt > preview.txt
cat preview.txt

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

Отфильтруйте, отсортируйте и удалите повторные находки

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

Оставайтесь в Kali и вернитесь в общую рабочую папку:

cd /home/labex/project

grep выводит совпадающие строки. Ниже шаблон заключён в одинарные кавычки, чтобы оболочка передала его буквально. Якорь ^ означает начало строки, а пробел после OPEN отделяет тип записи от её данных:

grep '^OPEN ' observations.txt

Вывод содержит все наблюдения открытых служб, включая повторные строки. Заметки и строки CLOSED отсутствуют.

Символ конвейера | соединяет стандартный вывод одной команды со стандартным вводом следующей. sort упорядочивает строки, располагая одинаковые рядом:

grep '^OPEN ' observations.txt | sort

Повторные строки теперь сгруппированы. uniq удаляет соседние одинаковые строки, поэтому при разнесённых дубликатах она должна идти после сортировки:

grep '^OPEN ' observations.txt | sort | uniq

Ожидаемый вывод:

OPEN training-dns:5353 dns
OPEN training-ssh:2222 ssh
OPEN training-web:8080 http

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

grep '^OPEN ' observations.txt | sort | uniq > open-services.txt
cat open-services.txt

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

Подсчитайте результаты и отделите вывод ошибок

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

Начните с общей рабочей папки:

cd /home/labex/project

wc подсчитывает текст. Параметр -l считает строки, заканчивающиеся символом новой строки. Поскольку сохранённый файл содержит по одной находке на строку, это число разных записей открытых служб:

wc -l open-services.txt

Вывод сообщает 3 и имя файла; интервалы могут отличаться. Конвейер передаёт текст без аргумента имени файла, что удобно для сохранения только числа:

cat open-services.txt | wc -l > finding-count.txt
cat finding-count.txt

Значение — 3, возможно с начальными пробелами.

Программы обычно отправляют полезные данные в стандартный вывод, а диагностические сообщения — в стандартный поток ошибок. Оператор оболочки > перенаправляет стандартный вывод; 2> вместо него перенаправляет поток ошибок. Чтобы увидеть разницу, попробуйте прочитать заведомо отсутствующий файл и сохранить диагностику. Следующая команда должна завершиться ошибкой, поскольку missing-observations.txt не существует; это намеренная демонстрация, после которой следует продолжить:

cat missing-observations.txt 2> read-error.txt

На экране ничего не должно появиться, поскольку сообщение об ошибке попало в read-error.txt. Просмотрите эту отдельную диагностику:

cat read-error.txt

Сообщение называет missing-observations.txt и сообщает, что его нельзя прочитать, поскольку он не существует. Фактические находки по-прежнему отделены:

cat open-services.txt

Три корректные записи остаются без изменений. Отделение диагностики предотвращает ошибочное принятие сообщения об ошибке за находку инструмента.

Резюме

Вы читали текст с помощью cat, less, head и tail, выбирали строки с grep, составляли конвейер с sort и uniq, считали записи с wc и перенаправляли вывод и ошибки. Эти навыки помогают превращать многословный вывод инструментов в небольшие проверяемые результаты.