在 Kali 中读取和过滤工具输出

LinuxBeginner
立即练习

介绍

安全工具可能产生很长的输出,夹杂笔记、重复观察记录和诊断信息。有用的结果应是一组数量较少、与任务相关且来源清楚的发现。

本实验中,你会先使用提供的文本文件进行练习,再学习运行扫描工具。你将读取内容,过滤开放服务记录并去重、计数,还会将错误与有用输出分开保存。

读取预置输出文件

本步骤中,你将在提取发现之前,通过多种方式查看预置文本文件。这是样本数据,并非要求你运行扫描后得到的输出。

打开准备好的 Kali shell:

kali

使用绝对路径选择共享工作目录:

cd /home/labex/project

observations.txt 文件包含以 NOTE、OPEN 或 CLOSED 开头的短行。这里的 OPEN 表示样本观察记录将某项服务列为开放,并不能证明存在漏洞。打印整个小文件:

cat observations.txt

你会看到重复的开放服务记录,以及笔记和关闭服务记录。先读取源文件,有助于选择能保留所需信息的过滤条件。

对于长文件,less 可以逐页显示内容,而不修改文件:

less observations.txt

如有需要,使用方向键移动,然后按 q 退出并返回 shell。样本很小,一屏就能显示;同一个分页器也适用于更长的工具输出。

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 打印匹配的行。下面的模式用单引号括起,让 shell 将其作为字面内容传递。^ 锚点表示行首,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,前面可能有空格。

程序通常将有用数据发送到标准输出,将诊断信息发送到标准错误。shell 的 > 重定向标准输出;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 统计记录,并使用了输出重定向和错误重定向。这些技能有助于将冗长的工具输出转化为简短、可检查的结果。