El libre pensamiento para un internet libre

No estas registrado.  

Anuncio

Wifi-libre.com: El libre pensamiento para un internet libre / Regístrese ahora

#1 28-04-2021 18:23:19

Miguelillo0
Usuario

Registrado: 28-04-2021
Mensajes: 5

HalfHandshaker - Obtener handshake de redes fuera de alcance!

HalfHandshaker

Muy buenas, antes que nada, saludos al foro!  wink

A mediados del año pasado publiqué esta herramienta. Para ser sinceros, lo que subí (era una beta) era bastante chapucero y presentaba incompatibilidades a puñados.
Por eso, hace un par de días me propuse pulir un poco la herramienta y, por fin, sacarla de la versión "Beta 0.5" en la que llevaba más de nueve meses roll

El caso es que tras hacerle unas reformas, ahora, ya únicamente se necesita UNA INTEFAZ y NO SE NECESITA MODO MONITOR.


separador.png
banner.png

El objetivo del script es obtener handshakes atacando al cliente, sin necesidad de tener alcance a la red en cuestión. Pongamos un ejemplo de como funciona: digamos que Juan, nuestro vecino, trabaja en las oficinas de Microsoft, y queremos sacar la contraseña de la wifi de las oficinas, pero no podemos ir allí (a las oficinas) con el ordenador; con está herramienta crearemos una red con el nombre "OficinasMS-3", ya que sabemos el nombre, y Juan, como tiene ese nombre de red memorizado en su teléfono, se conectará automáticamente mandándonos la contraseña cifrada, que después, podremos crackear con hashcat, aircrack o lo que queramos.

Concepto:
gif.gif

Video de demostración:
Video demo
separador.png

El script levanta la red WPA2 usando hostapd y captura el tráfico con tcpdump y, acto seguido, tras tener 2 de los 4 paquetes EAPOL del handshake, lo convierte a hccapx con un script en python que he apañado. El problema radica en que todavía no he probado mucho el script que convierte de cap a hccapx, por lo que, aunque no debería dar problemas, si da problemas avisad por favor. De todas formas pronto publicaré como generar un hccapx manualmente a partir de una captura de red, por si a alguien le saca de un apuro.

separador.png

Descarga:

GitHub -> https://github.com/Miguelillo000/halfhandshaker (Si le dais una estrellita es de agradecer)

Un saludo y muchas gracias! big_smile

Ultima edición por Miguelillo0 (28-04-2021 18:44:14)

Desconectado

Anuncio

Wifi-highpower.es es distribuidor oficial de Alfa Network

#2 28-04-2021 18:46:48

kcdtv
Administrator

Registrado: 14-11-2014
Mensajes: 5,390

Re: HalfHandshaker - Obtener handshake de redes fuera de alcance!

Muchas gracias a ti por compartir tu trabajo y bienvenido a wifi-libre. biere
Tú presentación está muy bien hecha y se nota que le has puesto esfuerzos y cariño a tu código. smile

Desconectado

#3 29-04-2021 11:16:08

Miguelillo0
Usuario

Registrado: 28-04-2021
Mensajes: 5

Re: HalfHandshaker - Obtener handshake de redes fuera de alcance!

Muchas gracias kcdtv!
Un placer formar parte de este foro! biere

Desconectado

#4 29-04-2021 13:21:27

kcdtv
Administrator

Registrado: 14-11-2014
Mensajes: 5,390

Re: HalfHandshaker - Obtener handshake de redes fuera de alcance!

Hola smile
  Solo una pequeña sugestión, sin importancia: ifconfig se considera cómo obsoleto (oficialmente desde... 2011)  y no está instalado por defecto en las distribuciones hoy en día.
Ifconfig es obsoleto... ¡Actualiza tus sintaxis con el comando ip!
En tu script usas ip que es el sucesor oficial de ifconifg y esto es lo recomendable. 
En tu función check_interface haces

if [ -z "$(ip link | grep $interface:)" ]; then
	error=1
fi

  Pero luego usas ifconfig en random_mac y original_mac para levantar y bajar las interfaces
Y esto lo puedes hacer perfectamente con ip. smile
  Tomando en ejemplo random_mac

  • En lugar de

    # Mac random
    function random_mac(){
    	printf " $s1 $changing_mac "
    	ifconfig $interface down > /dev/null && macchanger -r $interface | grep "New" | awk -F "       " '{print $2}' | head -c 18 && ifconfig $interface up > /dev/null ||  echo " /\ ERROR /\\"
    	echo
    	echo
    }
  • Haces

    # Mac random
    function random_mac(){
    	printf " $s1 $changing_mac "
    	ip l s $interface down > /dev/null && macchanger -r $interface | grep "New" | awk -F "       " '{print $2}' | head -c 18 && ip l s $interface up > /dev/null ||  echo " /\ ERROR /\\"
            echo -e "\n"
    }

Y quitas así una dependencia extra de tu variable dep_list. Dependencia que puede ser problemática ya que tiende a salir de los repositorios de las distribuciones mientras que ip está en todas por defecto.
Te he puesto la sintaxis corta, la sintaxis completa es

ip link set <interfaz> up/down 

que se abrevia así

ip l s <interfaz> up/down

Es un detalle, mucha tutoriales y scripts siguen empleando ifconfig, lo que pasa es que hace ya un par de años o tres que estos scripts devuelven errores porque falta ficonfig en el sistema del usuario. Pasando a ip te cubres la espalada.

Desconectado

#5 29-04-2021 13:44:23

Miguelillo0
Usuario

Registrado: 28-04-2021
Mensajes: 5

Re: HalfHandshaker - Obtener handshake de redes fuera de alcance!

Muchas gracias kcdtv!

Supongo que fallo mio, acostumbro a user ifconfig siempre y no había valorado el hacer el cambio a "ip" pero desde luego que lo haré.
Mismamente esta tarde actualizo, si todo va bien.

Por cierto, buen foro! Apuesto por que me veréis más por aquí big_smile


Edit: Ya está solucionado!

Ultima edición por Miguelillo0 (29-04-2021 14:07:06)

Desconectado

#6 29-04-2021 14:55:55

kcdtv
Administrator

Registrado: 14-11-2014
Mensajes: 5,390

Re: HalfHandshaker - Obtener handshake de redes fuera de alcance!

Supongo que fallo mio

No: Fallo nuestro. big_smile
Somos [email protected] "culpables", personalmente me enteré 3 o 4 años despuès que la Linux Fundation anunciará el cambio y llevaba ifconfigurando alegremente "toda la vida". Y para ser sincero no me gustó nada aquel cambio, ahora lo tengo asimilado, pero me costó.
Creo que es uno de los comandos que se ha quedado más tiempo en uso siendo "jubilado" en la historia de los paquetes linux. Las distribuciones han seguido poniéndolo por defecto hasta hace poco.
Pero ahora si que se empieza a ver el final, en un ubuntu 20.04 LTS (distribución de 2020 con soporte a largo a plazo)

[email protected]:~$ sudo ifconfig 
sudo: ifconfig: orden no encontrada
[email protected]:~$ sudo ip
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }
       ip [ -force ] -batch filename
where  OBJECT := { link | address | addrlabel | route | rule | neigh | ntable |pero es aconsejable mirar "por adelante" y si se puede quitar una dependencia mejor
                   tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm |
                   netns | l2tp | fou | macsec | tcp_metrics | token | netconf | ila |
                   vrf | sr | nexthop }
       OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |
                    -h[uman-readable] | -iec | -j[son] | -p[retty] |
                    -f[amily] { inet | inet6 | mpls | bridge | link } |
                    -4 | -6 | -I | -D | -M | -B | -0 |
                    -l[oops] { maximum-addr-flush-attempts } | -br[ief] |
                    -o[neline] | -t[imestamp] | -ts[hort] | -b[atch] [filename] |
                    -rc[vbuf] [size] | -n[etns] name | -N[umeric] | -a[ll] |
                    -c[olor]}

Lo que no ha ayudado a cambiar los hábitos es que ifconfig tiene muchísimas menos opciones que ip.
Cierto, Ifconfig es menos potente, pero las sintaxis son mucho más directas y simples.
El ejemplo de cómo bajar o subir una interfaz habla de por si solo: ifconfig <interfaz> up vs ip link set <interfaz> up.
Con ip hay más parámetros y es más largo.
Una vez que estás acostumbrado y conoces las abreviaciones ("l s" en lugar de "link set") es lo mismo, hay incluso un carácter menos con ip (usando sintaxis reducida).
Bueno, paro de dar la chapa con esto...
Si estás abierto a sugestiones hay un par de optmizaciones que veo.
Pero repito, tú código está ya muy limpio y muy curado, no necesita nada.
Es más que cada uno, por las batallas que ha llevado haciendo bash, ve unas cosas que otro ha visto de otra forma.
Te lo puedo proponer como "commit" en github si lo prefieres.
Un saludo y otra vez gracias por esta linda presentación y por compartir este script muy curado. smile

Desconectado

#7 29-04-2021 15:02:06

Miguelillo0
Usuario

Registrado: 28-04-2021
Mensajes: 5

Re: HalfHandshaker - Obtener handshake de redes fuera de alcance!

kcdtv escribió:

Si estás abierto a sugestiones hay un par de optmizaciones que veo.
Pero repito, tú código está ya muy limpio y muy curado, no necesita nada.
Es más que cada uno, por las batallas que ha llevado haciendo bash, ve unas cosas que otro ha visto de otra forma.
Te lo puedo proponer como "commit" en github si lo prefieres.
Un saludo y otra vez gracias por esta linda presentación y por compartir este script muy curado. smile

Sin dudarlo, propón el commit o como prefieras. Agradezco toda ayuda o sugerencia! lol

Desconectado

#8 29-04-2021 17:20:04

kcdtv
Administrator

Registrado: 14-11-2014
Mensajes: 5,390

Re: HalfHandshaker - Obtener handshake de redes fuera de alcance!

Puedo testificar de la eficiencia del concepto, es casi cómico. big_smile
Me explico: Tengo el router en el salón, y estoy en mi cuarto, en la otra planta.
La señal del router es muy buena, la recibo desde mi móvil en mi cuarto con un rssi de -60, tengo el icono del gestor de redes que está "a full".
Ejecuto el script desde mi ordenador de sobre mesa en mi cuarto con un adaptador USB sin alta potencia, tiene sus 20dBm legales, nada de otro mundo.
Lo único: está mucho más cerca del móvil.     
Y obtengo el handshake en un par de minutos lol
Qué la mac sea diferente no le importa lo más mínimo al android.
Es imparable, si la red trampa se capta con más fuerza que la red legitima a la cuál estamos conectado, aunque la conexión este muy buena, Android va a intentar conectarse a la otra red. pam
  Con una antena direccional y un adaptador wifi USB de alta potencia podemos  obtener el handshake así incluso cuando la victima está a pocos metros de su Punto de Acceso. smile
  Podemos también echar un ojo en los probes del paquete *.cap que el script ha pillado para ver los essids que la vicitima tiene guardados y sacarle los handshakes de todos los PA que visita, ya que si Android detecta una red guardada en los perfiles con más señal, va a intentar una conexión con dicha red big_smile

Desconectado

#9 03-05-2021 18:19:04

kcdtv
Administrator

Registrado: 14-11-2014
Mensajes: 5,390

Re: HalfHandshaker - Obtener handshake de redes fuera de alcance!

Iba a proponerte un commit pero sería quizá un poco abrupto sin explicaciones
Tampoco es algo grave, si lo quieres decir tal cuál no pasa nada, el script es funcional. wink

  El error: Cuando ejecutas el script sin una dependencia tienes un error (halfhandshaker.sh: línea 77: exit_script: orden no encontrada)

sudo bash *.sh
 /!\ Falta dependencia: tcpdump
halfhandshaker.sh: línea 77: exit_script: orden no encontrada
  _        _  _              _
 | |      | || |            | |
 | |______| || |____________| |        Version: 1.0
 |  ______  ||  ____________  | By Miguelillo & fromCharCode
 | | Half | || | Handshaker | |         27/04/2021
 |_|      |_||_|            |_|

    -> https://github.com/Miguelillo000/halfhandshaker <-


 Opciones:
 
 -h, --help            Muestra esta ayuda
 -v, --version         Muestra la version del script

 
 -i, --interface            <interfaz>   Especifica la interfaz a usar

 -e, --essid    <nombre>         Especifica el nombre del AP falso
 -o, --output   <nombre>         Elige el nombre del archivo .cap y hccapx
 
 -n, --no-auto-stop     No para automaticamente cuando se detecta un handshake
 -r, --random-mac       Cambia la mac de la tarjeta de red por una al azar
 

 Ejemplos:

 ./halfhandshaker.sh -i wlan0 -e "Bar-Juanito" -o "red-bar"
 
 ./halfhandshaker.sh -i wlan0 -e "Oficinas-12" -r
 
 ./halfhandshaker.sh -i wlan0 -e "Red-profesores" -r -o "wifi-profes"

  Esto es porque ejecutas la función check nada más declararla. Es cómo no hacer una función. El interprete se para en este punto y no va más allá, no tiene a la función exit_script en su buffer porque está declarada despuès y no llegó. .
Puedes hacer un exit en lugar de llamar la función exit_script       
O bien invocar la función check antes de attack.
  Creo que sería mejor hacer un exit por consistencia en la salida: Cuando tienes un error por falta de privilegios, se ve claramente el error y no se ve la ayuda. Es limpio y entendible por el usuario.
  En el caso de las dependencias, si no haces un exit en este punto y llamas exit_script el error no se ve en consola porque la consola se rellena con la ayuda.
Un principio del script es pensar que si hay un error que se puede hacer, el usuario lo va a cometer.
En este caso tiene una dependencia no cumplida pero no lo ve en consola sin volver atrás, va a pensar que es un problema de sintaxis porque tiene la ayuda con ejemplos de sintaxis, va a probar varias sintaxis sin éxito y va a pensar que el script está mal.
 
Luego, sobre la función check, puedes reducirla con algunos tricks (esta parte es pura cosmetica).

# Comprueba si tiene permisos de administrador
	if [[ "$(id -u)" != "0" ]]; then
		echo; echo " $s3 $root_required"; echo
		exit 0
	fi

Cuando haces un if con una sola condición puedes generalemente "emular" un operador ternario así:

condición || se ejecuta una orden si falso
condición && se ejecuta una orden si verdadero

en este caso puedes hacer

id -u | grep -q "^0$" || { echo -e  "\n  $s3 $root_required \n"; exit 1; }

haces id -u que mandas en pipe a tu comando grep.
   - Se usa -q para silenciar la salida (sino aparecerá un 0 feo en la consola)
  -  Los ^ y $ son para hacer un grep "estricto" sobre la expresión regular 0. el primer y el ultimo carácter deben ser 0 (para evitar que considere como verdadero 100 o 1000 que contiene 0)   
A partir de este punto, si no se verifica tu "condición", o sea el id del usuario es otro que 0, se ejecuta lo puesto despuès ||
Es decir el mensaje de error con echo. No es necesario ejecutar echo varias veces para hacer lineas en blanco, puedes usar \n (salto de linea)
También en este caso sería más un exit 1 que 0 ya que es un error (faltan privilegios)

Sobre la otra parte de la función check

	# Comprobando las herramientas
	no_tool=0
	dep_list="tcpdump hostapd ip macchanger xterm python3"
	for dependency in $dep_list; do
		if [ -z "$(command -v $dependency)" ]; then 
			echo " $s3 $needs $dependency"
	   		no_tool=1
   		fi
	done
	if [ "$no_tool" == "1" ]; then
		exit_script
	fi

Puedes prescindir de las dos primeras variables y de la condición if al final haciendo así:

for dependency in tcpdump hostapd ip macchanger xterm python3 ; do
	if [ -z "$(command -v $dependency)" ]; then 
		echo -e "$s3 $needs $dependency"
   		no_tool=1
	fi
done
[[ -z no_tool ]] && exit 1

tu array con las dependencias lo puedes poner directo en tu for
Y luego no hace falta "iniciar la variable" cómo puede ser el caso en otros lenguajes, a bash no le molesta que tu variable no_tool no este declarada en este caso. 
Haciendo así tu variable solo se define si se cumple la condición if (falta una dependencia)
Luego en lugar de hacer una condición más usas de nuevo la emulación del operador ternario pero está vez con && (se ejecuta si la condición es verdadera).
[[ -z no_tool ]] sería tu condición, devuelve "falso" si tu variable no está definida o es "null"
Si está definida (entonces falta una dependencia) se ejecuta la orden que sigue (exit 1)

La parte cosmetica no importa, quizás más que nada es quitar el error (que tampoco impide la correcta ejecución del script)
Puedo proponerte un commit si quieres ya que lo tengo listo en mi fork. 
Un saludo smile

Desconectado

#10 03-05-2021 19:48:07

Miguelillo0
Usuario

Registrado: 28-04-2021
Mensajes: 5

Re: HalfHandshaker - Obtener handshake de redes fuera de alcance!

Muchísimas gracias por todo: el tiempo, el interés, etc.

Propón commit si lo tienes ya listo, sino lo corrijo yo!


(pd. te he mandado un correo mediante el foro, no sé si irá eso bien. Si no te ha llegado hazmelo saber)


Y... como siempre: Un saludo!! big_smile

Desconectado

Anuncio

Wifi-highpower.es es distribuidor oficial de Alfa Network

Temas similares

Tema Respuestas Vistas Ultimo mensaje
9 397 03-05-2021 19:48:07 por Miguelillo0
1 219 30-04-2021 14:22:21 por kcdtv
Hello por pamelax64
1 61 28-04-2021 17:12:14 por kcdtv
0 58 28-04-2021 17:07:29 por kcdtv
8 2080 27-04-2021 15:00:43 por kcdtv

Pie de página

Información del usuario

Ultimo usuario registrado: Bizkoito
Usuarios registrados conectados: 0
Invitados conectados: 7

Estadisticas de los foros

Número total de usuarios registrados: 2,159
Número total de temas: 1,532
Número total de mensajes: 14,745

Máx. usuarios conectados: 373 el 30-09-2019 15:04:36