我正在寻找网络上使用旧版本 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
}
}
'