使用清晰/可 grep 的输出扫描 IP 范围中的 SSL/TLS 版本和漏洞

使用清晰/可 grep 的输出扫描 IP 范围中的 SSL/TLS 版本和漏洞

我正在寻找网络上使用旧版本 tls/ssl 的计算机。

到目前为止,我一直在使用 nmap 的 ssl-enum-ciphers 和 ssl-poodle 脚本,但输出没有帮助,因为它显示了所有可用的密码,例如:

Nmap scan report for x.x.x.x
Host is up (0.017s latency).

PORT    STATE SERVICE
443/tcp open  https
| ssl-enum-ciphers:
|   SSLv3:
|     ciphers:
|       TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
|     compressors:
|       NULL
|     cipher preference: server
|     warnings:
|       CBC-mode cipher in SSLv3 (CVE-2014-3566)
|   TLSv1.0:
|     ciphers:
|       TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A

我已看到 nmap 具有可 greppable 输出选项“-oG”,但我不确定它是否可以与脚本一起工作,或者我没有正确使用它。

我一直在使用以下命令的变体

nmap -sV --script ssl-enum-ciphers -p 443 {ip address/netmask}

理想情况下我希望输出看起来像

IP 地址/主机名 SSLv3 TLS1.0 TLS1.2

但即使将其转换为 .csv 格式也会有所帮助。有没有更好的方法?也许我在这里缺乏一些 grep 知识。

谢谢!

答案1

如果您不介意使用 awk,我已经编写了一个 checkciphers.sh 脚本,如下所示:

#! /usr/bin/ksh
nmap -sV --script ssl-enum-ciphers -p 443 | awk '
  /^Nmap scan report for /{
    currhost = $5 " " $6
  }
  /^443\/tcp /{
    if ($2 != "open") {
      currhost = ""
    }
  }
  /^\|   (TLS|SSL)/{
    currciph = $2
  }
  /^\|     ciphers:/{
    count = 1
    next
  }
  /^\|     [^ ]/{
    count = 0
  }
  /^\|       [^ ]/{
    if ("$currhost" && count > 0) {
      host[currhost] = 1
      ciph[currhost][currciph] += 1
    }
  }
  END {
    for (H in host) {
      CC=""
      for (C in ciph[H]) {
        CC=CC " " C ciph[H][C]
      }
      print H,CC
    }
  }
'

相关内容