Guía de Shodan Desarrollo

Guía de uso de Shodan con Python

03/03/21 6 min. de lectura

ÍNDICE

  1. ¿Qué vamos a aprender en este artículo?
  2. Instalación de Shodan CLI mediante Python
  3. REST API
  4. Powershell
  5. Go, Node.js, Ruby, C++

¿Qué vamos a aprender en este artículo?

Hoy vamos a aprender cómo realizar búsquedas en Shodan utilizando su interfaz de línea de comandos (CLI), también veremos cómo podemos automatizar estas búsquedas utilizando la API para Python, y más cosillas interesantes sobre Powershell y Rest Api.

Instalación de Shodan CLI

Tal y como se indica en la web https://cli.shodan.io/, y teniendo Python 3.x instalado en el sistema, podremos realizar su instalación. Para ello bastaría con ejecutar:

  • pip install shodan

y veremos cómo se lanza la instalación.

Con ello no solo instalaremos en nuestro sistema las librerías para Python, sino también el interfaz ‘shodan CLI’, pudiéndolo ejecutar desde una ventana DOS:

Lo primero que deberemos de hacer es inicializar la interfaz de Shodan CLI. Esto se realiza mediante el comando ‘init’ e indicando la API KEY que se nos hubiera asignado en nuestro proceso de registro en la web de shodan.

Es importante que mantengamos esta clave a buen recaudo y que no la compartamos.


Si no disponéis de la APKI key, podéis obtenerla mediante la creación de vuestra propia cuenta: https://account.shodan.io/

Una vez iniciado el interfaz podremos realizar consultas mediante, por ejemplo:

  • shodan search <cadena_a_buscar>

Y de esta forma podemos ver qué tipo de servicios están registrados en Shodan y bajo qué sistemas, incluyendo su dirección ip, puerto, banner de identificación del servicio, etc

Por ejemplo, podríamos buscar sistemas bajo S.O. Ubuntu, o con los servicios de ‘remote desktop’ activos y quizás por ejemplo servicios SSH a la escucha por el puerto 22.

¿Y cómo podría hacerse esto mismo mediante Python?

Bueno, pues en primer lugar dentro de nuestro script necesitaremos importar la librería de ‘shodan’ junto con el resto de las librerías que podamos necesitar:

Después vamos a construir una aplicación que pueda buscar, por ejemplo, por dirección ip (ya sabéis, para buscar nuestra propia ip o ver si alguno de nuestros dispositivos está registrado en Shodan), o por servicio:

Para ello definimos un módulo “main” desde el cual gestionaremos el paso de argumentos (-i y -s) para filtrar las consultas por “ip” o por “servidor”. Y todo ello con la opción de “try/except” para el control de errores:

Y ahora a modo de ejemplo y para profundizar un poco más nos centraremos en las búsquedas por dirección ip.

El módulo que hemos definido para ello (ipshodan_query) será el encargado de hacer la búsqueda por dirección ip.

Lo primero que tenemos que definir es la API KEY (ya vimos antes como solicitarla) para realizar la conexión. En este caso crearemos una variable para almacenar esa información y la llamaremos, por ejemplo: “ShodanKeyString”. Una vez la tengamos, podremos establecer la conexión mediante el comando “Shodan”:

Después, para poder manejar toda la información de salida podemos elegir los campos que nos interesan indicando los campos del diccionario.

Podéis encontrar más información sobre la API de Shodan en el siguiente enlace: https://shodan.readthedocs.io/en/latest/

Después, si por ejemplo nos centramos en la parte de “server”, podemos realizar una búsqueda similar:

Pero en este caso, podemos utilizar los “facets” de Shodan para obtener inventarios por número de servidores, o un ranking donde, se muestren los sistemas operativos más utilizados, o en definitiva que los resultados cumplan ciertos criterios. Todo ello se realiza mediante “Shodan.Shodan.Count()”.

Como se muestra en el ejemplo elegimos 2 elementos para obtener estadísticas, y a modo de ejemplo, la salida podría ser similar a algo de este tipo:

En resumen, las posibilidades son bastante amplias y todo depende de lo que vayamos a necesitar. Por ello es importante leer la documentación oficial y probarlo.

REST API

¿Conocéis lo que es REST (REpresentational State Transfer) API? Bueno, por simplificarlo bastante os comentaré que es una interfaz web a través de la cual podemos realizar consultas, obtener información y en general, interactuar con la web.

Podéis echar un vistazo a este enlace para ahondar un poco más en el tema que os aseguro resulta interesante: https://developer.shodan.io/api

Powershell

¿Os sentís más cómodos trabajando con PowerShell? ¿Y si hiciéramos también este tipo de consultas a Shodan mediante Powershell?

Para ello sería tan sencillo como acceder a este repo de GitHub y descargar un módulo que alguien ya se ha currado.  https://github.com/darkoperator/Posh-Shodan

Pero que en definitiva parten de la base que ya hemos comentado sobre métodos basados en REST API, ya que simplifican la sintaxis.

Y que mediante el método de “Invoke-RestMethod” permite el envío de las consultas a un servicio web RESTful: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/invoke-restmethod?view=powershell-7.1

De hecho, estos métodos de PowerShell se suelen utilizar para operar con cualquier servicio basado en la arquitectura REST.

Go, Node.js, Ruby, C++

Y al igual que ocurre con Powershell, existen en GitHub repositorios donde diferentes colaboradores han codificado librerías para utilizarlas en diferentes lenguajes desde el lado de los clientes: https://developer.shodan.io/api/clients

Y esto es todo por hoy. Espero que os haya resultado interesante el artículo.

Javier Gomez

Javier Gómez

Santander Global Tech

Ingeniero de sistemas con más de 20 años de experiencia en diferentes roles como arquitecto de sistemas, gestionando soluciones de virtualización de Apps & VDIs y proporcionando soluciones end-to-end, así como administrando sistemas y automatizando tareas mediante PowerShell.

Me considero una persona inquieta y un infatigable explorador del universo IT, que ha sabido hacer de su trabajo su pasión.

 

👉 Mi perfil de LinkedIn

 

Otros posts