No es el objetivo de este post exponer información sensible de alguna organización, por lo tanto, se protegieron los nombres y ubicaciones.


Hace ya algún tiempo estuve haciendo un análisis a una aplicación móvil, durante la revisión del tráfico me llamó la atención unas llamadas GET a un servicio online de georeferenciamiento en donde uno de los recursos del dominio era un fragmento de letras y números aleatorios. Estas llamadas lo que hacían era traer información de puntos georeferenciados como oficinas y lugares, entre otra información; sin embargo, lo que me causó mas inquietud es que es posible listar los demás recursos compartidos expuestos a través de este servidor web, los cuales no necesariamente tienen que ver con sitios, sino también con información sensible de diversa indole.

Landing page del servicio:

En la anterior imagen se muestra cómo se ve el servicio siendo accedido desde un navegador web y no desde una app móvil. El ‘nombre de la empresa’ o dueños de esos datos, está enmarcado en el recuadro verde en la primer parte del path de la URL y corresponde entonces a un fragmento de letras y números aleatorios, a continuación se especifica el servicio que se quiere consumir a través de la aplicación móvil.

Listado de servicios expuestos por esa entidad / empresa / usuario:

Ahora bien, en estas ubicaciones se publica información que en algunos casos tiene todas las características de datos públicos; sin embargo, hay otras ubicaciones que comparten datos sensibles de esas empresas, sus infraestructuras y hasta sus empleados.

Con el objetivo de analizar si nuestras empresas o clientes se encuentran dentro de aquellas que exponen información y en ese orden de ideas, realizar el correspondiente aseguramiento, surge entonces la primera pregunta; podríamos obtener un listado de urls que tengan este tipo de servicios indexados en Internet, teniendo en cuenta que su nombre es una cadena random? Por supuesto!. En realidad no necesitamos conocer estas cadenas randómicas, sólo necesitamos hacer uso de las consultas dork para saber qué sitios están indexados por el metabuscador partiendo de datos que sí conocemos y son estáticos, como, el dominio y uno de los path. Para este caso se nos ajusta a la perfección los parámetros inurl (con este determino cuál path o segmento de la URL quiero buscar) y site (retornará resultados basados en el dominio o web que especifiquemos).

De acuerdo con lo anterior, desde la página de google es posible entonces hacer una consulta dork, así:

site:subdominio.dominio.com inurl:/servicio/

De esta forma obtenemos un listado de sitios indexados por Google con las características especificadas.

Hasta aquí la parte fácil, ahora bien, Cómo podríamos obtener este mismo listado pero desde una terminal?

Podría parecer sencillo, pero hay que tener en cuenta algunos trucos que no conocía y que nos permitirá evitar el fatídico HTTP Error 503: Service Unavailable. Que en un navegador equivaldría a la solicitud de captcha, el cual se origina por un comportamiento sospechoso que Google detecta y controla de esa forma.

Con el siguiente fragmento en la solicitud GET y un time.sleep evitamos el anterior error:

ie=utf-8&oe=utf-8

Adicionalmente, con la variable num y la variable start controlamos la paginación, es decir, como máximo podemos acceder a 100 resultados, por lo tanto, num = 100; start = 0, implica que comenzará a mostrar resultados a partir del registro 0 y lo iremos iterando de 100 en 100, así:

for num in range(0,400,100): 

A continuación el código de la solución propuesta:

gissearch.py

En https://github.com/johanych/gissearch pueden encontrar el código completo.

Resultado de la ejecución del script.

Para finalizar, que información podemos encontrar en estos sitios? Muchos mapas con tablas de datos incluidas.!!

Mapas con datos extraños …

Estos datos se pueden acceder directamente en el mapa o se pueden acceder a través de consultas GET como la siguiente, la cual genera un listado json de 2000 registros de salarios de empleados de una empresa X.

En conclusión, no considero que esto sea un problema de los proveedores de este tipo de servicios de georeferenciamiento, creo que las empresas no son lo suficientemente conscientes de las implicaciones técnicas que tiene el uso de este tipo de servicios e incluso creo que en muchas ocasiones no saben lo que tienen público en Internet.

Es una buena oportunidad para poner a prueba nuestros skills en programación y evaluar si nuestras organizaciones conocen la información que tienen expuesta a través de los servicios de georeferenciamiento.

Saludos y hasta la próxima!!


P.D. Gracias a @dasouch por la ayuda en la construcción del script!