Cómo ejecutar scripts HTTP nmap en puertos inusuales

7

¿Cómo puedo hacer que nmap ejecute los scripts HTTP en puertos que son inusuales para HTTP, por ejemplo, el puerto TCP 123? En algo como nmap -n --script="http* ..." -p123 target nmap no hace nada excepto verificar que el puerto 123 esté abierto y no ejecute scripts contra el puerto. (Lo verifiqué con las opciones de rastreo de nmap).

¿Es HTTP? La exploración de la versión no reconoce la naturaleza del servicio, pero el resultado de la huella digital es muy claro al respecto:

==============NEXT SERVICE FINGERPRINT (SUBMIT INDIVIDUALLY)==============
SF-Port123-TCP:V=6.47%I=7%D=4/27%Time=553D8163%P=i686-pc-linux-gnu%r(Gener
SF:icLines,1BA,"HTTP/1\.1\x20400\x20Bad\x20request\r\nContent-Type:\x20tex
SF:t/html\r\n\r\n<!DOCTYPE\x20HTML\x20PUBLIC\x20\"-//W3C//DTD\x20HTML\x204
SF:\.01\x20Transitional//EN\"\x20\"http://www\.w3\.org/TR/html4/loose\.dtd
SF:\">\r\n<html><head><link\x20rel=\"stylesheet\"\x20href=\"/minishare\.cs
SF:s\"\x20type=\"text/css\"><title>400\x20Bad\x20request</title></head><bo
SF:dy><h1>400\x20Bad\x20request</h1></body><hr><p\x20class=\"versioninfo\"
[...]
    
pregunta countermode 28.04.2015 - 11:24
fuente

5 respuestas

9

Las otras respuestas aquí son muy buenas. Sin embargo, hay un par de maneras de hacer lo que quieres que funcione sin editar los scripts:

  1. Puedes enseñar a Nmap a reconocer este servicio. Las huellas digitales del servicio de Nmap están en el archivo nmap-service-probes . Nmap ya reconoce algunas versiones de MiniShare con esta línea de coincidencia, agregada en Nmap 6.00:

    match http m|^HTTP/1\.1 200 OK\r\nContent-Type: text/html\r\n\r\n.*<title>MiniShare</title>\r\n.*<td class=\"total\" colspan=\"2\">Total: (\d+) files</td><td class=\"totalsize\">([^<]+)</td></tr>\r\n</table>\r\n<hr><p class=\"versioninfo\"><a href=\"http://minishare\.sourceforge\.net/\">MiniShare ([\d.]+)</a>|s p/MiniShare http interface/ v/$3/ i/$1 files, $2 shared/ o/Windows/ cpe:/o:microsoft:windows/a
    

    Pero su servicio responde de manera un poco diferente y no coincide. Por favor siga las instrucciones que proporciona Nmap para enviar esta huella digital del servicio Para que otros usuarios se beneficien. Mientras tanto, puede construir una línea de coincidencia similar para que el servicio se identifique como "http" con -sV y se ejecutará el script.

  2. Como regla general, puede intentar actualizar a una versión más nueva de Nmap. En el momento de escribir este artículo, la versión más reciente era 6.47, por lo que esto no te ayudará, pero puede ayudar a alguien que lea esta respuesta más adelante.

  3. Puede forzar que los scripts NSE se ejecuten en todos los puertos abiertos al añadir un "+" al nombre del script. Por ejemplo, --script +http-title intentará solicitar una página y recuperar el título de cada servicio abierto en el destino. Esto puede ser peligroso y lento porque los scripts no fueron escritos para ejecutarse contra servicios arbitrarios, y pueden agotar o colapsar los servicios de destino.

Una advertencia final: la solicitud --script http* intentará ejecutar una gran cantidad de scripts que puede que no pretenda incluir, entre ellos (en la versión de desarrollo): 23 "exploit", 1 "dos" (denegación de servicio), 51 " ", y 10 scripts de categoría" externos ". Una mejor manera de especificar esto sería --script "http* and safe" o --script "http* and default"

    
respondido por el bonsaiviking 28.04.2015 - 15:03
fuente
5

Simplemente use el carácter + antes del nombre del script para forzar la ejecución de un script. Énfasis mío:

  

Hay dos características especiales solo para usuarios avanzados. Uno es    prefijo los nombres de script y las expresiones con + para obligarlos a que se ejecuten incluso   si normalmente no lo harían (por ejemplo, el servicio relevante no fue detectado   en el puerto de destino). La otra es que todo el argumento puede ser usado para   Especifique cada script en la base de datos de Nmap. Ten cuidado con esto porque   NSE contiene scripts peligrosos como exploits, fuerza bruta   crackers de autenticación y ataques de denegación de servicio.

Así que si ejecuto el comando

# nmap 127.0.0.1 -p 22 --script=+http-title.nse -d

esto forzará que el script "http-title" se ejecute en el puerto 22:

NSE: Starting runlevel 1 (of 1) scan.
NSE: Starting http-title against 127.0.0.1:22.
Initiating NSE at 14:14
NSE: Finished http-title against 127.0.0.1:22.
Completed NSE at 14:14, 0.03s elapsed
Nmap scan report for localhost (127.0.0.1)
Host is up, received localhost-response (0.000089s latency).
Scanned at 2015-04-28 14:14:07 BST for 0s
PORT   STATE SERVICE REASON
22/tcp open  ssh     syn-ack
Final times for host: srtt: 89 rttvar: 5000  to: 100000
    
respondido por el SilverlightFox 28.04.2015 - 15:17
fuente
4

En el último resultado de la prueba, el signo de interrogación ("ntp?" en lugar de "ntp") indica que nmap no pudo reconocer el servicio en ejecución. Por lo tanto, adivina que NTP solo confía en el tipo de servicio generalmente asociado a este número de puerto, pero sin ninguna confianza (de ahí el signo de interrogación).

Los encabezados enviados por este servicio son muy minimalistas:

HTTP/1\.1 400 Bad request
Content-Type: text/html

Y eso es todo. En el servidor web real, encontrará un grupo de encabezados que indican la fecha, el nombre del servidor, los parámetros de la memoria caché, etc. Aquí, simplemente no hay nada.

Supongo que, por lo tanto, no estás frente a un servidor web completo, pero tampoco:

  • Un servidor web específicamente diseñado, como una interfaz de administración remota integrada en algún dispositivo,
  • Un servidor web ofuscado (siguiendo nuestra discusión en los comentarios a continuación),
  • Otro servicio que se basa en el protocolo HTTP (un servicio web, un servidor WebDav, etc.), que prueba otras solicitudes HTTP que el GET habitual puede provocar un comportamiento interesante en tales casos.

Editar :

Para responder con mayor precisión a su pregunta, Nmap es una herramienta general, sus scripts son principalmente útiles contra servidores no confusos como una forma fácil de obtener información básica.

Aquí, el administrador hizo un esfuerzo específico para ofuscar su servidor con el objetivo de ocultar la información que necesitan esas herramientas generales. Por lo tanto, es necesario ir un paso más allá y utilizar herramientas más específicas.

Desde un punto de vista técnico, los scripts de nmap están diseñados para ejecutarse solo cuando sea necesario. El script relacionado con HTTP solo se ejecutará cuando un servicio se identifique como HTTP mediante nmap. Esto se hace mediante la declaración portrule= que encontrará al comienzo de los scripts, aquí hay algunos ejemplos que vienen de scripts aleatorios de nmap HTTP:

portrule = shortport.http    
portrule = shortport.port_or_service( {80, 443}, {"http", "https"}, "tcp", "open")

Una forma sucia, por ejemplo, sería editar estos scripts para forzar su ejecución ... pero sin un resultado garantizado. Utilice mejor la herramienta adecuada para la tarea correcta.

    
respondido por el WhiteWinterWolf 28.04.2015 - 12:10
fuente
0

Esto es lo mismo que lo que le da al puerto directamente en un navegador, ¡es un documento de texto / html! con hoja de estilo y un código de estado 400, transmitido a través de HTTP 1.1.

400 Bad Request
    The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing)

Si quisiera obtener más información acerca de lo que se está ejecutando, iría directamente allí con un navegador y vería qué otra información puede obtener. Tal vez justo después de donde lo hayas cortado

class="versioninfo

Hay varios scripts HTTP que puede ejecutar desde aquí, dependiendo de la información que desee obtener sobre el servidor web, en el formato de:

nmap --script http-enum -p 123 x.x.x.x

Fuente: enlace

Editar: dado que hace referencia a la hoja de estilo minishare.css, probablemente querrás comenzar a descubrir si es esto: enlace

    
respondido por el Jambo 28.04.2015 - 11:47
fuente
0

Establecer "portrule = shortport.http"

Abra http-enum.nse para encontrar la línea relevante.

Lea la documentación aquí: enlace

    
respondido por el ken 22.07.2016 - 06:31
fuente

Lea otras preguntas en las etiquetas