This page looks best with JavaScript enabled

Script: EIPO Easy IP Osint

 ·   7 min read  ·  Autor - Snifer

Este script tiene como origen un par de meses atrás, cuando requeria automatizar la tarea de identificar la ubicación de una dirección IP, todo con fin de iniciar un proceso de OSINT, esta tarea puede ser realizada con diferentes herramientas, ya sea via web o desde la propia terminal realizando una consulta a cualquier sitio web como ifconfig.co que nos permite obtener los datos y luego analizarlos, pero que sucede cuando esto se va incrementando y necesitamos conocer un poco más de información, en esta entrada les muestro este proceso inicial que tuve realizando algunas tareas con Bash para llegar al objetivo, en su momento no termine de hacer todo el proceso en Bash pero por ello me dispuse a realizar la tarea en Python a lo cual me colaboro @RizelTane.

EIPO Easy IP Osint

Durante el proceso e escribir esta entrada recorde y se vino a mi mente el hacer uso de Bash para terminar la tarea, lo cual me llevo a comparar ambos escenarios y el proceso que lo vi en su momento complicado se resolvio de la manera rápida desde Bash, el nombre del script es EIPo - Easy IP Osint el cual tendra como fin hacer el proceso de OSINT de una dirección IP con ayuda de servicios de terceros y desde la propia terminal.

Esta entrada tiene el fin de ver que se puede realizar la misma tarea en diferentes lenguages de programación o scripting, aclarando que ambos scripts puede ser mejorados y este proceso de armar fue y siempre es con el fin de aprender y conocer un poco más de lo que deseo realizar, ciertamente es un script que no llega a tener mucha funcionalidades pero ayuda a automatizar tareas.

Buscando una solución

Debido a que inicialmente solo necesitaba consultar una IP, el proceso era sumamente sencillo utilizando el servicio de ifconfig.co y con CURL como se muestra a continuación.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
curl ifconfig.co/json?ip=103.228.53.155 #Comando a ser ejecutado en la terminal.

{
  "ip": "103.228.53.155",
  "ip_decimal": 1743009179,
  "country": "Malaysia",
  "country_iso": "MY",
  "country_eu": false,
  "latitude": 2.5,
  "longitude": 112.5,
  "time_zone": "Asia/Kuching",
  "asn": "AS55720",
  "asn_org": "Gigabit Hosting Sdn Bhd",
  "user_agent": {
    "product": "curl",
    "version": "7.68.0",
    "raw_value": "curl/7.68.0"
  }
}

Despues tuve que realizar consultas con un número mayor de direcciones IP, incluso considerar que sean 100 o 200? por lo tanto el proceso debe ser escalable y me permita trabajar correctamente. La solución a ello fue crear un fichero con el listado de direcciones IP y posteriormente a traves de un for iterar el comando.

1
for i in $(cat ips.list); do curl ifconfig.co $i ; done

Aquí comence a notar que ifconfig.co me bloqueaba algunas solicitudes no llegando a completar correctamente, y aún no estaba realizando el guardado de dichas consultas por si requiero luego volver a consultarlos que hago? ahi vino a la mano tee para guardar el ouput tee fichero.json, al tener varias direcciones IP y tener que repetir el proceso lo pase a una simple función en Bash que me permita iterar y realizar la tarea mientras veo como compila.

1
for i in $(cat lista.ip); do curl ifconfig.co/json?ip=$i -o $i.json; done 

Como me encanta hacer engendros inicialmente no pensé en la flag -o, recuerdo que estuve con tee por un buen tiempo hasta que me di cuenta de mi error

Pense en utilizar otros tipos de servicios como ser:

Pero tenía una limitante que era el pagar por consultar los servicios por ahora no es viable realizar dicho pago.

El siguiente paso fue extraer la información que obtenia del JSON este proceso al realizarlo en su momento lo hice con GREP como lo ven a continuación no siendo el más optimo pero al menos cumplia con la idea inicial.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
❯ grep -r "ip\|country_iso"  *.json
103.228.52.155.json:  "ip": "103.228.52.155",
103.228.52.155.json:  "ip_decimal": 1743009179,
103.228.52.155.json:  "country_iso": "MY",
103.249.28.195.json:  "ip": "103.249.28.195",
103.249.28.195.json:  "ip_decimal": 1744379075,
103.249.28.195.json:  "country_iso": "KR",
105.12.22.111.json:  "ip": "105.12.22.111",
105.12.22.111.json:  "ip_decimal": 1762399855,
105.12.22.111.json:  "country_iso": "ZA",
105.12.22.111.json:  "zip_code": "2114",
28.8.8.8.json:  "ip": "28.8.8.8",
28.8.8.8.json:  "ip_decimal": 470288392,
28.8.8.8.json:  "country_iso": "US",
8.8.8.8.json:  "ip": "8.8.8.8",
8.8.8.8.json:  "ip_decimal": 134744072,
8.8.8.8.json:  "country_iso": "US",

Recorde mientras realizaba este post que tenia la opción de utilizar ./jq que es un sed para ficheros json contando con la posibilidad de manipular el contenido aún más rapido que la tarea que hice en su momento.

Lo que recién se me ocurrio, y al final de la entrada contamos con un extra que es la implementación en Bash.

1
2
3
4
5
❯ curl ifconfig.co/json?ip=103.228.52.155 |  jq '.ip, .country_iso, .asn_org'

"103.228.53.155"
"MY"
"Gigabit Hosting Sdn Bhd"

Identificación de Nodo salida de TOR.

Vino a la mente determinar si alguna de estas direcciones IP que realice las consulta es o no un nodo de salida de TOR, inicialmente realizaba la consulta a metrics, pero consumia mucho tiempo el hacerlo durante esta etapa fui identificando dos utilidades ya desarrolladas que permitian realizar la tarea.

Pero contar con Node en una nueva instalación para una tarea como esta no venia al caso, utlizar el paquete de Python seria una alternativa adicional, así que revisando un poco en su momento llegue a lista de nodos de salidas “actualizada” que por cierto si conocen alguna otra serviria para continuar con la mejora de EIPO.

La validación para identificar se realiza comparando la lista de direcciones IP con la de TOR.

Script en Python checkIPTor.py

Como tenia la idea y el flujo casí pensado y con un par de tareas en la terminal vino al rescate Python para realizar dicho proceso y automatizar un poco más en el script se encuentra en los creditos @RizelTane que me lanzo el cable para realizar el script, por que no conocía pprint para trabajar..

EIPO Python

El script requiere que configures las siguientes variables.

  • mypath='/tmp/' : Directorio donde estará almacenado los datos.
  • jsonfolder_output=mypath +‘JsonFiles/': El directorio donde el script guardara los .json de las consultas a realizar a ifconfig.co
  • ipsfile=mypath + ‘lista.ip’ : El fichero lista.ip es el nombre del fichero que realizará la lectura.

Si señores el script aún puede ser configurado para que se almacene todos los datos de manera local y llegue a leer por datos en

Como sabrán y entenderán muchos al hacer diferentes pruebas lo que importa inicialmente es que funcione y obtenga los datos, no importa al menos inicialmente como lo realices y es por ello que algunos scripts que realizo son verdaderos engendros de mezclas, no es lo más óptimo pero debemos de pasar luego por el proceso de mejorar si lo volvemos a utilizar, o a veces como procedo es a dedicarle horas extras para mejorar y tenerlo disponible para cualquier otro momento, o integrarlo con algo que ya se tiene es por ello que Bashert (script de automatización) fue formandose con el tiempo.

Puntos a considerar

  • El script envia solicitudes cada X tiempo debido a que al mandar multiples solicitudes a ifconfig procede a realizar un baneo temporal.
  • Se genera un total de IPS por ASN registrando en un fichero por cada uno de lo que se requiere.
  • Se tiene pequeños outputs de reportes.

Todo el proceso en Bash

Y como dije anteriormente ahora que se me ocurrió recién pude usar jq que cuenta con la versión online para realizar pruebas verán en el script que el proceso es mucho más rapido y se obtiene los mismos resultados, verificando que tenemos mas de una solución y el motivo de compartir este contenido en Bash tambien es solo con el fin de mostrar que podemos tener más de una solución según la necesidad y el requerimiento incluyendo la habilidad que tengamos en algún lenguaje de programación.

EIPO Bash

Para identificar si la dirección IP es o no un NODO de TOR se realizo la descarga del fichero de las redes de TOR y comparar con grep -F -f obteniendo dicho resultado.

1
2
3
4
5
❯ echo "Direcciones IP que son nodos de salida de TOR \n" && grep -F -f torbulkexitlist ips.lst
Direcciones IP que son nodos de salida de TOR 

103.228.53.155
103.249.28.195

Mejoras y cambios a futuro

Tengo en mente ir aumentando funcionalidades al script tanto en la versión de Python como Bash teniendo como vector de pruebas rápido Bash, a continuación dejo la idea de próximos cambios.

FuncionalidadBashPython
Integrar con ipverse
Reputación
Puertos Servicios Shodan/Censys
Reporte Generado en Markdown

El script final en Bash y Python se encuentran en el Github de EIPO.

«La clave de tu futuro está escondida en tu vida diaria. » - Pierre Bonnard

Les agradaria que comparta algunos scripts de procesos de automatización?

Regards,
Snifer

Share on
Support the author with

Avatar
WRITTEN BY
Snifer
Creador del proyecto Snifer@L4b's. Consultor en Seguridad Informática.