Введение
Инструменты безопасности могут выдавать длинный вывод с заметками, повторными наблюдениями и диагностикой. Полезный результат — небольшой набор относящихся к делу находок, происхождение которых вы понимаете.
В этой работе вы потренируетесь на предоставленном текстовом файле перед запуском каких-либо сканеров. Вы прочитаете его содержимое, отфильтруете записи об открытых службах, удалите дубликаты, подсчитаете записи и отделите ошибки от полезного вывода.
Прочитайте подготовленный файл вывода
На этом шаге вы изучите подготовленный текстовый файл несколькими способами перед извлечением находок. Это образец данных, а не результат сканирования, которое нужно выполнить.
Откройте подготовленную оболочку 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 и перенаправляли вывод и ошибки. Эти навыки помогают превращать многословный вывод инструментов в небольшие проверяемые результаты.



