lunes, 3 de octubre de 2016

Fingerprinting II - Métodos HTTP

Buenas compañeros,

Esta es la segunda entrada de la serie de Fingerprinting, que habíamos dejado pausada tras la anécdota del chihuahua.

El objetivo de esta prueba, que viene marcada en OWASP, consiste en averiguar los métodos HTTP permitidos por el servidor web para comprobar si se encuentra habilitado alguno que no debería y de esta manera aprovecharlos para comprometer el sitio web.

Entre los métodos HTTP se tienen:

GET: El método más común en la navegación web. Devuelve un código de respuesta y las cabeceras asociadas. Incluye el documento solicitado (habitualmente una página) en el cuerpo del mensaje.

HEAD: Idéntico al anterior, con la salvedad de que no devuelve el documento en el cuerpo de la respuesta. Se utiliza para extraer información sobre el documento solicitado o comprobar si existe sin necesidad de enviar y recibir el documento como tal. A veces sirve para bypass controles que requieren de login si se encuentran mal configurados.

POST: Pensado para publicar la información contenida en el cuerpo de la petición en el recurso donde se envía esa petición. La información que se publica y la forma de hacerlo depende completamente del servidor y el recurso. Hoy, el uso que se le da a este método es el de paso de parámetros de cliente a servidor (en muchas ocasiones para ficheros). La respuesta por parte del servidor es la misma que para una petición GET. Es recomendable emplear este método en el envío de formularios que puedan contener información sensible para evitar que aparezcan en logs.

TRACE: Implementa la función de eco para los mensajes HTTP. El servidor responde en el cuerpo del mensaje con la misma petición que el cliente ha realizado. Se utiliza para comprobar que las peticiones son recibidas correctamente. Su finalidad es la de depuración.

OPTIONS: Este método presenta las opciones que el recurso o servidor dispone o requiere. De esto se puede obtener información como por ejemplo los métodos permitidos (en la cabecera ALLOW).

CONNECT: Utilizado para crear la comunicación con un proxy HTTP (SSL).

PUT: Mediante este método es posible almacenar el documento que se envía como cuerpo de la petición en el propio servidor (físicamente en disco). Si el recurso al que se hace referencia en la petición no existe se creará y si existe se sobrescribirá, es decir, para subir ficheros.

DELETE: Al igual que el método PUT, este verbo afecta directamente al recurso al que se hace la petición. Tiene la capacidad de eliminar el elemento y dejar al servidor sin ese recurso.

Tras ver la teoría vamos a la práctica! Para estas prácticas se puede emplear el terminal de Linux con netcat pero este caso vamos a emplear Burpsuite:

OPTIONS

Devuelve información del servidor respecto a los métodos permitidos.


La imagen anterior muestra una correcta configuración, mientras que en la siguiente no sería así:



No fiarse de esta información pues no es ni completa ni veraz. En ocasiones indica que se permite pero luego no está implementado el método.

Y en otras ocasiones ocurrirá lo contrario, la cabecera ALLOW de la petición OPTIONS no mostrará métodos que realmente están permitidos e implementados... aunque luego es posible su ejecución. En resumen, no se deben descartar los métodos que no estén reflejados en esa cabecera.

Es buena práctica comprobar la respuesta del servidor ante cabeceras inexistentes:

Los método más peligrosos son PUT y DELETE pero también destaca TRACE que posibilita posible robo de cookies.



TRACE

En este método se podría incluir un parámetro asociado a un valor, por ejemplo, una cookie de tal manera que, este método devuelve como cuerpo las cabeceras de la petición del cliente, incluyendo la cabecera.



La combinación de este método HTTP con un fallo "Cross Site Scripting" en la aplicación web puede acabar en un robo de sesión de usuario, incluso si las Cookies han sido establecidas como HttpOnly. Este ataque es conocido como "Cross Site Tracing" o XST.


Para más información os recomiendo el siguiente enlace de "el lado del mal":

http://www.elladodelmal.com/2011/11/hijacking-de-cookies-http-only-con-xss.html

PUT

Se intenta subir un fichero:

curl  -T test.txt www.ejemplo.es

Es posible que devuelva un error 417 Expectation Failed.

Entonces se incluye la cabecera Expect:

curl -H Expect: -T test txt www.ejemplo.es

Si se quiere usar Burpsuite, sería:

PUT /test.txt HTTP/1.1
Host: ejemplo.es

 TEST




El uso de este método (así como DELETE) es muy intrusivo por lo que como somos "éticos" no se demuestra su uso mediante PoC, solamente el resultado cuando se encuentra correctamente configurado.

Análogamente, la FOCA identifica la presencia de métodos habilitados en su scan, por lo que se recomienda su uso para no olvidarnos ninguno.

El objetivo de esta entrada es totalmente con fines educativos y formativos, por lo tanto, no nos hacemos responsables de uso para otros fines distintos.

Saludos.

NaxHack5

La mejor defensa es un buen ataque.

No hay comentarios:

Publicar un comentario

Google Analytics