Seguridad

Explotando el método PUT para vulnerar servidores web

Explotar el método PUT es una tarea sencilla que puede ahorrarnos mucho trabajo en un pentesting

Todos conocemos los mítidos métodos GET y POST. Pero realmente hay muchos más métodos HTTP que pasan desapercibidos para los usuarios, algunos de los cuáles pueden ser muy peligrosos tener habilitados en nuestras webs.

Métodos HTTP:

  • GET:
    El método GET solicita una representación de un recurso específico.
  • POST:
    El método POST se utiliza para enviar una entidad a un recurso en específico, causando a menudo cambios en el estado.
  • HEAD:
    El método HEAD pide una respuesta idéntica a la de una petición GET, pero sin el cuerpo de la respuesta.
  • PUT:
    El método PUT reemplaza todas las representaciones actuales del recurso solicitado con la carga útil de la petición (sube un archivo).
  • DELETE:
    El método DELETE borra un recurso en específico.
  • CONNECT:
    El método CONNECT establece un túnel hacia el servidor identificado por el recurso.
  • OPTIONS:
    El método OPTIONS es utilizado para describir las opciones de comunicación (métodos HTTP) permitidos en el recurso de destino.
  • TRACE:
    El método TRACE realiza una prueba de bucle de retorno de mensaje a lo largo de la ruta al recurso de destino (utilizado para ataques XST).
  • PATCH:
    El método PATCH es utilizado para aplicar modificaciones parciales a un recurso.

Hay numerosos métodos más, pero creo que con estos por hoy tenemos suficiente. Se puede comprobar que hay mundo más allá de los métodos GET y POST que solemos utilizar. Hoy, de entre todos ellos vamos a centrarnos en el método PUT, el cuál se puede considerar el más peligroso de todos.

¿Cómo sabemos que una web tiene habilitado el método PUT?

Hay numerosas formas de conocer este dato y cada uno tiene sus preferencias. En este caso os voy a explicar los dos métodos que yo suelo utilizar.

  • Mediante el uso del método OPTIONS:

 

Vemos como al hacer una petición con este método, nos devuelve los métodos disponibles en la web.

  • Mediante el uso de nmap:

Usando uno de los script que vienen predeterminados con esta herramienta también podríamos ver los métodos admitidos por el servidor.

➜ ~ nmap -p80 –script http-methods 192.168.1.80
Starting Nmap 7.70 ( https://nmap.org ) at 2018-09-27 10:15 CEST
Nmap scan report for 192.168.1.80
Host is up (0.00041s latency).

PORT STATE SERVICE

80/tcp open http
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS DELETE TRACK PROPFIND PROPPATCH COPY MOVE LOCK UNLOCK

Es importante saber que estas opciones no son 100% infalibles ya que a veces no te dicen algún método que si está permitido, y otras te dan falsos positivos.

¿Cómo explotamos el método PUT?

Como he descrito antes, el método PUT sirve para subir una carga útil al servidor, por lo que para explotarlo únicamente necesitamos hacer una petición con este método y la carga que queremos subir. 
En este caso subimos una página HTML con un ‘Hola’. Vemos que nos da un 200 y comprobamos si de verdad ha sido creada.
 

Ya tenemos un claro ejemplo de como explotar este método.

Automatizando el proceso de explotación:

Como toda tarea informática en este mundo, se puede automatizar. Para este tipo de ataque he creado un pequeño script que realiza las siguientes acciones:

  • Crea una shell reversa.
  • Comprueba que está activo el método PUT y sube la shell al servidor en la ruta que le especifiquemos.
  • Nos pone un listener de Metasploit a la escucha para que cuando visitemos la URL de la shell consigamos una consola de Meterpreter.

Todo el que quiera usar este script, lo tiene disponible aquí.

Happy hacking ;).

Daniel Púa
@devploit
dpua@hispasec.com

Más información:

Repositorio del script en Github:






Powered by WPeMatico

Gustavo Genez

Informático de corazón y apasionado por la tecnología. La misión de este blog es llegar a los usuarios y profesionales con información y trucos acerca de la Seguridad Informática.