domingo, 24 de diciembre de 2017

Santa trajo muchos libros y tutoriales para compartir, +75 GB de informacion

La navidad ya llega y hace poco estuve subiendo mis archivos que he recolectado desde el 2015, son unos 75 GB en libros, tutoriales, videocursos, etc.



Los he separado por carpetas como las he ido juntando y no necesariamente la informacion pertenece a la carpeta que indica, pues algunos libros tienen informacion de temas variados pero he tratado de que sea lo mas aproximado a eso. 



Aun me faltan subir la mitad de los archivos pero en el transcurso de los dias espero completarlo.




Sin mas que decir, pueden ver los archivos desde las opciones de "Descargas" en el menú de navegación o en el siguiente enlace:



Feliz navidad y happy hack :D 



domingo, 17 de diciembre de 2017

Enviar un e-mail desde Python

Veamos como podemos enviar un correo electrónico desde Python utilizando la librería smtplib. Para el ejemplo de hoy usaremos la librería smtplib de Python para enviar un correo electrónico desde una cuenta Gmail, como recomendación usen una cuenta que no les sirva para enviar los correos.



Antes de todo debemos configurar nuestra cuenta, para que permita el acceso de aplicaciones menos seguras, es decir, que nos permita autenticar nuestra cuenta desde nuestro script en python.

Para ello nos dirigimos a nuestra cuenta de Gmail y habilitamos la opción "Permitir el acceso de aplicaciones menos seguras":




Ahora si podemos loguearnos, luego necesitaremos crear un archivo que contendrá el mensaje que vamos a enviar, en mi caso yo cree un archivo llamado "body.txt"  que contiene el siguiente mensaje:



El cual debemos indicar la ubicacion en nuestro script:

import time, datetime
import smtplib

file_log = '/home/paolo/Escritorio/body.txt'

def SendEmail(user, pwd, recipient, subject, body):
  
  gmail_user= user
  gmail_pass = pwd
  FROM = user
  TO = recipient if type(recipient) is list else [recipient]
  SUBJECT = subject
  TEXT = body
  
  message = """\From: %s\nTo: %s\nSubject: %s\n\n%s
  """ % (FROM, ", ".join(TO), SUBJECT, TEXT)
  try:
    server = smtplib.SMTP("smtp.gmail.com", 587)
    server.ehlo()
    print server.ehlo()
    server.starttls()
    server.ehlo()
    print server.ehlo()
    server.login(gmail_user, gmail_pass)
    print("logueado")
    server.sendmail(FROM, TO, TEXT)
    print("enviando")
    server.close()
    print ('Correo enviado satisfactoriamente!')
  except Exception as e:
    print(e)

def FormatAndSendLogEmail():
  with open(file_log, 'r+') as f:
    actualdate = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    data = f.read().replace('\n', '')
    data = 'Log capturado a las: '+ actualdate + '\n' + data
    print(data)
    SendEmail('unacuentafake@gmail.com', 'clavedelacuenta', 'correoamandar@gmail.com',
              'Nuevo log - '+actualdate, data)
    f.seek(0)
    f.truncate()
    


FormatAndSendLogEmail()
print("fin")


Enviando un e-mail


En nuestro script tenemos 2 funciones (una para pasarle los datos que requiere: FormatAndSendLoEmail y otra la funcion en si que envia el e-mail: SendEmail).

Lo primero que debemos hacer es modificar la variable de nuestro archivo que contiene el mensaje a enviar:

file_log = 'ruta/body.txt'


Luego debemos modificar los datos que pasamos a la funcion SendEmail:

SendEmail('unacuentafake@gmail.com', 'clavedelacuenta', 'correoamandar@gmail.com',
              'Nuevo log - '+actualdate, data)


Ademas si deseamos hacerlo con otro servidor de correo, debemos configurar esta parte
del código, en el caso de Gmail es asi:

server = smtplib.SMTP("smtp.gmail.com", 587)

Y por ultimo correr nuestro Script:




Si no tenemos ningún error, significa que todo ha salido bien.
Ahora veamos al correo enviado:




Y pues eso es todo, así de sencillo. Si no les aparece el correo en la bandeja
de entrada, revisen en Spam, por lo general aparece ahí.

domingo, 10 de diciembre de 2017

Hilos en Python - Brute force

El trabajo con threads se lleva a cabo en Python mediante el módulo thread. Este módulo es opcional y dependiente de la plataforma. 

Pero además de thread, también contamos con el módulo threading que se apoya en el primero para proporcionarnos una API de más alto nivel, más completa, y orientada a objetos y es el que utilizaré para el ejemplo de hoy, un programa que realizará fuerza bruta utilizando un diccionario para encontrar la clave de algunos usuarios utilizando hilos (para mas informacion de hilos en python click aqui). 


Para el ejemplo primero he montado un servidor utilizando el framework web Django, el cual contiene un formulario de login con el siguiente html:


En una publicación anterior ya explique como realizar un login con Python (
ver aqui) , así que ahora cree mi propio login, uno sencillo para poder hacer el ejemplo en donde solo requiere 3 datos por método POST (user, clave, ingresar).

Aplicando fuerza bruta


Bueno para realizar el ataque por fuerza bruta, he creado algunos usuarios:


Ademas de un diccionario con las posibles claves de estos usuarios, para el ejemplo solo he creado 11 claves como prueba de las cuales entre ella están la de los usuarios que probare:



El código lo pueden ver desde el repositorio ver aqui. Podemos ver que se utilizan los 3 parámetros mencionados que son enviados por método POST:

payload = {
"user":user,
"clave":clave,
"ingresar":"Ingresar"
}
response = requests.post(url, data=payload)

Nuestro formulario se vería así:



Donde una vez que accedimos, nos mostrara un mensaje en un etiqueta <p> con id="info":


A lo cual debemos evaluar en nuestro programa para saber si los datos ingresados han sido correctos o no. Eso lo evaluaremos usando BeautifulSoup, en donde obtendremos el código en la etiqueta <p id="info"> de no existir significa que no logramos acceder y por lo tanto nuestra clave es incorrecta:




Utilizando hilos para validar múltiples cuentas:


Como ultimo paso, he utilizado 2 hilos para a la vez ir buscando las claves de 2 de los usuarios creados, esto se puede hacer para muchos mas usuarios o dividir en hilos las posibles claves de un usuario:



Para empezar a ejecutar un hilo, se utiliza su metodo hilo.start() y una vez realizado todo, probamos el programa:



Bueno, el programa te muestra tanto las claves incorrectas como la clave correcta. Los usuarios a probar son "prueba" -> "micontra123" y "unusuario" -> "clave123". 




Enlaces: