Назад | Перейти на главную страницу

Сканировать диапазон 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.

Спасибо!

Если вы не против 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
    }
  }
'