Use o awk para encontrar todos os Ports de cada IP que tenham https aberto

1

Eu gostaria de imprimir todos os ips (porta de espaço IP) que possuem portas https abertas com um arquivo gnmap.

Um exemplo de saída para uma linha que tem apenas https em execução na porta 443:

123.123.123.123 443

Uma entrada de exemplo mais elaborada e uma saída desejada (nem todos os casos de teste):

Host: 123.123.123.123 ()  Ports: 80/open/tcp//http?///, 443/open/tcp//https?///, 8083/closed/tcp//us-srv///, 65001/closed/tcp/////        Ignored State: filtered (65531) Seq Index: 262  IP ID Seq: Randomized
Host: 123.123.123.124 ()  Ports: 80/open/tcp//http?///, 443/open/tcp//https?///, 10443/open/tcp//https///, 65001/closed/tcp/////        Ignored State: filtered (65531) Seq Index: 262  IP ID Seq: Randomized
Host: 123.123.123.125 ()  Ports: 80/open/tcp//http?///, 443/open/tcp//https?///, 8083/closed/tcp//us-srv///, 8445/open/tcp//https///, 65001/closed/tcp/////        Ignored State: filtered (65531) Seq Index: 262  IP ID Seq: Randomized
Host: 123.123.123.126 ()  Ports: 1337/open/tcp//https?///, 8083/closed/tcp//us-srv///, 65001/closed/tcp/////        Ignored State: filtered (65531) Seq Index: 262  IP ID Seq: Randomized

A saída deste arquivo deve ser:

123.123.123.123 443
123.123.123.124 443
123.123.123.124 10443
123.123.123.125 443
123.123.123.125 8445
123.123.123.126 1337

Qual seria a solução para isso?

    
por user857990 20.01.2014 / 13:32

4 respostas

3

Se eu acertei o caso de "portas mais ou menos abertas abaixo de 443" corretamente, esta deve ser uma solução genérica que o manipule corretamente:

awk '/\/https\// {for(i=5;i<=NF;i++)if($i~"/open/.+/https/"){sub("/.*","",$i); print $2" "$i}}' nmap-synscan.gnmap
    
por 20.01.2014 / 13:53
0

Isso é mais adequado para análise por expressões regulares do que por campos. Por que não usar o Perl?

$ perl -lne '/Host:\s*([\d\.]+)/; $h=$1; 
            print "$h $_" for (/(\d+)\/open[^\s]+https/g);
           ' file 
123.123.123.123 443
123.123.123.123 10443
123.123.123.123 443
123.123.123.123 8443
123.123.123.123 443
123.123.123.123 443

A primeira linha apenas captura o IP do host e o salva como $h . A segunda linha, corresponde a todos os números que são seguidos por /open , em seguida, um ou mais caracteres que não são espaços em branco e, em seguida, https . Isso deve corresponder a todas as https portas abertas. A instrução print imprimirá o nome do host ( $h ) e cada uma das portas correspondentes (salvas como a variável especial $_ ).

    
por 20.01.2014 / 17:27
0
A função awk do split pode ser usada para extrair campos da saída do gnmap.

split("443/open/tcp//https?///, a, "/"); print a[1] fornece 443 .

Use isto para imprimir o ip e a porta para as linhas que mostram pelo menos uma porta https aberta:

awk '{ for (f=5; f <= NF; f++) {
         split($f,a,"/");
         if (a[2] != "open") continue;
         if (a[5] ~ /https.*/) {
           print $2, a[1];
         }
       }
      }' nmap-synscan.gnmap

Use isto para imprimir o ip e a porta para as linhas que mostram uma porta https aberta e pelo menos uma porta aberta abaixo de https:

awk '{ lowopen = 0;
       for (f=5; f <= NF; f++) {
         split($f,a,"/");
         if (a[2] != "open") continue;
         if (a[1] < 443) lowopen++;
         if (lowopen && a[5] ~ /https.*/) {
           print $2, a[1];
         }
       }
      }' nmap-synscan.gnmap

Editar: para responder sua segunda pergunta, use isso para imprimir o ip e porta para linhas onde exatamente a segunda porta aberta é https:

awk '{ split($6,a,"/");
       if (a[5] ~ /https.*/) {
         print $2, a[1];
       }
      }' nmap-synscan.gnmap
    
por 20.01.2014 / 14:19
0

Você pode fornecer nmap(1) um conjunto de portas para verificar diretamente, ou seja, neste caso, basta adicionar -PS80,443 .

    
por 23.03.2014 / 16:59

Tags