如何在一个文件中分析文本的多个斑点多行?

问题描述

我已经使用nmap选项对多个IP地址进行了--script ssl-enum-ciphers -p443 192.168.0.0/24扫描。我还使用--script ssh2-enum-algos -p22选项运行了非常相似的扫描,该扫描产生的输出格式相同。

我想快速分析此数据,并根据特定密码或算法的特定匹配将其归零。总体目标是运行临时内部漏洞评估,而无需访问Nessus或Rapid7 InsightVM等高级工具。

尽管nmap支持-oX选项以输出到XML,但我发现Microsoft Word,Excel或Web浏览器都不知道如何打开文件。 Microsoft产品不断产生xml格式不正确的错误。

因此,我尝试了nmap-parse-output code on Github。尽管它可以轻松地按端口对IP地址进行分组,但似乎无法进一步进一步为我分析密码或算法。

因此,现在我试图找出一种方法来手动解析这些数据块。 典型的结果可能包含以下格式的多个IP地址的数据(为简洁起见,以下示例stdout进行了编辑):

Nmap scan report for 192.168.1.1
Host is up (0.00064s latency).

PORT    STATE SERVICE  VERSION
443/tcp open  ssl/http lighttpd
| ssl-enum-ciphers: 
|   TLSv1.2: 
|     ciphers: 
|       TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (ecdh_x25519) - A
|       TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (ecdh_x25519) - A
|       TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (ecdh_x25519) - A
|     compressors: 
|       NULL
|     cipher preference: server
|_  least strength: A

Nmap scan report for 192.168.1.2
Host is up (0.00048s latency).

PORT    STATE SERVICE  VERSION
443/tcp open  ssl/http nginx (reverse proxy)
| ssl-enum-ciphers: 
|   TLSv1.2: 
|     ciphers: 
|       TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (secp256r1) - A
|     compressors: 
|       NULL
|     cipher preference: server
|_  least strength: A

Nmap scan report for 192.168.1.3
....

Nmap scan report for 192.168.1.4
....

如何使用bash可用的标准应用程序编写脚本来遍历每个blob文本?我们不知道每个blob的长度,因此我需要在字符串上进行匹配“ Nmap扫描报告”或类似内容,然后提取每个匹配项之间的数据。

这样的事情会让我起步,但是它并不完整,并且实际上并没有单独地分隔每个blob:

for i in $(cat scan-results | grep "Nmap scan report for"); do more data analysis here; done 

例如,我可能想在端口443上搜索支持RC4密码的任何IP地址,因此在“进行更多数据分析”中,我想运行:grep -i rc4

或者在使用ssh算法的情况下,我想确保所有cbc算法均已禁用,因此我可以运行:grep -i cbc

最终的目标是列出所有匹配的内容,以便我可以快速将匹配项归因于特定的IP地址。我不在乎结果外观是什么,我只是在乎快速找到结果。

任何帮助将不胜感激!

解决方法

没有更多示例数据,仅继续介绍有限的示例,请记住输出格式并不重要...

注意:我的示例数据文件nmap.dat是OP提供的示例nmap数据的剪切粘贴副本。

我认为多模式grep可能就足够了,例如:

# search for any IP address that support RC4 ciphers on port 443

$ grep -i "Nmap scan report for|443|RC4" nmap.dat
Nmap scan report for 192.168.1.1
443/tcp open  ssl/http lighttpd
Nmap scan report for 192.168.1.2
443/tcp open  ssl/http nginx (reverse proxy)
Nmap scan report for 192.168.1.3
Nmap scan report for 192.168.1.4

# want to ensure all cbc algorithms are disabled

$ egrep -i "Nmap scan report for|cbc" nmap.dat
Nmap scan report for 192.168.1.1
Nmap scan report for 192.168.1.2
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (secp256r1) - A
Nmap scan report for 192.168.1.3
Nmap scan report for 192.168.1.4

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...