En el contexto de la seguridad de aplicaciones web, ¿qué es el contenido? Cuando hablamos de descubrirlo, nos referimos al que no está inmediatamente visible o no se pretendía que estuviera a la vista del público.

Nos referimos, por ejemplo, a páginas y portales que solo deben ser usados por los que se encargan de mantener el sitio, versiones antiguas, ficheros de copia de seguridad, de configuración, paneles de administración, etc.

Hay 3 maneras principales de descubrir este contenido que vamos a tratar aquí:

  • Manual.
  • Automatizada.
  • Usando OSINT (Open Source Intelligence o Inteligencia de Fuentes Abiertas).

¿Cuál es el método que empieza por M?

Manual

¿Cuál es el método que empieza por A?

Automated

¿Cuál es el método que empieza por O?

OSINT

Descubrimiento manual: robots.txt

El archivo robots.txt es un documento que le dice a los motores de búsqueda qué páginas puede y no puede mostrar en sus resultados, o bien sirve para que ciertos motores concretos no accedan y registren la web.

Es una práctica común que ciertas partes de la misma, como paneles de administración, no sean accesibles.

Conectamos la máquina de la habitación y echamos un vistazo a su robots.txt, yendo a la dirección:

http://IP_Objetivo/robots.txt

¿Cuál es el directorio que se ha prohibido para motores de búsqueda?

/staff-portal

Descubrimiento manual: Favicon

El favicon es el pequeño icono que se muestra en la barra de direcciones del navegador.

Favicon

A veces, el favicon no se tiene en cuenta y, si no se personaliza, nos puede dar una pista de la framework que se está utilizando. Aquí hay una lista de favicons habituales y a qué framework pertenecen.

Una vez conocemos dicha framework, podremos descubrir más de ella.

Para este ejercicio abrimos esta dirección web y miramos su código fuente. En la línea 6 aparece el favicon.

Si ejecutamos el siguiente comando, lo descargará y obtendremos su valor hash md5 que podemos buscar en el enlace que hemos comentado antes de favicons y plataformas.

curl https://static-labs.tryhackme.cloud/sites/favicon/images/favicon.ico | md5sum

¿A cuál pertenece el icono?

Ejecutamos y obtenemos el resultado:

f276b19aabcb4ae8cda4d22625c6735f

Miramos en la base de datos y pertenece a…

cgiirc

Descubrimiento manual: Sitemap

Al revés que robots.txt, el archivo sitemap.xml de una web proporciona a los buscadores una lista con cada archivo que el dueño de dicha web desea que aparezca en el motor de búsqueda.

Puede haber partes de la web difíciles de navegar o listar páginas web antiguas que el sitio ya no usa, pero siguen funcionando detrás del telón.

Echemos un vistazo al sitemap.xml de http://IP_Objetivo/sitemap.xml.

¿Cuál es la ruta al área secreta que se puede encontrar ahí?

/s3cr3t-area

Descubrimiento manual: Encabezados HTTP

Cuando hacemos peticiones a un servidor web, este nos devuelve varios encabezados HTTP. Estos encabezados pueden contener, en ocasiones, información útil, como el software que se usa como servidor y posiblemente, el lenguaje de programación. En el ejemplo de abajo, podemos ver que el servidor es NGINX versión 1.18.0 y corre PHP 7.4.3.

user@machine$ curl http://MACHINE_IP -v
*   Trying 10.10.1.131:80...
* TCP_NODELAY set
* Connected to 10.10.1.131 (10.10.1.131) port 80 (#0)
> GET / HTTP/1.1
> Host: 10.10.1.131
> User-Agent: curl/7.68.0
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Server: nginx/1.18.0 (Ubuntu)
< X-Powered-By: PHP/7.4.3
< Date: Mon, 19 Jul 2021 14:39:09 GMT
< Content-Type: text/html; charset=UTF-8
< Transfer-Encoding: chunked
< Connection: keep-alive

Usando esta información, podemos encontrar versiones vulnerables. Vamos a probar a ejecutar el comando contra el servidor web de la habitación, habilitando la opción -v que sirve para activar el modo verbose, lo cual nos dará los encabezados.

Hacemos:

curl http://IP_Objetivo -v

¿Cuál es el valor de la bandera en el encabezado X-FLAG?

THM{HEADER_FLAG}

Descubrimiento manual: Framework stack

Una vez hemos establecido la plataforma con la que se ha hecho la web, podemos ir a la página de dicha plataforma y aprender más sobre ella.

Mirando al código fuente de la máquina de esta habitación, veremos un comentario al final de cada página, con un tiempo de carga y un enlace a la web de la framework, que es esta.

Viendo la página de documentación, nos da la ruta al portal de administración, que tiene una bandera si lo visitamos en la web de la máquina objetivo que habremos conectado para esta habitación de Tryhackme.

¿Cuál es la bandera del portal de administración?

La ruta es:

http://IP_Objetivo/thm-framework-login

Las credenciales por defecto son admin/admin, así que nos identificamos y vemos la bandera.

THM{CHANGE_DEFAULT_CREDENTIALS}

OSINT - Google Dorking

Hay recursos externos que pueden ayudar a descubrir información sobre la web objetivo. Se suele referir a ellos como OSINT (Open Source Intelligence o Inteligencia de Fuentes Abiertas) y son herramientas disponibles libremente que recogen información.

Entre ellas está el Google Dorking, que consiste en usar prestaciones avanzadas de motores de búsqueda, que permiten encontrar contenido personalizado.

Puedes, por ejemplo, buscar en un solo sitio web con el operador site: y detectar el área de administración, buscando el término «admin» en esa web. Este ejemplo quedaría así:

site:tryhackme.com admin

Esto devolvería resultados de la web Tryhackme que contuvieran el término admin. Estos operadores se puede combinar y aquí hay algunos.

Operador Ejemplo Descripción
site site:tryhackme.com Devuelve resultados que pertenecen solamente al dominio especificado.
inurl inurl:admin Devuelve resultados que tienen la palabra especificada en la URL
filetype filetype:pdf Devuelve resultados de archivos con esa extensión.
intitle intitle:admin Devuelve resultados que contienen el término especificado en el título.

¿Qué operador usamos para mostrar resultados solamente de una web especificada?

site:

OSINT - Wappalyzer

Wappalyzer es una herramienta online y una extensión de navegador que ayuda a identificar qué tecnologías usa una web, como plataforma, sistema de gestión de contenido (CMS), procesadores de pago y mucho más, incluyendo números de versiones.

¿Qué herramienta puede usarse para conocer las tecnologías de una web?

Wappalyzer

OSINT - Wayback Machine

La Wayback Machine es un archivo histórico que data de los 90. Puedes buscar un nombre de dominio y te mostrará todas las veces que este servicio ha pasado por él y guardado su contenido.

Eso puede ayudar a descubrir páginas viejas que puedan estar activas todavía en el sitio web actual.

¿Cuál es la dirección web de Wayback Machine?

https://archive.org/web/

OSINT - Github

Para entender Github, primero hemos de entender Git.

Git es un sistema de control de versiones (version control system), que traza los cambios que se hacen a los archivos de un proyecto.

Trabajar en equipo es más fácil, porque puedes ver lo que está editando cada miembro y qué cambios han hecho a los archivos. Cuando los usuarios han finalizado con esos cambios, los aplican (commit, de cometer o perpetrar esos cambios) y los suben a una localización central, llamada repositorio, para que otros usuarios puedan descargarlos desde allí hasta sus máquinas locales.

Github es una versión de Git alojada en Internet. Los repositorios pueden ser públicos o privados y tener varios controles de acceso.

Puedes usar la prestación de búsqueda de Github para buscar nombres de empresas o webs y tratar de localizar repositorios que les pertenezcan.

Una vez descubiertos, puedes acceder al código fuente, contraseñas u otro contenido que todavía no hayas encontado.

¿Qué es Git?

version control system

OSINT - Buckets de S3

Los Buckets de S3 son un servicio de almacenamiento que provee Amazon AWS, permitiendo a la gente guardar archivos e incluso webs estáticas accesibles por HTTP o HTTPS.

El dueño de los archivos puede poner permisos, hacer esos archivos públicos, privados o incluso que se pueda escribir en ellos.

A veces esos permisos se ponen de manera incorrecta y permiten que se pueda acceder a archivos a los que no se debería.

El formato de un bucket S3 es:

http(s)://{name}.s3.amazonaws.com 

Donde {name} es el nombre que decida el dueño.

Los buckets pueden ser descubiertos de muchas maneras, como encontrado la URL en la web objetivo, repositorios Github o incluso automatizando el proceso.

Un método común de automatización es usando el nombre de la empresa, seguido de términos comunes como {name}-assets, {name}-www, {name}-public, {name}-private, etc.

¿En qué formato de URL terminan los buckets Amazon S3?

.s3.amazonaws.com

Descubrimiento automatizado

Es el proceso de usar herramientas para descubrir contenido, en vez de hacerlo manualmente. Este proceso realiza miles, incluso millones de peticiones a un servidor web. Estas peticiones chequean si un archivo o directorio existe, dándonos acceso a recursos que no sabíamos que existían.

Esto se consigue gracias a listas de palabras, archivos de texto que contienen una larga lista de palabras que se suelen utilizar en ciertos casos.

Por ejemplo, una lista de palabras de contraseñas incluiría las más usadas habitualmente. Y si estamos buscando contenido, requeriríamos una lista de los nombres de directorios y archivos más habituales.

Una de las mejores «lista de listas» es la que mantiene Daniel Miessler en SecLits.

Aunque hay muchas herramientas de descubrimiento de contenido, vamos a ver 3 habituales. Nos conectamos a la máquina de ataque que proporciona la habitación de Tryhackme para atacar la máquina objetivo que también se ha configurado.

Usando ffuf

En la máquina de ataque, ejecutamos este comando:

ffuf -w /usr/share/wordlists/SecLists/Discovery/Web-Content/common.txt -u http://IP_Objetivo/FUZZ

Aunque no lo explique aquí, el término FUZZ es un placeholder, es decir, quedará sustituido en cada petición por cada término de la lista de palabras.

Por eso, al ponerlo tras la IP o dominio, nos buscará directorios y archivos.

Usando dirb

El comando más sencillo, porque no hacen falta ni operadores. Ponemos la web a atacar y la lista y ya está.

Tampoco hacen falta placeholders ni similares, porque no es tan compleja y generalista como ffuf, que se puede usar para otros ataques de fuzzing.

dirb http://IP_Objetivo/usr/share/wordlists/SecLists/Discovery/Web-Content/common.txt

Usando Gobuster

A Gobuster sí hay que pasarle operadores para que sepa qué está haciendo y qué queremos. Para empezar, si queremos descubrir directorios y archivos, debemos pasarle el operador dir, luego indicarle la dirección con –url y la lista con -w.

gobuster dir --url http://IP_Objetivo -w /usr/share/wordlists/SecLists/Discovery/Web-Content/common.txt

Usando los resultados de los comandos de arriba en la máquina de esta habitación, respondemos a las preguntas.

¿Cuál es el nombre del directorio que empieza por /mo?

/monthly

¿Cuál es el nombre del archivo de registro (log) que desubrimos?

/development.log