Cuando ingresamos nuestro número de cuenta y contraseña para iniciar sesión en un sitio web, si el sitio web le permite usar HTTP (texto sin cifrar) para la autenticación, es muy sencillo capturar el tráfico de comunicación y luego Puede analizar el tráfico capturado para obtener una cuenta de inicio de sesión y una contraseña. Este método funciona no sólo en LAN, sino también en Internet. Esto significa que un atacante podrá descifrar la contraseña de cualquier sitio web que utilice el protocolo HTTP para la autenticación.
Es fácil hacer esto en una LAN, lo que puede sorprenderle lo inseguro que es HTTP. Puede probar este método de descifrado en una red de dormitorio, una red de trabajo o incluso una red de campus, pero la red del campus debe permitir el tráfico de transmisión y su tarjeta de red LAN debe estar configurada en modo promiscuo.
Experimentemos este método en un sitio web sencillo. Realicé este experimento en la misma computadora. En la práctica, puedes hacerlo entre máquinas virtuales y máquinas físicas.
Tenga en cuenta que algunos enrutadores no admiten la función de transmisión de tráfico, por lo que puede fallar en dichos enrutadores.
Paso 1: Ejecute WireShark y capture el tráfico
En Kali Linux, puede seguir los siguientes pasos para ejecutar WireShark:
Aplicación > Kali Linux > Top 10Security Herramientas > Wireshark
En WireShark, haga clic en la opción Captura > Interfaz y luego seleccione la interfaz de tarjeta de red correspondiente. En mi ejemplo, utilicé una tarjeta de red inalámbrica USB, así que seleccioné wlan0.
Si todo va bien, entonces puedes presionar el botón de inicio y Wireshark comenzará a capturar tráfico. Si omitió este paso, comience a capturar tráfico volviendo a Capturar > Interfaz > Iniciar.
Paso 2: Filtrar el tráfico de datos POST
En este punto, Wireshark comienza a monitorear y capturar todo el tráfico de la red. Luego abro un navegador e inicio sesión en un sitio web usando mi nombre de usuario y contraseña, y cuando se completa el proceso de autenticación y el inicio de sesión es exitoso, regreso y detengo la captura de tráfico de Wireshark.
Normalmente, se capturarán una gran cantidad de datos de tráfico, sin embargo, solo nos interesan los datos POST. ¿Por qué son datos POST?
Porque cuando ingresas tu nombre de usuario y contraseña y haces clic en el botón de iniciar sesión, se generará un método POST para enviar los datos que ingresaste al servidor remoto.
Para filtrar los datos POST, puede ingresar el siguiente comando en el cuadro de entrada Filtrar:
http.request.method== "POST"
Siguiente La figura muestra un evento POST.
Paso 3: Analiza los datos POST para obtener el nombre de usuario y contraseña
A continuación, haz clic en la línea del evento POST, luego haz clic derecho y selecciona "Seguir TCPSteam".
En este punto, se abrirá una nueva ventana con contenido similar al siguiente:
HTTP/1.1 302 Encontrado
Fecha: lunes, 10 de noviembre de 2014 23 :52:21 GMT
Servidor: Apache/2.2.15 (CentOS)
X-Powered-By: PHP/5.3.3
P3P: CP ="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"
Set-Cookie: non=non; expires=jueves, 7 de noviembre de 2024 23:52:21 GMT =/ ; p>
Set-Cookie: contraseña=e4b7c855be6e3d4307b8d6ba4cd4ab91; expira = jueves, 7 de noviembre de 2024 23:52:21 GMT =/
Set-Cookie: scifuser=sampleuser expira = jueves; , 7 de noviembre de 2024 23:52:21 GMT; path=/
Ubicación: loggedin.php
Longitud del contenido: 0
Conexión: cerrar
Tipo de contenido: text/html; charset=UTF-8
En este ejemplo:
1. p>2. Contraseña: e4b7c855be6e3d4307b8d6ba4cd4ab91
A partir del valor de contraseña anterior, podemos adivinar que "e4b7c855be6e3d4307b8d6ba4cd4ab91" definitivamente no es un valor de contraseña real, sino un valor hash.
Cabe señalar que algunos sitios web que no prestan atención a la seguridad no codifican el valor de la contraseña enviado por el usuario, sino que envían directamente la contraseña en texto sin cifrar al servidor. Para este tipo de sitio web, puede obtener la información de nombre de usuario y contraseña en este paso. En el ejemplo que analicé, debemos ir un paso más allá, es decir, identificar el valor de la contraseña correspondiente al valor hash.
Paso 4: Determinar el tipo de hash
En este paso, usaré la herramienta de identificador de hash para determinar qué tipo de hash es el valor hash de la contraseña anterior. Abra la terminal, luego escriba "hash-identifier" y pegue el valor hash anterior en la terminal. Después de presionar Enter, hash-identifier le dará posibles valores coincidentes.
Porque una cosa es segura: el valor hash anterior no es una credencial almacenada en caché de dominio, por lo que debe ser un valor hash MD5. Luego puede usar hashcat o cudahashcat para descifrar el hash MD5; haga clic aquí para obtener más información.
Paso 5: descifra la contraseña hash MD5
Esta contraseña se puede descifrar fácilmente usando hashcat o herramientas similares.
root@kali:~# hashcat -m 0 -a 0 /root/wireshark-hash.lf /root/rockyou.txt
(o)
root@kali:~# cudahashcat -m 0 -a 0 /root/wireshark-hash.lf /root/rockyou.txt
(o)
root@kali:~ # cudahashcat32 -m 0 -a 0 /root/wireshark-hash.lf /root/rockyou.txt
(o)
root@kali:~# cudahashcat64 -m 0 - a 0 /root/wireshark-hash.lf /root/rockyou.txt
Debido a que la contraseña que probé existe en mi diccionario de contraseñas, hashcat puede descifrarla fácilmente.
Conclusión
De hecho, es imposible garantizar que todos los sitios web utilicen SSL para garantizar la seguridad de las contraseñas, porque para cada URL, utilizar servicios SSL cuesta dinero. Sin embargo, el propietario del sitio web (un sitio web público en el que cualquiera puede registrarse) debe al menos realizar una operación de hash durante el proceso de inicio de sesión, para al menos crear una barrera adicional cuando un atacante pueda descifrar la contraseña del sitio web.