¿Cómo identificar los métodos HTTP admitidos por un servidor web?

8

¿Cómo puedo identificar los diferentes métodos HTTP admitidos por un servidor web, como OPTIONS, TRACE, etc.?

He probado el comando nc en Linux. Pero no funciona. No me muestra los métodos HTTP admitidos, otros encabezados HTTP se devuelven junto con la página HTML solicitada. ¿Hay otra solución?

    
pregunta Anandu M Das 13.10.2014 - 15:16
fuente

4 respuestas

8

Según RFC2616 , el método OPTIONS debería devolver los métodos admitidos. La palabra clave es debería ya que no siempre es así. Como las publicaciones anteriores ya han señalado, cada método debe probarse por separado para estar seguro.

    
respondido por el anon 13.10.2014 - 19:18
fuente
7

Como solo hay algunos métodos (OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE y CONNECT), puede usar un script y nc para enviar una solicitud a todos los métodos permitidos y analizar los resultados:

for method in OPTIONS GET HEAD POST PUT DELETE TRACE CONNECT ; do 
    echo -e "\n\nTrying $method\n\n" 
    echo -e "$method / HTTP/1.1\nHost: server-hostname\nConnection: close\n\n" | nc server-hostname 80 | head 
    sleep 2
done

Los errores HTTP 400, 403, 405 y 406 generalmente son los tipos que se devuelven cuando se intenta utilizar un método no implementado.

    
respondido por el ThoriumBR 13.10.2014 - 15:41
fuente
5

La única forma de identificar los métodos admitidos por un servidor web es probar cada uno y evaluar la respuesta para determinar si indica que el método es compatible o no. No puedes simplemente preguntar para preguntar qué métodos soporta; no te dará una lista.

Dicho esto, hay mejores herramientas que nc. Nmap y metasploit ambos soportan el método HTTP Escaneando y esencialmente automatizando el trabajo por usted.

    
respondido por el gowenfawr 13.10.2014 - 15:37
fuente
2

Hay circunstancias en las que un servidor HTTP devolverá una lista de métodos compatibles para un recurso determinado en su Allow response header , según RFC 7231 (el new RFC para HTTP 1.1 semántica):

  • Primero en la respuesta a una OPTIONS request , ya sea en una ruta de recursos específica , o en la ruta especial * (que describiría principalmente las capacidades del servidor);
  • En segundo lugar, si se intenta un método conocido, pero no admitido por el servidor en un recurso determinado, el servidor puede responder con un 405 Código de estado del método no permitido ; en ese caso, debe proporcionar la lista de métodos permitidos en Allow encabezado de respuesta ;
  • Para cualquier otra solicitud HTTP, el servidor de origen puede devolver una lista de métodos compatibles en Allow response header ;

¿Pero qué pasa si el servidor no coopera? P.ej. ¿Ha probado una solicitud OPTIONS * , varias solicitudes GET y el servidor nunca devuelve una lista de métodos permitidos en un encabezado Allow ? O ¿qué sucede si el servidor responde, pero sospecha que está mintiendo?

Entonces no lo sabes, y tendrás que vivir con ello. Lo que harás dependerá de tu objetivo:

  • Si simplemente está tratando de usar el sistema de destino, debe actuar con cautela al asumir que solo se admite GET , y obtienen más documentación sobre cómo usar el sistema;
  • Si está realizando pruebas de penetración, puede probar todos los verbos conocidos, probar algunos menos conocidos (como PATCH ) o incluso inventa algunos de los tuyos; más generalmente, parte de la prueba sería arrojar basura al sistema para ver cómo reacciona;

Sin embargo, piense en por qué desea conocer la lista de verbos compatibles, ya que sin datos adicionales, saber qué verbos se usan es casi inútil (por ejemplo, sé que https://accounts.google.com/AddSession acepta el POST verb: ¿de qué me sirve saber el verbo si no sé en qué datos debería haber, en qué formato, etc.?

    
respondido por el Jean Hominal 14.10.2014 - 11:21
fuente

Lea otras preguntas en las etiquetas