¿Cómo puedo probar que he deshabilitado correctamente los métodos HTTP innecesarios?

4

Estoy creando una aplicación basada en web y deshabilité algunos de los métodos HTTP que no son necesarios para el sitio web (específicamente, OPTIONS , HEAD y TRACE ).

Pongo esto en el httpd.conf de mi xampp para probar si esto funciona:

RewriteEngine On
RewriteCond %{REQUEST_METHOD} !^(GET|POST|PUT)
RewriteRule .* - [R=405,L]

¿Cómo sabré si realmente están desactivados? ¿Cómo puedo probar que esta configuración funciona correctamente? Soy nuevo en la administración del lado del servidor.

    
pregunta Vainglory07 19.11.2013 - 08:10
fuente

5 respuestas

6

@Owen lo detectó, pero solo para mostrar un ejemplo de cómo hacerlo usted mismo:

$ telnet localhost 80
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
TRACE / HTTP/1.0

HTTP/1.1 405 Method Not Allowed
Date: Tue, 19 Nov 2013 12:11:40 GMT
Server: Apache/2.2.22 (Linux/SUSE)
Vary: accept-language,accept-charset
Accept-Ranges: bytes
Connection: close
Content-Type: text/html; charset=iso-8859-1
Content-Language: en
Expires: Tue, 19 Nov 2013 12:11:40 GMT

El TRACE / HTTP / 1.0 es lo que escribes, seguido de dos nuevas líneas. La primera línea de la respuesta ( 405 Método no permitido ) le dice que el servidor web no acepta TRACE.

Saber cómo realizar una solicitud de los diferentes métodos puede ser difícil si aún no conoce HTTP; El proyecto OWASP tiene algunos ejemplos sobre cómo Probar métodos HTTP que pueden ayudarlo. .

    
respondido por el gowenfawr 19.11.2013 - 13:17
fuente
4

Puedes usar una herramienta como netcat o telnet para hacer esto desde la línea de comandos.

Si prefiere evitar la línea de comandos, o los comandos nuevos con los que no está familiarizado, utilice herramientas como POSTMAN te permitirá formar comandos HTTP personalizados en un navegador y ver el resultado.

También vale la pena señalar que los comandos se pueden deshabilitar en su mayoría con comandos en httpd.conf, y que esto podría ser preferible. Por ejemplo, TraceEnable Off deshabilitará el comando TRACE.

    
respondido por el Owen 19.11.2013 - 11:21
fuente
3

Este paso en el OWASP Guía de prueba (v4) muestra cómo hacer esto en detalle utilizando la netcat original :

$ nc www.victim.com 80 
OPTIONS / HTTP/1.1
Host: www.victim.com

HTTP/1.1 200 OK
[...]
Allow: GET,HEAD,POST,OPTIONS,TRACE

Esto se basa en el servidor que soporta OPTIONS , y en el informe de la lista compatible, no siempre es así (como está a punto de descubrir), pero debería funcionar bien con un Apache no endurecido. Uno podría "endurecer" incorrectamente un servidor web eliminando el método OPTIONS y nada más, y la mayoría de los escáneres no notarán el problema.

También puede usar netcat de GNU (antiguo y sin mantenimiento ahora), o mejor aún, ncat que admite SSL / TLS: ncat --ssl www.victim.com 443 .

También es posible usar el script nmap enlace , pero esto solo es realmente útil para realizar pruebas de antemano (ya que se niega a continuar si OPTIONS no proporciona una lista de métodos):

nmap -vvv --script=http-methods.nse \
     --script-args http-methods.retest=1 -p 80,443 www.victim.com

Ya que está usando Apache httpd (incluido con XAMPP), como alternativa a mod_rewrite también puede usar el núcleo LimitExcept para proporcionar un filtrado similar de los métodos de solicitud. Tenga en cuenta que deshabilitar TRACE puede hacer que el servidor HTTP no cumpla con la especificación (aunque debería estar bien si devuelve "405 Método no permitido" como lo está haciendo, o "501 No implementado"). GET y HEAD son los únicos dos métodos de solicitud obligatorios para un Servidor "de propósito general".

Si tiene perl con lwp, y el comando GET está instalado, puede enumerar estos usted mismo sin depender de OPTIONS en absoluto:

for mm in GET HEAD PUT POST DELETE OPTIONS PATCH TRACK TRACE PATCH; do
  printf "\n\n$mm\n======\n"
  GET -USf -m $mm http://www.victim.com/does/not/exist/OTQ4NzEzMzgxNTg3NzE3NTg1MzA2MzkK
done

Necesitará inspeccionar el código HTTP para cada uno, 405 y 406 son indicadores de que un método no está permitido. La lista de métodos anterior está incompleta, WebDAV agrega muchos más métodos y vea también el registro de métodos HTTP de la IANA (también existen los propietarios, hubo al menos un método con prefijo X-MS- en las versiones anteriores de MS-Exchange).

Finalmente, hay una herramienta en línea útil que escanea de forma remota su sitio web y produce un informe detallado aquí: enlace . Esto también solo utiliza el método OPTIONS .

    
respondido por el mr.spuratic 19.11.2013 - 13:21
fuente
2

Si bien esta pregunta tiene muchas respuestas válidas y buenas, otro enfoque que podría tomar es posiblemente obtener el complemento LiveHTTPHeaders para Firefox y luego reproducir sus solicitudes al sitio web, con el nuevo verbo HTTP.

Esta técnica a menudo se conoce como manipulación de verbos HTTP y puede ser bastante útil cuando se realiza una prueba de prueba.

Aquí hay una secuencia de comandos de python rápida que escribí, que recorre una lista de verbos HTTP, obtiene una respuesta y los imprime

    
respondido por el infosec 06.12.2013 - 03:01
fuente
1

Otra forma de hacerlo es usar el popular cliente HTTPie, también conocido como http .

$ http TRACE https://127.0.0.1 fooHeader:barValue
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 257
Content-Type: message/http
Date: Mon, 20 Nov 2017 19:51:56 GMT
Server: Apache/2.4.27 (Amazon) mod_wsgi/3.5 Python/2.7.12

TRACE / HTTP/1.1
host: 127.0.0.1
Accept: */*
Accept-Encoding: gzip, deflate
fooHeader: barValue
User-Agent: HTTPie/1.0.0-dev
Connection: keep-alive

Observe cómo responde y cómo se repite también el encabezado personalizado.

    
respondido por el hangtwenty 20.11.2017 - 20:57
fuente

Lea otras preguntas en las etiquetas