Я ищу компьютеры в сети, которые используют старые версии 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.
Спасибо!
Если вы не против 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
}
}
'