Cómo obtener información de un sitio web con técnicas de análisis pasivo. Cómo obtener posibles vulnerabilidades (ficheros con usuarios, carpetas sensibles, ficheros con contraseñas, etc.). Otro análisis que forma parte de Information Gathering, para el Hacking Ético, es la obtención de información de un sitio web: tecnologías utilizadas, encabezados, etc. Usaremos sólo técnicas pasivas para que el procedimiento sea legal y no requiera de la autorización explícita de la empresa/organización propietaria del dominio.

Requisitos para hacer Information Gathering

Aunque no es un requisito imprescindible, sí que es recomendable, para todas las técnicas de Hacking Ético, disponer de una máquina virtual con Kali Linux, distribución diseñada para este cometido: Penetration Testing, Information Gathering, etc.. Cuenta con numerosas herramientas para estos propósitos y en el modo gráfico las incluye agrupadas por 13 categorías: Information Gathering, Vulnerability Analysis, Web Application Analysis, Database Assessment, Password Attacks, Reverse Enginieering, Explotation Tools, Sniffing & Spoofing, Post Explotation, Forensic, Reporting Tools y Social Engineering Tools.

En el siguiente enlace mostramos un tutorial donde indicamos cómo desplegar una máquina virtual Kali Linux en un entorno de virtualización VMware ESXi:

Si no podemos contar con una máquina Kali Linux, tendremos que instalar las herramientas que mostramos a continuación para hacer Information Gathering, y dentro de este grupo de técnicas de Hacking Ético, para obtener información de un sitio web.

Analizando el código fuente HTML de la página web

Una forma rápida y sin necesidad de usar software es visualizar el código fuente de alguna de las páginas del sitio web. Esto podremos hacerlo desde cualquier navegador, accediendo al sitio web y pulsando en «Ver código fuente de la página»:

Analizando el código fuente HTML de la página web

Analizando el código HTML podremos obtener información sobre el CMS usado (Joomla, WordPress, Drupal, OSCommerce, …), sobre la versión de JavaScript empleada, jQuery, plugin, etc.

Analizando el código fuente HTML de la página web

También podremos hacerlo por comando, buscando, por ejemplo, la palabra «wordpress». Usando curl:

Si nos devuelve texto podría querer decir que la web está hecha con WordPress.

Usando wget (sin que decargue los ficheros HTML del sitio web):

whatweb

La herramienta whatweb, que viene instalada en Kali Linux, nos proporciona información interesante para un dominio (posible sitio web). Usaremos el parámetro aggressive a valor 1, para que no haga análisis activo. Ejecutaríamos el comando:

Devolverá toda la información del sitio web: estado, IP, país, plugins, headers, meta-author, meta-generator, CMS, etc.:

Si queremos que nos muestre la información más resumida, quitaremos el parámetro -v:

Devolviendo:

whatweb

En este ejemplo lo hemos ejecutado para el dominio sin indicar HTTP o HTTPS, si lo ejecutamos para HTTPS:

Nos devuelve estos datos:

En este caso, para el HTTP vemos que devuelve [301 Moved Permanently] y para el HTTPS devuelve [200 OK]. Esto podría indicar que el sitio web tiene redirigido el HTTP al HTTPS.

pagodo

pagodo es una herramienta desarrollada en Python que permite obtener mucha información interesante de un dominio/sitio web. Las categorías que analiza:

  • Footholds.
  • File Containing Usernames.
  • Sensitives Directories.
  • Web Server Detection.
  • Vulnerable Files.
  • Vulnerable Servers.
  • Error Messages.
  • File Containing Juicy Info.
  • File Containing Passwords.
  • Sensitive Online Shopping Info.
  • Network or Vulnerability Data.
  • Pages Containing Login Portals.
  • Various Online devices.
  • Advisories and Vulnerabilities.

En Kali necesitaremos instalarla. Para ello seguiremos los siguientes pasos.

En primer lugar clonaremos el repositorio GitHub de pagodo, que se encuentra en la URL:

Accederemos a la carpeta /opt, y clonaremos el repositorio:

pagodo necesita algunas librerías adicionales de Python, para instalarlas accederemos a la carpeta de pagodo y ejecutaremos el siguiente comando:

Dado que en el fichero requirements.txt se incluyen las librerías necesarias para pagodo:

beautifulsoup4==4.10.0
yagooglesearch==1.6.0
requests==2.27.1

pagodo

Nota: si queremos instalar pagodo en un entorno virtual Python, ejecutaremos los siguientes comandos:

Una vez instalado pagodo, ejecutaremos el siguiente comando para mostrar las opciones posibles:

h, –helpshow this help message and exit
-gGOOGLE_DORKS_FILE File containing Google dorks, 1 per line
-d DOMAINDomain to scope the Google dork searches. Not required
-i MINIMUM_DELAY_BETWEEN_DORK_SEARCHES_IN_SECONDSMinimum delay (in seconds) between a Google dork search. Default: 37
-x MAXIMUM_DELAY_BETWEEN_DORK_SEARCHES_IN_SECONDSMaximum delay (in seconds) between a Google dork search. Default: 60
-lDisable SSL/TLS validation. Sometimes required if using an HTTPS proxy with self-signed certificates
-m MAX_SEARCH_RESULT_URLS_TO_RETURN_PER_DORKMaximum results to return per dork. Default 100
-p PROXIESComma separated string of proxies to round-robin through. Example:
https://myproxy:8080,socks5h://127.0.0.1:9050,socks5h://127.0.0.1:9051 – The proxy scheme must confrom
per the Python requests library: https://docs.python-requests.org/en/master/user/advanced/#proxies See
https://github.com/opsdisk/yagooglesearch for more information
-oSave JSON dictionary to pagodo_results_<TIMESTAMP>.json file. Contains more information than
pagodo_results_<TIMESTAMP>.txt
-sSave any URLS found for a dork to the pagodo_results_<TIMESTAMP>.txt file
-v VERBOSITYVerbosity level (0=NOTSET, 1=CRITICAL, 2=ERROR, 3=WARNING, 4=INFO, 5=DEBUG). Default: 4

Antes de lanzar la herramienta pagodo, revisaremos que tenemos la carpeta /opt/pagodo/dorks, que contiene ficheros con palabras clave útiles para rastrear. Pagodo viene con varios de estos ficheros: advisories_and_vulnerabilities.dorks, all_google_dorks.json, all_google_dorks.txt, error_messages.dorks, files_containing_juicy_info.dorks, files_containing_passwords.dorks, files_containing_usernames.dorks, footholds.dorks, network_or_vulnerability_data.dorks, pages_containing_login_portals.dorks
sensitive_directories.dorks, sensitive_online_shopping_info.dorks, various_online_devices.dorks
vulnerable_files.dorks, vulnerable_servers.dorks, web_server_detection.dorks.

Un ejemplo de lo que contienen estos ficheros:

Estos ficheros dorks contienen palabras y frases típicas de fallos de seguridad expuestos en los sitios webs.

Para hacer un primer análisis del sitio web ajpdsoft.com, usando uno de estos ficheros dorks, por ejemplo vulnerable_servers.dorks, ejecutaremos el siguiente comando:

La herramienta pagodo iniciará el análisis, en principio es pasivo porque realiza las búsquedas en Google y no en el sitio web indicado. También hay que tener en cuenta que el proceso puede tardar bastante tiempo, dado que pagodo hace pausas de varios segundos o minutos (aleatorios), para que Google no bloquee la IP por considerarla spam.

pagodo

En algunos casos la herramienta puede tardar días en realizar el análisis, dado que hará pausas (sleeping) de una hora o más, para evitar bloqueos de Google:

El proceso de análisis concluirá y mostrará el número de resultados encontrados:

pagodo

Obtener de forma rápida el posible sistema operativo (Windows/Linux/MacOS, Solaris) de un sitio web con ping

Una forma fácil y rápida de saber si el sistema operativo de un servidor es Windows, Linux, FreeBSD, HP-UX, MacOS, NetBSD, OpenBSD, Solaris, Stratus, SunOS, Ultrix, etc., es usar el comando ping. En base al TTL (Time To Live) obtenido, se puede sabar el SO.

Cuando hacemos un ping a un dispositivo, obtendremos, entre otros datos, el TTL:

Obtener de forma rápida el posible sistema operativo (Windows/Linux/MacOS, Solaris) de un sitio web con ping

A continuación mostramos la tabla con la información del TTL por Sistema Operativo. Algunos TTL de diferentes sistemas operativos coinciden, colocamos al principio los más usados: Linux, Windows, MacOS:

SOVersiónTTL
Linux2.0.x kerne y Red Hat 964
Linux2.2.14, 2.4 kernel255
WindowsNT 4.0, NT 4.0 SP6+, NT 4 WRKS SP 3, SP 6a, NT 4 Server SP4, ME, 98 SE, 2000 pro, Server 2003, XP, Vista, 7, Server 2008, 10128
WindowsNT 3.51, NT 4.0 SP5-, 98, 9532
MacOSX (10.5.6)64
AIX3.2 y 4.1255
Cisco254
OpenBSD2.6 y 2.7255
Solaris2.5.1, 2.6, 2.7, 2.8255
Solaris2.864
SunOS5.7255
StratusTCP_OS255
NetBSD255
Juniper64
HP-UX255
FreeBSD3.4, 4.0255
FreeBSD564

Si hacemos un ping a un PC/Servidor y nos devuelve un TTL de 128 lo más probable es que se trate de un equipo Windows y si nos devuelve un TTL de 64 lo más habitual es que se trate de un PC con Linux:

Obtener de forma rápida el posible sistema operativo (Windows/Linux/MacOS, Solaris) de un sitio web con ping

Lógicamente si el TTL coincide con el de varios sistemas operativos, con este método no podremos garantizar a ciencia cierta que se trate de uno de ellos. Pero es un método rápido para, al menos, hacernos una idea, dado que los SO habituales son MacOS, Linux y Windows.

Obtener información del servidor de un sitio web visualizado los encabezados (headers) con curl, lynx y wget

Seguimos con los métodos para obtener información sobre las tecnologías empleadas por un sitio web. Visualizando los encabezados HTTP que devuelve el sitio web, a veces, podremos obtener información sobre el aplicativo web que se utiliza, el sistema operativo y otros datos.

Para obtener los encabezados del sitio web ajpdsoft.com (para el HTTP) usaremos el siguiente comando:

Que devolverá:

Si lo ejecutamos para el HTTPS del mismo sitio web:

Vemos que nos devuelve estos otros datos:

Otra herramienta que devuelve los encabezados (headers) de una web es lynx, aunque en Kali Linux no viene instalada. Se instala de forma sencilla con:

La incluimos junto con curl porque devuelve los mismos resultados:

Obtener información del servidor de un sitio web visualizado los encabezados (headers) con curl, lynx y wget

Aunque en estos ejemplos no ha devuelto encabezados con mucha información interesante, en este otro:

devuelve la siguiente información:

Obtener información del servidor de un sitio web visualizado los encabezados (headers) con curl, lynx y wget

Analizamos los encabezados y comprobamos que podría tratarse de un servidor con el sistema operativo Ubuntu, y con el servidor de aplicaciones web Apache, versión 2.2.22. Incluso devuelve la versión de PHP, la 5.3.10-1ubuntu3.13. Estos datos podrían ser usados por un atacante para buscar posibles vulnerabilidades de la versión de software empleada (Ubuntu, Apche, PHP). Sólo tendría que buscar posibles vulnerabilidades en algún sitio web y explotarlas.

Obtener información del servidor de un sitio web visualizado los encabezados (headers) con curl, lynx y wget

Por supuesto, podremos emplear también el comando weget, que también nos obtendrá los encabezados de un sitio web:

Obtener información del servidor de un sitio web visualizado los encabezados (headers) con curl, lynx y wget

Obtener tecnologías empleadas en sitio web con plugin para Firefox y Chrome

Existen plugin para Mozilla Firefox y Google Chrome que permiten obtener información del sitio web visitado. Sólo tendremos que instarlos en el navegador, como por ejemplo Wappalizer:

Obtener tecnologías empleadas en sitio web con plugin para Firefox y Chrome