Ordenar hosts a través de puertos abiertos usando NMap

4

Me asignaron la tarea de ejecutar un escaneo NMap en nuestra red corporativa y compilar una lista de solo puntos finales en vivo. Mi problema es cómo separar los hosts a través de sus puertos abiertos (impresora / punto final). Por ejemplo, quiero eliminar todas las impresoras / hosts del archivo de salida nmap (-oN) Corp.txt si el puerto 9100 (impresora) está abierto. La lista también debe mantener el nombre de host / IP en relación con sus números de puerto y estado abierto.

A continuación se muestra un ejemplo del comando que estoy ejecutando y su salida:

nmap -p 80,135,9100 -oN ~/Documents/Corp.txt 10.33.131.1/24

Nmap scan report for itbrn1745.domain.net (10.33.131.13)
Host is up (0.91s latency).
PORT     STATE  SERVICE
80/tcp   closed http
135/tcp  open   msrpc
9100/tcp closed jetdirect


Nmap scan report for itPC.domain.net (10.33.131.37)
Host is up (0.0033s latency).
PORT     STATE    SERVICE
80/tcp   open     http
135/tcp  open     msrpc
9100/tcp filtered jetdirect

Nmap scan report for ap4403.a740 (10.33.131.56)
Host is up (0.0046s latency).
PORT     STATE    SERVICE
80/tcp   open     http
135/tcp  filtered msrpc
9100/tcp open     jetdirect

Cualquier consejo sobre la lógica de compilar una lista de solo puntos finales activos en la red es muy apreciado.

    
pregunta Duck 07.06.2016 - 20:33
fuente

2 respuestas

2

Nmap tiene formatos de salida alternativos por exactamente este motivo. La salida normal ( -oN ) que se muestra es solo para lectura humana, y no debe procesarse con scripts, ya que está sujeta a cambios indefinidos de versión a versión.

La mayoría de los visores de salida de Nmap (como Zenmap o ScanHub ) use el formato de salida XML ( -oX ), que es el formato legible por la máquina que contiene los resultados completos de la exploración, incluidas características avanzadas como scripts NSE y traceroute. Si tiene la intención de usar estas funciones o ampliar su escaneo e informes más allá de las consultas simples "todos los hosts con este puerto", utilice uno de estos visores de salida o escriba uno propio que use XML, que son sus mejores opciones. Hay bibliotecas para analizar el XML de Nmap para los lenguajes de programación más comunes.

Para consultas sencillas como esta, también puede utilizar el formato de salida Grepable de Nmap (% código%). Esto coloca todos los datos de escaneo de puertos para un host en una línea junto con la IP y el nombre de host, de este modo:

Host: 10.33.131.56 (ap4403.a740)    Ports: 80/open/tcp//http///, 9100/open/tcp//jetdirect///

En este caso, solo podrías -oG para eliminar esas líneas.

Al escanear, prefiero usar la opción "todas las salidas" ( grep -v ' 9100/open' ) para guardar la salida Normal, XML y Grepable en el mismo nombre de archivo (con las extensiones -oA , .nmap y .xml , respectivamente). De esa manera, tengo todos los formatos de salida en caso de que tenga que realizar un procesamiento posterior o quiera hacer un escaneo visual a través de la salida.

    
respondido por el bonsaiviking 07.06.2016 - 21:09
fuente
1

Como se mencionó en @bonsaiviking, Nmap admite múltiples formatos de salida y hay una serie de herramientas de terceros que pueden ayudarlo a trabajar con esa información. Si simplemente desea analizar los datos en la línea de comandos para encontrar una solución simple para apagar y olvidar, un script de shell con la opción -oG es probablemente la forma más sencilla.

Para darte una idea, aquí hay un apuro que se me ocurrió en PowerShell para tu escenario. (Según la ruta del archivo en su ejemplo, parece que está usando Linux, no mi fuerte, pero el concepto general es bastante portátil siempre que entienda su entorno operativo y las herramientas disponibles).

nmap -p 80,135,9100 -oG - 10.33.131.1/24 | Where-Object -FilterScript {$_.Contains('Ports:') -and !($_.Contains('9100/open/tcp/'))} | Out-File "$env:UserProfile\Documents\Corp.txt"

Nota: Lo anterior no está completamente probado. Debe realizar sus propias ejecuciones de muestra y verificación para asegurarse de que la salida incluya todos los datos deseados antes de confiar en ella.

El script anterior es bastante simple.

  • La parte nmap es exactamente igual a la original, con un cambio. El formato de salida se cambió de -oN a -oG y el objetivo de salida se cambió a - para que la salida superpuesta se envíe a la consola (donde luego la redirigimos a través de la canalización) en lugar de a un archivo.
  • Where-Object nos permite filtrar una matriz de objetos en función de los criterios que queramos. En este caso, lo estamos usando contra la salida codificable de Nmap, que PowerShell almacena como una matriz de cadenas. La opción -FilterScript nos permite definir un script de PowerShell (que debería generar $true o $false , o un valor equivalente) para decidir qué se filtra (solo se incluirán los elementos que se resuelvan en $true en la salida). Esta secuencia de comandos de filtro está escrita solo para devolver listas de puertos, y solo para hosts que no tienen un puerto abierto en TCP 9100.
  • Out-File nos permite tomar la salida de PowerShell y volcarla en un archivo. Aquí, $env:UserProfile se usa para orientar la carpeta del perfil del usuario actual, y el resto especifica "Corp.txt" en el área "Mis documentos" del usuario.
respondido por el Iszi 07.06.2016 - 22:14
fuente

Lea otras preguntas en las etiquetas