Mostrando entradas con la etiqueta Crawler. Mostrar todas las entradas
Mostrando entradas con la etiqueta Crawler. Mostrar todas las entradas

OSINTretasNoHayPastebines

Buenas amigos de la seguridad y de la informática en general. Soy Fare9, y hoy traigo una herramienta que empecé hace un poquito de tiempo, como trabajo para una asignatura de seguridad en sistemas distribuidos, en concreto un trabajo de OSINT.

Pueden encontrar el código en el siguiente github: https://github.com/Fare9/OSINTretasNoHayPastebines

Pensaba yo, así para mis adentros, qué podría hacer como trabajo de OSINT, así para conseguir una buena nota, lo típico era coger shodan, o buscar cosas o gente en google, maltego... Y pensé, bueno ya que puedes buscar a gente en google y entregarlo pues "De 0 a Stalker", pero no, era demasiado creepy y no tenía gracia, ya que no estaba realizando ningún programa. Y a un compañero se le ocurrió "¿y si haces una herramienta que haga búsquedas de pastebin en fuentes públicas?". Y dije, normalmente lo complicado de pastebin, es obtener una buena URL con información, por tanto, podemos buscar URLs en fuentes públicas.

Pensé en una aplicación que tuviera consola, ya que así todo parece más de hackiers y esas cosas, además así que se muestren cosas chulas y logos... En un futuro añadiré el poder usarlo por medio de argumentos.
Además dije, esto se merece algún título absurdo, así que ahí fue "OSINTretasNoHayPastebines" (el primer borrador la parte de "Tre", no llevaba 'r', pero era un trabajo de clase).

Está implementado por medio de módulos, los cuales heredan de una clase base, estos acceden a las fuentes de información y antes de añadir una URL, consultan a ver si devuelve respuesta desde pastebin. Como conseguí que pastebin me baneara, pues añadí el uso de la red tor, así las peticiones se harían a través de otras IPs, no es 100% fiable, pero ayuda bastante.

Actualmente, tengo implementado 4 módulos:

  • Búsquedas en pastebin: busco en los últimos subidos, y en los más visitados, además si alguno de estos es un pastebin de un usuario, busco también dentro de este usuario.
  • Búsquedas en twitter: busco ciertas cadenas en tweets, los cuales contengan URLs de pastebin, normalmente en twitter, suelen salir los enlaces a noticias más novedosos.
  • Búsquedas en google: una gran base de datos mundial de información, como no, mejor si sabes buscar en esta base de datos. Uso un par de google dorks sencillos para permitir una búsqueda más "inteligente" en google de enlaces a pastebin con contenido interesante.
  • Búsquedas en bing: más o menos como Google, tarda más, pero obtenemos una gran cantidad de información.
Para verlo todo más claro, vamos a poner imagenes y dibujitos de esos que me gustan tanto a mi:
A continuación mostraré un poco su uso:

Aqui un Logo muy chulo, que va apareciendo linea a linea, para dar esa impresión de los videojuegos de toque clásico, este logo fue una genialidad de: https://github.com/syntax-samurai/ .
Pero lo que nos viene a interesar en este post, es la siguiente consola:
Tenemos una consola básica de comandos, la cual puede obtenerse más información con el comando "help":

Si tecleamos cada uno de estos comandos sin añadir nada más podremos obtener más ayuda, pero bueno son un poco "auto-explicativos" (creo que es término existe). Tenemos diferentes variables que podemos establecer, así como distintos módulos o crawlers, antes de cargar un crawler, podemos modificar las variables, y así modificar algunos comportamientos de este.
Vamos a ver un poco que variables nos podemos encontrar, para ello podemos escribir "set" y nos devolverá todas las variables disponibles:
Vemos algunas cosillas interesantes, entre estas, pues por ejemplo time_crawl, es el tiempo que durarán algunos de los plugins, por ejemplo el de twitter, se buscarán URLs de pastebin en twitter durante un tiempo igual al establecido.
use_tor nos valdrá para realizar las comprobaciones de las URLs encontradas, a través de TOR, así como las búsquedas a través de TOR, así evitamos que pastebin nos banée. Verbosity una variable ya bastante conocida, para mostrar mayor o menor información.

Vamos por ejemplo a establecer verbosity a 3, time_crawl = 15 segundos y cargar y ejecutar el crawler de twitter. Este tiempo, normalmente tomaremos el doble, ya que en el crawler se hacen esperas activas de 2 segundos, por tanto los segundos que entran por los que salen:
Aquí la configuración básica para el crawler de twitter, este crawler tira de selenium y beautifulSoup, por tanto en el readme, viene lo necesario a instalar para el crawler.

Bien, pues lo ejecutamos a ver que pasa:
Empezamos con el logging en twitter.


Empiezan entonces las búsquedas, según algunos valores fijados en el código (se pueden modificar perfectamente).

Se checkean las URLs encontradas para ver si aún siguen existiendo en pastebin.

Al finalizar el módulo, podemos hacer "show urls" para obtener las urls encontradas:
Estas URLs pueden ser guardadas y luego cargadas de nuevo, gracias a una última función que implementé que usa numpy para guardar la lista.

Estableceremos entonces unas cadenas de búsqueda:


Y finalmente para la búsqueda y que pastebin no banée a nadie, establecemos use_tor a true, y empezamos la búsqueda con search...
Como esto tarda un rato, escribiré una lista de chistes malos de Arguiñano, para aumentar el odio irracional ante este hombre mayor:

Cual es el colmo de un astronauta? Que se quede sin espacio

- Hola quería unas gafas para leer. 
- Si ayer le vendí unas. 
- Es que ya me las he leído. 


¿Dónde estudian los niños belgas? En los coles de Bruselas

Pueden seguir viendo chistes así en esta cuenta: https://twitter.com/chistesargui?lang=es 

 Una vez acabada la ejecución podemos mirar con show reconocimientos, lo que ha salido de la búsqueda:

Como vemos, hemos obtenido muchas URLs de pastebin (es posible encontrar muchas más), y además hemos obtenido resultados al buscar cadenas en estos enlaces.
Esta herramienta es una herramienta que me llevó poco hacerla, y seguramente contenga muchos errores, para cualquier cosa pueden contactarme por twitter @Fare9, o por el correo electrónico que aparece en el código.

Espero guste, y que puedan hacer uso de estas pequeñas herramientas.

Gracias y hasta la próxima.

Python,- HTML Crawler E-mail Extractor Newbie Style

Hace unas semanas Francisco Javier me dio la oportunidad de formar parte de esta comunidad y de escribir algún articulo. Así que, empecé a curiosear la pagina, a ver perfiles de los otros autores y ver cual era la mejor manera de empezar a escribir aquí. La verdad es que no quería publicar nada hasta que no tuviera una buena idea y viendo el nivel de mis compañeros posiblemente sea el mas Newbie de todos. Suponiendo esto y puestos a lanzar la novatada, he decidido reutilizar dos script que hice con Python para mi blog y me parece que puede quedar genial. 


Scripts usados:

Lo que queremos es un script que pueda leer el código fuente de una pagina y la interprete guardando los correos electrónicos en un .txt, en el caso de detectar alguno en el código, o, si encuentra un enlace, prosiga su búsqueda en la siguiente pagina y vuelva a comprobar si hay algún correo. Bueno,  por si no queda claro aquí os dejo el código: 

import re
import urllib

web =  raw_input("pega aqui la Url: ")
emails = []

patron= re.compile('''href=["'](.[^"']+)["']''')
patron2= re.compile("[-a-zA-Z0-9._]+@[-a-zA-Z0-9_]+.[a-zA-Z0-9_.]+")

busqueda = re.findall(patron, urllib.urlopen(web).read())
busqueda2= re.findall(patron2,urllib.urlopen(web).read())

emails.append(busqueda2)
d1 =  str(busqueda2)
ListaEmails = open('correos.txt','a+')
ListaEmails.write("--> "+ d1 +" <--")
ListaEmails.close()

for i in busqueda:
busqueda3 = re.findall(patron2,urllib.urlopen(i).read())
emails.append(busqueda3)
d2 =  str(busqueda3)
ListaEmails = open('correos.txt','a+')
ListaEmails.write("--> "+ d2 +" <--")
ListaEmails.close()
busqueda4 = re.findall(patron, urllib.urlopen(i).read())

for e in busqueda4:
busqueda5 = re.findall(patron2,urllib.urlopen(e).read())
emails.append(busqueda5)
d3 =  str(busqueda5)
ListaEmails = open('correos.txt','a+')
ListaEmails.write("--> "+ d3 +" <--")
ListaEmails.close()

print "Correos Guardadas con Exito."

Si, es una forma muy chapurrera de hacerlo, pero soy un Newbie y mas con Python. Así que, estoy abierto a criticas y a posibles mejoras. 

Lo he probado con esta web, una forma genial para garantizar mi permanencia, y este a sido el resultado: 


Como veis el script ha encontrado, aparte del noreply de blogger, el correo electrónico de Francisco Javier varias veces y el de dergli. También habréis visto en el código el programa se basa en el siguiente patrón para usar la librería re (Regular Expresions) y dar con los correos [-a-zA-Z0-9._]+@[-a-zA-Z0-9_]+.[a-zA-Z0-9_.]+ Lo cual comporta que si alguien ha escrito, como es en este caso, tod@s se nos mete en la lista. 

También en la ejecución de este script después de introducir la url de la pagina web, al encontrar una url la cual no pueda abrir, el programa parará de guardar correos electrónicos mostrándonos el siguiente problema. 


La verdad es que me lo he pasado bastante bien jugando con este script y creo que si le dedico un poco mas de tiempo puede salir algo muy chulo. Para los que queráis el script os dejo en enlace a GitHub aquí abajo: 
Acepto criticas y/o propuestas de mejora. 

Sed Buenos con esto ;)