Mostrando entradas con la etiqueta ethical hacking. Mostrar todas las entradas
Mostrando entradas con la etiqueta ethical hacking. Mostrar todas las entradas

jueves, 7 de septiembre de 2017

No emails found...Well...Let´s make some!!!





Hola a todos. Por lo general cuando un cliente nos pide realizar una campaña de phishing nos pasa un archivo con los correos electrónicos de las posibles "victimas". Pero hay algunos casos en los que el cliente nos dice "Me gustaría que trates de obtener correos de la web y nos pases una lista para validarla". Perfecto, muchas veces vamos a encontrar unas lindas listas de correos utilizando por ejemplo Google Hacking, theHarvester, Foca, etc. Pero otras veces, no hay tantos correos públicados por ahí como para obtener una lista importante. Qué podemos hacer en esta situación? (Mamá ayudame, no tengo correos online, que hago???). Bueno, es hora de ponernos a cocinar cuentas de correo elctrónico:


Que ingredientes necesitamos para generar estas cuentas? Anote señora.

1. 500 grs de nombres y apellidos de los empleados.
2. 5 cucharadas del patrón utilizado para armar las cuentas.
3. Una pizca del dominio.

Obteniendo el patrón (del mal?):

El dominio, como ya sabemos, podemos obtenerlo googleando un poco o utilizando dig, entre otras opciones. En el mercado mas cercano de su casa doña.

En cuanto al patrón utilizado...Existen algunos sitios que nos devuelven rápidamente algunas cuentas de correo que encuentra en la red, las analiza y nos informan el patrón utilizado. Uno de ellos es hunter.io.

Podemos ver en la imagen el patrón obtenido:

En este caso, las cuentas se forman utilizando el nombre, luego un punto y para finalizar el apellido.

{first}.{last}@dominio.com.ar

(Otra forma de obtener una cuenta de la que podemos deducir el patrón es de los correos intercambiados con el contacto del cliente...Chau, no me digas!)

Ok, ya tenemos el patrón utilizado y el dominio. Ahora nos queda conocer los nombres de los empleados...LinkedIn allá vamos!!!

A batir: theHarvester + LinkedIn 

No olvidar batir con fuerza.

Utilizamos theHarvester con el dominio en cuestión y pasamos la opción "-b linkedin" para que realice allí las búsquedas de posibles empleados: 


Con este listado, ya tenemos una cantidad considerable de posibles correos a generar. Lo que nos queda por hacer ahora es armar las direccones con esos nombres teniendo en cuenta el patrón obtenido. Esto podemos hacerlo con un pequeño script en Linux jugando con cut, tr, sed, etc.

Eso es todo, con esto habremos obtenido una lista de correos cuando parecía no existir ninguna..A SABOREARLA!


HAPPY COOKING!!!

sábado, 28 de febrero de 2015

Armando un Port Scanner en Python!



Hola nuevamente. En esta entrada me gustaría mostrarles como crear un scanner de puertos sencillo. Como reza el título, lo haré en Python. El código se encuentra en el libro "Violent Python" , igualmente (para el que no quiera bajarse el PDF) colocaré el enlace al script al final del artículo. Para que se entienda el funcionamiento, voy a mostrar el script por porciones e iré explicando que acciones va realizando.

Para este script usaremos las librerias "optparse" y "socket"

optparse: Nos sirve para parsear opciones de línea de comando (quizás ahora suene extraño pero ya comprenderemos su funcionamiento al utilizarlo).

Warning! ---> Deprecated since version 2.7: The optparse module is deprecated and will not be developed further; development will continue with the argparsemodule. (no importa, sirve a nuestros fines jeje)

socket: Esta librería, como se imaginarán, nos permite manejar los sockets; ponerlos a la escucha, recibir, enviar,data etc.


Descripción aquí ---> http://docs.Python.org/library/socket.html

En la descripción veremos todas las funciones que posee esta librería. Las que nos interesan para nuestro port scanner son las siguientes:


socket.gethostbyname(hostname) – This function takes a hostname such
as www.google.com and returns an IPv4 address format such as
69.163.177.2.

socket.gethostbyaddr(ip address) – This function takes an IPv4 address
and returns a triple containing the hostname, alternative list of
host names, and a list of IPv4/v6 addresses for the same interface
on the host.

socket.socket([family[, type[, proto]]]) – This function creates an
instance of a new socket given the family. Options for the socket
family are AF_INET, AF_INET6, or AF_UNIX. Additionally, the socket
can be specified as SOCK_STREAM for a TCP socket or SOCK_DGRAM for
a UDP socket. Finally, the protocol number is usually zero and is
omitted in most cases.

socket.create_connection(address[, timeout[, source_address]]) – This
function takes a 2-tuple (host, port) and returns an instance of a
network socket. Additionally, it has the option of taking a timeout
and source address.

Comenzamos..

Como mencionamos arriba, utilizaremos las librerias optparse y socket, así que a darle al import:

import optparse
import   socket
from socket import *

Luego,  definimos la función que se conectará al host:

def connScan(tgtHost, tgtPort):   #definimos la función y le pasamos los parámetros 
    try:
         connSkt = socket(AF_INET, SOCK_STREAM) '''definimos la familia de socket e indicamos que es un socket TCP'''

         connSkt.connect((tgtHost, tgtPort)) #Nos conectamos al host y puerto elegidos
         connSkt.send('Hi') #Enviamos algo al destino
         results = connSkt.recv(100) #Guardamos la respuesta
         print '[+]%d/tcp open'% tgtPort
         print '[+] ' + str(results) #Mostramos los resultados
         connSkt.close()
    except:
         print '[-]%d/tcp closed'% tgtPort    '''si nos devuelve un error, mostramos en pantalla que el puerto esta cerrado'''


def portScan(tgtHost, tgtPort):  #definimos la función que escaneará el puerto
   try:
         tgtIP = gethostbyname(tgtHost) '''utilizamos la función gethostbyname para resolver el host'''
   except:
         print "[-] Cannot resolve '%s': Unknown host"%tgtHost
         return
   try:
      tgtName = gethostbyaddr(tgtIP) #Resolvemos el hostname pasandole la ip
      print '\n[+] Scan Results for: ' + tgtName[0] #Mostramos el hostname resuelto
   except:
      print '\n[+] Scan Results for: ' + tgtIP
      setdefaulttimeout(1)
   print 'Scanning port ' + str(tgtPort)
   connScan(tgtHost, int(tgtPort)) '''Llamamos a la función que se conectará para traernos el resultado open/close y luego, si está abierto el puerto realizará el banner grabbing'''

Definimos la función principal:

def main():

'''Acá esta lo que comentaba mas arriba, gracias a optparse podemos manejar mucho mejor las lineas de comando a la hora de solicitar al usuario que ingrese datos. Nos permite mostrar opciones cuando el usuario no ingresa una opción (valga la redundancia cíclica jeje) o utiliza el comando help'''

parser = optparse.OptionParser('usage %prog -H ' +  '<target host> -p <target port>')
parser.add_option('-H' , dest='tgtHost', type='string' ,  help='specify target host')
parser.add_option('-p' , dest='tgtPort', type='int' ,  help='specify target port')

(options, args) = parser.parse_args()
tgtHost=options.tgtHost
tgtPort=options.tgtPort
if (tgtHost == None) | (tgtPort==None): '''Si uno de los dos parámetros no está hacemos que vuelva a ejecutarse el script (con exit(0)), mostrando el mensaje de opciones que deben ingresarse'''
      print parser.usage
               exit(0)
        portScan(tgtHost, tgtPort)

main()

Y acá lo tenemos en acción:

Resultado al escanear el puerto 25

Resultado al escanear el puerto 80


Espero que se haya entendido algo. Cualquier cosa me consultan, no hay problema.

Pueden obtener el código, sin todos esos comentarios horribles (jeje), en:
https://sites.google.com/site/mamaquieroserpentester/home/tools (como PortScanner.py)

Eso es todo por ahora.

Saludos y Happy Hacking!