Inicio de sesión automatizado para portales cautivos en Linux

Cada vez que se conecta a una red privada, ya sea su universidad, oficina, escuela, etc., aparece la pantalla del portal cautivo donde debe ingresar sus credenciales proporcionadas por la organización. La idea es automatizar ese proceso para que cada vez que estemos conectados a cualquier router de la misma red se inicie sesión automáticamente.

Nota: En el siguiente artículo, se proporcionan los pasos que pueden no funcionar para todas las redes, pero la idea es comprender el proceso y se puede intentar, ya que la mayoría de los portales cautivos están poco estructurados, por lo que vale la pena intentarlo.

Requisitos del sistema: cualquier sistema basado en Unix, preferiblemente ubuntu Linux.

Paquetes que deben instalarse: wget , w3m . (se puede instalar usando apt-get)

Paso 1: Estudio de la página del portal cautivo. Este es uno de los pasos importantes y tiene que llevarse a cabo con entusiasmo. Haga clic con el botón derecho en el área de texto proporcionada y seleccione inspeccionar (teniendo en cuenta que el navegador que se utiliza es Chrome/Firefox). Observe el campo «nombre» en el área de texto de entrada. Debe ser algo así como ‘nombre de usuario’ o ‘contraseña’ (como se muestra en la imagen).

 Study of the captive portal page

El HTML tendrá JavaScript incrustado (¡Obviamente!). Observe las funciones que llama.

Paso 2: estudia el código JavaScript. Las funciones que vimos anteriormente deben estar en el código javascript que está usando el navegador. Se puede acceder a eso de la misma manera que se accedió al HTML. Vaya a inspeccionar y esta vez, haga clic en las fuentes y verá los códigos JS para el sitio web.

Nota: Generalmente, estos códigos estarán en una sola línea recta, por lo que es difícil de interpretar. Por lo tanto, se puede usar cualquier embellecedor en línea para formatear el código para que sea más legible.

Paso 3: ¡Encontrar el enlace! Como bien sabemos, cada solicitud HTTP POST se utiliza para enviar datos a un servidor. Entonces, ahora en el código javascript, debe haber un enlace o una consulta que se está creando y enviando la solicitud POST. Así que tenemos que encontrar la consulta. La parte importante aquí no es encontrar la consulta, sino encontrar la firma que se usa junto con el enlace.

Firma significa aquí el número de variables requeridas, su secuencia, etc. A veces, algunas variables requieren una marca de tiempo, por lo que se le puede proporcionar un valor ficticio (si es necesario, también se puede usar la marca de tiempo real). Observe que en la imagen dada, la variable «modo» tiene el valor 191, lo que significa estado de inicio de sesión y el valor 193, que significa estado de cierre de sesión. Esto se puede derivar leyendo el código con atención.

Consulta que se encontró para iniciar sesión:

queryString = “mode=191&username=” + encodeURIComponent(UserValue) + “&password=” + encodeURIComponent(document.frmHTTPClientLogin.password.value) + “&a=” + (nueva fecha).getTime() + producttype;

Consulta que se encontró para cerrar sesión:

queryString = “mode=193&username=” + encodeURIComponent(document.frmHTTPClientLogin.username.value) + “&a=” + (nueva fecha).getTime() + producttype;

Paso 4: Creación de una string de consulta propia con las variables. Una vez observada la consulta, es sencillo realizar la propia consulta con las mismas variables y rellenar los datos correspondientes. El enlace que se hizo en este caso fue el siguiente:

'mode=191&username=admin&password=root&a=1551345153461'

Una cosa importante a tener en cuenta aquí es que uno podría pensar que esta string se puede agregar a la IP del portal cautivo y luego usarse en el navegador. Por ejemplo,

http://192.168.1.8/loginpage.html?mode=191&username=admin&password=root&a=1551345153461

Pero es importante tener en cuenta que esto no funcionará en todos los casos, esto solo puede funcionar en el caso en que se utilizó la tecnología de back-end como PHP donde es posible el análisis de variables mediante el enlace.

Paso 5: Envío de la solicitud POST usando la terminal. Una vez que la terminal puede enviar la solicitud POST en Linux, se puede insertar en un script bash para la automatización. Para enviar la solicitud POST aquí, se utilizó un navegador no gráfico hecho para Linux. Hay muchos navegadores no gráficos como lynx, w3m, etc. En este caso, se utilizó el navegador w3m. Se puede estudiar fácilmente desde las páginas del manual de Linux. El uso de POST por parte de w3m está bien explicado en su página de manual (que se muestra en la imagen).

w3m-post

En este caso, se usó Ajax para comunicarse con el backend y la solicitud-respuesta estaba en XML, por lo que la solicitud POST debía enviarse a un enlace XML y no a una página HTML normal. Esto puede variar de una red a otra. La página a la que se va a enviar la solicitud se puede identificar en el mismo código JavaScript en el que se encontraron las variables. Finalmente, el comando se vería así:

w3m -post – http://192.168.1.8:8294/login.xml<<<‘mode=191&username=admin&password=root&a=1551345153461’

Paso 6: Insertarlo en un script bash. Para automatizar el proceso, es necesario crear un archivo de script bash que se ejecutará cada vez que se conecte a la red de su organización. Para hacer un script bash simple, vaya a la terminal y escriba

nano autologin

Nano es un editor de línea de comandos, que ahora creará un archivo llamado inicio de sesión automático. Ahora pegue el siguiente script en el editor, presionando ctrl+shift+V.

Nota: Para crear un archivo bash, no ingrese una extensión para el nombre del archivo, ya que Linux nunca funciona con la extensión, sino que identifica los archivos internamente. Linux se conoce a sí mismo, ya sea que el archivo sea un archivo de texto ASCII, un archivo doc o un archivo bash.

#!/bin/bash

wget -q --tries=10 --timeout=10  http://192.168.1.8:8294
if [[ $? -eq 0 ]]; then
    w3m -post - http://192.168.1.8:8294/login.xml <<<'mode=191&username=admin&password=root&a=1551345153461'
        echo "Online!"
else
        echo "Unreachable!"
fi

Explicación:

  • La primera línea del código indica que el archivo es un script bash, que se ejecutará usando bash únicamente y su ubicación es /bin/bash .
  • wget es un comando de Linux, es básicamente un programa que se usa para obtener contenido de Internet.
  • Aquí, en este caso, se usa wget para verificar la conectividad de la PC a la red, se verifica la IP que si está activa o no. Si esa IP no está activa, eso significa que el dispositivo no está conectado a la red privada de la organización y el script no se ejecutará más.
  • Las banderas para wget son el número de intentos antes de abortar, de manera similar para el tiempo de espera. -q se usa para desactivar detallado.
  • El $? es una variable de entorno que se utiliza para almacenar valores de retorno en el entorno Linux. Si wget devuelve falso, $? se convierte en 0 y el control irá a otra cosa y no pasará nada.
  • Pero cuando la IP está activa, es decir, cuando wget devolverá un valor de retorno positivo, se reflejará en $? y se ejecutará el comando w3m y el inicio de sesión se realizará con éxito.

Paso 7: Hacer que el script sea ejecutable, cada vez que se conecte a una red. Esta es la parte final, donde el script debe hacerse ejecutable, cada vez que se conecta a cualquier red. Encontrará internamente si la red es la red privada de la organización o no e iniciará sesión en consecuencia. Para este paso, vaya a su /etc/networkcarpeta.

En esta carpeta, hay 4 carpetas (a partir de la última versión de ubuntu-19.10) denominadas: if-down.d, if-post-down.d, if-pre-up.d, if-up.d. El script recién escrito tiene que ser pegado en la if-up.dcarpeta “ ”. Linux llama internamente a todos los scripts presentes en esta carpeta cada vez que se conecta a una nueva red.

Nota: Si no encuentra las 4 carpetas por defecto, cree la que necesitamos y agregue la entrada al /etc/network/interfacesarchivo. Para pegar el script, vaya al directorio donde está presente el script y escriba:

sudo cp autologin /etc/network/if-up.d

Paso 8: hacer que el archivo sea ejecutable y reiniciar la red. La propiedad del archivo debe cambiarse a root. Por lo tanto, escriba el comando:

sudo chown root:root autologin

Luego otorgue los permisos para hacer que el archivo sea ejecutable:

sudo chmod +x autologin

¡Finalmente, reinicie el administrador de red para que se realicen las nuevas configuraciones!

/etc/init.d/network-manager restart

¡Esto debería hacer que su PC pueda iniciar sesión en la red privada automáticamente, cada vez que la conecte a la red! Aunque ahora haya iniciado sesión, la ventana emergente del portal cautivo siempre puede aparecer para iniciar sesión en la red, cada vez que se conecte a una red. Para deshacerse de él, vaya a Configuración-> Privacidad y desactive la Verificación de conectividad.

Publicación traducida automáticamente

Artículo escrito por atharvakango y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *