1

我有一些来自 Nmap 扫描的数据。它看起来像这样。

Nmap scan report for 10.16.17.34
Host is up (0.011s latency).
Not shown: 65530 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
23/tcp   open  telnet
80/tcp   open  http
| http-headers: 
|   Date: THU, 30 AUG 2012 22:46:11 GMT
|   Expires: THU, 30 AUG 2012 22:46:11 GMT
|   Content-type: text/html
|   
|_  (Request type: GET)
443/tcp  open  https
| ssl-enum-ciphers: 
|   SSLv3
|     Ciphers (11)
|       TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA - unknown strength
|       TLS_RSA_EXPORT1024_WITH_RC4_56_SHA - unknown strength
|       TLS_RSA_EXPORT_WITH_DES40_CBC_SHA - unknown strength
|       TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 - unknown strength
|       TLS_RSA_EXPORT_WITH_RC4_40_MD5 - unknown strength
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_RSA_WITH_AES_128_CBC_SHA - strong
|       TLS_RSA_WITH_AES_256_CBC_SHA - unknown strength
|       TLS_RSA_WITH_DES_CBC_SHA - unknown strength
|       TLS_RSA_WITH_RC4_128_MD5 - unknown strength
|       TLS_RSA_WITH_RC4_128_SHA - strong
|   TLSv1.0
|     Ciphers (10)
|       TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA - unknown strength
|       TLS_RSA_EXPORT1024_WITH_RC4_56_SHA - unknown strength
|       TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 - unknown strength
|       TLS_RSA_EXPORT_WITH_RC4_40_MD5 - unknown strength
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_RSA_WITH_AES_128_CBC_SHA - strong
|       TLS_RSA_WITH_AES_256_CBC_SHA - unknown strength
|       TLS_RSA_WITH_DES_CBC_SHA - unknown strength
|       TLS_RSA_WITH_RC4_128_MD5 - unknown strength
|       TLS_RSA_WITH_RC4_128_SHA - strong
|     Compressors (1)
|       NULL
|_  Least strength = unknown strength
2023/tcp open  xinuexpansion3

Nmap scan report for 10.16.40.0
Host is up (0.00062s latency).
All 65535 scanned ports on 10.16.40.0 are closed

Nmap scan report for 10.16.40.1
Host is up (0.00071s latency).
All 65535 scanned ports on 10.16.40.1 are closed

我正在尝试做的是使用 Awk、Sed 或 Grep 或其他东西来提取任何以 Nmap Scan 开头并以空白新行结尾并包含 ssl-enum-ciphers 的部分。我用 Awk 想出了如何打印每个部分,但我无法检查 ssl 行。我对此不以为然。
谢谢

4

2 回答 2

0

你所拥有的是空行分隔的记录。您可以使用awk检查您的 ssl-enum-ciphers:

awk -v RS='' '/ssl-enum-ciphers/' file.txt

这将检查记录是否不包含短语“host down”:

awk -v RS='' '/ssl-enum-ciphers/ && !/host down/' file.txt

您可以通过将字段分隔符更改为换行符来使其更加严格:

awk 'BEGIN { RS=""; FS="\n" } /ssl-enum-ciphers/ && $1 !~ /host down/' file.txt

在记录之间添加一些换行符:

awk 'BEGIN { RS=""; FS="\n" } /ssl-enum-ciphers/ && $1 !~ /host down/ { printf "%s\n\n", $0 }' file.txt
于 2012-09-05T01:24:51.447 回答
0

处理 Nmap 文本输出非常棘手且充满危险,因为它可能会随着版本的变化而变化。要解析 Nmap 输出,请使用带有or参数的XML 输出。然后使用 XML 解析库或实用程序来提取您需要的信息。-oX-oA

对于您的示例,使用xmlstarlet提取host包含属性设置为“ssl-enum-ciphers”的script元素的元素。id此示例将输出目标的 IP 地址,然后是ssl-enum-ciphers脚本的输出:

xmlstarlet sel -t -m '//script[@id="ssl-enum-ciphers"]' \
-v '../../../address[@addrtype="ipv4"]/@addr' -v '@output' output.xml

在 Nmap 的下一个版本中,脚本输出本身将被进一步分解为 XML 结构,从而更容易执行诸如仅输出使用中的弱密码列表之类的操作。

于 2012-09-05T14:46:38.737 回答