# Más herramientas para la recopilación pasiva de información
## Shodan
En buscadores estandard como google puedo encontrar la información publicada por las empresas en web pero...dónde puedo encontrar los dispositivos que la empresa tiene expuestos??
Shodan busca todos los dispositivos conectados a internet, revisa los servicios que están ejecutándose en cada uno de estos dispositivo hace un "banner grabbing"(lo daremos...pero busquen el término!)
Es un buscador al igual que google, pero en lugar de indexar webs indexa los banners de dispositivos conectados a internet.
Probemos:
www.shodan.io
Busca el término de IOT y comenta en clase qué es lo que vas a poder encontrar en Shodan.
Hay que registrarse y de nuevo: qué sería interesante buscar para poder hacer nuestra asesoría?
Busquemos por ejemplo: ftp

Saldrán muchísimás máquinas con el ftp funcionando, si miras en la primera la de alibaba, no verás nada raro, pero pulsa en la que tiene dirección francesa:

Si entras verás el siguiente informe:

Creo que ya somos capaces de analizar lo que significa, en el caso de estar haciendo nuestro informe de Hacking a esta empresa deberíamos incluir estos datos en nuestro informe.
En este punto tengo que advertirles que Shodam permite sólo un número limitado de búsquedas por día a los usuarios, así que sean prudentes.
Comprueben de paso los precios de los planes de shodam.
Cómo podemos intentar ir filtrando para encontrar máquinas vulnerables?
busquemos `ftp nonymous country:ES`

En esos resultados verás servidores con FTP que tengan el usuario anónimo habilitado, pero...Shodan a intentando loguearse y no ha podido, cómo detecto si se ha podido conectar con el usuario anónimo.
busquemos: `ftp anonymous login ok country:pl`
Comprueba resultados y observa que algunos están marcados como "honeypot" busca el concepto y qué puede significar en estos casos.
Como lo que quiero es hacer la auditoría de una organización concreta podemos buscar: `ftp org:"Domingo Alonso" `o similar para ver qué datos aparecen de nuestra organización y empezar a auditarla con esos datos.
Existe algo parecido a la Google DOrks database para shodam, pueden echarle un vistazo a
https://github.com/jakejarvis/awesome-shodan-queries
Se dio mucho bombo a la noticia de que se podía acceder a cámaras de vigilancia y parecía que había que ser todo un hacker, pues bien, si buscas alguno de los comandos aquí indicados como:
`"Server: yawcam" "Mime-Type: text/html"`
Podrás tener acceso a webcams. No nos interesa ese hecho, sino detectar si nuestra organización a la que estamos haciendo el análisis tiene alguno de estos servicios desprotegidos ya que eso en sí mismo es ya una brecha de seguridad.
Comprueba a qué otros dispositivos podemos acceder utilizando las búsquedas de awesome-shodan-queries.
Más adelante es posible que usemos alguna herramienta que use la API de shodam para hacer consultas de manera automática, para ello tendremos que tener un usuario y proporcionar nuestra "API Key", la podrás encontrar en la web de shodam una vez estés logueado:

## Comandos relevantes para Shodan
A continuación se presentan algunos de los filtros más relevantes para el uso de Shodan:
**after:** Only show results after the given date (dd/mm/yyyy) string
**asn:** Autonomous system number string
**before:** Only show results before the given date (dd/mm/yyyy) string
**category: **Available categories: ics, malwarestring
**city:** Name of the city string
**country:** 2-letter country code string
**geo:** Accepts between 2 and 4 parameters. If 2 parameters: latitude, longitude. If 3 parameters: latitude, longitude, range. If 4 parameters: top left latitude, top left longitude, bottom right latitude, bottom right longitude.
**hash:** Hash of the data property integer
**has_ipv6: **True/False boolean
**has_screenshot:** True/False boolean
**server:** Devices or servers that contain a specific server header flag string
**hostname:** Full host name for the device string
**ip:** Alias for net filter string
**isp:** ISP managing the netblock string
**net:** Network range in CIDR notation (ex.199.4.1.0/24) string
**org:** Organization assigned the netblock string
**os:** Operating system string
**port:** Port number for the service integer
**postal:** Postal code (US-only) string
**product:** Name of the software/product providing the banner string
**region:** Name of the region/state string
**state:** Alias for region string
**version:** Version for the product string
**vuln:** CVE ID for a vulnerability string
## Censys
Esta herramienta indexa los datos distinto a Shodan en el sentido de que en lugar de indexar los banners indexa la información devuelta por Zmap que es una aplicación parecida a nmap pero para grandes estructuras.
Es interesante tener otra alternativa a shodan para contrastar información.
Puedes probar en:
https://search.censys.io/
Y ver ejemplos y documentación en:
https://search.censys.io/search/examples?resource=hosts
https://search.censys.io/search/definitions?resource=hosts
## Whois
Vamos con esta herramienta clásica en la que las empresas ya prácticamente no están publicando nada de información pero que es interesante al menos conocer.
Whois - es la base de datos de dominios registradas en las bases de datos whois, es una base datos descentralizada por las instituciones encargadas del registro de dominios.
El problema es que las empresas suelen pagar un precio adicional por ocultar sus datos reales precisamente para evitar lo que estamos haciendo ahora mismo.

Incluso si no has pagado por protección de datos, en España no se mostrarán los datos personales.
## TheHarvester
Empezamos las herramientas automatizadas para esta fase de recopilación pasiva con una de las herramientas más conocidas y más efectivas, TheHarvester
https://github.com/laramies/theHarvester
No hará falta instalarla porque en kali viene instalada por defecto.
Escribamos en la terminal: theHarvester -h

Las opciones más importantes serán:
-d Domain que nos permitirá limitar la búsqueda dentro del dominio de la organización auditada.
--shodan buscará precisamente en la web que acabamos de empezar a manejar
-b Source buscará en otras fuentes públicas
`theHarvester -d microsoft.com -l 100 -b bing,yahoo,duckduckgo,baidu `
Saldrán una serie de servicios relacionados con el dominio elegido pero no son útiles en pantalla, para guardarlos en un fichero:
```
theHarvester -d microsoft.com -l 100 -b bing,yahoo,duckduckgo,baidu
-f resultados
```
Como ves, tendremos todos los resultados en xml y json, el problema? no se visualizan muy claramente y ...no se puede buscar en Google.
En una versión antigua sí que se podía así que, vamos a instalar la buena. Pero primero algunas consideraciones:
- quiero tener un programa antiguo en python con dependencias antiguas pero si afectar al actual que también quiero usar
- la solución es instalar un entorno virtual en el que pueda instalar el programa y dependencias antiguas sin afectar al comportamiento actual de mi máquina
Cómo ves solucionar esto puede ser interesante para más adelante en otras aplicaciones así que veamos cómo instalar y manejar una aplicación de entornos virtuales:
https://docs.conda.io/projects/miniconda/en/latest/miniconda-install.html
Instalamos la última versión para Linux (no debería haber problemas), al reiniciar la terminal saldrá (base)

Esto quiere decir que estamos en el entorno de Miniconda, si queremos que se inicialice el entorno automáticamente:
conda config --set auto_activate_base false
Ahora ya aparecerá nuestro promt sin estar dentro del entorno de conda.
Vamos a crear nuestro entorno virtual:
`conda create -n "old_harvester" python=3.8.0 `
Instalará una versión antigua del python que era la que estaba cuando se creó nuestra versión antigua del harvester, lo que hagamos en este entorno no debería influir en las dependencias de nuestro entorno de trabajo.
Para activar y trabajar en el entorno recién creado:
`conda activate old_harvester`
Una vez en este entorno virtual creamos la carpeta old_harvester y dentro de ella nos descargamos la versión que aún trabajaba con google:
`wget https://github.com/laramies/theHarvester/archive/refs/tags/3.2.2.zip `
Descomprimimos el fichero con
`unzip 3.2.2.zip `
Luego entramos en la carpeta que nos crea:
`cd theHarvester-3.2.2 `
Y ya podemos instalar la versión antigua de theHarvester:
`pip install -r requirements/base.txt`
Una vez ya instalado para ejecutarlo solo necesitamos estar en la carpeta theHarvester-3.3.3 y invocar al python:
`python theHarvester.py -d microsoft -b google -l 100 -l resultados2`
Si ahora pulso:
`firefox resultados2.html `
veo que se muestra todo mucho más bonito e incluso incluye los resultados anteriores.
Podríamos buscar correos de microsoft que aparezcan en trello o en linkedin.
`python theHarvester.py -d microsoft.com -b trello -l 100 -f resultados2`
`python theHarvester.py -d microsoft.com -b linkedin -l 100 -f resultados2`
O en todas las fuentes:
python theHarvester.py -d microsoft.com -b all -l 100 -f resultados2
Verás que algunas plataformas nos piden el ApiKey que nombramos en Shodan, daremos cómo instalarlo en próximas clases.
El problema de estas búsquedas es que algunos buscadores bloquearán nuestra ip pública al detectar esta actividad.
Para salir del entorno virtual y volver al de trabajo sólo tendremos que cerrar la terminal.
## Bloqueo temporal de dirección IP pública
Después de realizar algunas peticiones con TheHarvester es posible que os aparezca un error similar al siguiente:

Este error nos indica que Google ha bloqueado nuestra dirección IP pública. Lo que quiere decir que no nos deja realizar peticiones a su servicio desde ningún dispositivo que se encuentre dentro de nuestra red local.
Este comportamiento es muy frecuente y también debe tenerse en cuenta para las siguientes herramientas que se presentan en esta sección. Si realizas muchas peticiones automatizadas en poco tiempo a servicio como Google, Bing, Shodan... utilizando herramientas como theHarvester, estos servicios suelen bloquear temporalmente tu dirección IP pública para que no los satures.
Para resolver este problema tienes varias alternativas:
1. La más sencilla es esperar un tiempo hasta que el servicio correspondiente (ej. Google) desbloquee tu dirección IP pública. Esto suele tardar unos minutos o, como mucho, unas pocas horas. Probablemente si repites el mismo ejercicio dentro de unos minutos, comprobarás que ya te ha desbloqueado la IP
2. La segunda más sencilla es reiniciar tu router. En muchas ocasiones tu proveedor de Internet te asigna una dirección IP pública de manera dinámica, por lo tanto, apagando y encendiendo el router fuerzas a que se te asigne una dirección IP pública nueva que no estará bloqueada. Ten en cuenta que esto depende de tu proveedor de Internet y que no siempre funciona (puedes comprobar cuál es tu dirección IP pública aquí: https://www.whatsmyip.org/)
3. Puedes utilizar algún mecanismo de anonimización que te permita conectarte a internet a través de otra región y, por lo tanto, con otra dirección IP pública. El mecanismo más común es utilizar una VPN. Existen muchos servicios de VPN gratuitos, por mi experiencia personal, te recomiendo ProtonVPN. Este servicio tiene una versión gratuita que puedes utilizar. (Para más información sobre privacidad y anonimato te recomiendo mi curso de Udemy: Curso de Ciberseguridad y Privacidad Online: VPN, Proxy, TOR)
4. Por último, puedes cambiar la fuente en la que realizar la búsqueda y utilizar otras diferentes. Por ejemplo, si te bloquea Google, puedes realizar las peticiones a bing o duckduckgo, para ello utiliza la opción -b de theHarvester
Estas serían las opciones más sencillas para resolver el problema. También existirían otras alternativas interesantes un poco más complejas, como, por ejemplo, utilizar un proxy público para la salida a internet o conectarte mediante la red TOR, cosa que también daremos en próximos talleres.