 |
ODBParser |
TL;DR
ODBParser es una herramienta para buscar información personal identificable (PII) expuesta en bases de datos abiertas.
SOLO debe usarse para identificar PII expuesta y advertir a los propietarios de servidores sobre el mantenimiento irresponsable de bases de datos
O para consultar bases de datos a las que tengas permiso de acceso.
¡POR FAVOR, USA DE FORMA RESPONSABLE!
¿Qué es esto?
Escribí esto porque quería crear una herramienta OSINT integral para buscar, analizar y examinar bases de datos abiertas con el fin de identificar filtraciones de PII en servidores de terceros. Parece que otras herramientas solo buscan bases de datos abiertas o las vuelcan una vez identificadas, y luego recopilan datos indiscriminadamente. Comenzó con una o dos funciones y se convirtió en lo que hay en este repositorio, por lo que el código no está tan limpio y bonito como podría ser.
Características
Para identificar bases de datos abiertas puedes:
- consultar Shodan y BinaryEdge usando todos los parámetros posibles (filtrar por país, número de puerto, lo que sea)
- especificar una única dirección IP
- cargar un archivo con una lista de direcciones IP
- pegar una lista de direcciones IP desde el portapapeles
Opciones de volcado:
- analiza todas las bases de datos/colecciones para identificar los datos que especifiques
- captura todo lo alojado en el servidor
- captura solo un índice/colección
- Usa Ctrl+C para omitir el volcado de un índice en particular
Postprocesamiento:
- convierte volcados JSON a CSV
- elimina columnas inútiles del CSV
Otras características:
- mantiene un registro de todas las direcciones IP y bases de datos que has consultado, junto con información sobre cada servidor.
- mantiene un archivo de estadísticas con el número de IPs consultadas, bases de datos analizadas y registros volcados.
- convierte volcados JSON que ya tengas a CSV
- para cada base de datos cuyo número total de registros supere tu límite, el script creará una entrada en un archivo especial junto con 5 registros de muestra para que puedas revisar y decidir si vale la pena capturar la base de datos.
- La salida predeterminada es un archivo JSON separado por líneas, con un objeto JSON en cada línea. Puedes elegir que genere un archivo JSON "correcto" usando la bandera "properjson".
- Puedes convertir los archivos a CSV sobre la marcha o convertir solo ciertos archivos después de que finalice la ejecución (recomiendo esto último). Los archivos JSON convertidos se moverán a una carpeta llamada "JSON backups" en el mismo directorio. NOTA: Al convertir a CSV, el script elimina filas duplicadas exactas y elimina columnas y filas donde todos los valores son NaN, porque eso es lo que quería hacer. Si prefieres una copia exacta del archivo JSON, siéntete libre de editar la función.
- Solo Windows Si el script devuelve una gran cantidad de índices que contienen el campo que te interesa, el script listará los nombres de las bases de datos, hará una pausa y te dará diez segundos para decidir si quieres continuar y extraer todos los datos de cada índice. He descubierto que si se devuelven demasiadas bases de datos incluso después de haber especificado los campos deseados, es probable que los datos sean falsos o registros inútiles, y normalmente puedes determinarlo por el nombre. Si no actúas en 10 segundos, el script procederá a volcar todos los índices.
- Como habrás notado, muchas personas han estado escaneando bases de datos MongoDB y secuestrándolas, a menudo cambiando su nombre a algo como "TO_RESTORE_EMAIL_XXXRESTORE.COM". El scraper de MongoDB ignorará todas las bases de datos y colecciones que hayan sido comprometidas, verificando el nombre de la base de datos/colección contra una lista de cadenas que indican compromiso.
- El script es bastante verboso (quizás demasiado), pero me gusta ver lo que está pasando. Si prefieres, puedes silenciar las declaraciones print.
Personalización
Consulta el archivo odbconfig.py para especificar tus parámetros, porque al final el objetivo es exponer los datos que TE interesan. Proporcioné algunos ejemplos en el archivo de configuración. ¡Juega con ellos!
Puedes:
- especificar qué nombres de índices o colecciones deseas recopilar indicando subcadenas en el archivo de configuración. Por ejemplo, si tienes el término "cliente", el script extraerá el índice llamado "clientes" o "cliente_datos". Recomiendo mantener estas listas en blanco, ya que nunca sabes cómo se llamarán las bases de datos que te interesan, y en su lugar especificar los campos que te importan.
- especificar qué campos te interesan: si solo quieres capturar índices de ES que tengan "email" en el nombre de un campo, por ejemplo "user_emails", puedes hacerlo. Si quieres asegurarte de que el índice tenga al menos 2 campos que te interesen, también puedes hacerlo. O si simplemente quieres capturar todo sin importar qué campos haya, también puedes hacerlo.
- especificar qué índices NO deseas, por ejemplo, nombres de índices del sistema y otros que se usan generalmente para registro básico. Se proporcionan ejemplos en el archivo de configuración.
- anular la configuración y capturar todo en un servidor.
- especificar la salida (por defecto es JSON, puedes elegir CSV).
- establecer el tamaño mínimo y máximo de la base de datos que el script volcará por defecto, y puedes establecer una bandera para anular el máximo de documentos caso por caso.
Instalación y Requisitos
- Clona o descarga en tu máquina.
- Obtén claves API para Shodan y/o BinaryEdge.
- Configura los parámetros en el archivo ODBconfig.py.
- Instala los requisitos desde el archivo.
Sugiero crear un entorno virtual para ODBParser para evitar problemas con versiones incorrectas de módulos.
Nota: Probado SOLO con Python 3.7.3 y en Windows 10.
POR FAVOR, USA DE FORMA RESPONSABLE
Próximos Pasos y Problemas Conocidos
- limpiar un poco más el código
- aplicarle multi-hilo a varios procesos
- expandir a otros tipos de bases de datos
- agregar otros motores de búsqueda de directorios abiertos (Zoomeye, etc.)
- no se puede desplazar más allá de la primera página para ciertas instancias de ES debido a la forma en que funciona ES <2.0. ¡Agradezco cualquier ayuda! Creo que lo arreglé. Abre un issue si recibes errores de scrollid
Uso
Examples: python ODBParser.py -cn US -p 8080 -t users --elastic --shodan --csv --limit 100
python ODBParser.py -ip 192.168.2:8080 --mongo --ignorelogs --nosizelimits
Damage to-date: 0 servers parsed | 0 databases dumped | 0 records pulled
_____________________________________________________________________________
optional arguments:
-h, --help show this help message and exit