Cuando un código numérico se expresa mejor que mil palabras…

El protocolo HTTP contiene un sistema de códigos de respuestas que informan lo ocurrido con la petición enviada. Saber interpretar estos códigos, más allá del mensaje explícito, es una herramienta importante para consultor de seguridad durante un pentesting.

Hay cinco grupos de códigos estándares y todos tienen el formato XYZ. La X establece a que grupo pertenece el código y como es lógico, solo puede tener valores que van desde el uno hasta el cinco.

  • Grupo 1xx: Respuestas informativas. Indica que la petición ha sido recibida y se está procesando
  • Grupo 2xx: Respuestas correctas. Indica que la petición ha sido procesada correctamente
  • Grupo 3xx: Respuestas de redirección. Indica que el cliente necesita realizar más acciones para finalizar la petición
  • Grupo 4xx: Errores causados por el cliente. Indica que ha habido un error en el procesado de la petición a causa de que el cliente ha hecho algo mal.
  • Grupo 5xx: Errores causados por el servidor. Indica que ha habido un error en el procesado de la petición a causa de un fallo en el servidor.

Algunos códigos que con frecuencia se encuentran son:

200 (OK): El código más apreciado por un pentester, quiere decir que el proceso de petición y respuesta se realizó sin problemas y se pudo acceder al recurso solicitado.

302 (Moved Temporarily): El recurso solicitado por el navegador se encuentra en otro lugar, aunque sólo por tiempo limitado. El navegador es redirigido automáticamente a la nueva localización de ese recurso. Este mensaje lo he podido apreciar cuando accedo a una aplicación Web que utiliza el protocolo HTTPS pero que inicialmente traté de acceder a través de HTTP.

301 (Moved Permanently): El recurso solicitado por el navegador se encuentra en otro lugar y este cambio es permanente. En ocasiones puede ser un cambio real, pero en otras puede ser una redirección a un portal genérico de “Este portal no está en línea/Este dominio está en venta”, el cual finalmente devolverá un código 200. Si el pentester no tiene en cuenta esto, puede cometer el error de dictaminar que una aplicación Web cambió de URL cuando en realidad la aplicación Web está offline.

401 (Unauthorized): Nos indica que el recurso existe, se accede previa autenticación, pero esta ha fallado por algún motivo, por ejemplo, el usuario o la contraseña es errónea (o no se ha provisto ninguno de los dos). En dependencia del servidor, el mensaje puede contener más o menos información y puede utilizarse para validar si un usuario es correcto pero la contraseña es errónea, entre otras más cosas.

403 (Forbidden): Nos indica que el servidor no va a permitir la realización de esa operación, aunque estemos autenticados (Diferencia con 401). De aquí se puede interpretar que la petición es válida, por ejemplo, se trata de acceder a un directorio o fichero que existe, pero se prohíbe el acceso a estas. Quizás sea una información simple, pero nos puede indicar el tipo de configuración que tiene el CMS, por ejemplo, si es una instalación estándar o si se cambiaron o eliminaron archivos y directorios.

404 (Not Found): No indica que el cliente ha sido capaz de comunicarse con el servidor web pero el recurso que se está solicitando no ha sido encontrado, ya sea porque la ruta se escribió mal o el recurso haya sido eliminado o cambiado de lugar.

405 (Method not allowed): Indica que el método HTTP utilizado no está permitido, generalmente ocurre cuando estamos tratando de introducir un formulario a la aplicación web pero este no lo permite, por ejemplo mientras tratamos de listar los métodos xmlrpc que tiene una aplicación web.

406 (Not Acceptable): El servidor no es capaz de devolver los datos en ninguno de los formatos aceptados por el cliente, indicados por éste en la cabecera “Accept” de la petición. Esto permite (entre otras cosas) saber si el servidor o la aplicación Web tiene algún mecanismo de protección contra peticiones automáticas que no provienen de un navegador Web, pero si de un script hecho por Python o de un comando como curl o wget. Esta protección (si se tiene) puede saltarse fácilmente si se incorpora dentro del encabezado de la petición realizada con Python el “User-Agent” y el “Accept”:

opener.addheaders = [(‘User-agent’, ‘Mozilla/5.0’)]
opener.addheaders = [(‘Accept’, ‘text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8’)]

502 (Bad Gateway): El servidor está actuando de proxy o gateway y ha recibido una respuesta inválida del otro servidor, por lo que no puede responder adecuadamente a la petición del navegador. Sin comentarios.

Existen diversos portales en Internet que explican muy bien cada uno de estos códigos. Para empezar sugiero los enlaces de librosweb.esWikipedia RFC 2616.

Me gustaría saber tus comentarios y experiencias sobre  y espero que el post te haya ayudado en tus estudios.

Anuncios

10 comentarios en “Cuando un código numérico se expresa mejor que mil palabras…

  1. Pingback: Test Upload of Unexpected File Types (OTG-BUSLOGIC-008) | Behique Digital

  2. Pingback: Por qué la Autenticación Básica de HTTP/1.1 es vulnerable (+Ejemplo) | Behique Digital

  3. Pingback: Mis notas de cURL | Behique Digital

  4. Pingback: Principales ataques de tipo Username Enumeration | Behique Digital

  5. Pingback: Solución a la exposición del archivo bootstrap.inc en instalaciones de Drupal sobre Nginx | Behique Digital

  6. Pingback: La Seguridad por Oscuridad en Aplicaciones Web ¿Opiniones o conceptos? | Behique Digital

  7. Pingback: Análisis de la shellcode IndoXploit | Behique Digital

  8. Pingback: Cómo deshabilitar el XML-RPC en WordPress (Apache y Nginx) | Behique Digital

  9. Pingback: Técnica Fuzzing con OWASP ZAP: Profundizando en el análisis de Directory Traversal y detectando en lote archivos por defecto | Behique Digital

  10. Pingback: ¿Eres vulnerable a un ataque de Directory Traversal? Aplicación de la OTG-AUTHZ-001 con OWASP ZAP | Behique Digital

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s