From fbecd38a00466758e8ae7f5af7ba2799bb0d822a Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Thu, 5 Oct 2023 14:53:42 +0200 Subject: [PATCH 01/92] Remove useless process killing and set 2 #TODO tasks --- airgeddon.sh | 34 +++------------------------------- 1 file changed, 3 insertions(+), 31 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 2ae285789..577195663 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -9597,12 +9597,6 @@ function launch_fake_ap() { debug_print - if [ -n "${enterprise_mode}" ]; then - kill "$(ps -C hostapd-wpe --no-headers -o pid | tr -d ' ')" &> /dev/null - else - kill "$(ps -C hostapd --no-headers -o pid | tr -d ' ')" &> /dev/null - fi - if "${AIRGEDDON_FORCE_NETWORK_MANAGER_KILLING:-true}"; then ${airmon} check kill > /dev/null 2>&1 nm_processes_killed=1 @@ -9880,8 +9874,6 @@ function launch_dhcp_server() { debug_print - kill "$(ps -C dhcpd --no-headers -o pid | tr -d ' ')" &> /dev/null - recalculate_windows_sizes case ${et_mode} in "et_onlyap") @@ -9915,17 +9907,14 @@ function exec_et_deauth() { case ${et_dos_attack} in "${mdk_command}") - kill "$(ps -C "${mdk_command}" --no-headers -o pid | tr -d ' ')" &> /dev/null rm -rf "${tmpdir}bl.txt" > /dev/null 2>&1 echo "${bssid}" > "${tmpdir}bl.txt" deauth_et_cmd="${mdk_command} ${iface_monitor_et_deauth} d -b ${tmpdir}\"bl.txt\" -c ${channel}" ;; "Aireplay") - kill "$(ps -C aireplay-ng --no-headers -o pid | tr -d ' ')" &> /dev/null deauth_et_cmd="aireplay-ng --deauth 0 -a ${bssid} --ignore-negative-one ${iface_monitor_et_deauth}" ;; "Wds Confusion") - kill "$(ps -C "${mdk_command}" --no-headers -o pid | tr -d ' ')" &> /dev/null deauth_et_cmd="${mdk_command} ${iface_monitor_et_deauth} w -e ${essid} -c ${channel}" ;; esac @@ -10727,7 +10716,7 @@ function set_et_control_script() { readarray -t ET_PROCESSES_TO_KILL < <(cat < "${path_to_processes}" 2> /dev/null) for item in "${ET_PROCESSES_TO_KILL[@]}"; do - kill "${item}" &> /dev/null + kill -9 "${item}" &> /dev/null done } @@ -10839,6 +10828,7 @@ function set_et_control_script() { cat >&7 <<-'EOF' kill_et_windows + #TODO changes on kill_et_windows to avoid the below killing kill "$(ps -C hostapd --no-headers -o pid | tr -d ' ')" &> /dev/null kill "$(ps -C dhcpd --no-headers -o pid | tr -d ' ')" &> /dev/null kill "$(ps -C "${mdk_command}" --no-headers -o pid | tr -d ' ')" &> /dev/null @@ -11433,7 +11423,6 @@ function launch_webserver() { debug_print - kill "$(ps -C lighttpd --no-headers -o pid | tr -d ' ')" &> /dev/null recalculate_windows_sizes lighttpd_window_position=${g4_bottomright_window} manage_output "-hold -bg \"#000000\" -fg \"#FFFF00\" -geometry ${lighttpd_window_position} -T \"Webserver\"" "lighttpd -D -f \"${tmpdir}${webserver_file}\"" "Webserver" @@ -11584,6 +11573,7 @@ function kill_beef() { debug_print local beef_pid + #TODO check how to do this more clean for multi_instance beef_pid="$(ps -C "${optional_tools_names[17]}" --no-headers -o pid | tr -d ' ')" if ! kill "${beef_pid}" &> /dev/null; then if ! kill "$(ps -C "beef" --no-headers -o pid | tr -d ' ')" &> /dev/null; then @@ -11982,14 +11972,6 @@ function kill_et_windows() { if [ "${dos_pursuit_mode}" -eq 1 ]; then kill_dos_pursuit_mode_processes - case ${et_dos_attack} in - "${mdk_command}"|"Wds Confusion") - kill "$(ps -C "${mdk_command}" --no-headers -o pid | tr -d ' ')" &> /dev/null - ;; - "Aireplay") - kill "$(ps -C aireplay-ng --no-headers -o pid | tr -d ' ')" &> /dev/null - ;; - esac fi for item in "${et_processes[@]}"; do @@ -11998,12 +11980,8 @@ function kill_et_windows() { if [ -n "${enterprise_mode}" ]; then 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 "$(ps -C hostapd --no-headers -o pid | tr -d ' ')" &> /dev/null - kill "$(ps -C dnsmasq --no-headers -o pid | tr -d ' ')" &> /dev/null - kill "$(ps -C lighttpd --no-headers -o pid | tr -d ' ')" &> /dev/null fi if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then @@ -14290,9 +14268,6 @@ function exit_script_option() { action_on_exit_taken=1 language_strings "${language}" 297 "multiline" clean_routing_rules - kill "$(ps -C dhcpd --no-headers -o pid | tr -d ' ')" &> /dev/null - kill "$(ps -C hostapd --no-headers -o pid | tr -d ' ')" &> /dev/null - kill "$(ps -C lighttpd --no-headers -o pid | tr -d ' ')" &> /dev/null kill_beef time_loop echo -e "${green_color} Ok\r${normal_color}" @@ -14343,9 +14318,6 @@ function hardcore_exit() { if [ "${routing_modified}" -eq 1 ]; then clean_routing_rules - kill "$(ps -C dhcpd --no-headers -o pid | tr -d ' ')" &> /dev/null - kill "$(ps -C hostapd --no-headers -o pid | tr -d ' ')" &> /dev/null - kill "$(ps -C lighttpd --no-headers -o pid | tr -d ' ')" &> /dev/null kill_beef fi From 4c866fe8afa317a2ae4f0420a529f4f7200fb81e Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Sat, 14 Oct 2023 20:34:21 +0200 Subject: [PATCH 02/92] Add multi-instance file managing system --- airgeddon.sh | 165 ++++++++++++++++++++++++--------------------------- 1 file changed, 78 insertions(+), 87 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 577195663..695b8e66a 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -141,7 +141,6 @@ standardpmkid_filename="pmkid_hash.txt" standardpmkidcap_filename="pmkid.cap" timeout_capture_handshake="20" timeout_capture_pmkid="25" -tmpdir="/tmp/" osversionfile_dir="/etc/" plugins_dir="plugins/" minimum_bash_version_required="4.2" @@ -720,6 +719,7 @@ function debug_print() { "generate_dynamic_line" "initialize_colors" "initialize_script_settings" + "instance_setter" "interrupt_checkpoint" "language_strings" "last_echo" @@ -1039,7 +1039,6 @@ function wash_json_scan() { debug_print - tmpfiles_toclean=1 rm -rf "${tmpdir}wps_json_data.txt" > /dev/null 2>&1 rm -rf "${tmpdir}wps_fifo" > /dev/null 2>&1 @@ -3137,7 +3136,6 @@ function create_certificates_config_files() { debug_print - tmpfiles_toclean=1 rm -rf "${tmpdir}${certsdir}" > /dev/null 2>&1 mkdir "${tmpdir}${certsdir}" > /dev/null 2>&1 @@ -3545,8 +3543,6 @@ function prepare_wep_attack() { debug_print - tmpfiles_toclean=1 - rm -rf "${tmpdir}${wep_attack_file}" > /dev/null 2>&1 rm -rf "${tmpdir}${wep_key_handler}" > /dev/null 2>&1 rm -rf "${tmpdir}${wep_data}"* > /dev/null 2>&1 @@ -4607,7 +4603,6 @@ function exec_mdkdeauth() { language_strings "${language}" 89 "title" language_strings "${language}" 32 "green" - tmpfiles_toclean=1 rm -rf "${tmpdir}bl.txt" > /dev/null 2>&1 echo "${bssid}" > "${tmpdir}bl.txt" @@ -4639,8 +4634,6 @@ function exec_aireplaydeauth() { language_strings "${language}" 90 "title" language_strings "${language}" 32 "green" - tmpfiles_toclean=1 - echo if [ "${dos_pursuit_mode}" -eq 1 ]; then language_strings "${language}" 506 "yellow" @@ -4671,8 +4664,6 @@ function exec_wdsconfusion() { language_strings "${language}" 91 "title" language_strings "${language}" 32 "green" - tmpfiles_toclean=1 - echo if [ "${dos_pursuit_mode}" -eq 1 ]; then language_strings "${language}" 506 "yellow" @@ -4701,8 +4692,6 @@ function exec_beaconflood() { language_strings "${language}" 92 "title" language_strings "${language}" 32 "green" - tmpfiles_toclean=1 - echo if [ "${dos_pursuit_mode}" -eq 1 ]; then language_strings "${language}" 506 "yellow" @@ -4731,8 +4720,6 @@ function exec_authdos() { language_strings "${language}" 93 "title" language_strings "${language}" 32 "green" - tmpfiles_toclean=1 - echo if [ "${dos_pursuit_mode}" -eq 1 ]; then language_strings "${language}" 506 "yellow" @@ -4761,8 +4748,6 @@ function exec_michaelshutdown() { language_strings "${language}" 94 "title" language_strings "${language}" 32 "green" - tmpfiles_toclean=1 - echo if [ "${dos_pursuit_mode}" -eq 1 ]; then language_strings "${language}" 506 "yellow" @@ -5854,51 +5839,57 @@ function clean_tmpfiles() { debug_print - rm -rf "${tmpdir}bl.txt" > /dev/null 2>&1 - rm -rf "${tmpdir}target.txt" > /dev/null 2>&1 - rm -rf "${tmpdir}handshake"* > /dev/null 2>&1 - rm -rf "${tmpdir}pmkid"* > /dev/null 2>&1 - rm -rf "${tmpdir}nws"* > /dev/null 2>&1 - rm -rf "${tmpdir}clts"* > /dev/null 2>&1 - rm -rf "${tmpdir}wnws.txt" > /dev/null 2>&1 - rm -rf "${tmpdir}hctmp"* > /dev/null 2>&1 - rm -rf "${tmpdir}jtrtmp"* > /dev/null 2>&1 - rm -rf "${tmpdir}${aircrack_pot_tmp}" > /dev/null 2>&1 - rm -rf "${tmpdir}${et_processesfile}" > /dev/null 2>&1 - rm -rf "${tmpdir}${hostapd_file}" > /dev/null 2>&1 - rm -rf "${tmpdir}${hostapd_wpe_file}" > /dev/null 2>&1 - rm -rf "${tmpdir}${hostapd_wpe_log}" > /dev/null 2>&1 - rm -rf "${scriptfolder}${hostapd_wpe_default_log}" > /dev/null 2>&1 - rm -rf "${tmpdir}${dhcpd_file}" > /dev/null 2>&1 - rm -rf "${tmpdir}${dnsmasq_file}" >/dev/null 2>&1 - rm -rf "${tmpdir}${control_et_file}" > /dev/null 2>&1 - rm -rf "${tmpdir}${control_enterprise_file}" > /dev/null 2>&1 - rm -rf "${tmpdir}parsed_file" > /dev/null 2>&1 - rm -rf "${tmpdir}${ettercap_file}"* > /dev/null 2>&1 - rm -rf "${tmpdir}${bettercap_file}"* > /dev/null 2>&1 - rm -rf "${tmpdir}${bettercap_config_file}" > /dev/null 2>&1 - rm -rf "${tmpdir}${bettercap_hook_file}" > /dev/null 2>&1 - rm -rf "${tmpdir}${beef_file}" > /dev/null 2>&1 - if [ "${beef_found}" -eq 1 ]; then - rm -rf "${beef_path}${beef_file}" > /dev/null 2>&1 + if [ "${1}" = "exit_script" ]; then + rm -rf "${tmpdir}" > /dev/null 2>&1 + else + rm -rf "${tmpdir}bl.txt" > /dev/null 2>&1 + rm -rf "${tmpdir}target.txt" > /dev/null 2>&1 + rm -rf "${tmpdir}handshake"* > /dev/null 2>&1 + rm -rf "${tmpdir}pmkid"* > /dev/null 2>&1 + rm -rf "${tmpdir}nws"* > /dev/null 2>&1 + rm -rf "${tmpdir}clts"* > /dev/null 2>&1 + rm -rf "${tmpdir}wnws.txt" > /dev/null 2>&1 + rm -rf "${tmpdir}hctmp"* > /dev/null 2>&1 + rm -rf "${tmpdir}jtrtmp"* > /dev/null 2>&1 + rm -rf "${tmpdir}${aircrack_pot_tmp}" > /dev/null 2>&1 + rm -rf "${tmpdir}${et_processesfile}" > /dev/null 2>&1 + rm -rf "${tmpdir}${hostapd_file}" > /dev/null 2>&1 + rm -rf "${tmpdir}${hostapd_wpe_file}" > /dev/null 2>&1 + rm -rf "${tmpdir}${hostapd_wpe_log}" > /dev/null 2>&1 + rm -rf "${scriptfolder}${hostapd_wpe_default_log}" > /dev/null 2>&1 + rm -rf "${tmpdir}${dhcpd_file}" > /dev/null 2>&1 + rm -rf "${tmpdir}${dnsmasq_file}" >/dev/null 2>&1 + rm -rf "${tmpdir}${control_et_file}" > /dev/null 2>&1 + rm -rf "${tmpdir}${control_enterprise_file}" > /dev/null 2>&1 + rm -rf "${tmpdir}parsed_file" > /dev/null 2>&1 + rm -rf "${tmpdir}${ettercap_file}"* > /dev/null 2>&1 + rm -rf "${tmpdir}${bettercap_file}"* > /dev/null 2>&1 + rm -rf "${tmpdir}${bettercap_config_file}" > /dev/null 2>&1 + rm -rf "${tmpdir}${bettercap_hook_file}" > /dev/null 2>&1 + rm -rf "${tmpdir}${beef_file}" > /dev/null 2>&1 + rm -rf "${tmpdir}${webserver_file}" > /dev/null 2>&1 + rm -rf "${tmpdir}${webdir}" > /dev/null 2>&1 + rm -rf "${tmpdir}${certsdir}" > /dev/null 2>&1 + rm -rf "${tmpdir}${enterprisedir}" > /dev/null 2>&1 + rm -rf "${tmpdir}${asleap_pot_tmp}" > /dev/null 2>&1 + rm -rf "${tmpdir}wps"* > /dev/null 2>&1 + rm -rf "${tmpdir}${wps_attack_script_file}" > /dev/null 2>&1 + rm -rf "${tmpdir}${wps_out_file}" > /dev/null 2>&1 + rm -rf "${tmpdir}${wep_attack_file}" > /dev/null 2>&1 + rm -rf "${tmpdir}${wep_key_handler}" > /dev/null 2>&1 + rm -rf "${tmpdir}${wep_data}"* > /dev/null 2>&1 + rm -rf "${tmpdir}${wepdir}" > /dev/null 2>&1 + rm -rf "${tmpdir}dos_pm"* > /dev/null 2>&1 + rm -rf "${tmpdir}${channelfile}" > /dev/null 2>&1 fi - rm -rf "${tmpdir}${webserver_file}" > /dev/null 2>&1 - rm -rf "${tmpdir}${webdir}" > /dev/null 2>&1 - rm -rf "${tmpdir}${certsdir}" > /dev/null 2>&1 - rm -rf "${tmpdir}${enterprisedir}" > /dev/null 2>&1 - rm -rf "${tmpdir}${asleap_pot_tmp}" > /dev/null 2>&1 + if [ "${dhcpd_path_changed}" -eq 1 ]; then rm -rf "${dhcp_path}" > /dev/null 2>&1 fi - rm -rf "${tmpdir}wps"* > /dev/null 2>&1 - rm -rf "${tmpdir}${wps_attack_script_file}" > /dev/null 2>&1 - rm -rf "${tmpdir}${wps_out_file}" > /dev/null 2>&1 - rm -rf "${tmpdir}${wep_attack_file}" > /dev/null 2>&1 - rm -rf "${tmpdir}${wep_key_handler}" > /dev/null 2>&1 - rm -rf "${tmpdir}${wep_data}"* > /dev/null 2>&1 - rm -rf "${tmpdir}${wepdir}" > /dev/null 2>&1 - rm -rf "${tmpdir}dos_pm"* > /dev/null 2>&1 - rm -rf "${tmpdir}${channelfile}" > /dev/null 2>&1 + + if [ "${beef_found}" -eq 1 ]; then + rm -rf "${beef_path}${beef_file}" > /dev/null 2>&1 + fi } #Manage cleaning firewall rules and restore orginal routing state @@ -6136,6 +6127,28 @@ function print_hint() { print_simple_separator } +#Detect number of the alive airgeddon instances and set the next one if apply +function instance_setter() { + + debug_print + + local dir_number="1" + local airgeddon_instance_dir="ag${dir_number}/" + + if [[ -d "/tmp/${airgeddon_instance_dir}" ]]; then + while true; do + ((dir_number++)) + airgeddon_instance_dir="ag${dir_number}/" + if [[ ! -d "/tmp/${airgeddon_instance_dir}" ]]; then + break + fi + done + fi + + tmpdir="/tmp/${airgeddon_instance_dir}" + mkdir -p "${tmpdir}" > /dev/null 2>&1 +} + #airgeddon main menu function main_menu() { @@ -9031,7 +9044,6 @@ function exec_jtr_dictionary_attack() { debug_print - tmpfiles_toclean=1 rm -rf "${tmpdir}jtrtmp"* > /dev/null 2>&1 jtr_cmd="john \"${jtrenterpriseenteredpath}\" --format=netntlm-naive --wordlist=\"${DICTIONARY}\" --pot=\"${tmpdir}${jtr_pot_tmp}\" --encoding=UTF-8 | tee \"${tmpdir}${jtr_output_file}\" ${colorize}" @@ -9044,7 +9056,6 @@ function exec_jtr_bruteforce_attack() { debug_print - tmpfiles_toclean=1 rm -rf "${tmpdir}jtrtmp"* > /dev/null 2>&1 jtr_cmd="crunch \"${minlength}\" \"${maxlength}\" \"${charset}\" | john \"${jtrenterpriseenteredpath}\" --stdin --format=netntlm-naive --pot=\"${tmpdir}${jtr_pot_tmp}\" --encoding=UTF-8 | tee \"${tmpdir}${jtr_output_file}\" ${colorize}" @@ -9060,11 +9071,9 @@ function exec_hashcat_dictionary_attack() { if [ "${1}" = "personal_handshake" ]; then hashcat_cmd="hashcat -m ${hashcat_handshake_cracking_plugin} -a 0 \"${tmpdir}${hashcat_tmp_file}\" \"${DICTIONARY}\" --potfile-disable -o \"${tmpdir}${hashcat_pot_tmp}\"${hashcat_cmd_fix} | tee \"${tmpdir}${hashcat_output_file}\" ${colorize}" elif [ "${1}" = "personal_pmkid" ]; then - tmpfiles_toclean=1 rm -rf "${tmpdir}hctmp"* > /dev/null 2>&1 hashcat_cmd="hashcat -m ${hashcat_pmkid_cracking_plugin} -a 0 \"${hashcatpmkidenteredpath}\" \"${DICTIONARY}\" --potfile-disable -o \"${tmpdir}${hashcat_pot_tmp}\"${hashcat_cmd_fix} | tee \"${tmpdir}${hashcat_output_file}\" ${colorize}" else - tmpfiles_toclean=1 rm -rf "${tmpdir}hctmp"* > /dev/null 2>&1 hashcat_cmd="hashcat -m ${hashcat_enterprise_cracking_plugin} -a 0 \"${hashcatenterpriseenteredpath}\" \"${DICTIONARY}\" --potfile-disable -o \"${tmpdir}${hashcat_pot_tmp}\"${hashcat_cmd_fix} | tee \"${tmpdir}${hashcat_output_file}\" ${colorize}" fi @@ -9080,11 +9089,9 @@ function exec_hashcat_bruteforce_attack() { if [ "${1}" = "personal_handshake" ]; then hashcat_cmd="hashcat -m ${hashcat_handshake_cracking_plugin} -a 3 \"${tmpdir}${hashcat_tmp_file}\" ${charset} --increment --increment-min=${minlength} --increment-max=${maxlength} --potfile-disable -o \"${tmpdir}${hashcat_pot_tmp}\"${hashcat_cmd_fix} | tee \"${tmpdir}${hashcat_output_file}\" ${colorize}" elif [ "${1}" = "personal_pmkid" ]; then - tmpfiles_toclean=1 rm -rf "${tmpdir}hctmp"* > /dev/null 2>&1 hashcat_cmd="hashcat -m ${hashcat_pmkid_cracking_plugin} -a 3 \"${hashcatpmkidenteredpath}\" ${charset} --increment --increment-min=${minlength} --increment-max=${maxlength} --potfile-disable -o \"${tmpdir}${hashcat_pot_tmp}\"${hashcat_cmd_fix} | tee \"${tmpdir}${hashcat_output_file}\" ${colorize}" else - tmpfiles_toclean=1 rm -rf "${tmpdir}hctmp"* > /dev/null 2>&1 hashcat_cmd="hashcat -m ${hashcat_enterprise_cracking_plugin} -a 3 \"${hashcatenterpriseenteredpath}\" ${charset} --increment --increment-min=${minlength} --increment-max=${maxlength} --potfile-disable -o \"${tmpdir}${hashcat_pot_tmp}\"${hashcat_cmd_fix} | tee \"${tmpdir}${hashcat_output_file}\" ${colorize}" fi @@ -9100,11 +9107,9 @@ function exec_hashcat_rulebased_attack() { if [ "${1}" = "personal_handshake" ]; then hashcat_cmd="hashcat -m ${hashcat_handshake_cracking_plugin} -a 0 \"${tmpdir}${hashcat_tmp_file}\" \"${DICTIONARY}\" -r \"${RULES}\" --potfile-disable -o \"${tmpdir}${hashcat_pot_tmp}\"${hashcat_cmd_fix} | tee \"${tmpdir}${hashcat_output_file}\" ${colorize}" elif [ "${1}" = "personal_pmkid" ]; then - tmpfiles_toclean=1 rm -rf "${tmpdir}hctmp"* > /dev/null 2>&1 hashcat_cmd="hashcat -m ${hashcat_pmkid_cracking_plugin} -a 0 \"${hashcatpmkidenteredpath}\" \"${DICTIONARY}\" -r \"${RULES}\" --potfile-disable -o \"${tmpdir}${hashcat_pot_tmp}\"${hashcat_cmd_fix} | tee \"${tmpdir}${hashcat_output_file}\" ${colorize}" else - tmpfiles_toclean=1 rm -rf "${tmpdir}hctmp"* > /dev/null 2>&1 hashcat_cmd="hashcat -m ${hashcat_enterprise_cracking_plugin} -a 0 \"${hashcatenterpriseenteredpath}\" \"${DICTIONARY}\" -r \"${RULES}\" --potfile-disable -o \"${tmpdir}${hashcat_pot_tmp}\"${hashcat_cmd_fix} | tee \"${tmpdir}${hashcat_output_file}\" ${colorize}" fi @@ -9450,7 +9455,6 @@ function set_bettercap_config() { debug_print - tmpfiles_toclean=1 rm -rf "${tmpdir}${bettercap_config_file}" > /dev/null 2>&1 if [ "${et_mode}" = "et_sniffing_sslstrip2_beef" ]; then @@ -9503,7 +9507,6 @@ function set_hostapd_config() { debug_print - tmpfiles_toclean=1 rm -rf "${tmpdir}${hostapd_file}" > /dev/null 2>&1 local digit_to_change @@ -9541,7 +9544,6 @@ function set_hostapd_wpe_config() { debug_print - tmpfiles_toclean=1 rm -rf "${tmpdir}${hostapd_wpe_file}" > /dev/null 2>&1 different_mac_digit=$(tr -dc A-F0-9 < /dev/urandom | fold -w2 | head -n 100 | grep -v "${bssid:10:1}" | head -c 1) @@ -9681,7 +9683,6 @@ function set_dhcp_config() { et_range_stop=${alt_range_stop} fi - tmpfiles_toclean=1 rm -rf "${tmpdir}${dhcpd_file}" > /dev/null 2>&1 rm -rf "${tmpdir}clts.txt" > /dev/null 2>&1 ip link set "${interface}" up > /dev/null 2>&1 @@ -9961,7 +9962,6 @@ function set_wps_attack_script() { debug_print - tmpfiles_toclean=1 rm -rf "${tmpdir}${wps_attack_script_file}" > /dev/null 2>&1 rm -rf "${tmpdir}${wps_out_file}" > /dev/null 2>&1 @@ -10975,7 +10975,6 @@ function launch_dns_blackhole() { recalculate_windows_sizes - tmpfiles_toclean=1 rm -rf "${tmpdir}${dnsmasq_file}" > /dev/null 2>&1 { @@ -11466,7 +11465,6 @@ function set_beef_config() { debug_print - tmpfiles_toclean=1 rm -rf "${tmpdir}${beef_file}" > /dev/null 2>&1 beef_db_path="" @@ -11573,7 +11571,7 @@ function kill_beef() { debug_print local beef_pid - #TODO check how to do this more clean for multi_instance + #TODO changes here beef_pid="$(ps -C "${optional_tools_names[17]}" --no-headers -o pid | tr -d ' ')" if ! kill "${beef_pid}" &> /dev/null; then if ! kill "$(ps -C "beef" --no-headers -o pid | tr -d ' ')" &> /dev/null; then @@ -12023,7 +12021,6 @@ function convert_cap_to_hashcat_format() { debug_print - tmpfiles_toclean=1 rm -rf "${tmpdir}hctmp"* > /dev/null 2>&1 if [ "${hccapx_needed}" -eq 0 ]; then echo "1" | timeout -s SIGTERM 3 aircrack-ng "${enteredpath}" -J "${tmpdir}${hashcat_tmp_simple_name_file}" -b "${bssid}" > /dev/null 2>&1 @@ -13142,7 +13139,6 @@ function explore_for_targets_option() { fi language_strings "${language}" 115 "read" - tmpfiles_toclean=1 rm -rf "${tmpdir}nws"* > /dev/null 2>&1 rm -rf "${tmpdir}clts.csv" > /dev/null 2>&1 @@ -13298,7 +13294,6 @@ function explore_for_wps_targets_option() { language_strings "${language}" 411 "yellow" language_strings "${language}" 115 "read" - tmpfiles_toclean=1 rm -rf "${tmpdir}wps"* > /dev/null 2>&1 recalculate_windows_sizes @@ -14256,13 +14251,11 @@ function exit_script_option() { echo -e "${green_color} Ok\r${normal_color}" fi - if [ "${tmpfiles_toclean}" -eq 1 ]; then - action_on_exit_taken=1 - language_strings "${language}" 164 "multiline" - clean_tmpfiles - time_loop - echo -e "${green_color} Ok\r${normal_color}" - fi + action_on_exit_taken=1 + language_strings "${language}" 164 "multiline" + clean_tmpfiles "exit_script" + time_loop + echo -e "${green_color} Ok\r${normal_color}" if [ "${routing_modified}" -eq 1 ]; then action_on_exit_taken=1 @@ -14312,9 +14305,7 @@ function hardcore_exit() { eval "${networkmanager_cmd} > /dev/null 2>&1" fi - if [ "${tmpfiles_toclean}" -eq 1 ]; then - clean_tmpfiles - fi + clean_tmpfiles "exit_script" if [ "${routing_modified}" -eq 1 ]; then clean_routing_rules @@ -15479,7 +15470,6 @@ function initialize_script_settings() { nm_processes_killed=0 airmon_fix autochanged_language=0 - tmpfiles_toclean=0 routing_modified=0 iptables_saved=0 spoofed_mac=0 @@ -16777,6 +16767,7 @@ function echo_white() { function main() { initialize_script_settings + instance_setter initialize_colors env_vars_initialization detect_distro_phase1 From 167c38c23a2173baf8c79379b3893e783ec0a00b Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Sat, 14 Oct 2023 23:21:19 +0200 Subject: [PATCH 03/92] Prepare #TODOs to solve bettercap and beef processess killing --- airgeddon.sh | 30 +++++------------------------- 1 file changed, 5 insertions(+), 25 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 695b8e66a..c4daf8958 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -9400,7 +9400,6 @@ function exec_et_sniffing_sslstrip2_beef_attack() { language_strings "${language}" 298 "yellow" language_strings "${language}" 115 "read" - kill_beef kill_et_windows if [ "${dos_pursuit_mode}" -eq 1 ]; then @@ -10828,11 +10827,8 @@ function set_et_control_script() { cat >&7 <<-'EOF' kill_et_windows - #TODO changes on kill_et_windows to avoid the below killing + #TODO delete below lines when changes on kill_et_windows are in place (tree pid search finished) kill "$(ps -C hostapd --no-headers -o pid | tr -d ' ')" &> /dev/null - kill "$(ps -C dhcpd --no-headers -o pid | tr -d ' ')" &> /dev/null - kill "$(ps -C "${mdk_command}" --no-headers -o pid | tr -d ' ')" &> /dev/null - kill "$(ps -C aireplay-ng --no-headers -o pid | tr -d ' ')" &> /dev/null kill "$(ps -C dnsmasq --no-headers -o pid | tr -d ' ')" &> /dev/null kill "$(ps -C lighttpd --no-headers -o pid | tr -d ' ')" &> /dev/null EOF @@ -11564,22 +11560,6 @@ function set_beef_config() { } >> "${tmpdir}${beef_file}" } -#Kill beef process -#shellcheck disable=SC2009 -function kill_beef() { - - debug_print - - local beef_pid - #TODO changes here - beef_pid="$(ps -C "${optional_tools_names[17]}" --no-headers -o pid | tr -d ' ')" - if ! kill "${beef_pid}" &> /dev/null; then - if ! kill "$(ps -C "beef" --no-headers -o pid | tr -d ' ')" &> /dev/null; then - kill "$(ps -C "ruby" --no-headers -o pid,cmd | grep "beef" | awk '{print $1}')" &> /dev/null - fi - fi -} - #Detects if your beef is Flexible Brainfuck interpreter instead of BeEF function detect_fake_beef() { @@ -11746,8 +11726,6 @@ function launch_beef() { debug_print - kill_beef - if [ "${beef_found}" -eq 0 ]; then start_beef_service fi @@ -11776,6 +11754,8 @@ function launch_beef() { et_processes+=($!) fi + #TODO here, add beef pid to et_processes array when the tree pid search function is done + sleep 2 } @@ -11833,6 +11813,8 @@ function launch_bettercap_sniffing() { else et_processes+=($!) fi + + #TODO here, add bettercap pid to et_processes array when the tree pid search function is done } #Parse ettercap log searching for captured passwords @@ -14261,7 +14243,6 @@ function exit_script_option() { action_on_exit_taken=1 language_strings "${language}" 297 "multiline" clean_routing_rules - kill_beef time_loop echo -e "${green_color} Ok\r${normal_color}" fi @@ -14309,7 +14290,6 @@ function hardcore_exit() { if [ "${routing_modified}" -eq 1 ]; then clean_routing_rules - kill_beef fi if [[ "${spoofed_mac}" -eq 1 ]] && [[ "${ifacemode}" = "Managed" ]]; then From 2712ff52bdac2fdc15b5db8964ee313f2b5a3738 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Sat, 14 Oct 2023 23:22:34 +0200 Subject: [PATCH 04/92] Solve error on exiting while restoring routing rules (caused two commits ago) --- airgeddon.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index c4daf8958..e21065b9d 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -14233,12 +14233,6 @@ function exit_script_option() { echo -e "${green_color} Ok\r${normal_color}" fi - action_on_exit_taken=1 - language_strings "${language}" 164 "multiline" - clean_tmpfiles "exit_script" - time_loop - echo -e "${green_color} Ok\r${normal_color}" - if [ "${routing_modified}" -eq 1 ]; then action_on_exit_taken=1 language_strings "${language}" 297 "multiline" @@ -14247,6 +14241,12 @@ function exit_script_option() { echo -e "${green_color} Ok\r${normal_color}" fi + action_on_exit_taken=1 + language_strings "${language}" 164 "multiline" + clean_tmpfiles "exit_script" + time_loop + echo -e "${green_color} Ok\r${normal_color}" + if [[ "${spoofed_mac}" -eq 1 ]] && [[ "${ifacemode}" = "Managed" ]]; then language_strings "${language}" 418 "multiline" restore_spoofed_macs From f977a8ac47a8f50c57629fdcd4d86db070225c31 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Fri, 20 Oct 2023 00:22:45 +0200 Subject: [PATCH 05/92] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9e8d65f10..e46afc34a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ ### 11.22 - Improvement on process killing on Evil Twin attacks + - Added Multi-instance support to launch more than one airgeddon at a time ### 11.21 - Chinese language translation added (Thank you to "zcbxx") From 9c0b45395a64abe66f49c713bfa10fe94762be9e Mon Sep 17 00:00:00 2001 From: masipro Date: Wed, 1 Nov 2023 06:31:50 +0100 Subject: [PATCH 06/92] Improvement of the process kill function in et attack --- airgeddon.sh | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index bd3ad6577..f57034191 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -10711,11 +10711,18 @@ function set_et_control_script() { EOF cat >&7 <<-'EOF' - function kill_et_windows() { + function kill_et_processes_control_script() { + local parent_pid="" + local child_pids="" readarray -t ET_PROCESSES_TO_KILL < <(cat < "${path_to_processes}" 2> /dev/null) for item in "${ET_PROCESSES_TO_KILL[@]}"; do - kill -9 "${item}" &> /dev/null + parent_pid=${item} + child_pids=$(pgrep -P ${parent_pid}) + if [ -n "${child_pids}" ]; then + pkill -P ${parent_pid} &> /dev/null + fi + kill -9 ${parent_pid} &> /dev/null done } @@ -10826,11 +10833,7 @@ function set_et_control_script() { EOF cat >&7 <<-'EOF' - kill_et_windows - #TODO delete below lines when changes on kill_et_windows are in place (tree pid search finished) - kill "$(ps -C hostapd --no-headers -o pid | tr -d ' ')" &> /dev/null - kill "$(ps -C dnsmasq --no-headers -o pid | tr -d ' ')" &> /dev/null - kill "$(ps -C lighttpd --no-headers -o pid | tr -d ' ')" &> /dev/null + kill_et_processes_control_script EOF if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then @@ -11957,7 +11960,14 @@ function kill_et_windows() { fi for item in "${et_processes[@]}"; do - kill "${item}" &> /dev/null + local parent_pid="" + local child_pids="" + parent_pid=${item} + child_pids=$(pgrep -P ${parent_pid}) + if [ -n "${child_pids}" ]; then + pkill -P ${parent_pid} &> /dev/null + fi + kill -9 ${parent_pid} &> /dev/null done if [ -n "${enterprise_mode}" ]; then From 7702a410967a15f58e2c5bdf8248fd9ee7bf76c5 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Fri, 3 Nov 2023 00:11:37 +0100 Subject: [PATCH 07/92] Fix shellcheck warnings and modify some function comments --- airgeddon.sh | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index f57034191..660596402 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -3590,6 +3590,7 @@ function set_wep_key_script() { ;; esac } + function start_tmux_processes() { window_name="\${1}" @@ -3689,6 +3690,7 @@ function set_wep_key_script() { if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then cat >&8 <<-EOF + #Function to kill tmux windows using window name function kill_tmux_windows() { local TMUX_WINDOWS_LIST=() @@ -3838,6 +3840,7 @@ function set_wep_script() { ;; esac } + function start_tmux_processes() { window_name="\${1}" @@ -3860,6 +3863,8 @@ function set_wep_script() { tmux setw -t "\${window_name}" window-style "\${tmux_color_cmd}" tmux send-keys -t "${session_name}:\${window_name}" "\${command_line}" ENTER } + + #Function to capture PID of a process started inside tmux and setting it to a global variable function get_tmux_process_id() { local process_pid @@ -3870,6 +3875,8 @@ function set_wep_script() { done global_process_pid="\${process_pid}" } + + #Function to kill tmux windows using window name function kill_tmux_window_by_name() { if [ "\${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then tmux kill-window -t "${session_name}:\${1}" 2> /dev/null @@ -10494,6 +10501,7 @@ function set_enterprise_control_script() { if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then cat >&7 <<-EOF + #Function to kill tmux windows using window name function kill_tmux_windows() { local TMUX_WINDOWS_LIST=() @@ -10717,12 +10725,12 @@ function set_et_control_script() { local child_pids="" readarray -t ET_PROCESSES_TO_KILL < <(cat < "${path_to_processes}" 2> /dev/null) for item in "${ET_PROCESSES_TO_KILL[@]}"; do - parent_pid=${item} - child_pids=$(pgrep -P ${parent_pid}) + parent_pid="${item}" + child_pids=$(pgrep -P "${parent_pid}") if [ -n "${child_pids}" ]; then - pkill -P ${parent_pid} &> /dev/null + pkill -P "${parent_pid}" &> /dev/null fi - kill -9 ${parent_pid} &> /dev/null + kill -9 "${parent_pid}" &> /dev/null done } @@ -10737,6 +10745,7 @@ function set_et_control_script() { if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then cat >&7 <<-EOF + #Function to kill tmux windows using window name function kill_tmux_windows() { local TMUX_WINDOWS_LIST=() @@ -11962,12 +11971,12 @@ function kill_et_windows() { for item in "${et_processes[@]}"; do local parent_pid="" local child_pids="" - parent_pid=${item} - child_pids=$(pgrep -P ${parent_pid}) + parent_pid="${item}" + child_pids=$(pgrep -P "${parent_pid}") if [ -n "${child_pids}" ]; then - pkill -P ${parent_pid} &> /dev/null + pkill -P "${parent_pid}" &> /dev/null fi - kill -9 ${parent_pid} &> /dev/null + kill -9 "${parent_pid}" &> /dev/null done if [ -n "${enterprise_mode}" ]; then @@ -16450,7 +16459,7 @@ function check_internet_access() { return 1 } -#Check for access to a url using curl +#Check for access to a URL using curl function check_url_curl() { debug_print @@ -16467,7 +16476,7 @@ function check_url_curl() { return 1 } -#Check for access to a url using wget +#Check for access to a URL using wget function check_url_wget() { debug_print From f7e08d31952b46ea643cb0c1107ee58536534d5b Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Fri, 3 Nov 2023 00:13:43 +0100 Subject: [PATCH 08/92] Remove two TODOs. They were fixed on last pid killing improvement commit --- airgeddon.sh | 4 ---- 1 file changed, 4 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 660596402..4eba70a93 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -11768,8 +11768,6 @@ function launch_beef() { et_processes+=($!) fi - #TODO here, add beef pid to et_processes array when the tree pid search function is done - sleep 2 } @@ -11827,8 +11825,6 @@ function launch_bettercap_sniffing() { else et_processes+=($!) fi - - #TODO here, add bettercap pid to et_processes array when the tree pid search function is done } #Parse ettercap log searching for captured passwords From 2df82477f5872c6ae019463e4beb96ad5b3f14a6 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Mon, 4 Dec 2023 20:09:43 +0100 Subject: [PATCH 09/92] Adapt evil twin network ip ranges to work on multi instance --- airgeddon.sh | 73 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 42 insertions(+), 31 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 4eba70a93..db3fd9872 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -237,23 +237,6 @@ mail="v1s1t0r.1s.h3r3@gmail.com" author="v1s1t0r" #Dhcpd, Hostapd and misc Evil Twin vars -ip_range="192.169.1.0" -alt_ip_range="192.167.1.0" -router_ip="192.169.1.1" -alt_router_ip="192.167.1.1" -broadcast_ip="192.169.1.255" -alt_broadcast_ip="192.167.1.255" -range_start="192.169.1.33" -range_stop="192.169.1.100" -alt_range_start="192.167.1.33" -alt_range_stop="192.167.1.100" -std_c_mask="255.255.255.0" -ip_mask="255.255.255.255" -std_c_mask_cidr="24" -ip_mask_cidr="32" -any_mask_cidr="0" -any_ip="0.0.0.0" -any_ipv6="::/0" loopback_ip="127.0.0.1" loopback_ipv6="::1/128" routing_tmp_file="ag.iptables_nftables" @@ -9289,6 +9272,7 @@ function exec_et_onlyap_attack() { set_hostapd_config launch_fake_ap + set_network_interface_data set_dhcp_config set_std_internet_routing_rules launch_dhcp_server @@ -9318,6 +9302,7 @@ function exec_et_sniffing_attack() { set_hostapd_config launch_fake_ap + set_network_interface_data set_dhcp_config set_std_internet_routing_rules launch_dhcp_server @@ -9351,6 +9336,7 @@ function exec_et_sniffing_sslstrip2_attack() { set_hostapd_config launch_fake_ap + set_network_interface_data set_dhcp_config set_std_internet_routing_rules launch_dhcp_server @@ -9384,6 +9370,7 @@ function exec_et_sniffing_sslstrip2_beef_attack() { set_hostapd_config launch_fake_ap + set_network_interface_data set_dhcp_config set_std_internet_routing_rules launch_dhcp_server @@ -9430,6 +9417,7 @@ function exec_et_captive_portal_attack() { set_hostapd_config launch_fake_ap + set_network_interface_data set_dhcp_config set_std_internet_routing_rules launch_dhcp_server @@ -9670,25 +9658,48 @@ function launch_fake_ap() { sleep 3 } -#Create configuration file for dhcpd -function set_dhcp_config() { +#Set network data parameters +function set_network_interface_data() { debug_print - if ! ip route | grep ${ip_range} > /dev/null; then - et_ip_range=${ip_range} - et_ip_router=${router_ip} - et_broadcast_ip=${broadcast_ip} - et_range_start=${range_start} - et_range_stop=${range_stop} - else - et_ip_range=${alt_ip_range} - et_ip_router=${alt_router_ip} - et_broadcast_ip=${alt_broadcast_ip} - et_range_start=${alt_range_start} - et_range_stop=${alt_range_stop} + std_c_mask="255.255.255.0" + ip_mask="255.255.255.255" + std_c_mask_cidr="24" + ip_mask_cidr="32" + any_mask_cidr="0" + any_ip="0.0.0.0" + any_ipv6="::/0" + + first_octet="192" + second_octet="169" + third_octet="1" + fourth_octet="0" + + ip_range="${first_octet}.${second_octet}.${third_octet}.${fourth_octet}" + + if ip route | grep ${ip_range} > /dev/null; then + while true; do + third_octet=$((third_octet + 1)) + ip_range="${first_octet}.${second_octet}.${third_octet}.${fourth_octet}" + if ! ip route | grep ${ip_range} > /dev/null; then + break + fi + done fi + et_ip_range="${ip_range}" + et_ip_router="${first_octet}.${second_octet}.${third_octet}.1" + et_broadcast_ip="${first_octet}.${second_octet}.${third_octet}.255" + et_range_start="${first_octet}.${second_octet}.${third_octet}.33" + et_range_stop="${first_octet}.${second_octet}.${third_octet}.100" +} + +#Create configuration file for dhcpd +function set_dhcp_config() { + + debug_print + rm -rf "${tmpdir}${dhcpd_file}" > /dev/null 2>&1 rm -rf "${tmpdir}clts.txt" > /dev/null 2>&1 ip link set "${interface}" up > /dev/null 2>&1 From e507f809a9e514638f36796728bc8234133ec77b Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Mon, 4 Dec 2023 20:16:27 +0100 Subject: [PATCH 10/92] Standardize some math expressions --- airgeddon.sh | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index db3fd9872..1e04d4e07 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -2654,7 +2654,7 @@ function select_secondary_interface() { return_to_et_main_menu_from_beef=1 fi return 1 - elif [[ ! ${secondary_iface} =~ ^[[:digit:]]+$ ]] || (( secondary_iface < 1 || secondary_iface > option_counter )); then + elif [[ ! ${secondary_iface} =~ ^[[:digit:]]+$ ]] || ((secondary_iface < 1 || secondary_iface > option_counter)); then if [ "${1}" = "dos_pursuit_mode" ]; then invalid_secondary_iface_selected "dos_pursuit_mode" else @@ -2729,7 +2729,7 @@ function select_interface() { print_hint ${current_menu} read -rp "> " iface - if [[ ! ${iface} =~ ^[[:digit:]]+$ ]] || (( iface < 1 || iface > option_counter )); then + if [[ ! ${iface} =~ ^[[:digit:]]+$ ]] || ((iface < 1 || iface > option_counter)); then invalid_iface_selected else option_counter2=0 @@ -6127,7 +6127,7 @@ function instance_setter() { if [[ -d "/tmp/${airgeddon_instance_dir}" ]]; then while true; do - ((dir_number++)) + dir_number=$((dir_number + 1)) airgeddon_instance_dir="ag${dir_number}/" if [[ ! -d "/tmp/${airgeddon_instance_dir}" ]]; then break @@ -7765,7 +7765,7 @@ function select_wpa_bssid_target_from_captured_file() { print_hint ${current_menu} target_network_on_file=0 - while [[ ! ${target_network_on_file} =~ ^[[:digit:]]+$ ]] || (( target_network_on_file < 1 || target_network_on_file > option_counter )); do + while [[ ! ${target_network_on_file} =~ ^[[:digit:]]+$ ]] || ((target_network_on_file < 1 || target_network_on_file > option_counter)); do echo language_strings "${language}" 3 "green" read -rp "> " target_network_on_file @@ -7900,7 +7900,7 @@ function aircrack_bruteforce_attack_option() { set_minlength_and_maxlength "personal_handshake" charset_option=0 - while [[ ! ${charset_option} =~ ^[[:digit:]]+$ ]] || (( charset_option < 1 || charset_option > 11 )); do + while [[ ! ${charset_option} =~ ^[[:digit:]]+$ ]] || ((charset_option < 1 || charset_option > 11)); do set_charset "aircrack" done @@ -7947,7 +7947,7 @@ function enterprise_jtr_bruteforce_attack_option() { set_minlength_and_maxlength "enterprise" charset_option=0 - while [[ ! ${charset_option} =~ ^[[:digit:]]+$ ]] || (( charset_option < 1 || charset_option > 11 )); do + while [[ ! ${charset_option} =~ ^[[:digit:]]+$ ]] || ((charset_option < 1 || charset_option > 11)); do set_charset "jtr" done @@ -8022,7 +8022,7 @@ function hashcat_bruteforce_attack_option() { set_minlength_and_maxlength "${1}" charset_option=0 - while [[ ! ${charset_option} =~ ^[[:digit:]]+$ ]] || (( charset_option < 1 || charset_option > 11 )); do + while [[ ! ${charset_option} =~ ^[[:digit:]]+$ ]] || ((charset_option < 1 || charset_option > 11)); do set_charset "hashcat" done @@ -8170,7 +8170,7 @@ function manage_hashcat_pot() { echo "" } >> "${potenteredpath}" - for (( x=0; x<${#enterprise_users[@]}; x++ )); do + for ((x=0; x<${#enterprise_users[@]}; x++)); do { echo "${enterprise_users[${x}]} / ${hashcat_keys[${x}]}" } >> "${potenteredpath}" @@ -8263,7 +8263,7 @@ function manage_jtr_pot() { echo "" } >> "${jtrpotenteredpath}" - for (( x=0; x<${#enterprise_users[@]}; x++ )); do + for ((x=0; x<${#enterprise_users[@]}; x++)); do { echo "${enterprise_users[${x}]} / ${jtr_keys[${x}]}" } >> "${jtrpotenteredpath}" @@ -9505,7 +9505,7 @@ function set_hostapd_config() { local digit_to_change digit_to_change="${bssid:10:1}" - (( different_mac_digit=("16#${digit_to_change}" + 1 + RANDOM % 15) % 16 )) + ((different_mac_digit=("16#${digit_to_change}" + 1 + RANDOM % 15) % 16)) et_bssid=$(printf %s%X%s\\n "${bssid::10}" "${different_mac_digit}" "${bssid:11}") { @@ -13430,9 +13430,9 @@ function explore_for_wps_targets_option() { read -rp "> " selected_wps_target_network fi - while [[ ! ${selected_wps_target_network} =~ ^[[:digit:]]+$ ]] || (( selected_wps_target_network < 1 || selected_wps_target_network > wash_counter )) || [[ ${wps_lockeds[${selected_wps_target_network}]} = "Yes" ]]; do + while [[ ! ${selected_wps_target_network} =~ ^[[:digit:]]+$ ]] || ((selected_wps_target_network < 1 || selected_wps_target_network > wash_counter)) || [[ ${wps_lockeds[${selected_wps_target_network}]} = "Yes" ]]; do - if [[ ${selected_wps_target_network} =~ ^[[:digit:]]+$ ]] && (( selected_wps_target_network >= 1 && selected_wps_target_network <= wash_counter )); then + if [[ ${selected_wps_target_network} =~ ^[[:digit:]]+$ ]] && ((selected_wps_target_network >= 1 && selected_wps_target_network <= wash_counter)); then if [ "${wps_lockeds[${selected_wps_target_network}]}" = "Yes" ]; then ask_yesno 350 "no" if [ "${yesno}" = "y" ]; then @@ -13542,7 +13542,7 @@ function select_target() { read -rp "> " selected_target_network fi - while [[ ! ${selected_target_network} =~ ^[[:digit:]]+$ ]] || (( selected_target_network < 1 || selected_target_network > i )); do + while [[ ! ${selected_target_network} =~ ^[[:digit:]]+$ ]] || ((selected_target_network < 1 || selected_target_network > i)); do echo language_strings "${language}" 72 "red" echo @@ -14344,7 +14344,7 @@ function time_loop() { debug_print echo -ne " " - for (( j=1; j<=4; j++ )); do + for ((j=1; j<=4; j++)); do echo -ne "." sleep 0.035 done From 8c2b14190dd037c8cd72bb60429416635eedcc20 Mon Sep 17 00:00:00 2001 From: masipro Date: Wed, 6 Dec 2023 11:22:18 +0100 Subject: [PATCH 11/92] Improvement of the process kill function in et attack. kill all descendant processes --- airgeddon.sh | 60 +++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 45 insertions(+), 15 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 1a651f3fb..3838ee50f 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -10730,18 +10730,33 @@ function set_et_control_script() { EOF cat >&7 <<-'EOF' - function kill_et_processes_control_script() { + + function kill_pid_and_children_recursive() { + + debug_print local parent_pid="" local child_pids="" + + parent_pid="${1}" + child_pids=$(pgrep -P "${parent_pid}" 2> /dev/null) + + for child_pid in ${child_pids}; do + kill_pid_and_children_recursive "${child_pid}" + done + if [ -n "${child_pids}" ]; then + pkill -P "${parent_pid}" &> /dev/null + fi + + kill "${parent_pid}" &> /dev/null + wait "${parent_pid}" 2> /dev/null + } + + function kill_et_processes_control_script() { + readarray -t ET_PROCESSES_TO_KILL < <(cat < "${path_to_processes}" 2> /dev/null) for item in "${ET_PROCESSES_TO_KILL[@]}"; do - parent_pid="${item}" - child_pids=$(pgrep -P "${parent_pid}") - if [ -n "${child_pids}" ]; then - pkill -P "${parent_pid}" &> /dev/null - fi - kill -9 "${parent_pid}" &> /dev/null + kill_pid_and_children_recursive "${item}" done } @@ -11966,6 +11981,28 @@ function write_et_processes() { fi } +#Kill a given PID and all its subprocesses recursively + function kill_pid_and_children_recursive() { + + debug_print + + local parent_pid="" + local child_pids="" + + parent_pid="${1}" + child_pids=$(pgrep -P "${parent_pid}" 2> /dev/null) + + for child_pid in ${child_pids}; do + kill_pid_and_children_recursive "${child_pid}" + done + if [ -n "${child_pids}" ]; then + pkill -P "${parent_pid}" &> /dev/null + fi + + kill "${parent_pid}" &> /dev/null + wait "${parent_pid}" 2> /dev/null + } + #Kill the Evil Twin and Enterprise processes function kill_et_windows() { @@ -11976,14 +12013,7 @@ function kill_et_windows() { fi for item in "${et_processes[@]}"; do - local parent_pid="" - local child_pids="" - parent_pid="${item}" - child_pids=$(pgrep -P "${parent_pid}") - if [ -n "${child_pids}" ]; then - pkill -P "${parent_pid}" &> /dev/null - fi - kill -9 "${parent_pid}" &> /dev/null + kill_pid_and_children_recursive "${item}" done if [ -n "${enterprise_mode}" ]; then From a1d0277f33b06b109fdbc8758452c6ba2c17bf23 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Sat, 30 Dec 2023 20:44:07 +0100 Subject: [PATCH 12/92] Add airgeddon instances orchestrator feature --- airgeddon.sh | 86 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 82 insertions(+), 4 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 3838ee50f..4c0a989ff 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -143,6 +143,8 @@ timeout_capture_handshake="20" timeout_capture_pmkid="25" osversionfile_dir="/etc/" plugins_dir="plugins/" +ag_orchestrator_file="ag.orchestrator.txt" +system_tmpdir="/tmp/" minimum_bash_version_required="4.2" resume_message=224 abort_question=12 @@ -684,6 +686,7 @@ function debug_print() { "check_pending_of_translation" "clean_env_vars" "contains_element" + "create_instance_orchestrator_file" "create_rcfile" "echo_blue" "echo_brown" @@ -701,6 +704,7 @@ function debug_print() { "flying_saucer" "generate_dynamic_line" "initialize_colors" + "initialize_instance_settings" "initialize_script_settings" "instance_setter" "interrupt_checkpoint" @@ -711,6 +715,7 @@ function debug_print() { "print_large_separator" "print_simple_separator" "read_yesno" + "register_instance_pid" "remove_warnings" "set_script_paths" "special_text_missed_optional_tool" @@ -5831,6 +5836,9 @@ function clean_tmpfiles() { if [ "${1}" = "exit_script" ]; then rm -rf "${tmpdir}" > /dev/null 2>&1 + if is_last_airgeddon_instance; then + delete_instance_orchestrator_file + fi else rm -rf "${tmpdir}bl.txt" > /dev/null 2>&1 rm -rf "${tmpdir}target.txt" > /dev/null 2>&1 @@ -6117,6 +6125,16 @@ function print_hint() { print_simple_separator } +#Initialize instances related actions +function initialize_instance_settings() { + + debug_print + + instance_setter + create_instance_orchestrator_file + register_instance_pid +} + #Detect number of the alive airgeddon instances and set the next one if apply function instance_setter() { @@ -6125,20 +6143,80 @@ function instance_setter() { local dir_number="1" local airgeddon_instance_dir="ag${dir_number}/" - if [[ -d "/tmp/${airgeddon_instance_dir}" ]]; then + if [ -d "${system_tmpdir}${airgeddon_instance_dir}" ]; then while true; do dir_number=$((dir_number + 1)) airgeddon_instance_dir="ag${dir_number}/" - if [[ ! -d "/tmp/${airgeddon_instance_dir}" ]]; then + if [ ! -d "${system_tmpdir}${airgeddon_instance_dir}" ]; then break fi done fi - tmpdir="/tmp/${airgeddon_instance_dir}" + tmpdir="${system_tmpdir}${airgeddon_instance_dir}" mkdir -p "${tmpdir}" > /dev/null 2>&1 } +#Create orchestrator file if needed +function create_instance_orchestrator_file() { + + debug_print + + if [ ! -f "${system_tmpdir}${ag_orchestrator_file}" ]; then + touch "${system_tmpdir}${ag_orchestrator_file}" > /dev/null 2>&1 + else + local airgeddon_pid_alive=0 + + readarray -t AIRGEDDON_PIDS < <(cat < "${system_tmpdir}${ag_orchestrator_file}" 2> /dev/null) + for item in "${AIRGEDDON_PIDS[@]}"; do + if ps -p "${item}" > /dev/null 2>&1; then + airgeddon_pid_alive=1 + break + fi + done + + if [ "${airgeddon_pid_alive}" -eq 0 ]; then + rm -rf "${system_tmpdir}${ag_orchestrator_file}" > /dev/null 2>&1 + touch "${system_tmpdir}${ag_orchestrator_file}" > /dev/null 2>&1 + fi + fi +} + +#Delete orchestrator file if needed +function delete_instance_orchestrator_file() { + + debug_print + + if [ -f "${system_tmpdir}${ag_orchestrator_file}" ]; then + rm -rf "${system_tmpdir}${ag_orchestrator_file}" > /dev/null 2>&1 + fi +} + +#Register instance pid into orchestrator file +function register_instance_pid() { + + debug_print + + { + echo "${BASHPID}" + } >> "${system_tmpdir}${ag_orchestrator_file}" +} + +#Check if this instance is the last airgeddon instance running +function is_last_airgeddon_instance() { + + debug_print + + readarray -t AIRGEDDON_PIDS < <(cat < "${system_tmpdir}${ag_orchestrator_file}" 2> /dev/null) + for item in "${AIRGEDDON_PIDS[@]}"; do + if [[ "${item}" != "${BASHPID}" ]] && ps -p "${item}" > /dev/null 2>&1; then + return 1 + fi + done + + return 0 +} + #airgeddon main menu function main_menu() { @@ -16805,7 +16883,7 @@ function echo_white() { function main() { initialize_script_settings - instance_setter + initialize_instance_settings initialize_colors env_vars_initialization detect_distro_phase1 From e5ed3a43991cb13b23ffd205470279e4e6737183 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Wed, 10 Jan 2024 23:23:29 +0100 Subject: [PATCH 13/92] Modify pid reading from orchestrator file. Needed for future changes --- airgeddon.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 4c0a989ff..ab0c36f84 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -6166,10 +6166,12 @@ function create_instance_orchestrator_file() { touch "${system_tmpdir}${ag_orchestrator_file}" > /dev/null 2>&1 else local airgeddon_pid_alive=0 + local agpid="" readarray -t AIRGEDDON_PIDS < <(cat < "${system_tmpdir}${ag_orchestrator_file}" 2> /dev/null) for item in "${AIRGEDDON_PIDS[@]}"; do - if ps -p "${item}" > /dev/null 2>&1; then + [[ "${item}" =~ ^(et)?([0-9]+)(rs[0-1])?$ ]] && agpid="${BASH_REMATCH[2]}" + if ps -p "${agpid}" > /dev/null 2>&1; then airgeddon_pid_alive=1 break fi From 41881be26017b439bb45e7ff76237e422825e4e6 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Thu, 11 Jan 2024 01:14:20 +0100 Subject: [PATCH 14/92] More pid reading modifications from orchestrator file. Needed for future changes --- airgeddon.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index ab0c36f84..e37ab6004 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -6209,9 +6209,12 @@ function is_last_airgeddon_instance() { debug_print - readarray -t AIRGEDDON_PIDS < <(cat < "${system_tmpdir}${ag_orchestrator_file}" 2> /dev/null) + local agpid="" + + readarray -t AIRGEDDON_PIDS < <(cat <"${system_tmpdir}${ag_orchestrator_file}" 2>/dev/null) for item in "${AIRGEDDON_PIDS[@]}"; do - if [[ "${item}" != "${BASHPID}" ]] && ps -p "${item}" > /dev/null 2>&1; then + [[ "${item}" =~ ^(et)?([0-9]+)(rs[0-1])?$ ]] && agpid="${BASH_REMATCH[2]}" + if [[ "${agpid}" != "${BASHPID}" ]] && ps -p "${agpid}" >/dev/null 2>&1; then return 1 fi done From 0fe074bd9f5b1ea16802a5af6c61ae2af66a43e3 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Fri, 12 Jan 2024 00:31:31 +0100 Subject: [PATCH 15/92] Create a function to handle evil twin marks on orchestrator file and saving/restoring original routing state --- airgeddon.sh | 63 +++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 57 insertions(+), 6 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index e37ab6004..2b7d1c842 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -1526,7 +1526,7 @@ function prepare_et_interface() { fi } -#Restore the state of the interfaces after Evil Twin or Enterprise process +#Restore the state of the interfaces after Evil Twin or Enterprise attack process function restore_et_interface() { debug_print @@ -1570,6 +1570,8 @@ function restore_et_interface() { fi fi fi + + control_routing_status "end" } #Unblock if possible the interface if blocked @@ -5829,6 +5831,58 @@ function clean_env_vars() { 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_FORCE_NETWORK_MANAGER_KILLING AIRGEDDON_MDK_VERSION AIRGEDDON_PLUGINS_ENABLED AIRGEDDON_DEVELOPMENT_MODE AIRGEDDON_DEBUG_MODE AIRGEDDON_WINDOWS_HANDLING } +#Control the status of the routing taking into consideration instances orchestration +function control_routing_status() { + + debug_print + + local saved_routing_status_found="" + local original_routing_status="" + local etset="" + local agpid="" + local et_still_running=0 + + if [ "${1}" = "start" ]; then + readarray -t AIRGEDDON_PIDS < <(cat < "${system_tmpdir}${ag_orchestrator_file}" 2> /dev/null) + for item in "${AIRGEDDON_PIDS[@]}"; do + [[ "${item}" =~ ^(et)?([0-9]+)(rs[0-1])?$ ]] && etset="${BASH_REMATCH[1]}" && agpid="${BASH_REMATCH[2]}" + if [ -z "${saved_routing_status_found}" ]; then + [[ "${item}" =~ ^(et)?([0-9]+)(rs[0-1])?$ ]] && saved_routing_status_found="${BASH_REMATCH[3]}" + fi + + if [[ "${BASHPID}" = "${agpid}" ]] && [[ "${etset}" != "et" ]]; then + sed -ri "s:^(${BASHPID}):et\1:" "${system_tmpdir}${ag_orchestrator_file}" 2> /dev/null + fi + done + + if [ -z "${saved_routing_status_found}" ]; then + original_routing_status=$(cat /proc/sys/net/ipv4/ip_forward) + sed -ri "s:^(et${BASHPID})$:\1rs${original_routing_status}:" "${system_tmpdir}${ag_orchestrator_file}" 2> /dev/null + fi + else + readarray -t AIRGEDDON_PIDS < <(cat < "${system_tmpdir}${ag_orchestrator_file}" 2> /dev/null) + for item in "${AIRGEDDON_PIDS[@]}"; do + [[ "${item}" =~ ^(et)?([0-9]+)(rs[0-1])?$ ]] && etset="${BASH_REMATCH[1]}" && agpid="${BASH_REMATCH[2]}" + if [ -z "${saved_routing_status_found}" ]; then + [[ "${item}" =~ ^(et)?([0-9]+)(rs[0-1])?$ ]] && saved_routing_status_found="${BASH_REMATCH[3]}" + fi + + if [[ "${BASHPID}" = "${agpid}" ]] && [[ "${etset}" = "et" ]]; then + sed -ri "s:^(et${BASHPID}):${BASHPID}:" "${system_tmpdir}${ag_orchestrator_file}" 2> /dev/null + fi + + if [[ "${BASHPID}" != "${agpid}" ]] && [[ "${etset}" = "et" ]]; then + et_still_running=1 + fi + done + + if [[ -n "${saved_routing_status_found}" ]] && [[ "${et_still_running}" -eq 0 ]]; then + original_routing_status="${saved_routing_status_found//[^0-9]/}" + echo "${original_routing_status}" > /proc/sys/net/ipv4/ip_forward 2> /dev/null + fi + fi +} + #Clean temporary files function clean_tmpfiles() { @@ -5895,10 +5949,7 @@ function clean_routing_rules() { debug_print - if [ -n "${original_routing_state}" ]; then - echo "${original_routing_state}" > /proc/sys/net/ipv4/ip_forward 2> /dev/null - fi - + control_routing_status "end" clean_initialize_iptables_nftables if [ "${iptables_saved}" -eq 1 ]; then @@ -9885,8 +9936,8 @@ function set_std_internet_routing_rules() { debug_print + control_routing_status "start" if [ "${routing_modified}" -eq 0 ]; then - original_routing_state=$(cat /proc/sys/net/ipv4/ip_forward) save_iptables_nftables fi From cf78de4f3ede1f9722ce7140fc81b907e13ce178 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Fri, 2 Feb 2024 23:31:30 +0100 Subject: [PATCH 16/92] Modify language string 297 --- language_strings.sh | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/language_strings.sh b/language_strings.sh index a5eb1f532..fdaf89a69 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -5191,19 +5191,19 @@ function initialize_language_strings() { arr["ARABIC",296]="جميع معايير الهجوم جاهزة ويمكن أن تبدأ. سيتم فتح العديد من لوحات المفاتيح ، لا تغلقها. عندما تريد إيقاف الهجوم ، اضغط على [Enter] في وحدة التحكم هذه وسيغلق البرنامج البرامج الأخرى تلقائيًا" arr["CHINESE",296]="所有参数和要求都已设置。攻击即将开始。将打开多个窗口,不要关闭任何窗口。当你想停止攻击时,在此窗口上按 [Enter],脚本将自动将它们全部关闭" - arr["ENGLISH",297]="Cleaning nftables/iptables and routing rules" - arr["SPANISH",297]="Limpiando nftables/iptables y reglas de routing" - arr["FRENCH",297]="Effacement des règles de routage nftables/iptables" - arr["CATALAN",297]="Netejant nftables/iptables i regles de routing" - arr["PORTUGUESE",297]="Limpando nftables/iptables e regras de roteamento" - arr["RUSSIAN",297]="Очистка nftables/iptables и правил маршуртизации" - arr["GREEK",297]="Γινεται καθαρισμός των nftables/iptables και των κανόνων δρομολόγησης" - arr["ITALIAN",297]="Pulendo nftables/iptables e le regole di routing" - arr["POLISH",297]="Usuwanie nftables/iptables i reguł routingu" - arr["GERMAN",297]="Bereinigung von nftables/iptables und Routing-Regeln" - arr["TURKISH",297]="Nftables/iptables ve routing rules temizleniyor" - arr["ARABIC",297]="وقواعد التوجيه nftables/iptables تنظيف" - arr["CHINESE",297]="清理 nftables/iptables 和路由规则" + arr["ENGLISH",297]="Cleaning nftables/iptables and routing rules if apply" + arr["SPANISH",297]="Limpiando nftables/iptables y reglas de routing si procede" + arr["FRENCH",297]="\${pending_of_translation} Effacement des règles de routage nftables/iptables le cas échéant" + arr["CATALAN",297]="\${pending_of_translation} Netejant nftables/iptables i regles de routing si escau" + arr["PORTUGUESE",297]="\${pending_of_translation} Limpando nftables/iptables e regras de roteamento se aplicável" + arr["RUSSIAN",297]="\${pending_of_translation} Очистка nftables/iptables и правил маршуртизации если применимо" + arr["GREEK",297]="\${pending_of_translation} Γινεται καθαρισμός των nftables/iptables και των κανόνων δρομολόγησης εάν υπάρχουν" + arr["ITALIAN",297]="\${pending_of_translation} Pulendo nftables/iptables e le regole di routing se applicabile" + arr["POLISH",297]="\${pending_of_translation} Usuwanie nftables/iptables i reguł routingu jeśli dotyczy" + arr["GERMAN",297]="\${pending_of_translation} Bereinigung von nftables/iptables und Routing-Regeln falls zutreffend" + arr["TURKISH",297]="\${pending_of_translation} nftables/iptables ve routing rules ve varsa temizleniyor" + arr["ARABIC",297]="\${pending_of_translation} وقواعد التوجيه إن أمكن nftables/iptables تنظيف" + arr["CHINESE",297]="\${pending_of_translation} 清理 nftables/iptables 和路由规则 如果适用" arr["ENGLISH",298]="Evil Twin attack has been started. Press [Enter] key on this window to stop it" arr["SPANISH",298]="El ataque Evil Twin ha comenzado. Pulse la tecla [Enter] en esta ventana para pararlo" From 7f5e9fa7832b2e356475d660c092c22790c067e5 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Tue, 13 Feb 2024 17:05:58 +0100 Subject: [PATCH 17/92] Preparing version numbers for v11.30 --- README.md | 2 +- airgeddon.sh | 6 +++--- language_strings.sh | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 81f6e2526..040053f1d 100644 --- a/README.md +++ b/README.md @@ -106,7 +106,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-11.22-blue.svg?style=flat-square&colorA=273133&colorB=0093ee "Latest version" +[Version-shield]: https://img.shields.io/badge/version-11.30-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=a9a9a9 "Docker rules!" diff --git a/airgeddon.sh b/airgeddon.sh index 53319c698..d42a8ed66 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 -#Version......: 11.22 +#Version......: 11.30 #Usage........: bash airgeddon.sh #Bash Version.: 4.2 or later @@ -134,8 +134,8 @@ declare -A possible_alias_names=( ) #General vars -airgeddon_version="11.22" -language_strings_expected_version="11.22-1" +airgeddon_version="11.30" +language_strings_expected_version="11.30-1" standardhandshake_filename="handshake-01.cap" standardpmkid_filename="pmkid_hash.txt" standardpmkidcap_filename="pmkid.cap" diff --git a/language_strings.sh b/language_strings.sh index 9a6fd3cee..cfb5b646e 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -10,7 +10,7 @@ function set_language_strings_version() { debug_print - language_strings_version="11.22-1" + language_strings_version="11.30-1" } #Set different language text strings From 9612e1ffd0d783cab4907867277a89774106fc77 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Wed, 14 Feb 2024 20:11:46 +0100 Subject: [PATCH 18/92] Preparing version numbers for v11.30 --- README.md | 2 +- airgeddon.sh | 6 +++--- language_strings.sh | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 81f6e2526..040053f1d 100644 --- a/README.md +++ b/README.md @@ -106,7 +106,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-11.22-blue.svg?style=flat-square&colorA=273133&colorB=0093ee "Latest version" +[Version-shield]: https://img.shields.io/badge/version-11.30-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=a9a9a9 "Docker rules!" diff --git a/airgeddon.sh b/airgeddon.sh index 21b71e42f..17d29f39e 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 -#Version......: 11.22 +#Version......: 11.30 #Usage........: bash airgeddon.sh #Bash Version.: 4.2 or later @@ -134,8 +134,8 @@ declare -A possible_alias_names=( ) #General vars -airgeddon_version="11.22" -language_strings_expected_version="11.22-1" +airgeddon_version="11.30" +language_strings_expected_version="11.30-1" standardhandshake_filename="handshake-01.cap" standardpmkid_filename="pmkid_hash.txt" standardpmkidcap_filename="pmkid.cap" diff --git a/language_strings.sh b/language_strings.sh index fdbce82ad..8f118c7d2 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -10,7 +10,7 @@ function set_language_strings_version() { debug_print - language_strings_version="11.22-1" + language_strings_version="11.30-1" } #Set different language text strings From e15ffd3028d4e64eee96e74877bb138dae71857e Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Wed, 14 Feb 2024 20:55:43 +0100 Subject: [PATCH 19/92] Minor changes on CONTRIBUTING.md --- CONTRIBUTING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7db54692e..01b3adc6d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -21,7 +21,7 @@ Please note we have a [Code of Conduct], please follow it in all your interactio ## Collaborating Translators -1. Ask ALWAYS before start a translation to add a new language (by mail at [v1s1t0r.1s.h3r3@gmail.com], by Twitter (X) at [@OscarAkaElvis], by [IRC] channel or [Discord] server). Contact to the development team in order to know what are you going to do. You'll be informed about how to proceed. +1. ALWAYS ask before starting a translation to add a new language. You can do so by contacting us via email at [v1s1t0r.1s.h3r3@gmail.com], through Twitter (X) at [@OscarAkaElvis], via [IRC] channel, or on the [Discord] server. Please reach out to the development team to clarify your intentions. You will then be informed about how to proceed. 2. Translate the strings located in `language_strings.sh`, the existing strings of _language_strings_handling_messages_ function in `airgeddon.sh` and the strings of _missing_dependencies_text_ function in `missing_dependencies.sh` (this last file is in plugins dir). 3. If you want to create a pull request with a new language to be added, at least the 80% of the phrases must be translated and the rest must be done with at least _an automatic-translation_ system and marked with PoT (Pending of Translation) mark. Anyway, always ask first. 4. Remember that pull requests done over master branch will be rejected. Read the git workflow policy first. @@ -70,7 +70,7 @@ Anything can be also discussed on public [IRC] channel or [Discord] server. More ## Beta Testers 1. Download the main version from the [Master] branch or the beta testing version from the development branch called [Dev]. Temporary branches may be existing for specific features that can also be tested. -2. Report any issues or bugs by Twitter (X) at [@OscarAkaElvis], mail [v1s1t0r.1s.h3r3@gmail.com], on [IRC] channel, [Discord] server or submit GitHub issue requests [Here] reading first the Issue Creation Policy. +2. Report any issues or bugs via [IRC] channel, [Discord] server, or submit GitHub issue requests [here] after reading the Issue Creation Policy. ## Git Workflow Policy From b588e824625f4ddd426033d4a0ecb7fc96f6ee8e Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Tue, 12 Mar 2024 18:43:14 +0100 Subject: [PATCH 20/92] Fix problem of adding two pids to orchestrator file when launched from tmux --- airgeddon.sh | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index d42a8ed66..6263e5f27 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -6246,9 +6246,11 @@ function initialize_instance_settings() { debug_print - instance_setter - create_instance_orchestrator_file - register_instance_pid + if ! is_instance_inside_tmux; then + instance_setter + create_instance_orchestrator_file + register_instance_pid + fi } #Detect number of the alive airgeddon instances and set the next one if apply @@ -6300,7 +6302,7 @@ function create_instance_orchestrator_file() { fi } -#Delete orchestrator file if needed +#Delete orchestrator file if exists function delete_instance_orchestrator_file() { debug_print @@ -16172,6 +16174,15 @@ function initialize_colors() { white_color="\e[1;97m" } +#Check if current instance is running inside a tmux +function is_instance_inside_tmux() { + if [ -n "${TMUX}" ]; then + return 0 + else + return 1 + fi +} + #Kill tmux session started by airgeddon function kill_tmux_session() { From c45740cc4243d1852f4c2bae5a964d8f183530d8 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Wed, 13 Mar 2024 13:54:43 +0100 Subject: [PATCH 21/92] Remove is_instance_inside_tmux function to unify tmux detection methods --- airgeddon.sh | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 6263e5f27..7ef89f436 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -683,6 +683,7 @@ function debug_print() { declare excluded_functions=( "airmon_fix" "ask_yesno" + "check_inside_tmux" "check_pending_of_translation" "clean_env_vars" "contains_element" @@ -6246,7 +6247,7 @@ function initialize_instance_settings() { debug_print - if ! is_instance_inside_tmux; then + if ! check_inside_tmux; then instance_setter create_instance_orchestrator_file register_instance_pid @@ -16174,15 +16175,6 @@ function initialize_colors() { white_color="\e[1;97m" } -#Check if current instance is running inside a tmux -function is_instance_inside_tmux() { - if [ -n "${TMUX}" ]; then - return 0 - else - return 1 - fi -} - #Kill tmux session started by airgeddon function kill_tmux_session() { From 8f3343a489247f3d2462c14835dd5ef44d661c75 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Wed, 13 Mar 2024 14:22:35 +0100 Subject: [PATCH 22/92] Move the instance registering to the right place (after tmux initialization). This way no tmux detection is needed and now pids are registering fine (xterm and tmux) --- airgeddon.sh | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 7ef89f436..4cee3bb2f 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -6247,11 +6247,9 @@ function initialize_instance_settings() { debug_print - if ! check_inside_tmux; then - instance_setter - create_instance_orchestrator_file - register_instance_pid - fi + instance_setter + create_instance_orchestrator_file + register_instance_pid } #Detect number of the alive airgeddon instances and set the next one if apply @@ -17012,9 +17010,9 @@ function echo_white() { function main() { initialize_script_settings - initialize_instance_settings initialize_colors env_vars_initialization + initialize_instance_settings detect_distro_phase1 detect_distro_phase2 special_distro_features From 004d5f81b6f84b76cbe5363607acc732752b674b Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Wed, 13 Mar 2024 14:29:22 +0100 Subject: [PATCH 23/92] Remove the check_inside_tmux function from exclusion list of the debug_print function. Not needed anymore. --- airgeddon.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 4cee3bb2f..0bc3f98eb 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -683,7 +683,6 @@ function debug_print() { declare excluded_functions=( "airmon_fix" "ask_yesno" - "check_inside_tmux" "check_pending_of_translation" "clean_env_vars" "contains_element" From 12d96f115ecb698970ade3f7a5de9f765b300cd1 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Fri, 15 Mar 2024 12:28:32 +0100 Subject: [PATCH 24/92] Change from 5200MHz to 5180MHz (channel 36) for 5Ghz band check. It is more allowed in all countries --- airgeddon.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 17d29f39e..74ff6372f 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -1466,7 +1466,7 @@ function get_5ghz_band_info_from_phy_interface() { debug_print - if iw phy "${1}" info 2> /dev/null | grep "5200 MHz" > /dev/null; then + if iw phy "${1}" channels 2> /dev/null | grep -i "5180 MHz" > /dev/null; then if "${AIRGEDDON_5GHZ_ENABLED:-true}"; then return 0 else From 8f0b8d256811cf16846f63975eff15a2b5c18902 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Fri, 15 Mar 2024 16:06:14 +0100 Subject: [PATCH 25/92] Improvements on 5Ghz country code check --- CHANGELOG.md | 3 +++ airgeddon.sh | 6 ++++-- language_strings.sh | 40 +++++++++++++++++++++++++++------------- 3 files changed, 34 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 726cc95f8..e5f51cade 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +### 11.30 + - Improvements on 5Ghz country code check + ### 11.22 - Possibility to add manually ESSID name for selected hidden networks - Improvement on process killing on Evil Twin attacks diff --git a/airgeddon.sh b/airgeddon.sh index 74ff6372f..6c2dc5d9e 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -1483,7 +1483,7 @@ function region_check() { debug_print country_code="$(iw reg get | awk 'FNR == 2 {print $2}' | cut -f 1 -d ":" 2> /dev/null)" - [[ ! ${country_code} =~ ^[A-Z]{2}$ ]] && country_code="00" + [[ ! ${country_code} =~ ^[A-Z]{2}$|^99$ ]] && country_code="00" } #Prepare monitor mode avoiding the use of airmon-ng or airmon-zc generating two interfaces from one @@ -13933,7 +13933,9 @@ function et_prerequisites() { if [ "${channel}" -gt 14 ]; then echo if [ "${country_code}" = "00" ]; then - language_strings "${language}" 706 "blue" + language_strings "${language}" 706 "yellow" + elif [ "${country_code}" = "99" ]; then + language_strings "${language}" 719 "yellow" else language_strings "${language}" 392 "blue" fi diff --git a/language_strings.sh b/language_strings.sh index 8f118c7d2..f8c9627be 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -10917,19 +10917,19 @@ function initialize_language_strings() { arr["ARABIC",705]="\${normal_color}\${urlgithub_wiki}/Options \${red_color}:للمزيد من المعلومات عن كيفيت عمل هذة الخطوات .xterm بدل من tmux او استخدم (x او Wayland) يتم اكتشاف اي نظام جرافيكس. حول تثبيت واحد من هذين الانظمه\${normal_color}" arr["CHINESE",705]="未检测到图形系统。考虑安装一个 (X11 窗口管理器或 Wayland 窗口管理器) 或使用 tmux 而不是 xterm。修改 airgeddon 选项。有关如何执行这里操作的更多信息: \${normal_color}\${urlgithub_wiki}/Options" - arr["ENGLISH",706]="airgeddon detected you don't have configured the country code for 5Ghz band. Use the \"\${normal_color}iw reg get\${blue_color}\" command to check the current configuration, and \"\${normal_color}iw reg set XX\${blue_color}\" to set the region where XX is your country code (e.g. \"\${normal_color}iw reg set ES\${blue_color}\" for Spain). Verify the configuration with \"\${normal_color}iw reg get\${blue_color}\" before attempting the attack on the 5Ghz target network. Anyway, the 5Ghz band has several channels that may not be available for operation due to country restrictions (DFS channels). If the target network uses one of these channels, the attack may not be successful" - arr["SPANISH",706]="airgeddon detectó que no tienes configurado el código de país para la banda de los 5Ghz. Usa el comando \"\${normal_color}iw reg get\${blue_color}\" para comprobar la configuración actual y \"\${normal_color}iw reg set XX\${blue_color}\" para establecer la región donde XX es el código de tu país (por ejemplo, \"\${normal_color}iw reg set ES\${blue_color}\" para España). Verifica la configuración con \"\${normal_color}iw reg get\${blue_color}\" antes de intentar el ataque sobre la red objetivo de 5Ghz. De todos modos, la banda de los 5Ghz tiene varios canales que no estan disponibles para operar debido a las restricciones del país (canales DFS). Si la red objetivo utiliza uno de estos canales, es posible que el ataque no tenga éxito" - arr["FRENCH",706]="airgeddon a détecté que vous n'avez pas configuré le code du pays pour la bande 5Ghz. Utilisez la commande \"\${normal_color}iw reg get\${blue_color}\" pour vérifier la configuration actuelle, et \"\${normal_color}iw reg set XX\${blue_color}\" pour établir la région où XX est votre code pays (par exemple \"\${normal_color}iw reg set ES\${blue_color}\" pour l'Espagne). Vérifiez la configuration avec \"\${normal_color}iw reg get\${blue_color}\" avant de essayer l'attaque sur le réseau cible 5Ghz. De toutes façons, la bande 5Ghz a plusieurs canaux qui peuvent ne pas être disponibles pour le fonctionnement en raison des restrictions nationales (canaux DFS). Si le réseau cible utilise l'un de ces canaux, l'attaque peut échouer" - arr["CATALAN",706]="airgeddon ha detectat que no heu configurat el codi de país per a la banda de 5Ghz. Utilitzeu l'ordre \"\${normal_color}iw reg get\${blue_color}\" per comprovar la configuració actual i \"\${normal_color}iw reg set XX\${blue_color}\" per establir la regió on XX és el teu codi de país (p. ex., \"\${normal_color}iw reg set ES\${blue_color}\" per a Espanya). Verifiqueu la configuració amb \"\${normal_color}iw reg get\${blue_color}\" abans d'intentar l'atac a la xarxa objectiu de 5 Ghz. De totes maneres, la banda de 5Ghz té diversos canals que poden no estar disponibles per funcionar a causa de les restriccions del país (canals DFS). Si la xarxa objectiu utilitza un d'aquests canals, és possible que l'atac no tingui èxit" - arr["PORTUGUESE",706]="airgeddon detectou que você não configurou o código do país para a banda de 5Ghz. Use o comando \"\${normal_color}iw reg get\${blue_color}\" para verificar a configuração atual e \"\${normal_color}iw reg set XX\${blue_color}\" para definir a região, onde XX é o código do país (por exemplo, \"\${normal_color}iw reg set ES\${blue_color}\" para a Espanha). Verifique a configuração com \"\${normal_color}iw reg get\${blue_color}\" antes de tentar o ataque na rede alvo de 5Ghz. Ainda sim, a banda 5Ghz possui vários canais que podem não estar disponíveis para operação devido a restrições do país (canais DFS). Se a rede de destino usar um desses canais, o ataque pode não ser bem-sucedido" - arr["RUSSIAN",706]="airgeddon обнаружил, что код страны для 5Ghz диапазона не установлен. Используйте команду \"\${normal_color}iw reg get\${blue_color}\", чтобы проверить текущую конфигурацию. и \"\${normal_color}iw reg set XX\${blue_color}\", чтобы установите регион (где XX – код вашей страны (например, \"\${normal_color}iw reg set ES\${blue_color}\" для Испании)). Проверьте конфигурацию с помощью \"\${normal_color}iw reg get\${blue_color}\" перед попыткой атаки на целевую 5Ghz сеть. Также атака может быть неудачной из-за того, что в диапазоне 5Ghz есть несколько каналов, которые могут быть недоступны для работы из-за региональных ограничений (DFS каналы)" - arr["GREEK",706]="Το airgeddon εντόπισε ότι δεν έχετε διαμορφώσει τον κωδικό χώρας για τη ζώνη 5Ghz. Χρησιμοποιήστε την εντολή \"\${normal_color}iw reg get\${blue_color}\" για να ελέγξετε την τρέχουσα διαμόρφωση και \"\${normal_color}iw reg set XX\${blue_color}\" για να ορίσετε την περιοχή όπου XX είναι ο κωδικός της χώρας σας (π.χ. \"\${normal_color}iw reg set ES\${blue_color}\" για την Ισπανία). Επαληθεύστε τη διαμόρφωση με το \"\${normal_color}iw reg get\${blue_color}\" πριν επιχειρήσετε την επίθεση στο δίκτυο στόχου 5Ghz. Τέλος πάντων, η ζώνη των 5Ghz έχει αρκετά κανάλια που ενδέχεται να μην είναι διαθέσιμα για λειτουργία λόγω περιορισμών χώρας (κανάλια DFS). Εάν το δίκτυο-στόχος χρησιμοποιεί ένα από αυτά τα κανάλια, η επίθεση ενδέχεται να μην είναι επιτυχής" - arr["ITALIAN",706]="airgeddon ha rilevato che non hai configurato il codice del paese per la banda 5Ghz. Usa il comando \"\${normal_color}iw reg get\${blue_color}\" per controllare la configurazione attuale, e \"\${normal_color}iw reg set XX\${blue_color}\" per impostare la regione dove XX è il codice del tuo paese (ad es. \"\${normal_color}iw reg set ES\${blue_color}\" per la Spagna). Verifica la configurazione con \"\${normal_color}iw reg get\${blue_color}\" prima di tentare l'attacco alla rete obiettivo 5Ghz. Ad ogni modo, la banda 5Ghz ha diversi canali che potrebbero non essere disponibili per il funzionamento a causa di restrizioni nazionali (canali DFS). Se la rete obiettivo utilizza uno di questi canali, l'attacco potrebbe non avere successo" - arr["POLISH",706]="airgeddon wykrył, że nie masz skonfigurowanego kodu kraju dla pasma 5Ghz. Użyj polecenia \"\${normal_color}iw reg get\${blue_color}\", aby sprawdzić bieżącą konfigurację, a \"\${normal_color}iw reg set XX\${blue_color}\", aby ustaw region, w którym XX to kod kraju (np. \"\${normal_color}iw reg set ES\${blue_color}\" dla Hiszpanii). Sprawdź konfigurację za pomocą \"\${normal_color}iw reg get\${blue_color}\" przed przystąpieniem do ataku na sieć docelową 5Ghz. W każdym razie pasmo 5Ghz ma kilka kanałów, które mogą nie być dostępne do pracy ze względu na ograniczenia krajowe (kanały DFS). Jeśli sieć docelowa korzysta z jednego z tych kanałów, atak może się nie powieść" - arr["GERMAN",706]="airgeddon hat festgestellt, dass Sie den Ländercode für das 5Ghz-Band nicht konfiguriert haben. Verwenden Sie den Befehl \"\${normal_color}iw reg get\${blue_color}\", um die aktuelle Konfiguration zu überprüfen, und \"\${normal_color}iw reg set XX\${blue_color}\" um die Region einzustellen, wobei XX Ihr Ländercode ist (z. B. \"\${normal_color}iw reg set ES\${blue_color}\" für Spanien). Überprüfen Sie die Konfiguration mit \"\${normal_color}iw reg get\${blue_color}\", bevor Sie den Angriff auf das 5-Ghz-Zielnetzwerk versuchen. Wie auch immer, das 5-Ghz-Band hat mehrere Kanäle, die aufgrund von Länderbeschränkungen möglicherweise nicht für den Betrieb verfügbar sind (DFS-Kanäle). Wenn das Zielnetzwerk einen dieser Kanäle verwendet, ist der Angriff möglicherweise nicht erfolgreich" - arr["TURKISH",706]="airgeddon, 5Ghz bandı için ülke kodunu yapılandırmadığınızı tespit etti. Geçerli yapılandırmayı kontrol etmek için \"\${normal_color}iw reg get\${blue_color}\" komutunu ve mevcut yapılandırmayı kontrol etmek için \"\${normal_color}iw reg set XX\${blue_color}\" komutunu kullanın. XX'nin ülke kodunuz olduğu bölgeyi ayarlayın (ör. İspanya için \"\${normal_color}iw reg set ES\${blue_color}\"). 5Ghz hedef ağına saldırı girişiminde bulunmadan önce \"\${normal_color}iw reg get\${blue_color}\" ile yapılandırmayı doğrulayın. Her neyse, 5Ghz bandında, ülke kısıtlamaları nedeniyle (DFS kanalları) işletilemeyen birkaç kanal vardır. Hedef ağ bu kanallardan birini kullanıyorsa saldırı başarılı olamayabilir" - arr["ARABIC",706]="5Ghz قبل الهجوم علي الشبكةال \"\${normal_color}iw reg get\${blue_color}\" هو كود اسبانيا. لتثبيت الاعدادات قم بهذه الامر (\"\${normal_color}iw reg set ES\${blue_color}\") :هو كود البلد للمثل XX لتحديد المنطقه و ان \"\${normal_color}iw reg set XX\${blue_color}\" لتحقق من الاعدادات, و \"\${normal_color}iw reg get\${blue_color}\" استخدم الامر .Ghzقد اكتشف انك لم تقوم بتحديد كود البلد لناقط ال5 airgeddon" - arr["CHINESE",706]="airgeddon 检测到您没有为 5Ghz 频段配置国家代码。使用\"\${normal_color}iw reg get\${blue_color}\"命令查看当前配置,\"\${normal_color}iw reg set XX\${blue_color} \" 设置区域,其中 XX 是您的国家代码 (例如 \"\${normal_color}iw reg set CN\${blue_color}\" 代表配置国家代码为中国) 。在尝试攻击 5Ghz 目标网络之前,使用 \"\${normal_color}iw reg get\${blue_color}\" 验证配置。一般情况下,5Ghz 频段有几个频道可能由于国家限制 DFS 频道 (雷达保留频道) 而无法使用。如果目标网络使用这些频道之一,则攻击可能不会成功" + arr["ENGLISH",706]="airgeddon detected you don't have configured the country code for 5Ghz band. Use the \"\${normal_color}iw reg get\${yellow_color}\" command to check the current configuration, and \"\${normal_color}iw reg set XX\${yellow_color}\" to set the region where XX is your country code (e.g. \"\${normal_color}iw reg set ES\${yellow_color}\" for Spain). Verify the configuration with \"\${normal_color}iw reg get\${yellow_color}\" before attempting the attack on the 5Ghz target network. Anyway, the 5Ghz band has several channels that may not be available for operation due to country restrictions (DFS channels). If the target network uses one of these channels, the attack may not be successful" + arr["SPANISH",706]="airgeddon detectó que no tienes configurado el código de país para la banda de los 5Ghz. Usa el comando \"\${normal_color}iw reg get\${yellow_color}\" para comprobar la configuración actual y \"\${normal_color}iw reg set XX\${yellow_color}\" para establecer la región donde XX es el código de tu país (por ejemplo, \"\${normal_color}iw reg set ES\${yellow_color}\" para España). Verifica la configuración con \"\${normal_color}iw reg get\${yellow_color}\" antes de intentar el ataque sobre la red objetivo de 5Ghz. De todos modos, la banda de los 5Ghz tiene varios canales que no estan disponibles para operar debido a las restricciones del país (canales DFS). Si la red objetivo utiliza uno de estos canales, es posible que el ataque no tenga éxito" + arr["FRENCH",706]="airgeddon a détecté que vous n'avez pas configuré le code du pays pour la bande 5Ghz. Utilisez la commande \"\${normal_color}iw reg get\${yellow_color}\" pour vérifier la configuration actuelle, et \"\${normal_color}iw reg set XX\${yellow_color}\" pour établir la région où XX est votre code pays (par exemple \"\${normal_color}iw reg set ES\${yellow_color}\" pour l'Espagne). Vérifiez la configuration avec \"\${normal_color}iw reg get\${yellow_color}\" avant de essayer l'attaque sur le réseau cible 5Ghz. De toutes façons, la bande 5Ghz a plusieurs canaux qui peuvent ne pas être disponibles pour le fonctionnement en raison des restrictions nationales (canaux DFS). Si le réseau cible utilise l'un de ces canaux, l'attaque peut échouer" + arr["CATALAN",706]="airgeddon ha detectat que no heu configurat el codi de país per a la banda de 5Ghz. Utilitzeu l'ordre \"\${normal_color}iw reg get\${yellow_color}\" per comprovar la configuració actual i \"\${normal_color}iw reg set XX\${yellow_color}\" per establir la regió on XX és el teu codi de país (p. ex., \"\${normal_color}iw reg set ES\${yellow_color}\" per a Espanya). Verifiqueu la configuració amb \"\${normal_color}iw reg get\${yellow_color}\" abans d'intentar l'atac a la xarxa objectiu de 5 Ghz. De totes maneres, la banda de 5Ghz té diversos canals que poden no estar disponibles per funcionar a causa de les restriccions del país (canals DFS). Si la xarxa objectiu utilitza un d'aquests canals, és possible que l'atac no tingui èxit" + arr["PORTUGUESE",706]="airgeddon detectou que você não configurou o código do país para a banda de 5Ghz. Use o comando \"\${normal_color}iw reg get\${yellow_color}\" para verificar a configuração atual e \"\${normal_color}iw reg set XX\${yellow_color}\" para definir a região, onde XX é o código do país (por exemplo, \"\${normal_color}iw reg set ES\${yellow_color}\" para a Espanha). Verifique a configuração com \"\${normal_color}iw reg get\${yellow_color}\" antes de tentar o ataque na rede alvo de 5Ghz. Ainda sim, a banda 5Ghz possui vários canais que podem não estar disponíveis para operação devido a restrições do país (canais DFS). Se a rede de destino usar um desses canais, o ataque pode não ser bem-sucedido" + arr["RUSSIAN",706]="airgeddon обнаружил, что код страны для 5Ghz диапазона не установлен. Используйте команду \"\${normal_color}iw reg get\${yellow_color}\", чтобы проверить текущую конфигурацию. и \"\${normal_color}iw reg set XX\${yellow_color}\", чтобы установите регион (где XX – код вашей страны (например, \"\${normal_color}iw reg set ES\${yellow_color}\" для Испании)). Проверьте конфигурацию с помощью \"\${normal_color}iw reg get\${yellow_color}\" перед попыткой атаки на целевую 5Ghz сеть. Также атака может быть неудачной из-за того, что в диапазоне 5Ghz есть несколько каналов, которые могут быть недоступны для работы из-за региональных ограничений (DFS каналы)" + arr["GREEK",706]="Το airgeddon εντόπισε ότι δεν έχετε διαμορφώσει τον κωδικό χώρας για τη ζώνη 5Ghz. Χρησιμοποιήστε την εντολή \"\${normal_color}iw reg get\${yellow_color}\" για να ελέγξετε την τρέχουσα διαμόρφωση και \"\${normal_color}iw reg set XX\${yellow_color}\" για να ορίσετε την περιοχή όπου XX είναι ο κωδικός της χώρας σας (π.χ. \"\${normal_color}iw reg set ES\${yellow_color}\" για την Ισπανία). Επαληθεύστε τη διαμόρφωση με το \"\${normal_color}iw reg get\${yellow_color}\" πριν επιχειρήσετε την επίθεση στο δίκτυο στόχου 5Ghz. Τέλος πάντων, η ζώνη των 5Ghz έχει αρκετά κανάλια που ενδέχεται να μην είναι διαθέσιμα για λειτουργία λόγω περιορισμών χώρας (κανάλια DFS). Εάν το δίκτυο-στόχος χρησιμοποιεί ένα από αυτά τα κανάλια, η επίθεση ενδέχεται να μην είναι επιτυχής" + arr["ITALIAN",706]="airgeddon ha rilevato che non hai configurato il codice del paese per la banda 5Ghz. Usa il comando \"\${normal_color}iw reg get\${yellow_color}\" per controllare la configurazione attuale, e \"\${normal_color}iw reg set XX\${yellow_color}\" per impostare la regione dove XX è il codice del tuo paese (ad es. \"\${normal_color}iw reg set ES\${yellow_color}\" per la Spagna). Verifica la configurazione con \"\${normal_color}iw reg get\${yellow_color}\" prima di tentare l'attacco alla rete obiettivo 5Ghz. Ad ogni modo, la banda 5Ghz ha diversi canali che potrebbero non essere disponibili per il funzionamento a causa di restrizioni nazionali (canali DFS). Se la rete obiettivo utilizza uno di questi canali, l'attacco potrebbe non avere successo" + arr["POLISH",706]="airgeddon wykrył, że nie masz skonfigurowanego kodu kraju dla pasma 5Ghz. Użyj polecenia \"\${normal_color}iw reg get\${yellow_color}\", aby sprawdzić bieżącą konfigurację, a \"\${normal_color}iw reg set XX\${yellow_color}\", aby ustaw region, w którym XX to kod kraju (np. \"\${normal_color}iw reg set ES\${yellow_color}\" dla Hiszpanii). Sprawdź konfigurację za pomocą \"\${normal_color}iw reg get\${yellow_color}\" przed przystąpieniem do ataku na sieć docelową 5Ghz. W każdym razie pasmo 5Ghz ma kilka kanałów, które mogą nie być dostępne do pracy ze względu na ograniczenia krajowe (kanały DFS). Jeśli sieć docelowa korzysta z jednego z tych kanałów, atak może się nie powieść" + arr["GERMAN",706]="airgeddon hat festgestellt, dass Sie den Ländercode für das 5Ghz-Band nicht konfiguriert haben. Verwenden Sie den Befehl \"\${normal_color}iw reg get\${yellow_color}\", um die aktuelle Konfiguration zu überprüfen, und \"\${normal_color}iw reg set XX\${yellow_color}\" um die Region einzustellen, wobei XX Ihr Ländercode ist (z. B. \"\${normal_color}iw reg set ES\${yellow_color}\" für Spanien). Überprüfen Sie die Konfiguration mit \"\${normal_color}iw reg get\${yellow_color}\", bevor Sie den Angriff auf das 5-Ghz-Zielnetzwerk versuchen. Wie auch immer, das 5-Ghz-Band hat mehrere Kanäle, die aufgrund von Länderbeschränkungen möglicherweise nicht für den Betrieb verfügbar sind (DFS-Kanäle). Wenn das Zielnetzwerk einen dieser Kanäle verwendet, ist der Angriff möglicherweise nicht erfolgreich" + arr["TURKISH",706]="airgeddon, 5Ghz bandı için ülke kodunu yapılandırmadığınızı tespit etti. Geçerli yapılandırmayı kontrol etmek için \"\${normal_color}iw reg get\${yellow_color}\" komutunu ve mevcut yapılandırmayı kontrol etmek için \"\${normal_color}iw reg set XX\${yellow_color}\" komutunu kullanın. XX'nin ülke kodunuz olduğu bölgeyi ayarlayın (ör. İspanya için \"\${normal_color}iw reg set ES\${yellow_color}\"). 5Ghz hedef ağına saldırı girişiminde bulunmadan önce \"\${normal_color}iw reg get\${yellow_color}\" ile yapılandırmayı doğrulayın. Her neyse, 5Ghz bandında, ülke kısıtlamaları nedeniyle (DFS kanalları) işletilemeyen birkaç kanal vardır. Hedef ağ bu kanallardan birini kullanıyorsa saldırı başarılı olamayabilir" + arr["ARABIC",706]="5Ghz قبل الهجوم علي الشبكةال \"\${normal_color}iw reg get\${yellow_color}\" هو كود اسبانيا. لتثبيت الاعدادات قم بهذه الامر (\"\${normal_color}iw reg set ES\${yellow_color}\") :هو كود البلد للمثل XX لتحديد المنطقه و ان \"\${normal_color}iw reg set XX\${yellow_color}\" لتحقق من الاعدادات, و \"\${normal_color}iw reg get\${yellow_color}\" استخدم الامر .Ghzقد اكتشف انك لم تقوم بتحديد كود البلد لناقط ال5 airgeddon" + arr["CHINESE",706]="airgeddon 检测到您没有为 5Ghz 频段配置国家代码。使用\"\${normal_color}iw reg get\${yellow_color}\"命令查看当前配置,\"\${normal_color}iw reg set XX\${yellow_color} \" 设置区域,其中 XX 是您的国家代码 (例如 \"\${normal_color}iw reg set CN\${yellow_color}\" 代表配置国家代码为中国) 。在尝试攻击 5Ghz 目标网络之前,使用 \"\${normal_color}iw reg get\${yellow_color}\" 验证配置。一般情况下,5Ghz 频段有几个频道可能由于国家限制 DFS 频道 (雷达保留频道) 而无法使用。如果目标网络使用这些频道之一,则攻击可能不会成功" arr["ENGLISH",707]="Channel change detected. Reconfiguring attack (DoS) as part of \"DoS pursuit mode\". Now on channel \${normal_color}\${channel}" arr["SPANISH",707]="Cambio de canal detectado. Reconfigurando ataque (DoS) como parte del \"modo persecución DoS\". Ahora en el canal \${normal_color}\${channel}" @@ -11098,6 +11098,20 @@ function initialize_language_strings() { arr["TURKISH",718]="ESSID şu şekilde ayarlandı \${normal_color}\${wps_essid}" arr["ARABIC",718]="\${normal_color}\${wps_essid}\${blue_color} المختار ESSID\${normal_color}" arr["CHINESE",718]="ESSID 设置为 \${normal_color}\${wps_essid}" + + arr["ENGLISH",719]="One of your wireless adapters has a built-in country code different from the one set on your system. When this happens the kernel makes a custom regulatory domain \"\${normal_color}99\${yellow_color}\" which contains only permissions in BOTH reg domains. Either your hardware is from a different region, or you have improperly set your reg domain and limited your functionality on purpose" + arr["SPANISH",719]="Uno de tus adaptadores wifi tiene un código de país integrado diferente al configurado en el sistema. Cuando esto sucede, el kernel crea un dominio regulatorio personalizado \"\${normal_color}99\${yellow_color}\" que contiene solo permisos en AMBOS dominios de registro. O tu hardware es de una región diferente o configuraste incorrectamente el dominio de registro y limitando su funcionalidad a propósito" + arr["FRENCH",719]="\${pending_of_translation} L'un de vos adaptateurs Wi-Fi possède un code de pays intégré différent de celui défini sur votre système. Lorsque cela se produit, le noyau crée un domaine réglementaire personnalisé \"\${normal_color}99\${yellow_color}\" qui contient uniquement les autorisations dans les DEUX domaines reg. Soit votre matériel provient d'une région différente, soit vous avez mal défini votre domaine d'enregistrement et limité volontairement vos fonctionnalités" + arr["CATALAN",719]="\${pending_of_translation} Un dels vostres adaptadors wifi té un codi de país integrat diferent del establert al vostre sistema. Quan això succeeix, el nucli crea un domini regulador personalitzat \"\${normal_color}99\${yellow_color}\" que només conté permisos als DOS dominis reg. O el vostre maquinari és d'una regió diferent o heu configurat el vostre domini de registre incorrectament i heu limitat la vostra funcionalitat a propòsit" + arr["PORTUGUESE",719]="\${pending_of_translation} Um de seus adaptadores wi-fi possui um código de país integrado diferente daquele definido em seu sistema. Quando isso acontece, o kernel cria um domínio regulatório personalizado \"\${normal_color}99\${yellow_color}\" que contém apenas permissões em AMBOS os domínios reg. Ou seu hardware é de uma região diferente ou você configurou incorretamente seu domínio de registro e limitou sua funcionalidade propositalmente" + arr["RUSSIAN",719]="\${pending_of_translation} Один из ваших адаптеров Wi-Fi имеет встроенный код страны, отличный от кода, установленного в вашей системе. Когда это происходит, ядро создает собственный нормативный домен \"\${normal_color}99\${yellow_color}\", который содержит разрешения только в ОБОИХ доменах регистрации. Либо ваше оборудование из другого региона, либо вы неправильно настроили рег-домен и намеренно ограничили функциональность" + arr["GREEK",719]="\${pending_of_translation} Ένας από τους προσαρμογείς wifi σας έχει ενσωματωμένο κωδικό χώρας διαφορετικό από αυτόν που έχει οριστεί στο σύστημά σας. Όταν συμβεί αυτό, ο πυρήνας δημιουργεί έναν προσαρμοσμένο ρυθμιστικό τομέα \"\${normal_color}99\${yellow_color}\" ο οποίος περιέχει μόνο δικαιώματα και στους δύο τομείς reg. Είτε το υλικό σας προέρχεται από διαφορετική περιοχή, είτε έχετε ρυθμίσει εσφαλμένα τον τομέα reg σας και έχετε περιορίσει τη λειτουργικότητά σας επίτηδες" + arr["ITALIAN",719]="\${pending_of_translation} Uno dei tuoi adattatori Wi-Fi ha un codice paese integrato diverso da quello impostato sul tuo sistema. Quando ciò accade, il kernel crea un dominio normativo personalizzato \"\${normal_color}99\${yellow_color}\" che contiene solo le autorizzazioni in ENTRAMBI i domini reg. O il tuo hardware proviene da una regione diversa oppure hai impostato in modo errato il tuo dominio reg e limitato di proposito la tua funzionalità" + arr["POLISH",719]="\${pending_of_translation} Jeden z Twoich adapterów Wi-Fi ma wbudowany kod kraju inny niż ten ustawiony w Twoim systemie. Kiedy tak się dzieje, jądro tworzy niestandardową domenę regulacyjną \"\${normal_color}99\${yellow_color}\", która zawiera tylko uprawnienia w OBU domenach rej. Albo Twój sprzęt pochodzi z innego regionu, albo nieprawidłowo ustawiłeś domenę rejestracyjną i celowo ograniczyłeś funkcjonalność" + arr["GERMAN",719]="\${pending_of_translation} Einer Ihrer WLAN-Adapter verfügt über einen integrierten Ländercode, der sich von dem auf Ihrem System unterscheidet. Wenn dies geschieht, erstellt der Kernel eine benutzerdefinierte Regulierungsdomäne \"\${normal_color}99\${yellow_color}\", die nur Berechtigungen in BEIDEN Registrierungsdomänen enthält. Entweder stammt Ihre Hardware aus einer anderen Region oder Sie haben Ihre Reg-Domain falsch eingestellt und Ihre Funktionalität absichtlich eingeschränkt" + arr["TURKISH",719]="\${pending_of_translation} Wifi bağdaştırıcılarınızdan birinde, sisteminizde ayarlanandan farklı yerleşik bir ülke kodu var. Bu gerçekleştiğinde çekirdek, yalnızca HER İKİ Reg etki alanındaki izinleri içeren özel bir düzenleyici etki alanı \"\${normal_color}99\${yellow_color}\" oluşturur. Ya donanımınız farklı bir bölgeye ait ya da reg alan adınızı yanlış ayarladınız ve işlevselliğinizi bilerek sınırladınız" + arr["ARABIC",719]="\${pending_of_translation} يحتوي أحد محولات wifi لديك على رمز بلد مدمج يختلف عن الرمز المعين على نظامك. عندما يحدث هذا، تقوم النواة بإنشاء مجال تنظيمي مخصص \"\${normal_color}99\${yellow_color}\" والذي يحتوي فقط على الأذونات في كلا نطاقي التسجيل. إما أن جهازك ينتمي إلى منطقة مختلفة، أو أنك قمت بتعيين نطاق التسجيل الخاص بك بشكل غير صحيح وقمت بتقييد وظائفك عن قصد" + arr["CHINESE",719]="\${pending_of_translation} 您的其中一款 WiFi 适配器的内置国家/地区代码与您系统上设置的国家/地区代码不同。当发生这种情况时,内核会创建一个自定义监管域 \"\${normal_color}99\${yellow_color}\",其中仅包含两个监管域中的权限。您的硬件来自不同的地区,或者您不正确地设置了您的注册域并故意限制了您的功能" } #Expand escaped variables in language strings with their actual values From e36ab26a45c1adffaa8b172b764311c025003df4 Mon Sep 17 00:00:00 2001 From: xpz3 <46419195+xpz3@users.noreply.github.com> Date: Sun, 17 Mar 2024 02:46:03 +1300 Subject: [PATCH 26/92] Create a unique name for each tmux session --- airgeddon.sh | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 3833c33cd..cbac0d033 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -381,7 +381,16 @@ crunch_symbolcharset="!#$%/=?{}[]-*:;" hashcat_charsets=("?l" "?u" "?d" "?s") #Tmux vars -session_name="airgeddon" +if [[ "${1}" == "true" ]]; then + if [[ "${2}" != "" ]]; then + airgeddon_uid="${2}" + else + exit 0 + fi +else + airgeddon_uid="${BASHPID}" +fi +session_name="airgeddon${airgeddon_uid}" tmux_main_window="airgeddon-Main" no_hardcore_exit=0 From b2fb9afca499c4cea80c8f13a9101225fbbb6cf7 Mon Sep 17 00:00:00 2001 From: xpz3 <46419195+xpz3@users.noreply.github.com> Date: Sun, 17 Mar 2024 02:49:01 +1300 Subject: [PATCH 27/92] Remove existing tmux session killing function and call --- airgeddon.sh | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index cbac0d033..cf4849687 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -16272,24 +16272,11 @@ function check_inside_tmux() { return 1 } -#Close any existing tmux session before opening, to avoid conflicts -#shellcheck disable=SC2009 -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" else From 851aa971a61bde3caf0a653ef8275a0f007f35f7 Mon Sep 17 00:00:00 2001 From: xpz3 <46419195+xpz3@users.noreply.github.com> Date: Sun, 17 Mar 2024 02:51:38 +1300 Subject: [PATCH 28/92] Send tmux session name to child process --- airgeddon.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index cf4849687..d7312ee14 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -16202,7 +16202,7 @@ function start_airgeddon_from_tmux() { debug_print tmux rename-window -t "${session_name}" "${tmux_main_window}" - tmux send-keys -t "${session_name}:${tmux_main_window}" "clear;cd ${scriptfolder};bash ${scriptname}" ENTER + tmux send-keys -t "${session_name}:${tmux_main_window}" "clear;cd ${scriptfolder};bash ${scriptname} true ${airgeddon_uid}" ENTER sleep 0.2 if [ "${1}" = "normal" ]; then tmux attach -t "${session_name}" From 5b72bd3faa3bf9e25ae750bc1596192e5ed6d871 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Sun, 17 Mar 2024 23:38:02 +0100 Subject: [PATCH 29/92] Code style standardization on tmux multi instance changes and set logic into functions instead of while initializing vars --- airgeddon.sh | 57 ++++++++++++++++++++++++++++++++-------------------- 1 file changed, 35 insertions(+), 22 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index d7312ee14..d2ef16326 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -381,16 +381,8 @@ crunch_symbolcharset="!#$%/=?{}[]-*:;" hashcat_charsets=("?l" "?u" "?d" "?s") #Tmux vars -if [[ "${1}" == "true" ]]; then - if [[ "${2}" != "" ]]; then - airgeddon_uid="${2}" - else - exit 0 - fi -else - airgeddon_uid="${BASHPID}" -fi -session_name="airgeddon${airgeddon_uid}" +airgeddon_uid="" +session_name="airgeddon" tmux_main_window="airgeddon-Main" no_hardcore_exit=0 @@ -16046,16 +16038,6 @@ 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 @@ -16196,13 +16178,41 @@ function kill_tmux_session() { fi } +#Initialize tmux if apply +function initialize_tmux() { + + debug_print + + if [ "${1}" = "true" ]; then + if [ -n "${2}" ]; then + airgeddon_uid="${2}" + else + exit 0 + fi + else + airgeddon_uid="${BASHPID}" + fi + + session_name="airgeddon${airgeddon_uid}" + + 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 +} + #Starting point of airgeddon script inside newly created tmux session function start_airgeddon_from_tmux() { debug_print tmux rename-window -t "${session_name}" "${tmux_main_window}" - tmux send-keys -t "${session_name}:${tmux_main_window}" "clear;cd ${scriptfolder};bash ${scriptname} true ${airgeddon_uid}" ENTER + tmux send-keys -t "${session_name}:${tmux_main_window}" "clear;cd ${scriptfolder};bash ${scriptname} \"true\" \"${airgeddon_uid}\"" ENTER sleep 0.2 if [ "${1}" = "normal" ]; then tmux attach -t "${session_name}" @@ -17009,6 +17019,9 @@ function main() { initialize_script_settings initialize_colors env_vars_initialization + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + initialize_tmux "${1}" "${2}" + fi initialize_instance_settings detect_distro_phase1 detect_distro_phase2 @@ -17038,7 +17051,7 @@ function main() { set_default_save_path graphics_prerequisites - if [ "${tmux_error}" -eq 1 ]; then + if [[ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]] && [[ "${tmux_error}" -eq 1 ]]; then language_strings "${language}" 86 "title" echo language_strings "${language}" 621 "yellow" From e29f412fea04a481d64dd43c8ce093d69d716695 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Tue, 19 Mar 2024 18:05:28 +0100 Subject: [PATCH 30/92] Improve PID instance registering for tmux. Not finished yet. --- airgeddon.sh | 68 ++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 47 insertions(+), 21 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index d2ef16326..328d73d2f 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -5909,7 +5909,7 @@ function control_routing_status() { local et_still_running=0 if [ "${1}" = "start" ]; then - readarray -t AIRGEDDON_PIDS < <(cat < "${system_tmpdir}${ag_orchestrator_file}" 2> /dev/null) + readarray -t AIRGEDDON_PIDS 2> /dev/null < <(cat < "${system_tmpdir}${ag_orchestrator_file}" 2> /dev/null) for item in "${AIRGEDDON_PIDS[@]}"; do [[ "${item}" =~ ^(et)?([0-9]+)(rs[0-1])?$ ]] && etset="${BASH_REMATCH[1]}" && agpid="${BASH_REMATCH[2]}" if [ -z "${saved_routing_status_found}" ]; then @@ -5926,7 +5926,7 @@ function control_routing_status() { sed -ri "s:^(et${BASHPID})$:\1rs${original_routing_status}:" "${system_tmpdir}${ag_orchestrator_file}" 2> /dev/null fi else - readarray -t AIRGEDDON_PIDS < <(cat < "${system_tmpdir}${ag_orchestrator_file}" 2> /dev/null) + readarray -t AIRGEDDON_PIDS 2> /dev/null < <(cat < "${system_tmpdir}${ag_orchestrator_file}" 2> /dev/null) for item in "${AIRGEDDON_PIDS[@]}"; do [[ "${item}" =~ ^(et)?([0-9]+)(rs[0-1])?$ ]] && etset="${BASH_REMATCH[1]}" && agpid="${BASH_REMATCH[2]}" if [ -z "${saved_routing_status_found}" ]; then @@ -6247,6 +6247,12 @@ function initialize_instance_settings() { debug_print + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then + agpid_to_use="${BASHPID}" + else + agpid_to_use="${airgeddon_uid}" + fi + instance_setter create_instance_orchestrator_file register_instance_pid @@ -6257,21 +6263,35 @@ function instance_setter() { debug_print - local dir_number="1" - local airgeddon_instance_dir="ag${dir_number}/" - - if [ -d "${system_tmpdir}${airgeddon_instance_dir}" ]; then - while true; do - dir_number=$((dir_number + 1)) - airgeddon_instance_dir="ag${dir_number}/" - if [ ! -d "${system_tmpdir}${airgeddon_instance_dir}" ]; then - break + local create_dir=0 + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + if hash tmux 2> /dev/null; then + local current_tmux_display_name=$(tmux display-message -p '#W') + if [ "${current_tmux_display_name}" = "${tmux_main_window}" ]; then + create_dir=1 fi - done + fi + else + create_dir=1 fi - tmpdir="${system_tmpdir}${airgeddon_instance_dir}" - mkdir -p "${tmpdir}" > /dev/null 2>&1 + if [ "${create_dir}" -eq 1 ]; then + local dir_number="1" + local airgeddon_instance_dir="ag${dir_number}/" + + if [ -d "${system_tmpdir}${airgeddon_instance_dir}" ]; then + while true; do + dir_number=$((dir_number + 1)) + airgeddon_instance_dir="ag${dir_number}/" + if [ ! -d "${system_tmpdir}${airgeddon_instance_dir}" ]; then + break + fi + done + fi + + tmpdir="${system_tmpdir}${airgeddon_instance_dir}" + mkdir -p "${tmpdir}" > /dev/null 2>&1 + fi } #Create orchestrator file if needed @@ -6285,7 +6305,7 @@ function create_instance_orchestrator_file() { local airgeddon_pid_alive=0 local agpid="" - readarray -t AIRGEDDON_PIDS < <(cat < "${system_tmpdir}${ag_orchestrator_file}" 2> /dev/null) + readarray -t AIRGEDDON_PIDS 2> /dev/null < <(cat < "${system_tmpdir}${ag_orchestrator_file}" 2> /dev/null) for item in "${AIRGEDDON_PIDS[@]}"; do [[ "${item}" =~ ^(et)?([0-9]+)(rs[0-1])?$ ]] && agpid="${BASH_REMATCH[2]}" if ps -p "${agpid}" > /dev/null 2>&1; then @@ -6311,14 +6331,16 @@ function delete_instance_orchestrator_file() { fi } -#Register instance pid into orchestrator file +#Register instance pid into orchestrator file if is not already registered function register_instance_pid() { debug_print - { - echo "${BASHPID}" - } >> "${system_tmpdir}${ag_orchestrator_file}" + if ! grep -q "${agpid_to_use}" "${system_tmpdir}${ag_orchestrator_file}"; then + { + echo "${agpid_to_use}" + } >> "${system_tmpdir}${ag_orchestrator_file}" + fi } #Check if this instance is the last airgeddon instance running @@ -6328,10 +6350,14 @@ function is_last_airgeddon_instance() { local agpid="" - readarray -t AIRGEDDON_PIDS < <(cat <"${system_tmpdir}${ag_orchestrator_file}" 2>/dev/null) + readarray -t AIRGEDDON_PIDS 2> /dev/null < <(cat <"${system_tmpdir}${ag_orchestrator_file}" 2> /dev/null) for item in "${AIRGEDDON_PIDS[@]}"; do [[ "${item}" =~ ^(et)?([0-9]+)(rs[0-1])?$ ]] && agpid="${BASH_REMATCH[2]}" - if [[ "${agpid}" != "${BASHPID}" ]] && ps -p "${agpid}" >/dev/null 2>&1; then + #TODO improve the logic, there is a use case where it is failing. Steps to reproduce: + #1. Open tmux airgeddon + #2. Create tmux session out of airgeddon, then launch tmux airgeddon from inside + #3. Close the first tmux airgeddon... it will remove the orchestrator file even being still one airgeddon alive + if [[ "${agpid}" != "${BASHPID}" ]] && [[ "${agpid}" != "${agpid_to_use}" ]] && ps -p "${agpid}" >/dev/null 2>&1; then return 1 fi done From f7081a1a6be47f33e00a22e8126943018b2cd2ac Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Wed, 20 Mar 2024 09:46:01 +0100 Subject: [PATCH 31/92] Fix #583. Improve the 5Ghz band capability on adapters --- CHANGELOG.md | 2 +- airgeddon.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e5f51cade..0195499f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,5 @@ ### 11.30 - - Improvements on 5Ghz country code check + - Improvements on 5Ghz country code check and 5Ghz band capability on adapters ### 11.22 - Possibility to add manually ESSID name for selected hidden networks diff --git a/airgeddon.sh b/airgeddon.sh index 6c2dc5d9e..1ad8a68e1 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -1466,7 +1466,7 @@ function get_5ghz_band_info_from_phy_interface() { debug_print - if iw phy "${1}" channels 2> /dev/null | grep -i "5180 MHz" > /dev/null; then + if iw phy "${1}" channels 2> /dev/null | grep -Ei "5180(\.0)? MHz" > /dev/null; then if "${AIRGEDDON_5GHZ_ENABLED:-true}"; then return 0 else From c336df8ebc167e5d1416b6f0be50e646123e4781 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Wed, 20 Mar 2024 09:52:55 +0100 Subject: [PATCH 32/92] Minor change on CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0195499f5..e8ce1ec41 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,5 @@ ### 11.30 - - Improvements on 5Ghz country code check and 5Ghz band capability on adapters + - Improvements on 5Ghz country code check and 5Ghz band capability detection on adapters ### 11.22 - Possibility to add manually ESSID name for selected hidden networks From 83fb0596cda8a0290337136fddd997f6f908f680 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Fri, 22 Mar 2024 15:58:41 +0100 Subject: [PATCH 33/92] Fix problem registering ET and RS in orchestrator file caused by prior commits --- airgeddon.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 87297a02c..e96286104 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -5916,14 +5916,14 @@ function control_routing_status() { [[ "${item}" =~ ^(et)?([0-9]+)(rs[0-1])?$ ]] && saved_routing_status_found="${BASH_REMATCH[3]}" fi - if [[ "${BASHPID}" = "${agpid}" ]] && [[ "${etset}" != "et" ]]; then - sed -ri "s:^(${BASHPID}):et\1:" "${system_tmpdir}${ag_orchestrator_file}" 2> /dev/null + if [[ "${agpid_to_use}" = "${agpid}" ]] && [[ "${etset}" != "et" ]]; then + sed -ri "s:^(${agpid}):et\1:" "${system_tmpdir}${ag_orchestrator_file}" 2> /dev/null fi done if [ -z "${saved_routing_status_found}" ]; then original_routing_status=$(cat /proc/sys/net/ipv4/ip_forward) - sed -ri "s:^(et${BASHPID})$:\1rs${original_routing_status}:" "${system_tmpdir}${ag_orchestrator_file}" 2> /dev/null + sed -ri "s:^(et${agpid_to_use})$:\1rs${original_routing_status}:" "${system_tmpdir}${ag_orchestrator_file}" 2> /dev/null fi else readarray -t AIRGEDDON_PIDS 2> /dev/null < <(cat < "${system_tmpdir}${ag_orchestrator_file}" 2> /dev/null) @@ -5933,11 +5933,11 @@ function control_routing_status() { [[ "${item}" =~ ^(et)?([0-9]+)(rs[0-1])?$ ]] && saved_routing_status_found="${BASH_REMATCH[3]}" fi - if [[ "${BASHPID}" = "${agpid}" ]] && [[ "${etset}" = "et" ]]; then - sed -ri "s:^(et${BASHPID}):${BASHPID}:" "${system_tmpdir}${ag_orchestrator_file}" 2> /dev/null + if [[ "${agpid_to_use}" = "${agpid}" ]] && [[ "${etset}" = "et" ]]; then + sed -ri "s:^(et${agpid}):${agpid}:" "${system_tmpdir}${ag_orchestrator_file}" 2> /dev/null fi - if [[ "${BASHPID}" != "${agpid}" ]] && [[ "${etset}" = "et" ]]; then + if [[ "${agpid_to_use}" != "${agpid}" ]] && [[ "${etset}" = "et" ]]; then et_still_running=1 fi done From 1ae42d26366c462f9b77c7f77e46135b69ab294e Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Thu, 28 Mar 2024 12:56:37 +0100 Subject: [PATCH 34/92] Add TODO for future fixes --- airgeddon.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/airgeddon.sh b/airgeddon.sh index e96286104..63df45908 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -6314,6 +6314,10 @@ function create_instance_orchestrator_file() { fi done + #TODO improve the logic, there is a use case where it is failing. Steps to reproduce: + #1. Create tmux session out of airgeddon, then launch tmux airgeddon from inside + #2. Launch tmux airgeddon. The first orchestrator file is deleted and that shouldn't happen + if [ "${airgeddon_pid_alive}" -eq 0 ]; then rm -rf "${system_tmpdir}${ag_orchestrator_file}" > /dev/null 2>&1 touch "${system_tmpdir}${ag_orchestrator_file}" > /dev/null 2>&1 @@ -6353,10 +6357,12 @@ function is_last_airgeddon_instance() { readarray -t AIRGEDDON_PIDS 2> /dev/null < <(cat <"${system_tmpdir}${ag_orchestrator_file}" 2> /dev/null) for item in "${AIRGEDDON_PIDS[@]}"; do [[ "${item}" =~ ^(et)?([0-9]+)(rs[0-1])?$ ]] && agpid="${BASH_REMATCH[2]}" + #TODO improve the logic, there is a use case where it is failing. Steps to reproduce: #1. Open tmux airgeddon #2. Create tmux session out of airgeddon, then launch tmux airgeddon from inside #3. Close the first tmux airgeddon... it will remove the orchestrator file even being still one airgeddon alive + if [[ "${agpid}" != "${BASHPID}" ]] && [[ "${agpid}" != "${agpid_to_use}" ]] && ps -p "${agpid}" >/dev/null 2>&1; then return 1 fi From 754c77283e9358a55182242a3a1c2240dd2e5624 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Tue, 2 Apr 2024 00:49:25 +0200 Subject: [PATCH 35/92] Fix problems with PID registering on tmux use cases --- airgeddon.sh | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 63df45908..59a45a9fd 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -6247,15 +6247,21 @@ function initialize_instance_settings() { debug_print - if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then - agpid_to_use="${BASHPID}" - else - agpid_to_use="${airgeddon_uid}" - fi + agpid_to_use="${BASHPID}" instance_setter - create_instance_orchestrator_file - register_instance_pid + if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then + if hash tmux 2> /dev/null; then + local current_tmux_display_name=$(tmux display-message -p '#W') + if [ "${current_tmux_display_name}" = "${tmux_main_window}" ]; then + create_instance_orchestrator_file + register_instance_pid + fi + fi + else + create_instance_orchestrator_file + register_instance_pid + fi } #Detect number of the alive airgeddon instances and set the next one if apply @@ -6314,10 +6320,6 @@ function create_instance_orchestrator_file() { fi done - #TODO improve the logic, there is a use case where it is failing. Steps to reproduce: - #1. Create tmux session out of airgeddon, then launch tmux airgeddon from inside - #2. Launch tmux airgeddon. The first orchestrator file is deleted and that shouldn't happen - if [ "${airgeddon_pid_alive}" -eq 0 ]; then rm -rf "${system_tmpdir}${ag_orchestrator_file}" > /dev/null 2>&1 touch "${system_tmpdir}${ag_orchestrator_file}" > /dev/null 2>&1 @@ -6340,10 +6342,12 @@ function register_instance_pid() { debug_print - if ! grep -q "${agpid_to_use}" "${system_tmpdir}${ag_orchestrator_file}"; then - { - echo "${agpid_to_use}" - } >> "${system_tmpdir}${ag_orchestrator_file}" + if [ -f "${system_tmpdir}${ag_orchestrator_file}" ]; then + if ! grep -q "${agpid_to_use}" "${system_tmpdir}${ag_orchestrator_file}"; then + { + echo "${agpid_to_use}" + } >> "${system_tmpdir}${ag_orchestrator_file}" + fi fi } @@ -6358,12 +6362,7 @@ function is_last_airgeddon_instance() { for item in "${AIRGEDDON_PIDS[@]}"; do [[ "${item}" =~ ^(et)?([0-9]+)(rs[0-1])?$ ]] && agpid="${BASH_REMATCH[2]}" - #TODO improve the logic, there is a use case where it is failing. Steps to reproduce: - #1. Open tmux airgeddon - #2. Create tmux session out of airgeddon, then launch tmux airgeddon from inside - #3. Close the first tmux airgeddon... it will remove the orchestrator file even being still one airgeddon alive - - if [[ "${agpid}" != "${BASHPID}" ]] && [[ "${agpid}" != "${agpid_to_use}" ]] && ps -p "${agpid}" >/dev/null 2>&1; then + if [[ "${agpid}" != "${agpid_to_use}" ]] && ps -p "${agpid}" >/dev/null 2>&1; then return 1 fi done From a6a20857a0fa089dcfa4f86150f05563fe4d5f5b Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Tue, 2 Apr 2024 01:06:28 +0200 Subject: [PATCH 36/92] Standardize airgeddon exit using exit_code var --- airgeddon.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 59a45a9fd..4fd60f14c 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -16218,7 +16218,7 @@ function initialize_tmux() { if [ -n "${2}" ]; then airgeddon_uid="${2}" else - exit 0 + exit ${exit_code} fi else airgeddon_uid="${BASHPID}" From 8b483e0a487448621c56c290bf9b2f20f2377736 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Fri, 12 Apr 2024 07:08:37 +0200 Subject: [PATCH 37/92] Update WPS pin database --- known_pins.db | 1 + pindb_checksum.txt | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/known_pins.db b/known_pins.db index 0676f4ff8..b79a2060e 100644 --- a/known_pins.db +++ b/known_pins.db @@ -127,6 +127,7 @@ function set_pin_database() { PINDB["088039"]="00012436" PINDB["08863B"]="14129162 34968611 87279320 36323364 08112118 83469909 14159114 21250491 76726446" PINDB["08952A"]="28812838" + PINDB["08BFB8"]="41391693" PINDB["08EDB9"]="86925583" PINDB["0C54A5"]="82585297" PINDB["0C722C"]="80554448" diff --git a/pindb_checksum.txt b/pindb_checksum.txt index 9d06c8b81..2d78f24b0 100644 --- a/pindb_checksum.txt +++ b/pindb_checksum.txt @@ -1 +1 @@ -0b67716e77e475f7ddb369eabd1d552b +78ea68b81e58702b36b5d4a00074efa1 From 7ec4ea429b3602c4a39e0ee660d4d88b5cc1ebc0 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Fri, 12 Apr 2024 07:10:43 +0200 Subject: [PATCH 38/92] Add vendor mac for advanced captive portal --- airgeddon.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 1ad8a68e1..d21a4b49d 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -11183,7 +11183,7 @@ function prepare_captive_portal_data() { ["Arris"]="0000C5 0000CA 0003E0 0004BD 00080E 000B06 000CE5 000E5C 000F9F 000FCC 00111A 001180 0011AE 001225 00128A 0012C9 001311 001371 001404 00149A 0014E8 00152F 001596 00159A 0015A2 0015A3 0015A4 0015A8 0015CE 0015CF 0015D0 0015D1 001626 001675 0016B5 001700 001784 0017E2 0017EE 0018A4 0018C0 00192C 00195E 0019A6 0019C0 001A1B 001A66 001A77 001AAD 001ADB 001ADE 001B52 001BDD 001C11 001C12 001CC1 001CC3 001CFB 001D6B 001DBE 001DCD 001DCE 001DCF 001DD0 001DD1 001DD2 001DD3 001DD4 001DD5 001DD6 001E46 001E5A 001E8D 001F7E 001FC4 002040 00211E 002136 002143 002180 002210 0022B4 00230B 002374 002375 002395 0023A2 0023A3 0023AF 0023ED 0023EE 002493 002495 0024A0 0024A1 0024C1 0025F1 0025F2 002636 002641 002642 0026BA 0026D9 003676 005094 0050E3 00909C 00ACE0 00D037 00D088 00E06F 044E5A 083E0C 0CB771 0CEAC9 0CF893 1005B1 105611 10868C 109397 145BD1 14ABF0 14C03E 14CFE2 14D4FE 1820D5 1835D1 189C27 18B81F 1C1448 1C1B68 203D66 207355 20E564 20F19E 20F375 240A63 287AEE 28C87A 2C1DB8 2C584F 2C7E81 2C9569 2C9924 2C9E5F 2CA17D 306023 341FE4 347A60 384C90 386BBB 38700C 3C0461 3C36E4 3C438E 3C754A 3C7A8A 3CDFA9 400D10 402B50 404C77 407009 40B7F3 40FC89 4434A7 446AB7 44AAF5 44E137 484EFC 48D343 4C1265 4C38D8 5075F1 509551 5465DE 54E2E0 5819F8 5856E8 5C571A 5C8FE0 5CB066 5CE30E 601971 608CE6 6092F5 60D248 6402CB 641269 6455B1 64ED57 6C639C 6CA604 6CC1D2 6CCA08 704FB8 705425 707630 707E43 7085C6 70B14E 745612 748A0D 74E7C6 74EAE8 74F612 7823AE 78719C 789684 7C2634 7CBFB1 8096B1 80E540 80F503 8461A0 8496D8 84BB69 84E058 8871B1 88964E 88EF16 8C09F4 8C5A25 8C5BF0 8C61A3 8C7F3B 900DCB 901ACA 903EAB 909D7D 90B134 90C792 946269 94877C 948FCF 94CCB9 94E8C5 984B4A 986B3D 98F781 98F7D7 9C3426 9CC8FC A055DE A0687E A0C562 A41588 A47AA4 A49813 A4ED4E A811FC A8705D A897CD A89FEC A8F5DD ACB313 ACDB48 ACEC80 ACF8CC B077AC B083D6 B0935B B0DAF9 B4F2E8 B81619 BC2E48 BC644B BCCAB5 C005C2 C089AB C0A00D C0C522 C83FB4 C85261 C863FC C8AA21 CC65AD CC75E2 CC7D37 CCA462 D039B3 D0E54D D404CD D40598 D40AA9 D42C0F D43FCB D4AB82 D4B27A D82522 DC4517 E02202 E0B70A E0B7B1 E45740 E46449 E48399 E49F1E E83381 E83EFC E86D52 E8825B E8892C E8ED05 EC7097 ECA940 F0AF85 F0FCC8 F40E83 F80BBE F82DC0 F87B7A F88B37 F8A097 F8EDA5 F8F532 FC51A4 FC6FB7 FC8E7E FCAE34 DC4517 E46449 E8ED05 FCAE34" ["Arista"]="001C73 28993A 30862D 444CA8 7483EF 985D82 AC3D94 C0D682 FC59C0 FCBD67" ["Aruba"]="000B86 001A1E 00246C 04BD88 104F58 186472 204C03 2462CE 24DEC6 3821C7 40E3D6 64E881 6CF37F 703A0E 7C573C 84D47E 883A30 9020C2 94B40F 9C1C12 ACA31E B45D50 B83A5A B8D4E7 BC9FE4 CCD083 D015A6 D0D3E0 D8C7C8 E82689 F05C19 F42E7F F860F0" - ["Asus"]="000C6E 000EA6 00112F 0011D8 0013D4 0015F2 001731 0018F3 001A92 001BFC 001D60 001E8C 001FC6 002215 002354 00248C 002618 00E018 049226 04D4C4 04D9F5 08606E 086266 0C9D92 107B44 10BF48 10C37B 14DAE9 14DDA9 1831BF 1C872C 1CB72C 20CF30 244BFE 2C4D54 2C56DC 2CFDA1 305A3A 3085A9 3497F6 382C4A 38D547 40167E 40B076 485B39 4CEDFB 50465D 5404A6 54A050 6045CB 60A44C 704D7B 708BCD 74D02B 7824AF 88D7F6 90E6BA 9C5C8E A85E45 AC220B AC9E17 B06EBF BCAEC5 BCEE7B C86000 D017C2 D45D64 D850E6 E03F49 E0CB4E F07959 F46D04 F832E4 FCC233" + ["Asus"]="000C6E 000EA6 00112F 0011D8 0013D4 0015F2 001731 0018F3 001A92 001BFC 001D60 001E8C 001FC6 002215 002354 00248C 002618 00E018 049226 04D4C4 04D9F5 08606E 086266 08BFB8 0C9D92 107B44 10BF48 10C37B 14DAE9 14DDA9 1831BF 1C872C 1CB72C 20CF30 244BFE 2C4D54 2C56DC 2CFDA1 305A3A 3085A9 3497F6 382C4A 38D547 40167E 40B076 485B39 4CEDFB 50465D 5404A6 54A050 6045CB 60A44C 704D7B 708BCD 74D02B 7824AF 88D7F6 90E6BA 9C5C8E A85E45 AC220B AC9E17 B06EBF BCAEC5 BCEE7B C86000 D017C2 D45D64 D850E6 E03F49 E0CB4E F07959 F46D04 F832E4 FCC233" ["AVMFritzBox"]="2C3AFD 2C91AB 3810D5 444E6D 5C4979 7CFF4D 989BCB C80E14 CCCE1E DC396F E0286D E8DF70 F0B014" ["Belkin"]="001150 00173F 001CDF 002275 08863B 149182 24F5A2 302303 58EF68 6038E0 94103E 944452 B4750E C05627 C4411E EC1A59" ["CBN"]="342CC4 38437D 546751 5C353B 6802B8 905C44 AC2205 DC537C" From 50a753cd48eea661bf6b11419d8da84fd1d908f8 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Mon, 6 May 2024 18:19:59 +0200 Subject: [PATCH 39/92] Fix a couple of spaces to standardize the way of using 2> /dev/null --- airgeddon.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index d21a4b49d..501c2be62 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -756,7 +756,7 @@ function interrupt_checkpoint() { last_buffered_type1=${2} last_buffered_type2=${2} else - if [[ "${1}" -ne "${resume_message}" ]] 2>/dev/null && [[ "${1}" != "${resume_message}" ]]; then + if [[ "${1}" -ne "${resume_message}" ]] 2> /dev/null && [[ "${1}" != "${resume_message}" ]]; then last_buffered_message2=${last_buffered_message1} last_buffered_message1=${1} last_buffered_type2=${last_buffered_type1} @@ -974,7 +974,7 @@ function check_airmon_compatibility() { if [ "${1}" = "interface" ]; then set_chipset "${interface}" "read_only" - if iw phy "${phy_interface}" info 2>/dev/null | grep -iq 'interface combinations are not supported'; then + if iw phy "${phy_interface}" info 2> /dev/null | grep -iq 'interface combinations are not supported'; then interface_airmon_compatible=0 else interface_airmon_compatible=1 From ed56c253d87d07f3b0eccbe38a2ba269aac49075 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Tue, 7 May 2024 16:37:48 +0200 Subject: [PATCH 40/92] Improve busy ports check avoid false positives when others non-conflicting interfaces are using the ports. Now prepared for multi instance --- airgeddon.sh | 37 +++++++++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 86beecd2b..3ef4b6bef 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -1308,7 +1308,7 @@ function check_busy_ports() { if [[ -n "${tcp_ports[*]}" ]] && [[ "${#tcp_ports[@]}" -ge 1 ]]; then port_type="tcp" for tcp_port in "${tcp_ports[@]}"; do - if ! check_tcp_udp_port "${tcp_port}" "${port_type}"; then + if ! check_tcp_udp_port "${tcp_port}" "${port_type}" "${interface}"; then busy_port="${tcp_port}" find_process_name_by_port "${tcp_port}" "${port_type}" echo @@ -1322,7 +1322,7 @@ function check_busy_ports() { if [[ -n "${udp_ports[*]}" ]] && [[ "${#udp_ports[@]}" -ge 1 ]]; then port_type="udp" for udp_port in "${udp_ports[@]}"; do - if ! check_tcp_udp_port "${udp_port}" "${port_type}"; then + if ! check_tcp_udp_port "${udp_port}" "${port_type}" "${interface}"; then busy_port="${udp_port}" find_process_name_by_port "${udp_port}" "${port_type}" echo @@ -1336,7 +1336,7 @@ function check_busy_ports() { return 0 } -#Validate if a given tcp/udp port is busy +#Validate if a given tcp/udp port is busy on the given interface #shellcheck disable=SC2207 function check_tcp_udp_port() { @@ -1347,7 +1347,20 @@ function check_tcp_udp_port() { port=$(printf "%04x" "${1}") port_type="${2}" - declare -a busy_ports=($(grep -v "local_address" --no-filename "/proc/net/${port_type}" "/proc/net/${port_type}6" | awk '{print $2$4}' | cut -d ":" -f 2 | sort -u)) + local network_interface + local ip_address + local hex_ip_address + network_interface="${3}" + ip_address=$(ip -4 -o addr show "${network_interface}" 2> /dev/null | awk '{print $4}' | cut -d "/" -f 1) + + if [ -n "${ip_address}" ]; then + hex_ip_address=$(ip_dec_to_hex "${ip_address}") + else + hex_ip_address="" + fi + + declare -a busy_ports=($(awk -v iplist="${hex_ip_address},00000000" 'BEGIN {split(iplist,a,","); for (i in a) ips[a[i]]} /local_address/ {next} {split($2,a,":"); if (a[1] in ips) ports[a[2] $4]} END {for (port in ports) print port}' "/proc/net/${port_type}" "/proc/net/${port_type}6")) + for hexport in "${busy_ports[@]}"; do if [[ "${port_type}" == "tcp" || "${port_type}" == "tcp6" ]]; then if [ "${hexport}" = "${port}0A" ]; then @@ -1384,6 +1397,22 @@ function find_process_name_by_port() { blocking_process_name=$(ss -tupln | grep -oP "${regexp}") } +#Convert an IP address from decimal to hexdecimal returning its value +ip_dec_to_hex() { + + debug_print + + IFS='.' read -r -a octets <<< "${1}" + + local hex + hex="" + for octet in "${octets[@]}"; do + hex="$(printf "%02X%s" "${octet}" "${hex}")" + done + + echo "${hex}" +} + #Validate if a wireless card is supporting VIF (Virtual Interface) function check_vif_support() { From 2614eb7a5f1613ee4fd15bce2942a0e01a6537d1 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Tue, 7 May 2024 16:47:19 +0200 Subject: [PATCH 41/92] Fix shellcheck warnings --- airgeddon.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 501c2be62..1e5c26fb3 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -9010,9 +9010,9 @@ function set_charset() { done charset="\"${charset}\" \"${charset_tmp}\"" else - charset_tmp=${charset} + charset_tmp="${charset}" for ((i=0; i < maxlength - 1; i++)); do - charset+=${charset_tmp} + charset+="${charset_tmp}" done fi ;; @@ -9524,7 +9524,7 @@ function set_bettercap_config() { { echo -e "set http.proxy.script ${bettercap_hook_file}" - } >> ${tmpdir}${bettercap_config_file} + } >> "${tmpdir}${bettercap_config_file}" { echo -e "function onLoad() {" @@ -9539,7 +9539,7 @@ function set_bettercap_config() { echo -e "\t\t}" echo -e "\t}" echo -e "}" - } >> ${tmpdir}${bettercap_hook_file} + } >> "${tmpdir}${bettercap_hook_file}" fi { @@ -9560,7 +9560,7 @@ function set_bettercap_config() { echo -e "events.ignore net.sniff.sni" echo -e "events.ignore net.sniff.https\n" echo -e "events.stream on" - } >> ${tmpdir}${bettercap_config_file} + } >> "${tmpdir}${bettercap_config_file}" } #Create configuration file for hostapd From f49c64a9808295399fa6f8fad2f57144cd9f3015 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Tue, 7 May 2024 17:13:23 +0200 Subject: [PATCH 42/92] Fix shellcheck warnings --- airgeddon.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 3fe61b9c2..c2b6df11d 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -6281,7 +6281,8 @@ function initialize_instance_settings() { instance_setter if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then if hash tmux 2> /dev/null; then - local current_tmux_display_name=$(tmux display-message -p '#W') + local current_tmux_display_name + current_tmux_display_name=$(tmux display-message -p '#W') if [ "${current_tmux_display_name}" = "${tmux_main_window}" ]; then create_instance_orchestrator_file register_instance_pid @@ -6301,7 +6302,8 @@ function instance_setter() { local create_dir=0 if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "tmux" ]; then if hash tmux 2> /dev/null; then - local current_tmux_display_name=$(tmux display-message -p '#W') + local current_tmux_display_name + current_tmux_display_name=$(tmux display-message -p '#W') if [ "${current_tmux_display_name}" = "${tmux_main_window}" ]; then create_dir=1 fi From 2bcb0f421cb480f26270156366d1e1a8af6ea4cd Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Wed, 22 May 2024 19:34:07 +0200 Subject: [PATCH 43/92] Add a function to detect if this instance was the first one modifying routing state --- airgeddon.sh | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/airgeddon.sh b/airgeddon.sh index c2b6df11d..5ae2d25b5 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -6382,6 +6382,25 @@ function register_instance_pid() { fi } +#Check if this instance is the first one modifying routing state +function is_first_routing_modifier_airgeddon_instance() { + + debug_print + + local agpid="" + + readarray -t AIRGEDDON_PIDS 2> /dev/null < <(cat <"${system_tmpdir}${ag_orchestrator_file}" 2> /dev/null) + for item in "${AIRGEDDON_PIDS[@]}"; do + [[ "${item}" =~ ^(et)?([0-9]+)rs[0-1]$ ]] && agpid="${BASH_REMATCH[2]}" + + if [ "${agpid}" = "${BASHPID}" ]; then + return 0 + fi + done + + return 1 +} + #Check if this instance is the last airgeddon instance running function is_last_airgeddon_instance() { From 5b7c85bc96f1b1c5f01fb78923b0f6eb0c4eab58 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Wed, 22 May 2024 20:00:36 +0200 Subject: [PATCH 44/92] Add a global variable setting airgeddon instance name to be used later in other parts of airgeddon --- airgeddon.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 5ae2d25b5..eb1aff15a 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -6314,12 +6314,14 @@ function instance_setter() { if [ "${create_dir}" -eq 1 ]; then local dir_number="1" - local airgeddon_instance_dir="ag${dir_number}/" + airgeddon_instance_name="ag${dir_number}" + local airgeddon_instance_dir="${airgeddon_instance_name}/" if [ -d "${system_tmpdir}${airgeddon_instance_dir}" ]; then while true; do dir_number=$((dir_number + 1)) - airgeddon_instance_dir="ag${dir_number}/" + airgeddon_instance_name="ag${dir_number}" + airgeddon_instance_dir="${airgeddon_instance_name}/" if [ ! -d "${system_tmpdir}${airgeddon_instance_dir}" ]; then break fi From 486eb4f64da01cf46f963d17e833b447189b48d9 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Fri, 24 May 2024 21:42:41 +0200 Subject: [PATCH 45/92] Adapt nftables part to work in multi-instance mode. Still pending iptables (nft is done) --- airgeddon.sh | 177 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 105 insertions(+), 72 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index eb1aff15a..b1e05fc6f 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -6045,13 +6045,12 @@ function clean_routing_rules() { debug_print control_routing_status "end" - clean_initialize_iptables_nftables + clean_initialize_iptables_nftables "end" - if [ "${iptables_saved}" -eq 1 ]; then + if is_last_airgeddon_instance && [[ -n "${system_tmpdir}${routing_tmp_file}" ]]; then restore_iptables_nftables + rm -rf "${system_tmpdir}${routing_tmp_file}" > /dev/null 2>&1 fi - - rm -rf "${tmpdir}${routing_tmp_file}" > /dev/null 2>&1 } #Save iptables/nftables rules @@ -6060,21 +6059,9 @@ function save_iptables_nftables() { debug_print if [ "${iptables_nftables}" -eq 1 ]; then - if hash "iptables-${iptables_cmd}-save" 2> /dev/null; then - if "iptables-${iptables_cmd}-save" > "${tmpdir}${routing_tmp_file}" 2> /dev/null; then - iptables_saved=1 - fi - elif hash "${iptables_cmd}-compat-save" 2> /dev/null; then - if "${iptables_cmd}-compat-save" > "${tmpdir}${routing_tmp_file}" 2> /dev/null; then - iptables_saved=1 - fi - fi + "${iptables_cmd}" list ruleset > "${system_tmpdir}${routing_tmp_file}" 2> /dev/null else - if hash "${iptables_cmd}-save" 2> /dev/null; then - if "${iptables_cmd}-save" > "${tmpdir}${routing_tmp_file}" 2> /dev/null; then - iptables_saved=1 - fi - fi + "${iptables_cmd}-save" > "${system_tmpdir}${routing_tmp_file}" 2> /dev/null fi } @@ -6084,38 +6071,81 @@ function restore_iptables_nftables() { debug_print if [ "${iptables_nftables}" -eq 1 ]; then - if hash "iptables-${iptables_cmd}-restore" 2> /dev/null; then - "iptables-${iptables_cmd}-restore" < "${tmpdir}${routing_tmp_file}" 2> /dev/null - elif hash "${iptables_cmd}-compat-restore" 2> /dev/null; then - "${iptables_cmd}-compat-restore" < "${tmpdir}${routing_tmp_file}" 2> /dev/null - fi + "${iptables_cmd}" -f "${system_tmpdir}${routing_tmp_file}" 2> /dev/null else - if hash "${iptables_cmd}-restore" 2> /dev/null; then - "${iptables_cmd}-restore" < "${tmpdir}${routing_tmp_file}" 2> /dev/null - fi + "${iptables_cmd}-restore" < "${system_tmpdir}${routing_tmp_file}" 2> /dev/null fi } -#Clean and initialize iptables/nftables rules -function clean_initialize_iptables_nftables() { +#Prepare iptables/nftables after a clean to avoid errors +function prepare_iptables_nftables() { + + debug_print + + if [ "${iptables_nftables}" -eq 1 ]; then + "${iptables_cmd}" add table ip filter_"${airgeddon_instance_name}" + "${iptables_cmd}" add chain ip filter_"${airgeddon_instance_name}" forward_"${airgeddon_instance_name}" '{type filter hook forward priority 0;}' + "${iptables_cmd}" add chain ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" '{type filter hook input priority 0;}' + "${iptables_cmd}" add table ip nat_"${airgeddon_instance_name}" + "${iptables_cmd}" add chain ip nat_"${airgeddon_instance_name}" prerouting_"${airgeddon_instance_name}" '{type nat hook prerouting priority -100;}' + "${iptables_cmd}" add chain ip nat_"${airgeddon_instance_name}" postrouting_"${airgeddon_instance_name}" '{type nat hook postrouting priority 100;}' + else + #TODO prepare chains for iptables + : + fi +} + +#Clean only this instance iptables/nftables rules +function clean_this_instance_iptables_nftables() { + + debug_print + + if [ "${iptables_nftables}" -eq 1 ]; then + "${iptables_cmd}" delete table filter_"${airgeddon_instance_name}" + "${iptables_cmd}" delete table nat_"${airgeddon_instance_name}" + else + #TODO delete only this instance iptables rules + : + fi +} + +#Clean all iptables/nftables rules +function clean_all_iptables_nftables() { debug_print if [ "${iptables_nftables}" -eq 1 ]; then - "${iptables_cmd}" add table ip filter 2> /dev/null - "${iptables_cmd}" add chain ip filter INPUT 2> /dev/null - "${iptables_cmd}" add chain ip filter OUTPUT 2> /dev/null - "${iptables_cmd}" add chain ip filter FORWARD 2> /dev/null - "${iptables_cmd}" flush table ip filter 2> /dev/null - "${iptables_cmd}" add table ip nat 2> /dev/null - "${iptables_cmd}" add chain nat PREROUTING "{ type nat hook prerouting priority 0 ; }" 2> /dev/null - "${iptables_cmd}" add chain nat POSTROUTING "{ type nat hook postrouting priority 100 ; }" 2> /dev/null - "${iptables_cmd}" flush table ip nat 2> /dev/null + "${iptables_cmd}" flush ruleset 2> /dev/null else "${iptables_cmd}" -F 2> /dev/null "${iptables_cmd}" -t nat -F 2> /dev/null + "${iptables_cmd}" -t mangle -F 2> /dev/null + "${iptables_cmd}" -t raw -F 2> /dev/null + "${iptables_cmd}" -t security -F 2> /dev/null "${iptables_cmd}" -X 2> /dev/null "${iptables_cmd}" -t nat -X 2> /dev/null + "${iptables_cmd}" -t mangle -X 2> /dev/null + "${iptables_cmd}" -t raw -X 2> /dev/null + "${iptables_cmd}" -t security -X 2> /dev/null + fi +} + +#Contains the logic to decide what iptables/nftables rules to clean +function clean_initialize_iptables_nftables() { + + debug_print + + if [ "${1}" = "start" ]; then + if is_first_routing_modifier_airgeddon_instance; then + clean_all_iptables_nftables + fi + prepare_iptables_nftables + else + if is_last_airgeddon_instance; then + clean_all_iptables_nftables + else + clean_this_instance_iptables_nftables + fi fi } @@ -10086,7 +10116,7 @@ function set_std_internet_routing_rules() { debug_print control_routing_status "start" - if [ "${routing_modified}" -eq 0 ]; then + if is_first_routing_modifier_airgeddon_instance; then save_iptables_nftables fi @@ -10094,78 +10124,79 @@ function set_std_internet_routing_rules() { ip route add ${et_ip_range}/${std_c_mask_cidr} dev "${interface}" table local proto static scope link > /dev/null 2>&1 routing_modified=1 - clean_initialize_iptables_nftables + clean_initialize_iptables_nftables "start" + #TODO create its own rules (pending only iptables part, nft is done) if [ "${et_mode}" != "et_captive_portal" ]; then if [ "${iptables_nftables}" -eq 1 ]; then - "${iptables_cmd}" add rule ip filter FORWARD counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" forward_"${airgeddon_instance_name}" counter accept else - "${iptables_cmd}" -P FORWARD ACCEPT + "${iptables_cmd}" -P FORWARD ACCEPT "${iptables_comment}" fi echo "1" > /proc/sys/net/ipv4/ip_forward 2> /dev/null else if [ "${iptables_nftables}" -eq 1 ]; then - "${iptables_cmd}" add rule ip filter FORWARD counter drop + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" forward_"${airgeddon_instance_name}" counter drop else - "${iptables_cmd}" -P FORWARD DROP + "${iptables_cmd}" -P FORWARD DROP "${iptables_comment}" fi echo "0" > /proc/sys/net/ipv4/ip_forward 2> /dev/null fi if [ "${et_mode}" = "et_captive_portal" ]; then if [ "${iptables_nftables}" -eq 1 ]; then - "${iptables_cmd}" add rule ip nat PREROUTING tcp dport ${www_port} counter dnat to ${et_ip_router}:${www_port} - "${iptables_cmd}" add rule ip filter INPUT tcp dport ${www_port} counter accept - "${iptables_cmd}" add rule ip filter INPUT tcp dport ${https_port} counter accept + "${iptables_cmd}" add rule ip nat_"${airgeddon_instance_name}" prerouting_"${airgeddon_instance_name}" tcp dport ${www_port} counter dnat to ${et_ip_router}:${www_port} + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" tcp dport ${www_port} counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" tcp dport ${https_port} counter accept else - "${iptables_cmd}" -t nat -A PREROUTING -p tcp --dport ${www_port} -j DNAT --to-destination ${et_ip_router}:${www_port} - "${iptables_cmd}" -A INPUT -p tcp --destination-port ${www_port} -j ACCEPT - "${iptables_cmd}" -A INPUT -p tcp --destination-port ${https_port} -j ACCEPT + "${iptables_cmd}" -t nat -A PREROUTING -p tcp --dport ${www_port} -j DNAT --to-destination ${et_ip_router}:${www_port} "${iptables_comment}" + "${iptables_cmd}" -A INPUT -p tcp --destination-port ${www_port} -j ACCEPT "${iptables_comment}" + "${iptables_cmd}" -A INPUT -p tcp --destination-port ${https_port} -j ACCEPT "${iptables_comment}" fi if [ "${iptables_nftables}" -eq 1 ]; then - "${iptables_cmd}" add rule ip filter INPUT udp dport ${dns_port} counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" udp dport ${dns_port} counter accept else - "${iptables_cmd}" -A INPUT -p udp --destination-port ${dns_port} -j ACCEPT + "${iptables_cmd}" -A INPUT -p udp --destination-port ${dns_port} -j ACCEPT "${iptables_comment}" fi elif [ "${et_mode}" = "et_sniffing_sslstrip2" ]; then if [ "${iptables_nftables}" -eq 1 ]; then - "${iptables_cmd}" add rule ip filter INPUT tcp dport ${bettercap_proxy_port} counter accept - "${iptables_cmd}" add rule ip filter INPUT udp dport ${bettercap_dns_port} counter accept - "${iptables_cmd}" add rule ip filter INPUT iifname "lo" counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" tcp dport ${bettercap_proxy_port} counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" udp dport ${bettercap_dns_port} counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "lo" counter accept else - "${iptables_cmd}" -A INPUT -p tcp --destination-port ${bettercap_proxy_port} -j ACCEPT - "${iptables_cmd}" -A INPUT -p udp --destination-port ${bettercap_dns_port} -j ACCEPT - "${iptables_cmd}" -A INPUT -i lo -j ACCEPT + "${iptables_cmd}" -A INPUT -p tcp --destination-port ${bettercap_proxy_port} -j ACCEPT "${iptables_comment}" + "${iptables_cmd}" -A INPUT -p udp --destination-port ${bettercap_dns_port} -j ACCEPT "${iptables_comment}" + "${iptables_cmd}" -A INPUT -i lo -j ACCEPT "${iptables_comment}" fi elif [ "${et_mode}" = "et_sniffing_sslstrip2_beef" ]; then if [ "${iptables_nftables}" -eq 1 ]; then - "${iptables_cmd}" add rule ip filter INPUT tcp dport ${bettercap_proxy_port} counter accept - "${iptables_cmd}" add rule ip filter INPUT udp dport ${bettercap_dns_port} counter accept - "${iptables_cmd}" add rule ip filter INPUT iifname "lo" counter accept - "${iptables_cmd}" add rule ip filter INPUT tcp dport ${beef_port} counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" tcp dport ${bettercap_proxy_port} counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" udp dport ${bettercap_dns_port} counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "lo" counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" tcp dport ${beef_port} counter accept else - "${iptables_cmd}" -A INPUT -p tcp --destination-port ${bettercap_proxy_port} -j ACCEPT - "${iptables_cmd}" -A INPUT -p udp --destination-port ${bettercap_dns_port} -j ACCEPT - "${iptables_cmd}" -A INPUT -i lo -j ACCEPT - "${iptables_cmd}" -A INPUT -p tcp --destination-port ${beef_port} -j ACCEPT + "${iptables_cmd}" -A INPUT -p tcp --destination-port ${bettercap_proxy_port} -j ACCEPT "${iptables_comment}" + "${iptables_cmd}" -A INPUT -p udp --destination-port ${bettercap_dns_port} -j ACCEPT "${iptables_comment}" + "${iptables_cmd}" -A INPUT -i lo -j ACCEPT "${iptables_comment}" + "${iptables_cmd}" -A INPUT -p tcp --destination-port ${beef_port} -j ACCEPT "${iptables_comment}" fi fi if [ "${et_mode}" != "et_captive_portal" ]; then if [ "${iptables_nftables}" -eq 1 ]; then - "${iptables_cmd}" add rule nat POSTROUTING ip saddr ${et_ip_range}/${std_c_mask_cidr} oifname "${internet_interface}" counter masquerade + "${iptables_cmd}" add rule nat_"${airgeddon_instance_name}" postrouting_"${airgeddon_instance_name}" ip saddr ${et_ip_range}/${std_c_mask_cidr} oifname "${internet_interface}" counter masquerade else - "${iptables_cmd}" -t nat -A POSTROUTING -o "${internet_interface}" -j MASQUERADE + "${iptables_cmd}" -t nat -A POSTROUTING -o "${internet_interface}" -j MASQUERADE "${iptables_comment}" fi fi if [ "${iptables_nftables}" -eq 1 ]; then - "${iptables_cmd}" add rule ip filter INPUT ip saddr ${et_ip_range}/${std_c_mask_cidr} ip daddr ${et_ip_router}/${ip_mask_cidr} icmp type echo-request ct state new,related,established counter accept - "${iptables_cmd}" add rule ip filter INPUT ip saddr ${et_ip_range}/${std_c_mask_cidr} ip daddr ${et_ip_router}/${ip_mask_cidr} counter drop + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" ip saddr ${et_ip_range}/${std_c_mask_cidr} ip daddr ${et_ip_router}/${ip_mask_cidr} icmp type echo-request ct state new,related,established counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" ip saddr ${et_ip_range}/${std_c_mask_cidr} ip daddr ${et_ip_router}/${ip_mask_cidr} counter drop else - "${iptables_cmd}" -A INPUT -p icmp --icmp-type 8 -s ${et_ip_range}/${std_c_mask} -d ${et_ip_router}/${ip_mask} -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT - "${iptables_cmd}" -A INPUT -s ${et_ip_range}/${std_c_mask} -d ${et_ip_router}/${ip_mask} -j DROP + "${iptables_cmd}" -A INPUT -p icmp --icmp-type 8 -s ${et_ip_range}/${std_c_mask} -d ${et_ip_router}/${ip_mask} -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT "${iptables_comment}" + "${iptables_cmd}" -A INPUT -s ${et_ip_range}/${std_c_mask} -d ${et_ip_router}/${ip_mask} -j DROP "${iptables_comment}" fi sleep 2 } @@ -14693,10 +14724,13 @@ function iptables_nftables_detection() { if [ "${iptables_nftables}" -eq 0 ]; then if hash iptables-legacy 2> /dev/null && ! hash iptables 2> /dev/null; then iptables_cmd="iptables-legacy" + iptables_comment="-m comment --comment \"${airgeddon_instance_name}\"" elif hash iptables 2> /dev/null && ! hash iptables-legacy 2> /dev/null; then iptables_cmd="iptables" + iptables_comment="-m comment --comment \"${airgeddon_instance_name}\"" elif hash iptables 2> /dev/null && hash iptables-legacy 2> /dev/null; then iptables_cmd="iptables" + iptables_comment="-m comment --comment \"${airgeddon_instance_name}\"" fi else iptables_cmd="nft" @@ -15799,7 +15833,6 @@ function initialize_script_settings() { airmon_fix autochanged_language=0 routing_modified=0 - iptables_saved=0 spoofed_mac=0 mac_spoofing_desired=0 dhcpd_path_changed=0 From abe9b0b8e23b8ced5d5cea49f005f1e764304774 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Sat, 25 May 2024 01:30:30 +0200 Subject: [PATCH 46/92] Adapt iptables part to work in multi-instance mode --- airgeddon.sh | 60 +++++++++++++++++++++++++++++----------------------- 1 file changed, 34 insertions(+), 26 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index b1e05fc6f..83eba6fcb 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -6090,8 +6090,10 @@ function prepare_iptables_nftables() { "${iptables_cmd}" add chain ip nat_"${airgeddon_instance_name}" prerouting_"${airgeddon_instance_name}" '{type nat hook prerouting priority -100;}' "${iptables_cmd}" add chain ip nat_"${airgeddon_instance_name}" postrouting_"${airgeddon_instance_name}" '{type nat hook postrouting priority 100;}' else - #TODO prepare chains for iptables - : + "${iptables_cmd}" -t filter -N input_"${airgeddon_instance_name}" + "${iptables_cmd}" -A INPUT -j input_"${airgeddon_instance_name}" + "${iptables_cmd}" -t filter -N forward_"${airgeddon_instance_name}" + "${iptables_cmd}" -A FORWARD -j forward_"${airgeddon_instance_name}" fi } @@ -6104,8 +6106,12 @@ function clean_this_instance_iptables_nftables() { "${iptables_cmd}" delete table filter_"${airgeddon_instance_name}" "${iptables_cmd}" delete table nat_"${airgeddon_instance_name}" else - #TODO delete only this instance iptables rules - : + "${iptables_cmd}" -D INPUT -j input_"${airgeddon_instance_name}" 2> /dev/null + "${iptables_cmd}" -D FORWARD -j forward_"${airgeddon_instance_name}" 2> /dev/null + "${iptables_cmd}" -F input_"${airgeddon_instance_name}" 2> /dev/null + "${iptables_cmd}" -F forward_"${airgeddon_instance_name}" 2> /dev/null + "${iptables_cmd}" -X input_"${airgeddon_instance_name}" 2> /dev/null + "${iptables_cmd}" -X forward_"${airgeddon_instance_name}" 2> /dev/null fi } @@ -6122,11 +6128,17 @@ function clean_all_iptables_nftables() { "${iptables_cmd}" -t mangle -F 2> /dev/null "${iptables_cmd}" -t raw -F 2> /dev/null "${iptables_cmd}" -t security -F 2> /dev/null - "${iptables_cmd}" -X 2> /dev/null - "${iptables_cmd}" -t nat -X 2> /dev/null "${iptables_cmd}" -t mangle -X 2> /dev/null "${iptables_cmd}" -t raw -X 2> /dev/null "${iptables_cmd}" -t security -X 2> /dev/null + "${iptables_cmd}" -D INPUT -j input_"${airgeddon_instance_name}" 2> /dev/null + "${iptables_cmd}" -D FORWARD -j forward_"${airgeddon_instance_name}" 2> /dev/null + "${iptables_cmd}" -F input_"${airgeddon_instance_name}" 2> /dev/null + "${iptables_cmd}" -F forward_"${airgeddon_instance_name}" 2> /dev/null + "${iptables_cmd}" -X input_"${airgeddon_instance_name}" 2> /dev/null + "${iptables_cmd}" -X forward_"${airgeddon_instance_name}" 2> /dev/null + "${iptables_cmd}" -X 2> /dev/null + "${iptables_cmd}" -t nat -X 2> /dev/null fi } @@ -10126,19 +10138,18 @@ function set_std_internet_routing_rules() { clean_initialize_iptables_nftables "start" - #TODO create its own rules (pending only iptables part, nft is done) if [ "${et_mode}" != "et_captive_portal" ]; then if [ "${iptables_nftables}" -eq 1 ]; then "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" forward_"${airgeddon_instance_name}" counter accept else - "${iptables_cmd}" -P FORWARD ACCEPT "${iptables_comment}" + "${iptables_cmd}" -P FORWARD ACCEPT fi echo "1" > /proc/sys/net/ipv4/ip_forward 2> /dev/null else if [ "${iptables_nftables}" -eq 1 ]; then "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" forward_"${airgeddon_instance_name}" counter drop else - "${iptables_cmd}" -P FORWARD DROP "${iptables_comment}" + "${iptables_cmd}" -P FORWARD DROP fi echo "0" > /proc/sys/net/ipv4/ip_forward 2> /dev/null fi @@ -10149,15 +10160,15 @@ function set_std_internet_routing_rules() { "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" tcp dport ${www_port} counter accept "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" tcp dport ${https_port} counter accept else - "${iptables_cmd}" -t nat -A PREROUTING -p tcp --dport ${www_port} -j DNAT --to-destination ${et_ip_router}:${www_port} "${iptables_comment}" - "${iptables_cmd}" -A INPUT -p tcp --destination-port ${www_port} -j ACCEPT "${iptables_comment}" - "${iptables_cmd}" -A INPUT -p tcp --destination-port ${https_port} -j ACCEPT "${iptables_comment}" + "${iptables_cmd}" -t nat -A PREROUTING -p tcp --dport ${www_port} -j DNAT --to-destination ${et_ip_router}:${www_port} + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp --destination-port ${www_port} -j ACCEPT + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp --destination-port ${https_port} -j ACCEPT fi if [ "${iptables_nftables}" -eq 1 ]; then "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" udp dport ${dns_port} counter accept else - "${iptables_cmd}" -A INPUT -p udp --destination-port ${dns_port} -j ACCEPT "${iptables_comment}" + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p udp --destination-port ${dns_port} -j ACCEPT fi elif [ "${et_mode}" = "et_sniffing_sslstrip2" ]; then if [ "${iptables_nftables}" -eq 1 ]; then @@ -10165,9 +10176,9 @@ function set_std_internet_routing_rules() { "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" udp dport ${bettercap_dns_port} counter accept "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "lo" counter accept else - "${iptables_cmd}" -A INPUT -p tcp --destination-port ${bettercap_proxy_port} -j ACCEPT "${iptables_comment}" - "${iptables_cmd}" -A INPUT -p udp --destination-port ${bettercap_dns_port} -j ACCEPT "${iptables_comment}" - "${iptables_cmd}" -A INPUT -i lo -j ACCEPT "${iptables_comment}" + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp --destination-port ${bettercap_proxy_port} -j ACCEPT + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p udp --destination-port ${bettercap_dns_port} -j ACCEPT + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -i lo -j ACCEPT fi elif [ "${et_mode}" = "et_sniffing_sslstrip2_beef" ]; then if [ "${iptables_nftables}" -eq 1 ]; then @@ -10176,10 +10187,10 @@ function set_std_internet_routing_rules() { "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "lo" counter accept "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" tcp dport ${beef_port} counter accept else - "${iptables_cmd}" -A INPUT -p tcp --destination-port ${bettercap_proxy_port} -j ACCEPT "${iptables_comment}" - "${iptables_cmd}" -A INPUT -p udp --destination-port ${bettercap_dns_port} -j ACCEPT "${iptables_comment}" - "${iptables_cmd}" -A INPUT -i lo -j ACCEPT "${iptables_comment}" - "${iptables_cmd}" -A INPUT -p tcp --destination-port ${beef_port} -j ACCEPT "${iptables_comment}" + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp --destination-port ${bettercap_proxy_port} -j ACCEPT + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p udp --destination-port ${bettercap_dns_port} -j ACCEPT + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -i lo -j ACCEPT + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp --destination-port ${beef_port} -j ACCEPT fi fi @@ -10187,7 +10198,7 @@ function set_std_internet_routing_rules() { if [ "${iptables_nftables}" -eq 1 ]; then "${iptables_cmd}" add rule nat_"${airgeddon_instance_name}" postrouting_"${airgeddon_instance_name}" ip saddr ${et_ip_range}/${std_c_mask_cidr} oifname "${internet_interface}" counter masquerade else - "${iptables_cmd}" -t nat -A POSTROUTING -o "${internet_interface}" -j MASQUERADE "${iptables_comment}" + "${iptables_cmd}" -t nat -A POSTROUTING -o "${internet_interface}" -j MASQUERADE fi fi @@ -10195,8 +10206,8 @@ function set_std_internet_routing_rules() { "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" ip saddr ${et_ip_range}/${std_c_mask_cidr} ip daddr ${et_ip_router}/${ip_mask_cidr} icmp type echo-request ct state new,related,established counter accept "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" ip saddr ${et_ip_range}/${std_c_mask_cidr} ip daddr ${et_ip_router}/${ip_mask_cidr} counter drop else - "${iptables_cmd}" -A INPUT -p icmp --icmp-type 8 -s ${et_ip_range}/${std_c_mask} -d ${et_ip_router}/${ip_mask} -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT "${iptables_comment}" - "${iptables_cmd}" -A INPUT -s ${et_ip_range}/${std_c_mask} -d ${et_ip_router}/${ip_mask} -j DROP "${iptables_comment}" + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p icmp --icmp-type 8 -s ${et_ip_range}/${std_c_mask} -d ${et_ip_router}/${ip_mask} -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -s ${et_ip_range}/${std_c_mask} -d ${et_ip_router}/${ip_mask} -j DROP fi sleep 2 } @@ -14724,13 +14735,10 @@ function iptables_nftables_detection() { if [ "${iptables_nftables}" -eq 0 ]; then if hash iptables-legacy 2> /dev/null && ! hash iptables 2> /dev/null; then iptables_cmd="iptables-legacy" - iptables_comment="-m comment --comment \"${airgeddon_instance_name}\"" elif hash iptables 2> /dev/null && ! hash iptables-legacy 2> /dev/null; then iptables_cmd="iptables" - iptables_comment="-m comment --comment \"${airgeddon_instance_name}\"" elif hash iptables 2> /dev/null && hash iptables-legacy 2> /dev/null; then iptables_cmd="iptables" - iptables_comment="-m comment --comment \"${airgeddon_instance_name}\"" fi else iptables_cmd="nft" From 5e7093f212b31a83e87755291cb2ce8931d6f65f Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Sat, 25 May 2024 02:16:47 +0200 Subject: [PATCH 47/92] Fix dhcp 67/udp port conflict on multi-instance --- airgeddon.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 83eba6fcb..edd02abab 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -243,6 +243,7 @@ loopback_ip="127.0.0.1" loopback_ipv6="::1/128" routing_tmp_file="ag.iptables_nftables" dhcpd_file="ag.dhcpd.conf" +dhcpd_pid_file="dhcpd.pid" dnsmasq_file="ag.dnsmasq.conf" internet_dns1="8.8.8.8" internet_dns2="8.8.4.4" @@ -1367,7 +1368,7 @@ function check_tcp_udp_port() { return 1 fi else - if [ "${hexport}" = "${port}07" ]; then + if [[ "${hexport}" = "${port}07" ]] && [[ "${port}" != "0043" ]]; then return 1 fi fi @@ -10229,6 +10230,8 @@ function launch_dhcp_server() { dchcpd_scr_window_position=${g4_middleleft_window} ;; esac + + rm -rf "/var/run/${dhcpd_pid_file}" 2> /dev/null 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" if [ "${AIRGEDDON_WINDOWS_HANDLING}" = "xterm" ]; then et_processes+=($!) From 411f1350ccbb017a63aad0be0d3812439459ed28 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Tue, 28 May 2024 15:44:21 +0200 Subject: [PATCH 48/92] Changed iptables/nftables forward policy to deny by default. This will allow more granularity in the future --- airgeddon.sh | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index edd02abab..576361161 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -6085,12 +6085,13 @@ function prepare_iptables_nftables() { if [ "${iptables_nftables}" -eq 1 ]; then "${iptables_cmd}" add table ip filter_"${airgeddon_instance_name}" - "${iptables_cmd}" add chain ip filter_"${airgeddon_instance_name}" forward_"${airgeddon_instance_name}" '{type filter hook forward priority 0;}' + "${iptables_cmd}" add chain ip filter_"${airgeddon_instance_name}" forward_"${airgeddon_instance_name}" '{type filter hook forward priority 0; policy drop;}' "${iptables_cmd}" add chain ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" '{type filter hook input priority 0;}' "${iptables_cmd}" add table ip nat_"${airgeddon_instance_name}" "${iptables_cmd}" add chain ip nat_"${airgeddon_instance_name}" prerouting_"${airgeddon_instance_name}" '{type nat hook prerouting priority -100;}' "${iptables_cmd}" add chain ip nat_"${airgeddon_instance_name}" postrouting_"${airgeddon_instance_name}" '{type nat hook postrouting priority 100;}' else + "${iptables_cmd}" -P FORWARD DROP "${iptables_cmd}" -t filter -N input_"${airgeddon_instance_name}" "${iptables_cmd}" -A INPUT -j input_"${airgeddon_instance_name}" "${iptables_cmd}" -t filter -N forward_"${airgeddon_instance_name}" @@ -10139,20 +10140,16 @@ function set_std_internet_routing_rules() { clean_initialize_iptables_nftables "start" + echo "1" > /proc/sys/net/ipv4/ip_forward 2> /dev/null + if [ "${et_mode}" != "et_captive_portal" ]; then if [ "${iptables_nftables}" -eq 1 ]; then - "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" forward_"${airgeddon_instance_name}" counter accept - else - "${iptables_cmd}" -P FORWARD ACCEPT - fi - echo "1" > /proc/sys/net/ipv4/ip_forward 2> /dev/null - else - if [ "${iptables_nftables}" -eq 1 ]; then - "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" forward_"${airgeddon_instance_name}" counter drop + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" forward_"${airgeddon_instance_name}" iifname "${interface}" oifname "${internet_interface}" counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" forward_"${airgeddon_instance_name}" iifname "${internet_interface}" oifname "${interface}" counter accept else - "${iptables_cmd}" -P FORWARD DROP + "${iptables_cmd}" -A forward_"${airgeddon_instance_name}" -i "${interface}" -o "${internet_interface}" -j ACCEPT + "${iptables_cmd}" -A forward_"${airgeddon_instance_name}" -i "${internet_interface}" -o "${interface}" -j ACCEPT fi - echo "0" > /proc/sys/net/ipv4/ip_forward 2> /dev/null fi if [ "${et_mode}" = "et_captive_portal" ]; then From 33df907cb795e682561d2dca95a276238954299e Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Tue, 28 May 2024 15:54:35 +0200 Subject: [PATCH 49/92] Fix bug related to overwriting original iptables/nftables state --- airgeddon.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airgeddon.sh b/airgeddon.sh index 576361161..059a7394f 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -10130,7 +10130,7 @@ function set_std_internet_routing_rules() { debug_print control_routing_status "start" - if is_first_routing_modifier_airgeddon_instance; then + if is_first_routing_modifier_airgeddon_instance && [[ ! -f "${system_tmpdir}${routing_tmp_file}" ]]; then save_iptables_nftables fi From e7710ed2b015d0d31dcc0da3277d8bd53e353574 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Thu, 30 May 2024 14:54:58 +0200 Subject: [PATCH 50/92] Fix bug to avoid set advanced captive portal if you answer "no" to the question for the second time --- airgeddon.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/airgeddon.sh b/airgeddon.sh index 1e5c26fb3..824604116 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -5851,6 +5851,7 @@ function initialize_menu_and_print_selections() { et_processes=() secondary_wifi_interface="" et_attack_adapter_prerequisites_ok=0 + advanced_captive_portal=0 print_iface_selected print_all_target_vars_et ;; From 84cf44d5b0f310ecf64974ab2c89147c6a6a8eac Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Thu, 30 May 2024 14:56:40 +0200 Subject: [PATCH 51/92] Update WPS pin database --- known_pins.db | 2 +- pindb_checksum.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/known_pins.db b/known_pins.db index b79a2060e..cfae9c3ef 100644 --- a/known_pins.db +++ b/known_pins.db @@ -386,7 +386,7 @@ function set_pin_database() { PINDB["AA8DD3"]="03053447" PINDB["AABBCC"]="76334693" PINDB["AC2205"]="71756837" - PINDB["AC220B"]="20172527" + PINDB["AC220B"]="20172527 03304068" PINDB["AC9E17"]="02104003" PINDB["ACE87B"]="77502896" PINDB["AE6240"]="39184412" diff --git a/pindb_checksum.txt b/pindb_checksum.txt index 2d78f24b0..3f817ea6d 100644 --- a/pindb_checksum.txt +++ b/pindb_checksum.txt @@ -1 +1 @@ -78ea68b81e58702b36b5d4a00074efa1 +e1a7aa90aace2923794d63b2cf9336fc From 09a3786cb564b9c30955aadfab12be87630cfa86 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Thu, 30 May 2024 14:57:55 +0200 Subject: [PATCH 52/92] Update WPS pin database --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e8ce1ec41..8d7b8a7d8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ ### 11.30 - Improvements on 5Ghz country code check and 5Ghz band capability detection on adapters + - Fixed bug to avoid set advanced captive portal on second time if is not desired after setting it previously ### 11.22 - Possibility to add manually ESSID name for selected hidden networks From d0bdb4c31ab1e8d23c3741dbfa0d2990f737bc35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=9D=BE?= <2744588786@qq.com> Date: Fri, 31 May 2024 17:22:51 +0800 Subject: [PATCH 53/92] Optimize DOS Pursuit mode process killing by using recursive killing of all child processes --- airgeddon.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index dc93335a4..42ecd0636 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -12359,8 +12359,7 @@ function kill_dos_pursuit_mode_processes() { debug_print for item in "${dos_pursuit_mode_pids[@]}"; do - kill -9 "${item}" &> /dev/null - wait "${item}" 2> /dev/null + kill_pid_and_children_recursive "${item}" done if ! stty sane > /dev/null 2>&1; then From da963ab04bd33cc6c70bd0e181aa45102e6844be Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Tue, 4 Jun 2024 23:38:40 +0200 Subject: [PATCH 54/92] Channel is updated automatically on control window for all Evil Twin attacks during DoS pursuit mode --- airgeddon.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 824604116..86aa87408 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -10519,6 +10519,7 @@ function set_enterprise_control_script() { enterprise_returning_vars_file="${tmpdir}${enterprisedir}returning_vars.txt" enterprise_heredoc_mode="${enterprise_mode}" path_to_processes="${tmpdir}${et_processesfile}" + path_to_channelfile="${tmpdir}${channelfile}" wpe_logfile="${tmpdir}${hostapd_wpe_log}" success_file="${tmpdir}${enterprisedir}${enterprise_successfile}" done_msg="${yellow_color}${enterprise_texts[${language},9]}${normal_color}" @@ -10675,13 +10676,13 @@ function set_enterprise_control_script() { last_username="" break_on_next_loop=0 while true; do + et_control_window_channel=$(cat "${path_to_channelfile}" 2> /dev/null) if [ "${break_on_next_loop}" -eq 1 ]; then tput ed fi EOF cat >&7 <<-EOF - et_control_window_channel="${channel}" echo -e "\t${yellow_color}${enterprise_texts[${language},0]} ${white_color}// ${blue_color}BSSID: ${normal_color}${bssid} ${yellow_color}// ${blue_color}${enterprise_texts[${language},1]}: ${normal_color}\${et_control_window_channel} ${yellow_color}// ${blue_color}ESSID: ${normal_color}${essid}" echo echo -e "\t${green_color}${enterprise_texts[${language},2]}${normal_color}" @@ -10785,6 +10786,7 @@ function set_et_control_script() { #!/usr/bin/env bash et_heredoc_mode="${et_mode}" path_to_processes="${tmpdir}${et_processesfile}" + path_to_channelfile="${tmpdir}${channelfile}" mdk_command="${mdk_command}" EOF @@ -10928,6 +10930,7 @@ function set_et_control_script() { cat >&7 <<-'EOF' date_counter=$(date +%s) while true; do + et_control_window_channel=$(cat "${path_to_channelfile}" 2> /dev/null) EOF case ${et_mode} in @@ -10946,7 +10949,6 @@ function set_et_control_script() { esac cat >&7 <<-EOF - et_control_window_channel="${channel}" echo -e "\t${yellow_color}${et_misc_texts[${language},0]} ${white_color}// ${blue_color}BSSID: ${normal_color}${bssid} ${yellow_color}// ${blue_color}${et_misc_texts[${language},1]}: ${normal_color}\${et_control_window_channel} ${yellow_color}// ${blue_color}ESSID: ${normal_color}${essid}" echo echo -e "\t${green_color}${et_misc_texts[${language},2]}${normal_color}" @@ -13947,6 +13949,9 @@ function et_prerequisites() { language_strings "${language}" 115 "read" prepare_et_interface + rm -rf "${tmpdir}${channelfile}" > /dev/null 2>&1 + echo "${channel}" > "${tmpdir}${channelfile}" + if [ -n "${enterprise_mode}" ]; then exec_enterprise_attack else From d2c35002b3227c3c34dd19ae72bc116a8f488a95 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Tue, 4 Jun 2024 23:46:24 +0200 Subject: [PATCH 55/92] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d7b8a7d8..56c8e26d0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ### 11.30 - Improvements on 5Ghz country code check and 5Ghz band capability detection on adapters - Fixed bug to avoid set advanced captive portal on second time if is not desired after setting it previously + - Now channel is automatically updated on control window during "DoS pursuit mode" for all Evil Twin attacks ### 11.22 - Possibility to add manually ESSID name for selected hidden networks From 324fd95a24cf13a8fedea3767c3a4b0b7d45efcb Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Wed, 5 Jun 2024 15:45:44 +0200 Subject: [PATCH 56/92] Implement number of running instances detection --- airgeddon.sh | 27 +++++++++++++++++++++++++++ language_strings.sh | 28 ++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/airgeddon.sh b/airgeddon.sh index 7a5bccea2..c88010bf1 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -6429,6 +6429,24 @@ function register_instance_pid() { fi } +#Detect and return the number of airgeddon running instances +function detect_running_instances() { + + debug_print + + airgeddon_running_instances_counter=1 + + readarray -t AIRGEDDON_PIDS 2> /dev/null < <(cat < "${system_tmpdir}${ag_orchestrator_file}" 2> /dev/null) + for item in "${AIRGEDDON_PIDS[@]}"; do + [[ "${item}" =~ ^(et)?([0-9]+)(rs[0-1])?$ ]] && agpid="${BASH_REMATCH[2]}" + if [[ "${agpid}" != "${BASHPID}" ]] && ps -p "${agpid}" > /dev/null 2>&1; then + airgeddon_running_instances_counter=$((airgeddon_running_instances_counter + 1)) + fi + done + + return "${airgeddon_running_instances_counter}" +} + #Check if this instance is the first one modifying routing state function is_first_routing_modifier_airgeddon_instance() { @@ -17259,6 +17277,15 @@ function main() { fi fi + detect_running_instances + if [ "$?" -gt 1 ]; then + echo + language_strings "${language}" 720 "yellow" + echo + language_strings "${language}" 721 "blue" + language_strings "${language}" 115 "read" + fi + echo language_strings "${language}" 8 "blue" print_known_distros diff --git a/language_strings.sh b/language_strings.sh index bd557e14c..c62b4e5f2 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -11112,6 +11112,34 @@ function initialize_language_strings() { arr["TURKISH",719]="\${pending_of_translation} Wifi bağdaştırıcılarınızdan birinde, sisteminizde ayarlanandan farklı yerleşik bir ülke kodu var. Bu gerçekleştiğinde çekirdek, yalnızca HER İKİ Reg etki alanındaki izinleri içeren özel bir düzenleyici etki alanı \"\${normal_color}99\${yellow_color}\" oluşturur. Ya donanımınız farklı bir bölgeye ait ya da reg alan adınızı yanlış ayarladınız ve işlevselliğinizi bilerek sınırladınız" arr["ARABIC",719]="\${pending_of_translation} يحتوي أحد محولات wifi لديك على رمز بلد مدمج يختلف عن الرمز المعين على نظامك. عندما يحدث هذا، تقوم النواة بإنشاء مجال تنظيمي مخصص \"\${normal_color}99\${yellow_color}\" والذي يحتوي فقط على الأذونات في كلا نطاقي التسجيل. إما أن جهازك ينتمي إلى منطقة مختلفة، أو أنك قمت بتعيين نطاق التسجيل الخاص بك بشكل غير صحيح وقمت بتقييد وظائفك عن قصد" arr["CHINESE",719]="\${pending_of_translation} 您的其中一款 WiFi 适配器的内置国家/地区代码与您系统上设置的国家/地区代码不同。当发生这种情况时,内核会创建一个自定义监管域 \"\${normal_color}99\${yellow_color}\",其中仅包含两个监管域中的权限。您的硬件来自不同的地区,或者您不正确地设置了您的注册域并故意限制了您的功能" + + arr["ENGLISH",720]="It was detected more than one airgeddon instance running. Keep in mind that sharing and using the same wireless adapter in more than one instance at the same time, probably will lead to uncontrolled errors or unexpected results" + arr["SPANISH",720]="Se ha detectado más de una instancia de airgeddon ejecutándose. Ten en cuenta que compartir y utilizar el mismo adaptador inalámbrico en más de una instancia al mismo tiempo probablemente provocará errores no controlados o resultados inesperados" + arr["FRENCH",720]="\${pending_of_translation} Il a été détecté que plusieurs instances d'airgeddon étaient en cours d'exécution. Gardez à l'esprit que le partage et l'utilisation du même adaptateur sans fil dans plusieurs instances en même temps entraîneront probablement des erreurs incontrôlées ou des résultats inattendus" + arr["CATALAN",720]="\${pending_of_translation} S'ha detectat més d'una instància d'airgeddon en execució. Tingueu en compte que compartir i utilitzar el mateix adaptador sense fil en més d'una instància alhora, probablement provocarà errors incontrolats o resultats inesperats" + arr["PORTUGUESE",720]="\${pending_of_translation} Foi detectada mais de uma instância do airgeddon em execução. Tenha em mente que compartilhar e usar o mesmo adaptador sem fio em mais de uma instância ao mesmo tempo provavelmente levará a erros descontrolados ou resultados inesperados" + arr["RUSSIAN",720]="\${pending_of_translation} Было обнаружено более одного запущенного экземпляра airgeddon. Имейте в виду, что совместное использование одного и того же беспроводного адаптера более чем в одном экземпляре одновременно может привести к неконтролируемым ошибкам или неожиданным результатам" + arr["GREEK",720]="\${pending_of_translation} Εντοπίστηκαν περισσότερες από μία περιπτώσεις airgeddon σε λειτουργία. Λάβετε υπόψη ότι η κοινή χρήση και η χρήση του ίδιου ασύρματου προσαρμογέα σε περισσότερες από μία περιπτώσεις ταυτόχρονα, πιθανότατα θα οδηγήσει σε μη ελεγχόμενα σφάλματα ή απροσδόκητα αποτελέσματα" + arr["ITALIAN",720]="\${pending_of_translation} È stata rilevata più di un'istanza di airgeddon in esecuzione. Tieni presente che la condivisione e l'utilizzo dello stesso adattatore wireless in più istanze contemporaneamente porterà probabilmente a errori incontrollati o risultati imprevisti" + arr["POLISH",720]="\${pending_of_translation} Wykryto, że działa więcej niż jedna instancja airgeddon. Należy pamiętać, że współdzielenie i używanie tej samej karty bezprzewodowej w więcej niż jednej instancji jednocześnie prawdopodobnie doprowadzi do niekontrolowanych błędów lub nieoczekiwanych rezultatów" + arr["GERMAN",720]="\${pending_of_translation} Es wurde festgestellt, dass mehr als eine Airgeddon-Instanz ausgeführt wird. Beachten Sie, dass die gemeinsame Nutzung und Verwendung desselben WLAN-Adapters in mehreren Instanzen gleichzeitig wahrscheinlich zu unkontrollierten Fehlern oder unerwarteten Ergebnissen führt" + arr["TURKISH",720]="\${pending_of_translation} Birden fazla airgeddon örneğinin çalıştığı tespit edildi. Aynı kablosuz bağdaştırıcıyı aynı anda birden fazla örnekte paylaşmanın ve kullanmanın muhtemelen kontrol edilemeyen hatalara veya beklenmeyen sonuçlara yol açacağını unutmayın" + arr["ARABIC",720]="\${pending_of_translation} تم اكتشاف وجود أكثر من مثيل airgeddon قيد التشغيل. ضع في اعتبارك أن مشاركة واستخدام نفس المحول اللاسلكي في أكثر من حالة في نفس الوقت، قد يؤدي على الأرجح إلى أخطاء لا يمكن التحكم فيها أو نتائج غير متوقعة" + arr["CHINESE",720]="\${pending_of_translation} 检测到有多个 airgeddon 实例正在运行。请记住,同时在多个实例中共享和使用同一个无线适配器可能会导致无法控制的错误或意外结果" + + arr["ENGLISH",721]="Number of running instances: \${normal_color}\${airgeddon_running_instances_counter}" + arr["SPANISH",721]="Número de instancias en ejecución: \${normal_color}\${airgeddon_running_instances_counter}" + arr["FRENCH",721]="\${pending_of_translation} Nombre d'instances en cours d'exécution: \${normal_color}\${airgeddon_running_instances_counter}" + arr["CATALAN",721]="\${pending_of_translation} Nombre d'instàncies en execució: \${normal_color}\${airgeddon_running_instances_counter}" + arr["PORTUGUESE",721]="\${pending_of_translation} Número de instâncias em execução: \${normal_color}\${airgeddon_running_instances_counter}" + arr["RUSSIAN",721]="\${pending_of_translation} Количество запущенных экземпляров: \${normal_color}\${airgeddon_running_instances_counter}" + arr["GREEK",721]="\${pending_of_translation} Αριθμός εμφανίσεων που εκτελούνται: \${normal_color}\${airgeddon_running_instances_counter}" + arr["ITALIAN",721]="\${pending_of_translation} Numero di istanze in esecuzione: \${normal_color}\${airgeddon_running_instances_counter}" + arr["POLISH",721]="\${pending_of_translation} Liczba uruchomionych instancji: \${normal_color}\${airgeddon_running_instances_counter}" + arr["GERMAN",721]="\${pending_of_translation} Anzahl der laufenden Instanzen: \${normal_color}\${airgeddon_running_instances_counter}" + arr["TURKISH",721]="\${pending_of_translation} Çalışan örneklerin sayısı: \${normal_color}\${airgeddon_running_instances_counter}" + arr["ARABIC",721]="\${pending_of_translation} \${normal_color}\${airgeddon_running_instances_counter}\${blue_color} :عدد المثيلات قيد التشغيل" + arr["CHINESE",721]="\${pending_of_translation} 正在运行的实例数:\${normal_color}\${airgeddon_running_instances_counter}" } #Expand escaped variables in language strings with their actual values From 1e664790e0cecba6278dd4413df00517319f93e8 Mon Sep 17 00:00:00 2001 From: JBalanza Date: Thu, 6 Jun 2024 12:43:03 +0200 Subject: [PATCH 57/92] Update french strings --- language_strings.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/language_strings.sh b/language_strings.sh index c62b4e5f2..19798a9ca 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -11115,7 +11115,7 @@ function initialize_language_strings() { arr["ENGLISH",720]="It was detected more than one airgeddon instance running. Keep in mind that sharing and using the same wireless adapter in more than one instance at the same time, probably will lead to uncontrolled errors or unexpected results" arr["SPANISH",720]="Se ha detectado más de una instancia de airgeddon ejecutándose. Ten en cuenta que compartir y utilizar el mismo adaptador inalámbrico en más de una instancia al mismo tiempo probablemente provocará errores no controlados o resultados inesperados" - arr["FRENCH",720]="\${pending_of_translation} Il a été détecté que plusieurs instances d'airgeddon étaient en cours d'exécution. Gardez à l'esprit que le partage et l'utilisation du même adaptateur sans fil dans plusieurs instances en même temps entraîneront probablement des erreurs incontrôlées ou des résultats inattendus" + arr["FRENCH",720]="Il a été détecté plus d'une instance d'airgeddon en exécution. Prendre en compte que le partage et l'utilisation du même adaptateur sans fil dans plusieurs instances au même temps, peut entraîner des erreurs incontrôlées ou des résultats imprévus" arr["CATALAN",720]="\${pending_of_translation} S'ha detectat més d'una instància d'airgeddon en execució. Tingueu en compte que compartir i utilitzar el mateix adaptador sense fil en més d'una instància alhora, probablement provocarà errors incontrolats o resultats inesperats" arr["PORTUGUESE",720]="\${pending_of_translation} Foi detectada mais de uma instância do airgeddon em execução. Tenha em mente que compartilhar e usar o mesmo adaptador sem fio em mais de uma instância ao mesmo tempo provavelmente levará a erros descontrolados ou resultados inesperados" arr["RUSSIAN",720]="\${pending_of_translation} Было обнаружено более одного запущенного экземпляра airgeddon. Имейте в виду, что совместное использование одного и того же беспроводного адаптера более чем в одном экземпляре одновременно может привести к неконтролируемым ошибкам или неожиданным результатам" @@ -11129,7 +11129,7 @@ function initialize_language_strings() { arr["ENGLISH",721]="Number of running instances: \${normal_color}\${airgeddon_running_instances_counter}" arr["SPANISH",721]="Número de instancias en ejecución: \${normal_color}\${airgeddon_running_instances_counter}" - arr["FRENCH",721]="\${pending_of_translation} Nombre d'instances en cours d'exécution: \${normal_color}\${airgeddon_running_instances_counter}" + arr["FRENCH",721]="Numéro d'instances en exécution: \${normal_color}\${airgeddon_running_instances_counter}" arr["CATALAN",721]="\${pending_of_translation} Nombre d'instàncies en execució: \${normal_color}\${airgeddon_running_instances_counter}" arr["PORTUGUESE",721]="\${pending_of_translation} Número de instâncias em execução: \${normal_color}\${airgeddon_running_instances_counter}" arr["RUSSIAN",721]="\${pending_of_translation} Количество запущенных экземпляров: \${normal_color}\${airgeddon_running_instances_counter}" From 9f6a77518e424c5b7b6d49b4c2b1766bbf15cdf5 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Thu, 6 Jun 2024 14:59:31 +0200 Subject: [PATCH 58/92] Update polish translations --- language_strings.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/language_strings.sh b/language_strings.sh index 19798a9ca..b11507936 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -11121,7 +11121,7 @@ function initialize_language_strings() { arr["RUSSIAN",720]="\${pending_of_translation} Было обнаружено более одного запущенного экземпляра airgeddon. Имейте в виду, что совместное использование одного и того же беспроводного адаптера более чем в одном экземпляре одновременно может привести к неконтролируемым ошибкам или неожиданным результатам" arr["GREEK",720]="\${pending_of_translation} Εντοπίστηκαν περισσότερες από μία περιπτώσεις airgeddon σε λειτουργία. Λάβετε υπόψη ότι η κοινή χρήση και η χρήση του ίδιου ασύρματου προσαρμογέα σε περισσότερες από μία περιπτώσεις ταυτόχρονα, πιθανότατα θα οδηγήσει σε μη ελεγχόμενα σφάλματα ή απροσδόκητα αποτελέσματα" arr["ITALIAN",720]="\${pending_of_translation} È stata rilevata più di un'istanza di airgeddon in esecuzione. Tieni presente che la condivisione e l'utilizzo dello stesso adattatore wireless in più istanze contemporaneamente porterà probabilmente a errori incontrollati o risultati imprevisti" - arr["POLISH",720]="\${pending_of_translation} Wykryto, że działa więcej niż jedna instancja airgeddon. Należy pamiętać, że współdzielenie i używanie tej samej karty bezprzewodowej w więcej niż jednej instancji jednocześnie prawdopodobnie doprowadzi do niekontrolowanych błędów lub nieoczekiwanych rezultatów" + arr["POLISH",720]="Wykryto, że airgeddon został uruchomiony więcej niż raz. Należy pamiętać, że współdzielenie i używanie tej samej karty bezprzewodowej w więcej niż jednej instancji jednocześnie najprawdopodobniej doprowadzi do niekontrolowanych błędów lub nieoczekiwanych rezultatów" arr["GERMAN",720]="\${pending_of_translation} Es wurde festgestellt, dass mehr als eine Airgeddon-Instanz ausgeführt wird. Beachten Sie, dass die gemeinsame Nutzung und Verwendung desselben WLAN-Adapters in mehreren Instanzen gleichzeitig wahrscheinlich zu unkontrollierten Fehlern oder unerwarteten Ergebnissen führt" arr["TURKISH",720]="\${pending_of_translation} Birden fazla airgeddon örneğinin çalıştığı tespit edildi. Aynı kablosuz bağdaştırıcıyı aynı anda birden fazla örnekte paylaşmanın ve kullanmanın muhtemelen kontrol edilemeyen hatalara veya beklenmeyen sonuçlara yol açacağını unutmayın" arr["ARABIC",720]="\${pending_of_translation} تم اكتشاف وجود أكثر من مثيل airgeddon قيد التشغيل. ضع في اعتبارك أن مشاركة واستخدام نفس المحول اللاسلكي في أكثر من حالة في نفس الوقت، قد يؤدي على الأرجح إلى أخطاء لا يمكن التحكم فيها أو نتائج غير متوقعة" @@ -11135,7 +11135,7 @@ function initialize_language_strings() { arr["RUSSIAN",721]="\${pending_of_translation} Количество запущенных экземпляров: \${normal_color}\${airgeddon_running_instances_counter}" arr["GREEK",721]="\${pending_of_translation} Αριθμός εμφανίσεων που εκτελούνται: \${normal_color}\${airgeddon_running_instances_counter}" arr["ITALIAN",721]="\${pending_of_translation} Numero di istanze in esecuzione: \${normal_color}\${airgeddon_running_instances_counter}" - arr["POLISH",721]="\${pending_of_translation} Liczba uruchomionych instancji: \${normal_color}\${airgeddon_running_instances_counter}" + arr["POLISH",721]="Liczba uruchomionych instancji: \${normal_color}\${airgeddon_running_instances_counter}" arr["GERMAN",721]="\${pending_of_translation} Anzahl der laufenden Instanzen: \${normal_color}\${airgeddon_running_instances_counter}" arr["TURKISH",721]="\${pending_of_translation} Çalışan örneklerin sayısı: \${normal_color}\${airgeddon_running_instances_counter}" arr["ARABIC",721]="\${pending_of_translation} \${normal_color}\${airgeddon_running_instances_counter}\${blue_color} :عدد المثيلات قيد التشغيل" From 9e683951c464e03573834f627af4b15b7fe7d127 Mon Sep 17 00:00:00 2001 From: Luan7905 Date: Fri, 7 Jun 2024 00:50:47 -0300 Subject: [PATCH 59/92] Update Portuguese translations --- language_strings.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/language_strings.sh b/language_strings.sh index b11507936..cd7a75463 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -11103,7 +11103,7 @@ function initialize_language_strings() { arr["SPANISH",719]="Uno de tus adaptadores wifi tiene un código de país integrado diferente al configurado en el sistema. Cuando esto sucede, el kernel crea un dominio regulatorio personalizado \"\${normal_color}99\${yellow_color}\" que contiene solo permisos en AMBOS dominios de registro. O tu hardware es de una región diferente o configuraste incorrectamente el dominio de registro y limitando su funcionalidad a propósito" arr["FRENCH",719]="\${pending_of_translation} L'un de vos adaptateurs Wi-Fi possède un code de pays intégré différent de celui défini sur votre système. Lorsque cela se produit, le noyau crée un domaine réglementaire personnalisé \"\${normal_color}99\${yellow_color}\" qui contient uniquement les autorisations dans les DEUX domaines reg. Soit votre matériel provient d'une région différente, soit vous avez mal défini votre domaine d'enregistrement et limité volontairement vos fonctionnalités" arr["CATALAN",719]="\${pending_of_translation} Un dels vostres adaptadors wifi té un codi de país integrat diferent del establert al vostre sistema. Quan això succeeix, el nucli crea un domini regulador personalitzat \"\${normal_color}99\${yellow_color}\" que només conté permisos als DOS dominis reg. O el vostre maquinari és d'una regió diferent o heu configurat el vostre domini de registre incorrectament i heu limitat la vostra funcionalitat a propòsit" - arr["PORTUGUESE",719]="\${pending_of_translation} Um de seus adaptadores wi-fi possui um código de país integrado diferente daquele definido em seu sistema. Quando isso acontece, o kernel cria um domínio regulatório personalizado \"\${normal_color}99\${yellow_color}\" que contém apenas permissões em AMBOS os domínios reg. Ou seu hardware é de uma região diferente ou você configurou incorretamente seu domínio de registro e limitou sua funcionalidade propositalmente" + arr["PORTUGUESE",719]="Um dos seus adaptadores wi-fi possui um código de país integrado diferente do definido em seu sistema. Quando isso acontece, o kernel cria um domínio regulatório personalizado \"\${normal_color}99\${yellow_color}\" que contém apenas permissões em AMBOS. Ou seu hardware é de uma região diferente, ou você configurou incorretamente seu domínio de registro e limitou sua funcionalidade propositalmente" arr["RUSSIAN",719]="\${pending_of_translation} Один из ваших адаптеров Wi-Fi имеет встроенный код страны, отличный от кода, установленного в вашей системе. Когда это происходит, ядро создает собственный нормативный домен \"\${normal_color}99\${yellow_color}\", который содержит разрешения только в ОБОИХ доменах регистрации. Либо ваше оборудование из другого региона, либо вы неправильно настроили рег-домен и намеренно ограничили функциональность" arr["GREEK",719]="\${pending_of_translation} Ένας από τους προσαρμογείς wifi σας έχει ενσωματωμένο κωδικό χώρας διαφορετικό από αυτόν που έχει οριστεί στο σύστημά σας. Όταν συμβεί αυτό, ο πυρήνας δημιουργεί έναν προσαρμοσμένο ρυθμιστικό τομέα \"\${normal_color}99\${yellow_color}\" ο οποίος περιέχει μόνο δικαιώματα και στους δύο τομείς reg. Είτε το υλικό σας προέρχεται από διαφορετική περιοχή, είτε έχετε ρυθμίσει εσφαλμένα τον τομέα reg σας και έχετε περιορίσει τη λειτουργικότητά σας επίτηδες" arr["ITALIAN",719]="\${pending_of_translation} Uno dei tuoi adattatori Wi-Fi ha un codice paese integrato diverso da quello impostato sul tuo sistema. Quando ciò accade, il kernel crea un dominio normativo personalizzato \"\${normal_color}99\${yellow_color}\" che contiene solo le autorizzazioni in ENTRAMBI i domini reg. O il tuo hardware proviene da una regione diversa oppure hai impostato in modo errato il tuo dominio reg e limitato di proposito la tua funzionalità" @@ -11117,7 +11117,7 @@ function initialize_language_strings() { arr["SPANISH",720]="Se ha detectado más de una instancia de airgeddon ejecutándose. Ten en cuenta que compartir y utilizar el mismo adaptador inalámbrico en más de una instancia al mismo tiempo probablemente provocará errores no controlados o resultados inesperados" arr["FRENCH",720]="Il a été détecté plus d'une instance d'airgeddon en exécution. Prendre en compte que le partage et l'utilisation du même adaptateur sans fil dans plusieurs instances au même temps, peut entraîner des erreurs incontrôlées ou des résultats imprévus" arr["CATALAN",720]="\${pending_of_translation} S'ha detectat més d'una instància d'airgeddon en execució. Tingueu en compte que compartir i utilitzar el mateix adaptador sense fil en més d'una instància alhora, probablement provocarà errors incontrolats o resultats inesperats" - arr["PORTUGUESE",720]="\${pending_of_translation} Foi detectada mais de uma instância do airgeddon em execução. Tenha em mente que compartilhar e usar o mesmo adaptador sem fio em mais de uma instância ao mesmo tempo provavelmente levará a erros descontrolados ou resultados inesperados" + arr["PORTUGUESE",720]="Existe mais de uma instância do airgeddon em execução. Tenha em mente que usar o mesmo adaptador wi-fi em mais de uma instância simultaneamente provavelmente levará a erros e resultados inesperados" arr["RUSSIAN",720]="\${pending_of_translation} Было обнаружено более одного запущенного экземпляра airgeddon. Имейте в виду, что совместное использование одного и того же беспроводного адаптера более чем в одном экземпляре одновременно может привести к неконтролируемым ошибкам или неожиданным результатам" arr["GREEK",720]="\${pending_of_translation} Εντοπίστηκαν περισσότερες από μία περιπτώσεις airgeddon σε λειτουργία. Λάβετε υπόψη ότι η κοινή χρήση και η χρήση του ίδιου ασύρματου προσαρμογέα σε περισσότερες από μία περιπτώσεις ταυτόχρονα, πιθανότατα θα οδηγήσει σε μη ελεγχόμενα σφάλματα ή απροσδόκητα αποτελέσματα" arr["ITALIAN",720]="\${pending_of_translation} È stata rilevata più di un'istanza di airgeddon in esecuzione. Tieni presente che la condivisione e l'utilizzo dello stesso adattatore wireless in più istanze contemporaneamente porterà probabilmente a errori incontrollati o risultati imprevisti" @@ -11131,7 +11131,7 @@ function initialize_language_strings() { arr["SPANISH",721]="Número de instancias en ejecución: \${normal_color}\${airgeddon_running_instances_counter}" arr["FRENCH",721]="Numéro d'instances en exécution: \${normal_color}\${airgeddon_running_instances_counter}" arr["CATALAN",721]="\${pending_of_translation} Nombre d'instàncies en execució: \${normal_color}\${airgeddon_running_instances_counter}" - arr["PORTUGUESE",721]="\${pending_of_translation} Número de instâncias em execução: \${normal_color}\${airgeddon_running_instances_counter}" + arr["PORTUGUESE",721]="Número de instâncias em execução: \${normal_color}\${airgeddon_running_instances_counter}" arr["RUSSIAN",721]="\${pending_of_translation} Количество запущенных экземпляров: \${normal_color}\${airgeddon_running_instances_counter}" arr["GREEK",721]="\${pending_of_translation} Αριθμός εμφανίσεων που εκτελούνται: \${normal_color}\${airgeddon_running_instances_counter}" arr["ITALIAN",721]="\${pending_of_translation} Numero di istanze in esecuzione: \${normal_color}\${airgeddon_running_instances_counter}" From 705624d28dd3e062a5df7efc72a71a179e6ec57b Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Fri, 7 Jun 2024 13:04:06 +0200 Subject: [PATCH 60/92] Update french translations --- language_strings.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/language_strings.sh b/language_strings.sh index cd7a75463..4d07c381d 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -11101,7 +11101,7 @@ function initialize_language_strings() { arr["ENGLISH",719]="One of your wireless adapters has a built-in country code different from the one set on your system. When this happens the kernel makes a custom regulatory domain \"\${normal_color}99\${yellow_color}\" which contains only permissions in BOTH reg domains. Either your hardware is from a different region, or you have improperly set your reg domain and limited your functionality on purpose" arr["SPANISH",719]="Uno de tus adaptadores wifi tiene un código de país integrado diferente al configurado en el sistema. Cuando esto sucede, el kernel crea un dominio regulatorio personalizado \"\${normal_color}99\${yellow_color}\" que contiene solo permisos en AMBOS dominios de registro. O tu hardware es de una región diferente o configuraste incorrectamente el dominio de registro y limitando su funcionalidad a propósito" - arr["FRENCH",719]="\${pending_of_translation} L'un de vos adaptateurs Wi-Fi possède un code de pays intégré différent de celui défini sur votre système. Lorsque cela se produit, le noyau crée un domaine réglementaire personnalisé \"\${normal_color}99\${yellow_color}\" qui contient uniquement les autorisations dans les DEUX domaines reg. Soit votre matériel provient d'une région différente, soit vous avez mal défini votre domaine d'enregistrement et limité volontairement vos fonctionnalités" + arr["FRENCH",719]="Une des vos adaptateurs Wi-Fi a un code de pays intégré différent de celui défini sur votre système. Quand cela se produit, le Kernel crée un domaine réglementaire personnalisé \"\${normal_color}99\${yellow_color}\" qui contient uniquement les autorisations dans les DEUX domaines inscrits. Peut votre matériel provient d'une région différente ou vous avez mal défini votre domaine d'enregistrement et limité volontairement vos fonctionnalités" arr["CATALAN",719]="\${pending_of_translation} Un dels vostres adaptadors wifi té un codi de país integrat diferent del establert al vostre sistema. Quan això succeeix, el nucli crea un domini regulador personalitzat \"\${normal_color}99\${yellow_color}\" que només conté permisos als DOS dominis reg. O el vostre maquinari és d'una regió diferent o heu configurat el vostre domini de registre incorrectament i heu limitat la vostra funcionalitat a propòsit" arr["PORTUGUESE",719]="Um dos seus adaptadores wi-fi possui um código de país integrado diferente do definido em seu sistema. Quando isso acontece, o kernel cria um domínio regulatório personalizado \"\${normal_color}99\${yellow_color}\" que contém apenas permissões em AMBOS. Ou seu hardware é de uma região diferente, ou você configurou incorretamente seu domínio de registro e limitou sua funcionalidade propositalmente" arr["RUSSIAN",719]="\${pending_of_translation} Один из ваших адаптеров Wi-Fi имеет встроенный код страны, отличный от кода, установленного в вашей системе. Когда это происходит, ядро создает собственный нормативный домен \"\${normal_color}99\${yellow_color}\", который содержит разрешения только в ОБОИХ доменах регистрации. Либо ваше оборудование из другого региона, либо вы неправильно настроили рег-домен и намеренно ограничили функциональность" From c175801774ab0dc10cd27fbeb078abc9eb9ebe5c Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Fri, 7 Jun 2024 13:48:29 +0200 Subject: [PATCH 61/92] Fix dns 53 port conflict on multi-instance --- airgeddon.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/airgeddon.sh b/airgeddon.sh index c88010bf1..68e4ddfb8 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -11360,6 +11360,8 @@ function launch_dns_blackhole() { { echo -e "interface=${interface}" echo -e "address=/#/${et_ip_router}" + echo -e "port=${dns_port}" + echo -e "bind-dynamic" echo -e "address=/google.com/172.217.5.238" echo -e "address=/gstatic.com/172.217.5.238" echo -e "no-dhcp-interface=${interface}" From cb62bf1fa1cdb5c33d9b44fa607712f93284e47c Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Fri, 7 Jun 2024 14:11:59 +0200 Subject: [PATCH 62/92] Fix lighttpd 80/tcp port conflict on multi-instance --- airgeddon.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/airgeddon.sh b/airgeddon.sh index 68e4ddfb8..c71ca1dbb 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -11464,6 +11464,7 @@ function set_webserver_config() { echo -e "url.redirect = ( \"^/(.*)$\" => \"http://connectivitycheck.microsoft.com/\")" echo -e "url.redirect-code = 302" echo -e "}" + echo -e "server.bind = \"${et_ip_router}\"\n" echo -e "server.port = ${www_port}\n" echo -e "index-file.names = ( \"${indexfile}\" )\n" echo -e "server.error-handler-404 = \"/\"\n" From eb70ec7dbffd096814926e26f431d11479167641 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Fri, 7 Jun 2024 14:41:11 +0200 Subject: [PATCH 63/92] Fix problem with dnsmasq on multi_instance --- airgeddon.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/airgeddon.sh b/airgeddon.sh index c71ca1dbb..d7f607243 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -11362,6 +11362,7 @@ function launch_dns_blackhole() { echo -e "address=/#/${et_ip_router}" echo -e "port=${dns_port}" echo -e "bind-dynamic" + echo -e "except-interface=lo" echo -e "address=/google.com/172.217.5.238" echo -e "address=/gstatic.com/172.217.5.238" echo -e "no-dhcp-interface=${interface}" From 7135ecacf49659338aaa15500a620bda60067799 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Fri, 7 Jun 2024 14:43:48 +0200 Subject: [PATCH 64/92] Standardize in a var loopback interface --- airgeddon.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index d7f607243..a89208ccb 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -241,6 +241,7 @@ author="v1s1t0r" #Dhcpd, Hostapd and misc Evil Twin vars loopback_ip="127.0.0.1" loopback_ipv6="::1/128" +loopback_interface="lo" routing_tmp_file="ag.iptables_nftables" dhcpd_file="ag.dhcpd.conf" dhcpd_pid_file="dhcpd.pid" @@ -10191,7 +10192,7 @@ function set_std_internet_routing_rules() { if [ "${iptables_nftables}" -eq 1 ]; then "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" tcp dport ${bettercap_proxy_port} counter accept "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" udp dport ${bettercap_dns_port} counter accept - "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "lo" counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${loopback_interface}" counter accept else "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp --destination-port ${bettercap_proxy_port} -j ACCEPT "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p udp --destination-port ${bettercap_dns_port} -j ACCEPT @@ -10201,7 +10202,7 @@ function set_std_internet_routing_rules() { if [ "${iptables_nftables}" -eq 1 ]; then "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" tcp dport ${bettercap_proxy_port} counter accept "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" udp dport ${bettercap_dns_port} counter accept - "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "lo" counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${loopback_interface}" counter accept "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" tcp dport ${beef_port} counter accept else "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp --destination-port ${bettercap_proxy_port} -j ACCEPT @@ -11362,7 +11363,7 @@ function launch_dns_blackhole() { echo -e "address=/#/${et_ip_router}" echo -e "port=${dns_port}" echo -e "bind-dynamic" - echo -e "except-interface=lo" + echo -e "except-interface=${loopback_interface}" echo -e "address=/google.com/172.217.5.238" echo -e "address=/gstatic.com/172.217.5.238" echo -e "no-dhcp-interface=${interface}" From 5e4780055ae89cdb52f6e7bb0c589d6fea3e55d0 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Fri, 7 Jun 2024 18:02:05 +0200 Subject: [PATCH 65/92] Fix captive portal appearing during a non-captive evil twin attack while a captive portal is in place during a multi_instance attack --- airgeddon.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index a89208ccb..766be5cf0 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -10174,11 +10174,11 @@ function set_std_internet_routing_rules() { if [ "${et_mode}" = "et_captive_portal" ]; then if [ "${iptables_nftables}" -eq 1 ]; then - "${iptables_cmd}" add rule ip nat_"${airgeddon_instance_name}" prerouting_"${airgeddon_instance_name}" tcp dport ${www_port} counter dnat to ${et_ip_router}:${www_port} + "${iptables_cmd}" add rule ip nat_"${airgeddon_instance_name}" prerouting_"${airgeddon_instance_name}" iifname "${interface}" tcp dport ${www_port} counter dnat to ${et_ip_router}:${www_port} "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" tcp dport ${www_port} counter accept "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" tcp dport ${https_port} counter accept else - "${iptables_cmd}" -t nat -A PREROUTING -p tcp --dport ${www_port} -j DNAT --to-destination ${et_ip_router}:${www_port} + "${iptables_cmd}" -t nat -A PREROUTING -p tcp -i "${interface}" --dport ${www_port} -j DNAT --to-destination ${et_ip_router}:${www_port} "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp --destination-port ${www_port} -j ACCEPT "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp --destination-port ${https_port} -j ACCEPT fi From d4111b627f8ec5675d6cb7e71d5075a9a04fc0c4 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Fri, 7 Jun 2024 18:23:12 +0200 Subject: [PATCH 66/92] Return to nft/iptables forward default policy to accept. Better results during testing while mixing multi_instance evil twin attacks of different types --- airgeddon.sh | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 766be5cf0..44894812f 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -6087,7 +6087,7 @@ function prepare_iptables_nftables() { if [ "${iptables_nftables}" -eq 1 ]; then "${iptables_cmd}" add table ip filter_"${airgeddon_instance_name}" - "${iptables_cmd}" add chain ip filter_"${airgeddon_instance_name}" forward_"${airgeddon_instance_name}" '{type filter hook forward priority 0; policy drop;}' + "${iptables_cmd}" add chain ip filter_"${airgeddon_instance_name}" forward_"${airgeddon_instance_name}" '{type filter hook forward priority 0; policy accept;}' "${iptables_cmd}" add chain ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" '{type filter hook input priority 0;}' "${iptables_cmd}" add table ip nat_"${airgeddon_instance_name}" "${iptables_cmd}" add chain ip nat_"${airgeddon_instance_name}" prerouting_"${airgeddon_instance_name}" '{type nat hook prerouting priority -100;}' @@ -10162,16 +10162,6 @@ function set_std_internet_routing_rules() { echo "1" > /proc/sys/net/ipv4/ip_forward 2> /dev/null - if [ "${et_mode}" != "et_captive_portal" ]; then - if [ "${iptables_nftables}" -eq 1 ]; then - "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" forward_"${airgeddon_instance_name}" iifname "${interface}" oifname "${internet_interface}" counter accept - "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" forward_"${airgeddon_instance_name}" iifname "${internet_interface}" oifname "${interface}" counter accept - else - "${iptables_cmd}" -A forward_"${airgeddon_instance_name}" -i "${interface}" -o "${internet_interface}" -j ACCEPT - "${iptables_cmd}" -A forward_"${airgeddon_instance_name}" -i "${internet_interface}" -o "${interface}" -j ACCEPT - fi - fi - if [ "${et_mode}" = "et_captive_portal" ]; then if [ "${iptables_nftables}" -eq 1 ]; then "${iptables_cmd}" add rule ip nat_"${airgeddon_instance_name}" prerouting_"${airgeddon_instance_name}" iifname "${interface}" tcp dport ${www_port} counter dnat to ${et_ip_router}:${www_port} From 0765cf441ac9b9ed835946830dd3d2c7b12f9351 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Fri, 7 Jun 2024 18:27:36 +0200 Subject: [PATCH 67/92] Add more granular restrictions on nft/iptables for icmp packets and input rules --- airgeddon.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 44894812f..64e529eb5 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -10211,11 +10211,11 @@ function set_std_internet_routing_rules() { fi if [ "${iptables_nftables}" -eq 1 ]; then - "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" ip saddr ${et_ip_range}/${std_c_mask_cidr} ip daddr ${et_ip_router}/${ip_mask_cidr} icmp type echo-request ct state new,related,established counter accept - "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" ip saddr ${et_ip_range}/${std_c_mask_cidr} ip daddr ${et_ip_router}/${ip_mask_cidr} counter drop + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${interface}" ip daddr ${et_ip_router}/${ip_mask_cidr} icmp type echo-request ct state new,related,established counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" ip daddr ${et_ip_router}/${ip_mask_cidr} counter drop else - "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p icmp --icmp-type 8 -s ${et_ip_range}/${std_c_mask} -d ${et_ip_router}/${ip_mask} -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT - "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -s ${et_ip_range}/${std_c_mask} -d ${et_ip_router}/${ip_mask} -j DROP + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -i "${interface}" -p icmp --icmp-type 8 -d ${et_ip_router}/${ip_mask} -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -d ${et_ip_router}/${ip_mask} -j DROP fi sleep 2 } From 240cd4337197508ea95faae7e12ce0d1371dec67 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Sat, 8 Jun 2024 12:25:22 +0200 Subject: [PATCH 68/92] Order some nft/iptables rules and set a couple of forgotten loopback_interface vars --- airgeddon.sh | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 64e529eb5..7e054a900 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -10167,15 +10167,11 @@ function set_std_internet_routing_rules() { "${iptables_cmd}" add rule ip nat_"${airgeddon_instance_name}" prerouting_"${airgeddon_instance_name}" iifname "${interface}" tcp dport ${www_port} counter dnat to ${et_ip_router}:${www_port} "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" tcp dport ${www_port} counter accept "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" tcp dport ${https_port} counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" udp dport ${dns_port} counter accept else "${iptables_cmd}" -t nat -A PREROUTING -p tcp -i "${interface}" --dport ${www_port} -j DNAT --to-destination ${et_ip_router}:${www_port} "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp --destination-port ${www_port} -j ACCEPT "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp --destination-port ${https_port} -j ACCEPT - fi - - if [ "${iptables_nftables}" -eq 1 ]; then - "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" udp dport ${dns_port} counter accept - else "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p udp --destination-port ${dns_port} -j ACCEPT fi elif [ "${et_mode}" = "et_sniffing_sslstrip2" ]; then @@ -10186,7 +10182,7 @@ function set_std_internet_routing_rules() { else "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp --destination-port ${bettercap_proxy_port} -j ACCEPT "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p udp --destination-port ${bettercap_dns_port} -j ACCEPT - "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -i lo -j ACCEPT + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -i "${loopback_interface}" -j ACCEPT fi elif [ "${et_mode}" = "et_sniffing_sslstrip2_beef" ]; then if [ "${iptables_nftables}" -eq 1 ]; then @@ -10197,7 +10193,7 @@ function set_std_internet_routing_rules() { else "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp --destination-port ${bettercap_proxy_port} -j ACCEPT "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p udp --destination-port ${bettercap_dns_port} -j ACCEPT - "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -i lo -j ACCEPT + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -i "${loopback_interface}" -j ACCEPT "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp --destination-port ${beef_port} -j ACCEPT fi fi From f7b13f8170bc20732c1b86080a959b92cfd5c799 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Sat, 8 Jun 2024 12:51:33 +0200 Subject: [PATCH 69/92] Fix bug on nft/iptables occurring after launching second Evil Twin attack on the same instance --- airgeddon.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index 7e054a900..c9cba39cf 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -6085,6 +6085,8 @@ function prepare_iptables_nftables() { debug_print + clean_this_instance_iptables_nftables + if [ "${iptables_nftables}" -eq 1 ]; then "${iptables_cmd}" add table ip filter_"${airgeddon_instance_name}" "${iptables_cmd}" add chain ip filter_"${airgeddon_instance_name}" forward_"${airgeddon_instance_name}" '{type filter hook forward priority 0; policy accept;}' @@ -6107,8 +6109,8 @@ function clean_this_instance_iptables_nftables() { debug_print if [ "${iptables_nftables}" -eq 1 ]; then - "${iptables_cmd}" delete table filter_"${airgeddon_instance_name}" - "${iptables_cmd}" delete table nat_"${airgeddon_instance_name}" + "${iptables_cmd}" delete table filter_"${airgeddon_instance_name}" 2> /dev/null + "${iptables_cmd}" delete table nat_"${airgeddon_instance_name}" 2> /dev/null else "${iptables_cmd}" -D INPUT -j input_"${airgeddon_instance_name}" 2> /dev/null "${iptables_cmd}" -D FORWARD -j forward_"${airgeddon_instance_name}" 2> /dev/null From 7fca72612be17b89080500a2d99c5e4b935c449d Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Wed, 12 Jun 2024 11:44:34 +0200 Subject: [PATCH 70/92] Update polish translations --- language_strings.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/language_strings.sh b/language_strings.sh index 4d07c381d..8260221f1 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -11107,7 +11107,7 @@ function initialize_language_strings() { arr["RUSSIAN",719]="\${pending_of_translation} Один из ваших адаптеров Wi-Fi имеет встроенный код страны, отличный от кода, установленного в вашей системе. Когда это происходит, ядро создает собственный нормативный домен \"\${normal_color}99\${yellow_color}\", который содержит разрешения только в ОБОИХ доменах регистрации. Либо ваше оборудование из другого региона, либо вы неправильно настроили рег-домен и намеренно ограничили функциональность" arr["GREEK",719]="\${pending_of_translation} Ένας από τους προσαρμογείς wifi σας έχει ενσωματωμένο κωδικό χώρας διαφορετικό από αυτόν που έχει οριστεί στο σύστημά σας. Όταν συμβεί αυτό, ο πυρήνας δημιουργεί έναν προσαρμοσμένο ρυθμιστικό τομέα \"\${normal_color}99\${yellow_color}\" ο οποίος περιέχει μόνο δικαιώματα και στους δύο τομείς reg. Είτε το υλικό σας προέρχεται από διαφορετική περιοχή, είτε έχετε ρυθμίσει εσφαλμένα τον τομέα reg σας και έχετε περιορίσει τη λειτουργικότητά σας επίτηδες" arr["ITALIAN",719]="\${pending_of_translation} Uno dei tuoi adattatori Wi-Fi ha un codice paese integrato diverso da quello impostato sul tuo sistema. Quando ciò accade, il kernel crea un dominio normativo personalizzato \"\${normal_color}99\${yellow_color}\" che contiene solo le autorizzazioni in ENTRAMBI i domini reg. O il tuo hardware proviene da una regione diversa oppure hai impostato in modo errato il tuo dominio reg e limitato di proposito la tua funzionalità" - arr["POLISH",719]="\${pending_of_translation} Jeden z Twoich adapterów Wi-Fi ma wbudowany kod kraju inny niż ten ustawiony w Twoim systemie. Kiedy tak się dzieje, jądro tworzy niestandardową domenę regulacyjną \"\${normal_color}99\${yellow_color}\", która zawiera tylko uprawnienia w OBU domenach rej. Albo Twój sprzęt pochodzi z innego regionu, albo nieprawidłowo ustawiłeś domenę rejestracyjną i celowo ograniczyłeś funkcjonalność" + arr["POLISH",719]="Jeden z Twoich adapterów Wi-Fi ma wbudowany kod kraju inny, niż ustawiony w Twoim systemie. Kiedy tak się dzieje, kernel tworzy niestandardową domenę regulacyjną \"\${normal_color}99\${yellow_color}\", która zawiera tylko uprawnienia w OBYDWU domenach regulacyjnych. Albo Twój sprzęt pochodzi z innego regionu, albo celowo nieprawidłowo ustawiłeś domenę rejestracyjną i ograniczyłeś funkcjonalność" arr["GERMAN",719]="\${pending_of_translation} Einer Ihrer WLAN-Adapter verfügt über einen integrierten Ländercode, der sich von dem auf Ihrem System unterscheidet. Wenn dies geschieht, erstellt der Kernel eine benutzerdefinierte Regulierungsdomäne \"\${normal_color}99\${yellow_color}\", die nur Berechtigungen in BEIDEN Registrierungsdomänen enthält. Entweder stammt Ihre Hardware aus einer anderen Region oder Sie haben Ihre Reg-Domain falsch eingestellt und Ihre Funktionalität absichtlich eingeschränkt" arr["TURKISH",719]="\${pending_of_translation} Wifi bağdaştırıcılarınızdan birinde, sisteminizde ayarlanandan farklı yerleşik bir ülke kodu var. Bu gerçekleştiğinde çekirdek, yalnızca HER İKİ Reg etki alanındaki izinleri içeren özel bir düzenleyici etki alanı \"\${normal_color}99\${yellow_color}\" oluşturur. Ya donanımınız farklı bir bölgeye ait ya da reg alan adınızı yanlış ayarladınız ve işlevselliğinizi bilerek sınırladınız" arr["ARABIC",719]="\${pending_of_translation} يحتوي أحد محولات wifi لديك على رمز بلد مدمج يختلف عن الرمز المعين على نظامك. عندما يحدث هذا، تقوم النواة بإنشاء مجال تنظيمي مخصص \"\${normal_color}99\${yellow_color}\" والذي يحتوي فقط على الأذونات في كلا نطاقي التسجيل. إما أن جهازك ينتمي إلى منطقة مختلفة، أو أنك قمت بتعيين نطاق التسجيل الخاص بك بشكل غير صحيح وقمت بتقييد وظائفك عن قصد" From a61709345c4e88cfdbc4835f895052c19f5358ad Mon Sep 17 00:00:00 2001 From: saim1z Date: Wed, 12 Jun 2024 14:26:16 +0200 Subject: [PATCH 71/92] Update italian strings --- language_strings.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/language_strings.sh b/language_strings.sh index 8260221f1..bee357cfa 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -11106,7 +11106,7 @@ function initialize_language_strings() { arr["PORTUGUESE",719]="Um dos seus adaptadores wi-fi possui um código de país integrado diferente do definido em seu sistema. Quando isso acontece, o kernel cria um domínio regulatório personalizado \"\${normal_color}99\${yellow_color}\" que contém apenas permissões em AMBOS. Ou seu hardware é de uma região diferente, ou você configurou incorretamente seu domínio de registro e limitou sua funcionalidade propositalmente" arr["RUSSIAN",719]="\${pending_of_translation} Один из ваших адаптеров Wi-Fi имеет встроенный код страны, отличный от кода, установленного в вашей системе. Когда это происходит, ядро создает собственный нормативный домен \"\${normal_color}99\${yellow_color}\", который содержит разрешения только в ОБОИХ доменах регистрации. Либо ваше оборудование из другого региона, либо вы неправильно настроили рег-домен и намеренно ограничили функциональность" arr["GREEK",719]="\${pending_of_translation} Ένας από τους προσαρμογείς wifi σας έχει ενσωματωμένο κωδικό χώρας διαφορετικό από αυτόν που έχει οριστεί στο σύστημά σας. Όταν συμβεί αυτό, ο πυρήνας δημιουργεί έναν προσαρμοσμένο ρυθμιστικό τομέα \"\${normal_color}99\${yellow_color}\" ο οποίος περιέχει μόνο δικαιώματα και στους δύο τομείς reg. Είτε το υλικό σας προέρχεται από διαφορετική περιοχή, είτε έχετε ρυθμίσει εσφαλμένα τον τομέα reg σας και έχετε περιορίσει τη λειτουργικότητά σας επίτηδες" - arr["ITALIAN",719]="\${pending_of_translation} Uno dei tuoi adattatori Wi-Fi ha un codice paese integrato diverso da quello impostato sul tuo sistema. Quando ciò accade, il kernel crea un dominio normativo personalizzato \"\${normal_color}99\${yellow_color}\" che contiene solo le autorizzazioni in ENTRAMBI i domini reg. O il tuo hardware proviene da una regione diversa oppure hai impostato in modo errato il tuo dominio reg e limitato di proposito la tua funzionalità" + arr["ITALIAN",719]="Uno dei tuoi adattatori Wi-Fi ha un codice paese integrato diverso da quello impostato sul tuo sistema. Quando ciò accade, il kernel crea un dominio normativo personalizzato \"\${normal_color}99\${yellow_color}\" che contiene solo le autorizzazioni in ENTRAMBI i domini di registro. O il tuo hardware proviene da una regione diversa oppure hai impostato in modo errato il tuo dominio di registro limitando quindi a proposito la sua funzionalità" arr["POLISH",719]="Jeden z Twoich adapterów Wi-Fi ma wbudowany kod kraju inny, niż ustawiony w Twoim systemie. Kiedy tak się dzieje, kernel tworzy niestandardową domenę regulacyjną \"\${normal_color}99\${yellow_color}\", która zawiera tylko uprawnienia w OBYDWU domenach regulacyjnych. Albo Twój sprzęt pochodzi z innego regionu, albo celowo nieprawidłowo ustawiłeś domenę rejestracyjną i ograniczyłeś funkcjonalność" arr["GERMAN",719]="\${pending_of_translation} Einer Ihrer WLAN-Adapter verfügt über einen integrierten Ländercode, der sich von dem auf Ihrem System unterscheidet. Wenn dies geschieht, erstellt der Kernel eine benutzerdefinierte Regulierungsdomäne \"\${normal_color}99\${yellow_color}\", die nur Berechtigungen in BEIDEN Registrierungsdomänen enthält. Entweder stammt Ihre Hardware aus einer anderen Region oder Sie haben Ihre Reg-Domain falsch eingestellt und Ihre Funktionalität absichtlich eingeschränkt" arr["TURKISH",719]="\${pending_of_translation} Wifi bağdaştırıcılarınızdan birinde, sisteminizde ayarlanandan farklı yerleşik bir ülke kodu var. Bu gerçekleştiğinde çekirdek, yalnızca HER İKİ Reg etki alanındaki izinleri içeren özel bir düzenleyici etki alanı \"\${normal_color}99\${yellow_color}\" oluşturur. Ya donanımınız farklı bir bölgeye ait ya da reg alan adınızı yanlış ayarladınız ve işlevselliğinizi bilerek sınırladınız" @@ -11120,7 +11120,7 @@ function initialize_language_strings() { arr["PORTUGUESE",720]="Existe mais de uma instância do airgeddon em execução. Tenha em mente que usar o mesmo adaptador wi-fi em mais de uma instância simultaneamente provavelmente levará a erros e resultados inesperados" arr["RUSSIAN",720]="\${pending_of_translation} Было обнаружено более одного запущенного экземпляра airgeddon. Имейте в виду, что совместное использование одного и того же беспроводного адаптера более чем в одном экземпляре одновременно может привести к неконтролируемым ошибкам или неожиданным результатам" arr["GREEK",720]="\${pending_of_translation} Εντοπίστηκαν περισσότερες από μία περιπτώσεις airgeddon σε λειτουργία. Λάβετε υπόψη ότι η κοινή χρήση και η χρήση του ίδιου ασύρματου προσαρμογέα σε περισσότερες από μία περιπτώσεις ταυτόχρονα, πιθανότατα θα οδηγήσει σε μη ελεγχόμενα σφάλματα ή απροσδόκητα αποτελέσματα" - arr["ITALIAN",720]="\${pending_of_translation} È stata rilevata più di un'istanza di airgeddon in esecuzione. Tieni presente che la condivisione e l'utilizzo dello stesso adattatore wireless in più istanze contemporaneamente porterà probabilmente a errori incontrollati o risultati imprevisti" + arr["ITALIAN",720]="È stata rilevata più di un'istanza di airgeddon in esecuzione. Tieni presente che la condivisione e l'utilizzo dello stesso adattatore wireless in più istanze contemporaneamente porterà probabilmente a errori incontrollati o risultati imprevisti" arr["POLISH",720]="Wykryto, że airgeddon został uruchomiony więcej niż raz. Należy pamiętać, że współdzielenie i używanie tej samej karty bezprzewodowej w więcej niż jednej instancji jednocześnie najprawdopodobniej doprowadzi do niekontrolowanych błędów lub nieoczekiwanych rezultatów" arr["GERMAN",720]="\${pending_of_translation} Es wurde festgestellt, dass mehr als eine Airgeddon-Instanz ausgeführt wird. Beachten Sie, dass die gemeinsame Nutzung und Verwendung desselben WLAN-Adapters in mehreren Instanzen gleichzeitig wahrscheinlich zu unkontrollierten Fehlern oder unerwarteten Ergebnissen führt" arr["TURKISH",720]="\${pending_of_translation} Birden fazla airgeddon örneğinin çalıştığı tespit edildi. Aynı kablosuz bağdaştırıcıyı aynı anda birden fazla örnekte paylaşmanın ve kullanmanın muhtemelen kontrol edilemeyen hatalara veya beklenmeyen sonuçlara yol açacağını unutmayın" @@ -11134,7 +11134,7 @@ function initialize_language_strings() { arr["PORTUGUESE",721]="Número de instâncias em execução: \${normal_color}\${airgeddon_running_instances_counter}" arr["RUSSIAN",721]="\${pending_of_translation} Количество запущенных экземпляров: \${normal_color}\${airgeddon_running_instances_counter}" arr["GREEK",721]="\${pending_of_translation} Αριθμός εμφανίσεων που εκτελούνται: \${normal_color}\${airgeddon_running_instances_counter}" - arr["ITALIAN",721]="\${pending_of_translation} Numero di istanze in esecuzione: \${normal_color}\${airgeddon_running_instances_counter}" + arr["ITALIAN",721]="Numero di istanze in esecuzione: \${normal_color}\${airgeddon_running_instances_counter}" arr["POLISH",721]="Liczba uruchomionych instancji: \${normal_color}\${airgeddon_running_instances_counter}" arr["GERMAN",721]="\${pending_of_translation} Anzahl der laufenden Instanzen: \${normal_color}\${airgeddon_running_instances_counter}" arr["TURKISH",721]="\${pending_of_translation} Çalışan örneklerin sayısı: \${normal_color}\${airgeddon_running_instances_counter}" From d8bbe2bc96c1eda82ff0737e6f2ae1e26a85d597 Mon Sep 17 00:00:00 2001 From: xorond Date: Fri, 14 Jun 2024 11:19:40 +0200 Subject: [PATCH 72/92] update german and turkish translations --- language_strings.sh | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/language_strings.sh b/language_strings.sh index bee357cfa..e188b1569 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -5200,8 +5200,8 @@ function initialize_language_strings() { arr["GREEK",297]="\${pending_of_translation} Γινεται καθαρισμός των nftables/iptables και των κανόνων δρομολόγησης εάν υπάρχουν" arr["ITALIAN",297]="\${pending_of_translation} Pulendo nftables/iptables e le regole di routing se applicabile" arr["POLISH",297]="\${pending_of_translation} Usuwanie nftables/iptables i reguł routingu jeśli dotyczy" - arr["GERMAN",297]="\${pending_of_translation} Bereinigung von nftables/iptables und Routing-Regeln falls zutreffend" - arr["TURKISH",297]="\${pending_of_translation} nftables/iptables ve routing rules ve varsa temizleniyor" + arr["GERMAN",297]="Bereinigung von nftables/iptables und Routing-Regeln falls zutreffend" + arr["TURKISH",297]="nftables/iptables ve routing rules varsa temizleniyor" arr["ARABIC",297]="\${pending_of_translation} وقواعد التوجيه إن أمكن nftables/iptables تنظيف" arr["CHINESE",297]="\${pending_of_translation} 清理 nftables/iptables 和路由规则 如果适用" @@ -11108,8 +11108,8 @@ function initialize_language_strings() { arr["GREEK",719]="\${pending_of_translation} Ένας από τους προσαρμογείς wifi σας έχει ενσωματωμένο κωδικό χώρας διαφορετικό από αυτόν που έχει οριστεί στο σύστημά σας. Όταν συμβεί αυτό, ο πυρήνας δημιουργεί έναν προσαρμοσμένο ρυθμιστικό τομέα \"\${normal_color}99\${yellow_color}\" ο οποίος περιέχει μόνο δικαιώματα και στους δύο τομείς reg. Είτε το υλικό σας προέρχεται από διαφορετική περιοχή, είτε έχετε ρυθμίσει εσφαλμένα τον τομέα reg σας και έχετε περιορίσει τη λειτουργικότητά σας επίτηδες" arr["ITALIAN",719]="Uno dei tuoi adattatori Wi-Fi ha un codice paese integrato diverso da quello impostato sul tuo sistema. Quando ciò accade, il kernel crea un dominio normativo personalizzato \"\${normal_color}99\${yellow_color}\" che contiene solo le autorizzazioni in ENTRAMBI i domini di registro. O il tuo hardware proviene da una regione diversa oppure hai impostato in modo errato il tuo dominio di registro limitando quindi a proposito la sua funzionalità" arr["POLISH",719]="Jeden z Twoich adapterów Wi-Fi ma wbudowany kod kraju inny, niż ustawiony w Twoim systemie. Kiedy tak się dzieje, kernel tworzy niestandardową domenę regulacyjną \"\${normal_color}99\${yellow_color}\", która zawiera tylko uprawnienia w OBYDWU domenach regulacyjnych. Albo Twój sprzęt pochodzi z innego regionu, albo celowo nieprawidłowo ustawiłeś domenę rejestracyjną i ograniczyłeś funkcjonalność" - arr["GERMAN",719]="\${pending_of_translation} Einer Ihrer WLAN-Adapter verfügt über einen integrierten Ländercode, der sich von dem auf Ihrem System unterscheidet. Wenn dies geschieht, erstellt der Kernel eine benutzerdefinierte Regulierungsdomäne \"\${normal_color}99\${yellow_color}\", die nur Berechtigungen in BEIDEN Registrierungsdomänen enthält. Entweder stammt Ihre Hardware aus einer anderen Region oder Sie haben Ihre Reg-Domain falsch eingestellt und Ihre Funktionalität absichtlich eingeschränkt" - arr["TURKISH",719]="\${pending_of_translation} Wifi bağdaştırıcılarınızdan birinde, sisteminizde ayarlanandan farklı yerleşik bir ülke kodu var. Bu gerçekleştiğinde çekirdek, yalnızca HER İKİ Reg etki alanındaki izinleri içeren özel bir düzenleyici etki alanı \"\${normal_color}99\${yellow_color}\" oluşturur. Ya donanımınız farklı bir bölgeye ait ya da reg alan adınızı yanlış ayarladınız ve işlevselliğinizi bilerek sınırladınız" + arr["GERMAN",719]="Einer Ihrer WLAN-Adapter hat einen integrierten Ländercode, der sich von dem auf Ihrem System unterscheidet. Wenn dies geschieht, erstellt der Kernel eine spezielle Regulierungsdomäne \"\${normal_color}99\${yellow_color}\", die nur Berechtigungen in BEIDEN Registrierungsdomänen enthält. Entweder stammt Ihre Hardware aus einer anderen Region oder Sie haben Ihre Reg-Domain falsch eingestellt und die Funktionalität absichtlich eingeschränkt" + arr["TURKISH",719]="Wifi bağdaştırıcılarınızdan birinde, sisteminizde ayarlanandan farklı bir yerleşik ülke kodu var. Bu gerçekleştiğinde Kernel, yalnızca HER İKİ Reg etki alanındaki izinleri içeren özel bir düzenleyici etki alanı \"\${normal_color}99\${yellow_color}\" oluşturur. Ya donanımınız farklı bir bölgeye ait ya da reg alan adınızı yanlış ayarladınız ve işlevselliğinizi bilerek sınırladınız" arr["ARABIC",719]="\${pending_of_translation} يحتوي أحد محولات wifi لديك على رمز بلد مدمج يختلف عن الرمز المعين على نظامك. عندما يحدث هذا، تقوم النواة بإنشاء مجال تنظيمي مخصص \"\${normal_color}99\${yellow_color}\" والذي يحتوي فقط على الأذونات في كلا نطاقي التسجيل. إما أن جهازك ينتمي إلى منطقة مختلفة، أو أنك قمت بتعيين نطاق التسجيل الخاص بك بشكل غير صحيح وقمت بتقييد وظائفك عن قصد" arr["CHINESE",719]="\${pending_of_translation} 您的其中一款 WiFi 适配器的内置国家/地区代码与您系统上设置的国家/地区代码不同。当发生这种情况时,内核会创建一个自定义监管域 \"\${normal_color}99\${yellow_color}\",其中仅包含两个监管域中的权限。您的硬件来自不同的地区,或者您不正确地设置了您的注册域并故意限制了您的功能" @@ -11122,8 +11122,8 @@ function initialize_language_strings() { arr["GREEK",720]="\${pending_of_translation} Εντοπίστηκαν περισσότερες από μία περιπτώσεις airgeddon σε λειτουργία. Λάβετε υπόψη ότι η κοινή χρήση και η χρήση του ίδιου ασύρματου προσαρμογέα σε περισσότερες από μία περιπτώσεις ταυτόχρονα, πιθανότατα θα οδηγήσει σε μη ελεγχόμενα σφάλματα ή απροσδόκητα αποτελέσματα" arr["ITALIAN",720]="È stata rilevata più di un'istanza di airgeddon in esecuzione. Tieni presente che la condivisione e l'utilizzo dello stesso adattatore wireless in più istanze contemporaneamente porterà probabilmente a errori incontrollati o risultati imprevisti" arr["POLISH",720]="Wykryto, że airgeddon został uruchomiony więcej niż raz. Należy pamiętać, że współdzielenie i używanie tej samej karty bezprzewodowej w więcej niż jednej instancji jednocześnie najprawdopodobniej doprowadzi do niekontrolowanych błędów lub nieoczekiwanych rezultatów" - arr["GERMAN",720]="\${pending_of_translation} Es wurde festgestellt, dass mehr als eine Airgeddon-Instanz ausgeführt wird. Beachten Sie, dass die gemeinsame Nutzung und Verwendung desselben WLAN-Adapters in mehreren Instanzen gleichzeitig wahrscheinlich zu unkontrollierten Fehlern oder unerwarteten Ergebnissen führt" - arr["TURKISH",720]="\${pending_of_translation} Birden fazla airgeddon örneğinin çalıştığı tespit edildi. Aynı kablosuz bağdaştırıcıyı aynı anda birden fazla örnekte paylaşmanın ve kullanmanın muhtemelen kontrol edilemeyen hatalara veya beklenmeyen sonuçlara yol açacağını unutmayın" + arr["GERMAN",720]="Es wurde festgestellt, dass mehr als eine Airgeddon-Instanz ausgeführt wird. Beachten Sie, dass die gemeinsame Nutzung und Verwendung desselben WLAN-Adapters in mehreren Instanzen gleichzeitig wahrscheinlich zu unkontrollierten Fehlern oder unerwarteten Ergebnissen führt" + arr["TURKISH",720]="airgeddon'un birden fazla kere aynı anda çalıştığı tespit edildi. Aynı kablosuz bağdaştırıcıyı aynı anda paylaşmanın ve kullanmanın muhtemelen kontrol edilemeyen hatalara veya beklenmeyen sonuçlara yol açacağını unutmayın" arr["ARABIC",720]="\${pending_of_translation} تم اكتشاف وجود أكثر من مثيل airgeddon قيد التشغيل. ضع في اعتبارك أن مشاركة واستخدام نفس المحول اللاسلكي في أكثر من حالة في نفس الوقت، قد يؤدي على الأرجح إلى أخطاء لا يمكن التحكم فيها أو نتائج غير متوقعة" arr["CHINESE",720]="\${pending_of_translation} 检测到有多个 airgeddon 实例正在运行。请记住,同时在多个实例中共享和使用同一个无线适配器可能会导致无法控制的错误或意外结果" @@ -11136,8 +11136,8 @@ function initialize_language_strings() { arr["GREEK",721]="\${pending_of_translation} Αριθμός εμφανίσεων που εκτελούνται: \${normal_color}\${airgeddon_running_instances_counter}" arr["ITALIAN",721]="Numero di istanze in esecuzione: \${normal_color}\${airgeddon_running_instances_counter}" arr["POLISH",721]="Liczba uruchomionych instancji: \${normal_color}\${airgeddon_running_instances_counter}" - arr["GERMAN",721]="\${pending_of_translation} Anzahl der laufenden Instanzen: \${normal_color}\${airgeddon_running_instances_counter}" - arr["TURKISH",721]="\${pending_of_translation} Çalışan örneklerin sayısı: \${normal_color}\${airgeddon_running_instances_counter}" + arr["GERMAN",721]="Anzahl der laufenden Instanzen: \${normal_color}\${airgeddon_running_instances_counter}" + arr["TURKISH",721]="Çalışan airgeddon uygulamalarının sayısı: \${normal_color}\${airgeddon_running_instances_counter}" arr["ARABIC",721]="\${pending_of_translation} \${normal_color}\${airgeddon_running_instances_counter}\${blue_color} :عدد المثيلات قيد التشغيل" arr["CHINESE",721]="\${pending_of_translation} 正在运行的实例数:\${normal_color}\${airgeddon_running_instances_counter}" } From 7a64cf4a6b86cd51551483fed3628b903bb8510a Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Fri, 14 Jun 2024 12:12:43 +0200 Subject: [PATCH 73/92] Update french translations --- language_strings.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/language_strings.sh b/language_strings.sh index e188b1569..118bf4ac9 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -5193,7 +5193,7 @@ function initialize_language_strings() { arr["ENGLISH",297]="Cleaning nftables/iptables and routing rules if apply" arr["SPANISH",297]="Limpiando nftables/iptables y reglas de routing si procede" - arr["FRENCH",297]="\${pending_of_translation} Effacement des règles de routage nftables/iptables le cas échéant" + arr["FRENCH",297]="En rangeant des règles de routage nftables/iptables s'il y a lieu" arr["CATALAN",297]="\${pending_of_translation} Netejant nftables/iptables i regles de routing si escau" arr["PORTUGUESE",297]="\${pending_of_translation} Limpando nftables/iptables e regras de roteamento se aplicável" arr["RUSSIAN",297]="\${pending_of_translation} Очистка nftables/iptables и правил маршуртизации если применимо" From a6a25d0748689bd404d174f1224c8db2ae36cc9e Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Fri, 14 Jun 2024 12:25:28 +0200 Subject: [PATCH 74/92] Update polish translations --- language_strings.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/language_strings.sh b/language_strings.sh index 118bf4ac9..c07fa0220 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -5199,7 +5199,7 @@ function initialize_language_strings() { arr["RUSSIAN",297]="\${pending_of_translation} Очистка nftables/iptables и правил маршуртизации если применимо" arr["GREEK",297]="\${pending_of_translation} Γινεται καθαρισμός των nftables/iptables και των κανόνων δρομολόγησης εάν υπάρχουν" arr["ITALIAN",297]="\${pending_of_translation} Pulendo nftables/iptables e le regole di routing se applicabile" - arr["POLISH",297]="\${pending_of_translation} Usuwanie nftables/iptables i reguł routingu jeśli dotyczy" + arr["POLISH",297]="Usuwanie nftables/iptables i reguł routingu jeśli istnieją" arr["GERMAN",297]="Bereinigung von nftables/iptables und Routing-Regeln falls zutreffend" arr["TURKISH",297]="nftables/iptables ve routing rules varsa temizleniyor" arr["ARABIC",297]="\${pending_of_translation} وقواعد التوجيه إن أمكن nftables/iptables تنظيف" From e68ce7869ef0b52b008572eb8c5ad7b143aa4df8 Mon Sep 17 00:00:00 2001 From: AkumaHiNoTori <62224602+AkumaBiNoTori@users.noreply.github.com> Date: Fri, 14 Jun 2024 14:24:14 +0300 Subject: [PATCH 75/92] Update language_strings.sh arabic translation --- language_strings.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/language_strings.sh b/language_strings.sh index c07fa0220..712f8ba47 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -5202,7 +5202,7 @@ function initialize_language_strings() { arr["POLISH",297]="Usuwanie nftables/iptables i reguł routingu jeśli istnieją" arr["GERMAN",297]="Bereinigung von nftables/iptables und Routing-Regeln falls zutreffend" arr["TURKISH",297]="nftables/iptables ve routing rules varsa temizleniyor" - arr["ARABIC",297]="\${pending_of_translation} وقواعد التوجيه إن أمكن nftables/iptables تنظيف" + arr["ARABIC",297]=" وقواعد التوجيه إذا لزم nftables/iptables تنظيف" arr["CHINESE",297]="\${pending_of_translation} 清理 nftables/iptables 和路由规则 如果适用" arr["ENGLISH",298]="Evil Twin attack has been started. Press [Enter] key on this window to stop it" @@ -11110,7 +11110,7 @@ function initialize_language_strings() { arr["POLISH",719]="Jeden z Twoich adapterów Wi-Fi ma wbudowany kod kraju inny, niż ustawiony w Twoim systemie. Kiedy tak się dzieje, kernel tworzy niestandardową domenę regulacyjną \"\${normal_color}99\${yellow_color}\", która zawiera tylko uprawnienia w OBYDWU domenach regulacyjnych. Albo Twój sprzęt pochodzi z innego regionu, albo celowo nieprawidłowo ustawiłeś domenę rejestracyjną i ograniczyłeś funkcjonalność" arr["GERMAN",719]="Einer Ihrer WLAN-Adapter hat einen integrierten Ländercode, der sich von dem auf Ihrem System unterscheidet. Wenn dies geschieht, erstellt der Kernel eine spezielle Regulierungsdomäne \"\${normal_color}99\${yellow_color}\", die nur Berechtigungen in BEIDEN Registrierungsdomänen enthält. Entweder stammt Ihre Hardware aus einer anderen Region oder Sie haben Ihre Reg-Domain falsch eingestellt und die Funktionalität absichtlich eingeschränkt" arr["TURKISH",719]="Wifi bağdaştırıcılarınızdan birinde, sisteminizde ayarlanandan farklı bir yerleşik ülke kodu var. Bu gerçekleştiğinde Kernel, yalnızca HER İKİ Reg etki alanındaki izinleri içeren özel bir düzenleyici etki alanı \"\${normal_color}99\${yellow_color}\" oluşturur. Ya donanımınız farklı bir bölgeye ait ya da reg alan adınızı yanlış ayarladınız ve işlevselliğinizi bilerek sınırladınız" - arr["ARABIC",719]="\${pending_of_translation} يحتوي أحد محولات wifi لديك على رمز بلد مدمج يختلف عن الرمز المعين على نظامك. عندما يحدث هذا، تقوم النواة بإنشاء مجال تنظيمي مخصص \"\${normal_color}99\${yellow_color}\" والذي يحتوي فقط على الأذونات في كلا نطاقي التسجيل. إما أن جهازك ينتمي إلى منطقة مختلفة، أو أنك قمت بتعيين نطاق التسجيل الخاص بك بشكل غير صحيح وقمت بتقييد وظائفك عن قصد" + arr["ARABIC",719]=" والذي يحتوي فقط على الأذونات في كلا نطاقي التسجيل. إما أن جهازك ينتمي إلى منطقة مختلفة، أو أنك قمت بتعيين نطاق التسجيل الخاص بك بشكل غير صحيح وقمت بتقييد وظائفك عن قصد \"\${yellow_color}99\${normal_color}\" بانشاء مجال تنظيمي مخصص kernel علي رمز بلد غير الرمز الموجود علي نظامك. عندما يحدث هذا, يقوم ال wireless adapter يحتوي احدى ال " arr["CHINESE",719]="\${pending_of_translation} 您的其中一款 WiFi 适配器的内置国家/地区代码与您系统上设置的国家/地区代码不同。当发生这种情况时,内核会创建一个自定义监管域 \"\${normal_color}99\${yellow_color}\",其中仅包含两个监管域中的权限。您的硬件来自不同的地区,或者您不正确地设置了您的注册域并故意限制了您的功能" arr["ENGLISH",720]="It was detected more than one airgeddon instance running. Keep in mind that sharing and using the same wireless adapter in more than one instance at the same time, probably will lead to uncontrolled errors or unexpected results" @@ -11124,7 +11124,7 @@ function initialize_language_strings() { arr["POLISH",720]="Wykryto, że airgeddon został uruchomiony więcej niż raz. Należy pamiętać, że współdzielenie i używanie tej samej karty bezprzewodowej w więcej niż jednej instancji jednocześnie najprawdopodobniej doprowadzi do niekontrolowanych błędów lub nieoczekiwanych rezultatów" arr["GERMAN",720]="Es wurde festgestellt, dass mehr als eine Airgeddon-Instanz ausgeführt wird. Beachten Sie, dass die gemeinsame Nutzung und Verwendung desselben WLAN-Adapters in mehreren Instanzen gleichzeitig wahrscheinlich zu unkontrollierten Fehlern oder unerwarteten Ergebnissen führt" arr["TURKISH",720]="airgeddon'un birden fazla kere aynı anda çalıştığı tespit edildi. Aynı kablosuz bağdaştırıcıyı aynı anda paylaşmanın ve kullanmanın muhtemelen kontrol edilemeyen hatalara veya beklenmeyen sonuçlara yol açacağını unutmayın" - arr["ARABIC",720]="\${pending_of_translation} تم اكتشاف وجود أكثر من مثيل airgeddon قيد التشغيل. ضع في اعتبارك أن مشاركة واستخدام نفس المحول اللاسلكي في أكثر من حالة في نفس الوقت، قد يؤدي على الأرجح إلى أخطاء لا يمكن التحكم فيها أو نتائج غير متوقعة" + arr["ARABIC",720]=" في أكثر من حالة في نفس الوقت، قد يؤدي على الأرجح إلى أخطاء لا يمكن التحكم فيها أو نتائج غير متوقعة wireless adapter قيد التشغيل. يجب العلم أن مشاركة واستخدام نفس airgeddon تم اكتشاف وجود أكثر من " arr["CHINESE",720]="\${pending_of_translation} 检测到有多个 airgeddon 实例正在运行。请记住,同时在多个实例中共享和使用同一个无线适配器可能会导致无法控制的错误或意外结果" arr["ENGLISH",721]="Number of running instances: \${normal_color}\${airgeddon_running_instances_counter}" @@ -11138,7 +11138,7 @@ function initialize_language_strings() { arr["POLISH",721]="Liczba uruchomionych instancji: \${normal_color}\${airgeddon_running_instances_counter}" arr["GERMAN",721]="Anzahl der laufenden Instanzen: \${normal_color}\${airgeddon_running_instances_counter}" arr["TURKISH",721]="Çalışan airgeddon uygulamalarının sayısı: \${normal_color}\${airgeddon_running_instances_counter}" - arr["ARABIC",721]="\${pending_of_translation} \${normal_color}\${airgeddon_running_instances_counter}\${blue_color} :عدد المثيلات قيد التشغيل" + arr["ARABIC",721]="\${normal_color}\${airgeddon_running_instances_counter}\${blue_color} :عدد المثيلات قيد التشغيل" arr["CHINESE",721]="\${pending_of_translation} 正在运行的实例数:\${normal_color}\${airgeddon_running_instances_counter}" } From 19c2c46413c14f2f12054482ef52305d2ef5cbb5 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Fri, 14 Jun 2024 14:12:22 +0200 Subject: [PATCH 76/92] Remove leading spaces from some arabic strings --- language_strings.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/language_strings.sh b/language_strings.sh index 712f8ba47..e04c1bd0e 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -5202,7 +5202,7 @@ function initialize_language_strings() { arr["POLISH",297]="Usuwanie nftables/iptables i reguł routingu jeśli istnieją" arr["GERMAN",297]="Bereinigung von nftables/iptables und Routing-Regeln falls zutreffend" arr["TURKISH",297]="nftables/iptables ve routing rules varsa temizleniyor" - arr["ARABIC",297]=" وقواعد التوجيه إذا لزم nftables/iptables تنظيف" + arr["ARABIC",297]="وقواعد التوجيه إذا لزم nftables/iptables تنظيف" arr["CHINESE",297]="\${pending_of_translation} 清理 nftables/iptables 和路由规则 如果适用" arr["ENGLISH",298]="Evil Twin attack has been started. Press [Enter] key on this window to stop it" @@ -11110,7 +11110,7 @@ function initialize_language_strings() { arr["POLISH",719]="Jeden z Twoich adapterów Wi-Fi ma wbudowany kod kraju inny, niż ustawiony w Twoim systemie. Kiedy tak się dzieje, kernel tworzy niestandardową domenę regulacyjną \"\${normal_color}99\${yellow_color}\", która zawiera tylko uprawnienia w OBYDWU domenach regulacyjnych. Albo Twój sprzęt pochodzi z innego regionu, albo celowo nieprawidłowo ustawiłeś domenę rejestracyjną i ograniczyłeś funkcjonalność" arr["GERMAN",719]="Einer Ihrer WLAN-Adapter hat einen integrierten Ländercode, der sich von dem auf Ihrem System unterscheidet. Wenn dies geschieht, erstellt der Kernel eine spezielle Regulierungsdomäne \"\${normal_color}99\${yellow_color}\", die nur Berechtigungen in BEIDEN Registrierungsdomänen enthält. Entweder stammt Ihre Hardware aus einer anderen Region oder Sie haben Ihre Reg-Domain falsch eingestellt und die Funktionalität absichtlich eingeschränkt" arr["TURKISH",719]="Wifi bağdaştırıcılarınızdan birinde, sisteminizde ayarlanandan farklı bir yerleşik ülke kodu var. Bu gerçekleştiğinde Kernel, yalnızca HER İKİ Reg etki alanındaki izinleri içeren özel bir düzenleyici etki alanı \"\${normal_color}99\${yellow_color}\" oluşturur. Ya donanımınız farklı bir bölgeye ait ya da reg alan adınızı yanlış ayarladınız ve işlevselliğinizi bilerek sınırladınız" - arr["ARABIC",719]=" والذي يحتوي فقط على الأذونات في كلا نطاقي التسجيل. إما أن جهازك ينتمي إلى منطقة مختلفة، أو أنك قمت بتعيين نطاق التسجيل الخاص بك بشكل غير صحيح وقمت بتقييد وظائفك عن قصد \"\${yellow_color}99\${normal_color}\" بانشاء مجال تنظيمي مخصص kernel علي رمز بلد غير الرمز الموجود علي نظامك. عندما يحدث هذا, يقوم ال wireless adapter يحتوي احدى ال " + arr["ARABIC",719]="والذي يحتوي فقط على الأذونات في كلا نطاقي التسجيل. إما أن جهازك ينتمي إلى منطقة مختلفة، أو أنك قمت بتعيين نطاق التسجيل الخاص بك بشكل غير صحيح وقمت بتقييد وظائفك عن قصد \"\${yellow_color}99\${normal_color}\" بانشاء مجال تنظيمي مخصص kernel علي رمز بلد غير الرمز الموجود علي نظامك. عندما يحدث هذا, يقوم ال wireless adapter يحتوي احدى ال " arr["CHINESE",719]="\${pending_of_translation} 您的其中一款 WiFi 适配器的内置国家/地区代码与您系统上设置的国家/地区代码不同。当发生这种情况时,内核会创建一个自定义监管域 \"\${normal_color}99\${yellow_color}\",其中仅包含两个监管域中的权限。您的硬件来自不同的地区,或者您不正确地设置了您的注册域并故意限制了您的功能" arr["ENGLISH",720]="It was detected more than one airgeddon instance running. Keep in mind that sharing and using the same wireless adapter in more than one instance at the same time, probably will lead to uncontrolled errors or unexpected results" @@ -11124,7 +11124,7 @@ function initialize_language_strings() { arr["POLISH",720]="Wykryto, że airgeddon został uruchomiony więcej niż raz. Należy pamiętać, że współdzielenie i używanie tej samej karty bezprzewodowej w więcej niż jednej instancji jednocześnie najprawdopodobniej doprowadzi do niekontrolowanych błędów lub nieoczekiwanych rezultatów" arr["GERMAN",720]="Es wurde festgestellt, dass mehr als eine Airgeddon-Instanz ausgeführt wird. Beachten Sie, dass die gemeinsame Nutzung und Verwendung desselben WLAN-Adapters in mehreren Instanzen gleichzeitig wahrscheinlich zu unkontrollierten Fehlern oder unerwarteten Ergebnissen führt" arr["TURKISH",720]="airgeddon'un birden fazla kere aynı anda çalıştığı tespit edildi. Aynı kablosuz bağdaştırıcıyı aynı anda paylaşmanın ve kullanmanın muhtemelen kontrol edilemeyen hatalara veya beklenmeyen sonuçlara yol açacağını unutmayın" - arr["ARABIC",720]=" في أكثر من حالة في نفس الوقت، قد يؤدي على الأرجح إلى أخطاء لا يمكن التحكم فيها أو نتائج غير متوقعة wireless adapter قيد التشغيل. يجب العلم أن مشاركة واستخدام نفس airgeddon تم اكتشاف وجود أكثر من " + arr["ARABIC",720]="في أكثر من حالة في نفس الوقت، قد يؤدي على الأرجح إلى أخطاء لا يمكن التحكم فيها أو نتائج غير متوقعة wireless adapter قيد التشغيل. يجب العلم أن مشاركة واستخدام نفس airgeddon تم اكتشاف وجود أكثر من " arr["CHINESE",720]="\${pending_of_translation} 检测到有多个 airgeddon 实例正在运行。请记住,同时在多个实例中共享和使用同一个无线适配器可能会导致无法控制的错误或意外结果" arr["ENGLISH",721]="Number of running instances: \${normal_color}\${airgeddon_running_instances_counter}" From 0f5f595d6545797ea0f1f7b19fedf0082fa8255b Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Fri, 14 Jun 2024 14:12:55 +0200 Subject: [PATCH 77/92] Update portuguese string --- language_strings.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/language_strings.sh b/language_strings.sh index e04c1bd0e..9fd995e49 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -5195,7 +5195,7 @@ function initialize_language_strings() { arr["SPANISH",297]="Limpiando nftables/iptables y reglas de routing si procede" arr["FRENCH",297]="En rangeant des règles de routage nftables/iptables s'il y a lieu" arr["CATALAN",297]="\${pending_of_translation} Netejant nftables/iptables i regles de routing si escau" - arr["PORTUGUESE",297]="\${pending_of_translation} Limpando nftables/iptables e regras de roteamento se aplicável" + arr["PORTUGUESE",297]="Limpando as regras do nftables/iptables e de roteamento, se aplicável" arr["RUSSIAN",297]="\${pending_of_translation} Очистка nftables/iptables и правил маршуртизации если применимо" arr["GREEK",297]="\${pending_of_translation} Γινεται καθαρισμός των nftables/iptables και των κανόνων δρομολόγησης εάν υπάρχουν" arr["ITALIAN",297]="\${pending_of_translation} Pulendo nftables/iptables e le regole di routing se applicabile" From 975995269c6c0ee275731f7cde39cd7ba28f5643 Mon Sep 17 00:00:00 2001 From: saim1z Date: Fri, 14 Jun 2024 16:17:52 +0200 Subject: [PATCH 78/92] Update italian strings --- language_strings.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/language_strings.sh b/language_strings.sh index 9fd995e49..c49095847 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -5198,7 +5198,7 @@ function initialize_language_strings() { arr["PORTUGUESE",297]="Limpando as regras do nftables/iptables e de roteamento, se aplicável" arr["RUSSIAN",297]="\${pending_of_translation} Очистка nftables/iptables и правил маршуртизации если применимо" arr["GREEK",297]="\${pending_of_translation} Γινεται καθαρισμός των nftables/iptables και των κανόνων δρομολόγησης εάν υπάρχουν" - arr["ITALIAN",297]="\${pending_of_translation} Pulendo nftables/iptables e le regole di routing se applicabile" + arr["ITALIAN",297]="Pulendo nftables/iptables e le regole di routing se necessario" arr["POLISH",297]="Usuwanie nftables/iptables i reguł routingu jeśli istnieją" arr["GERMAN",297]="Bereinigung von nftables/iptables und Routing-Regeln falls zutreffend" arr["TURKISH",297]="nftables/iptables ve routing rules varsa temizleniyor" From 8f5d7f6eb6fafb07de8e3b32abfeccefc41e1aee Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Sat, 15 Jun 2024 14:01:50 +0200 Subject: [PATCH 79/92] Update russian strings --- language_strings.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/language_strings.sh b/language_strings.sh index c49095847..6351ee0c9 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -5196,7 +5196,7 @@ function initialize_language_strings() { arr["FRENCH",297]="En rangeant des règles de routage nftables/iptables s'il y a lieu" arr["CATALAN",297]="\${pending_of_translation} Netejant nftables/iptables i regles de routing si escau" arr["PORTUGUESE",297]="Limpando as regras do nftables/iptables e de roteamento, se aplicável" - arr["RUSSIAN",297]="\${pending_of_translation} Очистка nftables/iptables и правил маршуртизации если применимо" + arr["RUSSIAN",297]="Очистка nftables/iptables и правил маршрутизации если применимо" arr["GREEK",297]="\${pending_of_translation} Γινεται καθαρισμός των nftables/iptables και των κανόνων δρομολόγησης εάν υπάρχουν" arr["ITALIAN",297]="Pulendo nftables/iptables e le regole di routing se necessario" arr["POLISH",297]="Usuwanie nftables/iptables i reguł routingu jeśli istnieją" @@ -11104,7 +11104,7 @@ function initialize_language_strings() { arr["FRENCH",719]="Une des vos adaptateurs Wi-Fi a un code de pays intégré différent de celui défini sur votre système. Quand cela se produit, le Kernel crée un domaine réglementaire personnalisé \"\${normal_color}99\${yellow_color}\" qui contient uniquement les autorisations dans les DEUX domaines inscrits. Peut votre matériel provient d'une région différente ou vous avez mal défini votre domaine d'enregistrement et limité volontairement vos fonctionnalités" arr["CATALAN",719]="\${pending_of_translation} Un dels vostres adaptadors wifi té un codi de país integrat diferent del establert al vostre sistema. Quan això succeeix, el nucli crea un domini regulador personalitzat \"\${normal_color}99\${yellow_color}\" que només conté permisos als DOS dominis reg. O el vostre maquinari és d'una regió diferent o heu configurat el vostre domini de registre incorrectament i heu limitat la vostra funcionalitat a propòsit" arr["PORTUGUESE",719]="Um dos seus adaptadores wi-fi possui um código de país integrado diferente do definido em seu sistema. Quando isso acontece, o kernel cria um domínio regulatório personalizado \"\${normal_color}99\${yellow_color}\" que contém apenas permissões em AMBOS. Ou seu hardware é de uma região diferente, ou você configurou incorretamente seu domínio de registro e limitou sua funcionalidade propositalmente" - arr["RUSSIAN",719]="\${pending_of_translation} Один из ваших адаптеров Wi-Fi имеет встроенный код страны, отличный от кода, установленного в вашей системе. Когда это происходит, ядро создает собственный нормативный домен \"\${normal_color}99\${yellow_color}\", который содержит разрешения только в ОБОИХ доменах регистрации. Либо ваше оборудование из другого региона, либо вы неправильно настроили рег-домен и намеренно ограничили функциональность" + arr["RUSSIAN",719]="Один из ваших Wi-Fi адаптеров имеет вшитый код страны, отличный от установленного в вашей системе. Когда это происходит, ядро создает кастомный регулятивный домен \"\${normal_color}99\${yellow_color}\", который содержит общие разрешения доступные в ОБОИХ доменах регистрации. Либо ваше оборудование из другого региона, либо вы неправильно настроили регулятивный домен и намеренно ограничили функциональность" arr["GREEK",719]="\${pending_of_translation} Ένας από τους προσαρμογείς wifi σας έχει ενσωματωμένο κωδικό χώρας διαφορετικό από αυτόν που έχει οριστεί στο σύστημά σας. Όταν συμβεί αυτό, ο πυρήνας δημιουργεί έναν προσαρμοσμένο ρυθμιστικό τομέα \"\${normal_color}99\${yellow_color}\" ο οποίος περιέχει μόνο δικαιώματα και στους δύο τομείς reg. Είτε το υλικό σας προέρχεται από διαφορετική περιοχή, είτε έχετε ρυθμίσει εσφαλμένα τον τομέα reg σας και έχετε περιορίσει τη λειτουργικότητά σας επίτηδες" arr["ITALIAN",719]="Uno dei tuoi adattatori Wi-Fi ha un codice paese integrato diverso da quello impostato sul tuo sistema. Quando ciò accade, il kernel crea un dominio normativo personalizzato \"\${normal_color}99\${yellow_color}\" che contiene solo le autorizzazioni in ENTRAMBI i domini di registro. O il tuo hardware proviene da una regione diversa oppure hai impostato in modo errato il tuo dominio di registro limitando quindi a proposito la sua funzionalità" arr["POLISH",719]="Jeden z Twoich adapterów Wi-Fi ma wbudowany kod kraju inny, niż ustawiony w Twoim systemie. Kiedy tak się dzieje, kernel tworzy niestandardową domenę regulacyjną \"\${normal_color}99\${yellow_color}\", która zawiera tylko uprawnienia w OBYDWU domenach regulacyjnych. Albo Twój sprzęt pochodzi z innego regionu, albo celowo nieprawidłowo ustawiłeś domenę rejestracyjną i ograniczyłeś funkcjonalność" @@ -11118,7 +11118,7 @@ function initialize_language_strings() { arr["FRENCH",720]="Il a été détecté plus d'une instance d'airgeddon en exécution. Prendre en compte que le partage et l'utilisation du même adaptateur sans fil dans plusieurs instances au même temps, peut entraîner des erreurs incontrôlées ou des résultats imprévus" arr["CATALAN",720]="\${pending_of_translation} S'ha detectat més d'una instància d'airgeddon en execució. Tingueu en compte que compartir i utilitzar el mateix adaptador sense fil en més d'una instància alhora, probablement provocarà errors incontrolats o resultats inesperats" arr["PORTUGUESE",720]="Existe mais de uma instância do airgeddon em execução. Tenha em mente que usar o mesmo adaptador wi-fi em mais de uma instância simultaneamente provavelmente levará a erros e resultados inesperados" - arr["RUSSIAN",720]="\${pending_of_translation} Было обнаружено более одного запущенного экземпляра airgeddon. Имейте в виду, что совместное использование одного и того же беспроводного адаптера более чем в одном экземпляре одновременно может привести к неконтролируемым ошибкам или неожиданным результатам" + arr["RUSSIAN",720]="Было обнаружено, что запущено несколько инстансов airgeddon. Имейте в виду, что совместное использование одного и того же беспроводного адаптера более чем в одном инстансе одновременно может привести к неконтролируемым ошибкам или неожиданным результатам" arr["GREEK",720]="\${pending_of_translation} Εντοπίστηκαν περισσότερες από μία περιπτώσεις airgeddon σε λειτουργία. Λάβετε υπόψη ότι η κοινή χρήση και η χρήση του ίδιου ασύρματου προσαρμογέα σε περισσότερες από μία περιπτώσεις ταυτόχρονα, πιθανότατα θα οδηγήσει σε μη ελεγχόμενα σφάλματα ή απροσδόκητα αποτελέσματα" arr["ITALIAN",720]="È stata rilevata più di un'istanza di airgeddon in esecuzione. Tieni presente che la condivisione e l'utilizzo dello stesso adattatore wireless in più istanze contemporaneamente porterà probabilmente a errori incontrollati o risultati imprevisti" arr["POLISH",720]="Wykryto, że airgeddon został uruchomiony więcej niż raz. Należy pamiętać, że współdzielenie i używanie tej samej karty bezprzewodowej w więcej niż jednej instancji jednocześnie najprawdopodobniej doprowadzi do niekontrolowanych błędów lub nieoczekiwanych rezultatów" @@ -11132,7 +11132,7 @@ function initialize_language_strings() { arr["FRENCH",721]="Numéro d'instances en exécution: \${normal_color}\${airgeddon_running_instances_counter}" arr["CATALAN",721]="\${pending_of_translation} Nombre d'instàncies en execució: \${normal_color}\${airgeddon_running_instances_counter}" arr["PORTUGUESE",721]="Número de instâncias em execução: \${normal_color}\${airgeddon_running_instances_counter}" - arr["RUSSIAN",721]="\${pending_of_translation} Количество запущенных экземпляров: \${normal_color}\${airgeddon_running_instances_counter}" + arr["RUSSIAN",721]="Количество запущенных инстансов: \${normal_color}\${airgeddon_running_instances_counter}" arr["GREEK",721]="\${pending_of_translation} Αριθμός εμφανίσεων που εκτελούνται: \${normal_color}\${airgeddon_running_instances_counter}" arr["ITALIAN",721]="Numero di istanze in esecuzione: \${normal_color}\${airgeddon_running_instances_counter}" arr["POLISH",721]="Liczba uruchomionych instancji: \${normal_color}\${airgeddon_running_instances_counter}" From c7549e4022fda52ac486ed35c1e8866af9b5a1fc Mon Sep 17 00:00:00 2001 From: cLn73 Date: Sat, 15 Jun 2024 17:48:46 +0200 Subject: [PATCH 80/92] Updated Catalan Translations --- language_strings.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/language_strings.sh b/language_strings.sh index 6351ee0c9..1d44d0f89 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -11102,7 +11102,7 @@ function initialize_language_strings() { arr["ENGLISH",719]="One of your wireless adapters has a built-in country code different from the one set on your system. When this happens the kernel makes a custom regulatory domain \"\${normal_color}99\${yellow_color}\" which contains only permissions in BOTH reg domains. Either your hardware is from a different region, or you have improperly set your reg domain and limited your functionality on purpose" arr["SPANISH",719]="Uno de tus adaptadores wifi tiene un código de país integrado diferente al configurado en el sistema. Cuando esto sucede, el kernel crea un dominio regulatorio personalizado \"\${normal_color}99\${yellow_color}\" que contiene solo permisos en AMBOS dominios de registro. O tu hardware es de una región diferente o configuraste incorrectamente el dominio de registro y limitando su funcionalidad a propósito" arr["FRENCH",719]="Une des vos adaptateurs Wi-Fi a un code de pays intégré différent de celui défini sur votre système. Quand cela se produit, le Kernel crée un domaine réglementaire personnalisé \"\${normal_color}99\${yellow_color}\" qui contient uniquement les autorisations dans les DEUX domaines inscrits. Peut votre matériel provient d'une région différente ou vous avez mal défini votre domaine d'enregistrement et limité volontairement vos fonctionnalités" - arr["CATALAN",719]="\${pending_of_translation} Un dels vostres adaptadors wifi té un codi de país integrat diferent del establert al vostre sistema. Quan això succeeix, el nucli crea un domini regulador personalitzat \"\${normal_color}99\${yellow_color}\" que només conté permisos als DOS dominis reg. O el vostre maquinari és d'una regió diferent o heu configurat el vostre domini de registre incorrectament i heu limitat la vostra funcionalitat a propòsit" + arr["CATALAN",719]="Un dels vostres adaptadors wifi té un codi de país integrat diferent del establert al vostre sistema. Quan això succeeix, el nucli crea un domini regulador personalitzat \"\${normal_color}99\${yellow_color}\" que només conté permisos als DOS dominis reg. O el vostre maquinari és d'una regió diferent o heu configurat el vostre domini de registre incorrectament i heu limitat la vostra funcionalitat a propòsit" arr["PORTUGUESE",719]="Um dos seus adaptadores wi-fi possui um código de país integrado diferente do definido em seu sistema. Quando isso acontece, o kernel cria um domínio regulatório personalizado \"\${normal_color}99\${yellow_color}\" que contém apenas permissões em AMBOS. Ou seu hardware é de uma região diferente, ou você configurou incorretamente seu domínio de registro e limitou sua funcionalidade propositalmente" arr["RUSSIAN",719]="Один из ваших Wi-Fi адаптеров имеет вшитый код страны, отличный от установленного в вашей системе. Когда это происходит, ядро создает кастомный регулятивный домен \"\${normal_color}99\${yellow_color}\", который содержит общие разрешения доступные в ОБОИХ доменах регистрации. Либо ваше оборудование из другого региона, либо вы неправильно настроили регулятивный домен и намеренно ограничили функциональность" arr["GREEK",719]="\${pending_of_translation} Ένας από τους προσαρμογείς wifi σας έχει ενσωματωμένο κωδικό χώρας διαφορετικό από αυτόν που έχει οριστεί στο σύστημά σας. Όταν συμβεί αυτό, ο πυρήνας δημιουργεί έναν προσαρμοσμένο ρυθμιστικό τομέα \"\${normal_color}99\${yellow_color}\" ο οποίος περιέχει μόνο δικαιώματα και στους δύο τομείς reg. Είτε το υλικό σας προέρχεται από διαφορετική περιοχή, είτε έχετε ρυθμίσει εσφαλμένα τον τομέα reg σας και έχετε περιορίσει τη λειτουργικότητά σας επίτηδες" @@ -11116,7 +11116,7 @@ function initialize_language_strings() { arr["ENGLISH",720]="It was detected more than one airgeddon instance running. Keep in mind that sharing and using the same wireless adapter in more than one instance at the same time, probably will lead to uncontrolled errors or unexpected results" arr["SPANISH",720]="Se ha detectado más de una instancia de airgeddon ejecutándose. Ten en cuenta que compartir y utilizar el mismo adaptador inalámbrico en más de una instancia al mismo tiempo probablemente provocará errores no controlados o resultados inesperados" arr["FRENCH",720]="Il a été détecté plus d'une instance d'airgeddon en exécution. Prendre en compte que le partage et l'utilisation du même adaptateur sans fil dans plusieurs instances au même temps, peut entraîner des erreurs incontrôlées ou des résultats imprévus" - arr["CATALAN",720]="\${pending_of_translation} S'ha detectat més d'una instància d'airgeddon en execució. Tingueu en compte que compartir i utilitzar el mateix adaptador sense fil en més d'una instància alhora, probablement provocarà errors incontrolats o resultats inesperats" + arr["CATALAN",720]="S'ha detectat més d'una instància d'airgeddon en execució. Tingueu en compte que compartir i utilitzar el mateix adaptador sense fil en més d'una instància alhora, probablement provocarà errors incontrolats o resultats inesperats" arr["PORTUGUESE",720]="Existe mais de uma instância do airgeddon em execução. Tenha em mente que usar o mesmo adaptador wi-fi em mais de uma instância simultaneamente provavelmente levará a erros e resultados inesperados" arr["RUSSIAN",720]="Было обнаружено, что запущено несколько инстансов airgeddon. Имейте в виду, что совместное использование одного и того же беспроводного адаптера более чем в одном инстансе одновременно может привести к неконтролируемым ошибкам или неожиданным результатам" arr["GREEK",720]="\${pending_of_translation} Εντοπίστηκαν περισσότερες από μία περιπτώσεις airgeddon σε λειτουργία. Λάβετε υπόψη ότι η κοινή χρήση και η χρήση του ίδιου ασύρματου προσαρμογέα σε περισσότερες από μία περιπτώσεις ταυτόχρονα, πιθανότατα θα οδηγήσει σε μη ελεγχόμενα σφάλματα ή απροσδόκητα αποτελέσματα" @@ -11130,7 +11130,7 @@ function initialize_language_strings() { arr["ENGLISH",721]="Number of running instances: \${normal_color}\${airgeddon_running_instances_counter}" arr["SPANISH",721]="Número de instancias en ejecución: \${normal_color}\${airgeddon_running_instances_counter}" arr["FRENCH",721]="Numéro d'instances en exécution: \${normal_color}\${airgeddon_running_instances_counter}" - arr["CATALAN",721]="\${pending_of_translation} Nombre d'instàncies en execució: \${normal_color}\${airgeddon_running_instances_counter}" + arr["CATALAN",721]="Nombre d'instàncies en execució: \${normal_color}\${airgeddon_running_instances_counter}" arr["PORTUGUESE",721]="Número de instâncias em execução: \${normal_color}\${airgeddon_running_instances_counter}" arr["RUSSIAN",721]="Количество запущенных инстансов: \${normal_color}\${airgeddon_running_instances_counter}" arr["GREEK",721]="\${pending_of_translation} Αριθμός εμφανίσεων που εκτελούνται: \${normal_color}\${airgeddon_running_instances_counter}" From eceb45e7febb41ae61633969993b01875d9cbbd3 Mon Sep 17 00:00:00 2001 From: cLn73 Date: Sat, 15 Jun 2024 18:10:56 +0200 Subject: [PATCH 81/92] Updated Catalan Translations --- language_strings.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/language_strings.sh b/language_strings.sh index 1d44d0f89..2bb3e5f62 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -5194,7 +5194,7 @@ function initialize_language_strings() { arr["ENGLISH",297]="Cleaning nftables/iptables and routing rules if apply" arr["SPANISH",297]="Limpiando nftables/iptables y reglas de routing si procede" arr["FRENCH",297]="En rangeant des règles de routage nftables/iptables s'il y a lieu" - arr["CATALAN",297]="\${pending_of_translation} Netejant nftables/iptables i regles de routing si escau" + arr["CATALAN",297]="Netejant nftables/iptables i regles de routing si escau" arr["PORTUGUESE",297]="Limpando as regras do nftables/iptables e de roteamento, se aplicável" arr["RUSSIAN",297]="Очистка nftables/iptables и правил маршрутизации если применимо" arr["GREEK",297]="\${pending_of_translation} Γινεται καθαρισμός των nftables/iptables και των κανόνων δρομολόγησης εάν υπάρχουν" From 479602e6a9c9c65650cda772d32b5d6816810c87 Mon Sep 17 00:00:00 2001 From: Georgios Zoutis Date: Tue, 18 Jun 2024 21:37:05 +0300 Subject: [PATCH 82/92] update greek translations --- language_strings.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/language_strings.sh b/language_strings.sh index 2bb3e5f62..2ac45117e 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -11105,7 +11105,7 @@ function initialize_language_strings() { arr["CATALAN",719]="Un dels vostres adaptadors wifi té un codi de país integrat diferent del establert al vostre sistema. Quan això succeeix, el nucli crea un domini regulador personalitzat \"\${normal_color}99\${yellow_color}\" que només conté permisos als DOS dominis reg. O el vostre maquinari és d'una regió diferent o heu configurat el vostre domini de registre incorrectament i heu limitat la vostra funcionalitat a propòsit" arr["PORTUGUESE",719]="Um dos seus adaptadores wi-fi possui um código de país integrado diferente do definido em seu sistema. Quando isso acontece, o kernel cria um domínio regulatório personalizado \"\${normal_color}99\${yellow_color}\" que contém apenas permissões em AMBOS. Ou seu hardware é de uma região diferente, ou você configurou incorretamente seu domínio de registro e limitou sua funcionalidade propositalmente" arr["RUSSIAN",719]="Один из ваших Wi-Fi адаптеров имеет вшитый код страны, отличный от установленного в вашей системе. Когда это происходит, ядро создает кастомный регулятивный домен \"\${normal_color}99\${yellow_color}\", который содержит общие разрешения доступные в ОБОИХ доменах регистрации. Либо ваше оборудование из другого региона, либо вы неправильно настроили регулятивный домен и намеренно ограничили функциональность" - arr["GREEK",719]="\${pending_of_translation} Ένας από τους προσαρμογείς wifi σας έχει ενσωματωμένο κωδικό χώρας διαφορετικό από αυτόν που έχει οριστεί στο σύστημά σας. Όταν συμβεί αυτό, ο πυρήνας δημιουργεί έναν προσαρμοσμένο ρυθμιστικό τομέα \"\${normal_color}99\${yellow_color}\" ο οποίος περιέχει μόνο δικαιώματα και στους δύο τομείς reg. Είτε το υλικό σας προέρχεται από διαφορετική περιοχή, είτε έχετε ρυθμίσει εσφαλμένα τον τομέα reg σας και έχετε περιορίσει τη λειτουργικότητά σας επίτηδες" + arr["GREEK",719]="Ένας από τους αντάπτορες δικτύου wifi σας έχει ενσωματωμένο κωδικό χώρας διαφορετικό από αυτόν που έχει οριστεί στο σύστημά σας. Όταν συμβαίνει αυτό, ο kernel δημιουργεί ένα custom regulatory domain \"\${normal_color}99\${yellow_color}\" το οποίο περιέχει μόνο δικαιώματα και στα δύο reg domains. Είτε το hardware σας προέρχεται από διαφορετική περιοχή, είτε έχετε ρυθμίσει εσφαλμένα το domain reg σας και έχετε περιορίσει τη λειτουργικότητά σας επίτηδες" arr["ITALIAN",719]="Uno dei tuoi adattatori Wi-Fi ha un codice paese integrato diverso da quello impostato sul tuo sistema. Quando ciò accade, il kernel crea un dominio normativo personalizzato \"\${normal_color}99\${yellow_color}\" che contiene solo le autorizzazioni in ENTRAMBI i domini di registro. O il tuo hardware proviene da una regione diversa oppure hai impostato in modo errato il tuo dominio di registro limitando quindi a proposito la sua funzionalità" arr["POLISH",719]="Jeden z Twoich adapterów Wi-Fi ma wbudowany kod kraju inny, niż ustawiony w Twoim systemie. Kiedy tak się dzieje, kernel tworzy niestandardową domenę regulacyjną \"\${normal_color}99\${yellow_color}\", która zawiera tylko uprawnienia w OBYDWU domenach regulacyjnych. Albo Twój sprzęt pochodzi z innego regionu, albo celowo nieprawidłowo ustawiłeś domenę rejestracyjną i ograniczyłeś funkcjonalność" arr["GERMAN",719]="Einer Ihrer WLAN-Adapter hat einen integrierten Ländercode, der sich von dem auf Ihrem System unterscheidet. Wenn dies geschieht, erstellt der Kernel eine spezielle Regulierungsdomäne \"\${normal_color}99\${yellow_color}\", die nur Berechtigungen in BEIDEN Registrierungsdomänen enthält. Entweder stammt Ihre Hardware aus einer anderen Region oder Sie haben Ihre Reg-Domain falsch eingestellt und die Funktionalität absichtlich eingeschränkt" @@ -11119,7 +11119,7 @@ function initialize_language_strings() { arr["CATALAN",720]="S'ha detectat més d'una instància d'airgeddon en execució. Tingueu en compte que compartir i utilitzar el mateix adaptador sense fil en més d'una instància alhora, probablement provocarà errors incontrolats o resultats inesperats" arr["PORTUGUESE",720]="Existe mais de uma instância do airgeddon em execução. Tenha em mente que usar o mesmo adaptador wi-fi em mais de uma instância simultaneamente provavelmente levará a erros e resultados inesperados" arr["RUSSIAN",720]="Было обнаружено, что запущено несколько инстансов airgeddon. Имейте в виду, что совместное использование одного и того же беспроводного адаптера более чем в одном инстансе одновременно может привести к неконтролируемым ошибкам или неожиданным результатам" - arr["GREEK",720]="\${pending_of_translation} Εντοπίστηκαν περισσότερες από μία περιπτώσεις airgeddon σε λειτουργία. Λάβετε υπόψη ότι η κοινή χρήση και η χρήση του ίδιου ασύρματου προσαρμογέα σε περισσότερες από μία περιπτώσεις ταυτόχρονα, πιθανότατα θα οδηγήσει σε μη ελεγχόμενα σφάλματα ή απροσδόκητα αποτελέσματα" + arr["GREEK",720]="Εντοπίστηκαν περισσότερο από ένα instance του airgeddon σε λειτουργία. Λάβετε υπόψη ότι η κοινή χρήση του ασύρματου αντάπτορα σε περισσότερα από ένα instance ταυτόχρονα, πιθανότατα θα σας οδηγήσει σε μη ελεγχόμενα σφάλματα ή απροσδόκητα αποτελέσματα" arr["ITALIAN",720]="È stata rilevata più di un'istanza di airgeddon in esecuzione. Tieni presente che la condivisione e l'utilizzo dello stesso adattatore wireless in più istanze contemporaneamente porterà probabilmente a errori incontrollati o risultati imprevisti" arr["POLISH",720]="Wykryto, że airgeddon został uruchomiony więcej niż raz. Należy pamiętać, że współdzielenie i używanie tej samej karty bezprzewodowej w więcej niż jednej instancji jednocześnie najprawdopodobniej doprowadzi do niekontrolowanych błędów lub nieoczekiwanych rezultatów" arr["GERMAN",720]="Es wurde festgestellt, dass mehr als eine Airgeddon-Instanz ausgeführt wird. Beachten Sie, dass die gemeinsame Nutzung und Verwendung desselben WLAN-Adapters in mehreren Instanzen gleichzeitig wahrscheinlich zu unkontrollierten Fehlern oder unerwarteten Ergebnissen führt" @@ -11133,7 +11133,7 @@ function initialize_language_strings() { arr["CATALAN",721]="Nombre d'instàncies en execució: \${normal_color}\${airgeddon_running_instances_counter}" arr["PORTUGUESE",721]="Número de instâncias em execução: \${normal_color}\${airgeddon_running_instances_counter}" arr["RUSSIAN",721]="Количество запущенных инстансов: \${normal_color}\${airgeddon_running_instances_counter}" - arr["GREEK",721]="\${pending_of_translation} Αριθμός εμφανίσεων που εκτελούνται: \${normal_color}\${airgeddon_running_instances_counter}" + arr["GREEK",721]="Αριθμός instances που εκτελούνται: \${normal_color}\${airgeddon_running_instances_counter}" arr["ITALIAN",721]="Numero di istanze in esecuzione: \${normal_color}\${airgeddon_running_instances_counter}" arr["POLISH",721]="Liczba uruchomionych instancji: \${normal_color}\${airgeddon_running_instances_counter}" arr["GERMAN",721]="Anzahl der laufenden Instanzen: \${normal_color}\${airgeddon_running_instances_counter}" From 80c6f3f35672a85b23d2946360eab3c1e5e08814 Mon Sep 17 00:00:00 2001 From: Georgios Zoutis Date: Tue, 18 Jun 2024 22:47:51 +0300 Subject: [PATCH 83/92] update greek translations --- language_strings.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/language_strings.sh b/language_strings.sh index 2ac45117e..cbe48568c 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -5197,7 +5197,7 @@ function initialize_language_strings() { arr["CATALAN",297]="Netejant nftables/iptables i regles de routing si escau" arr["PORTUGUESE",297]="Limpando as regras do nftables/iptables e de roteamento, se aplicável" arr["RUSSIAN",297]="Очистка nftables/iptables и правил маршрутизации если применимо" - arr["GREEK",297]="\${pending_of_translation} Γινεται καθαρισμός των nftables/iptables και των κανόνων δρομολόγησης εάν υπάρχουν" + arr["GREEK",297]="Γίνεται καθαρισμός των nftables/iptables και των routing rules εάν υπάρχουν" arr["ITALIAN",297]="Pulendo nftables/iptables e le regole di routing se necessario" arr["POLISH",297]="Usuwanie nftables/iptables i reguł routingu jeśli istnieją" arr["GERMAN",297]="Bereinigung von nftables/iptables und Routing-Regeln falls zutreffend" From 9bfb7ad4b8297179268433610eb36237df1c97bc Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Wed, 19 Jun 2024 14:07:30 +0200 Subject: [PATCH 84/92] Set iptables rules to work in the same way as nft, forward policy accept --- airgeddon.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index c9cba39cf..a0291dbb8 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -6095,7 +6095,7 @@ function prepare_iptables_nftables() { "${iptables_cmd}" add chain ip nat_"${airgeddon_instance_name}" prerouting_"${airgeddon_instance_name}" '{type nat hook prerouting priority -100;}' "${iptables_cmd}" add chain ip nat_"${airgeddon_instance_name}" postrouting_"${airgeddon_instance_name}" '{type nat hook postrouting priority 100;}' else - "${iptables_cmd}" -P FORWARD DROP + "${iptables_cmd}" -P FORWARD ACCEPT "${iptables_cmd}" -t filter -N input_"${airgeddon_instance_name}" "${iptables_cmd}" -A INPUT -j input_"${airgeddon_instance_name}" "${iptables_cmd}" -t filter -N forward_"${airgeddon_instance_name}" @@ -10204,7 +10204,7 @@ function set_std_internet_routing_rules() { if [ "${iptables_nftables}" -eq 1 ]; then "${iptables_cmd}" add rule nat_"${airgeddon_instance_name}" postrouting_"${airgeddon_instance_name}" ip saddr ${et_ip_range}/${std_c_mask_cidr} oifname "${internet_interface}" counter masquerade else - "${iptables_cmd}" -t nat -A POSTROUTING -o "${internet_interface}" -j MASQUERADE + "${iptables_cmd}" -t nat -A POSTROUTING -s ${et_ip_range}/${std_c_mask} -o ${internet_interface} -j MASQUERADE fi fi From 3a6f1c4ed76c096bb5fe8dbcda717221d2f4cc82 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Wed, 19 Jun 2024 14:56:15 +0200 Subject: [PATCH 85/92] Improve nft/iptables rules to be more granular --- airgeddon.sh | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index a0291dbb8..174d3e640 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -10167,36 +10167,36 @@ function set_std_internet_routing_rules() { if [ "${et_mode}" = "et_captive_portal" ]; then if [ "${iptables_nftables}" -eq 1 ]; then "${iptables_cmd}" add rule ip nat_"${airgeddon_instance_name}" prerouting_"${airgeddon_instance_name}" iifname "${interface}" tcp dport ${www_port} counter dnat to ${et_ip_router}:${www_port} - "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" tcp dport ${www_port} counter accept - "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" tcp dport ${https_port} counter accept - "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" udp dport ${dns_port} counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${interface}" tcp dport ${www_port} counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${interface}" tcp dport ${https_port} counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${interface}" udp dport ${dns_port} counter accept else "${iptables_cmd}" -t nat -A PREROUTING -p tcp -i "${interface}" --dport ${www_port} -j DNAT --to-destination ${et_ip_router}:${www_port} - "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp --destination-port ${www_port} -j ACCEPT - "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp --destination-port ${https_port} -j ACCEPT - "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p udp --destination-port ${dns_port} -j ACCEPT + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp -i "${interface}" --destination-port ${www_port} -j ACCEPT + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp -i "${interface}" --destination-port ${https_port} -j ACCEPT + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p udp -i "${interface}" --destination-port ${dns_port} -j ACCEPT fi elif [ "${et_mode}" = "et_sniffing_sslstrip2" ]; then if [ "${iptables_nftables}" -eq 1 ]; then - "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" tcp dport ${bettercap_proxy_port} counter accept - "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" udp dport ${bettercap_dns_port} counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${interface}" tcp dport ${bettercap_proxy_port} counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${interface}" udp dport ${bettercap_dns_port} counter accept "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${loopback_interface}" counter accept else - "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp --destination-port ${bettercap_proxy_port} -j ACCEPT - "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p udp --destination-port ${bettercap_dns_port} -j ACCEPT + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp -i "${interface}" --destination-port ${bettercap_proxy_port} -j ACCEPT + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p udp -i "${interface}" --destination-port ${bettercap_dns_port} -j ACCEPT "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -i "${loopback_interface}" -j ACCEPT fi elif [ "${et_mode}" = "et_sniffing_sslstrip2_beef" ]; then if [ "${iptables_nftables}" -eq 1 ]; then - "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" tcp dport ${bettercap_proxy_port} counter accept - "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" udp dport ${bettercap_dns_port} counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${interface}" tcp dport ${bettercap_proxy_port} counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${interface}" udp dport ${bettercap_dns_port} counter accept "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${loopback_interface}" counter accept - "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" tcp dport ${beef_port} counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${interface}" tcp dport ${beef_port} counter accept else - "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp --destination-port ${bettercap_proxy_port} -j ACCEPT - "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p udp --destination-port ${bettercap_dns_port} -j ACCEPT + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp -i "${interface}" --destination-port ${bettercap_proxy_port} -j ACCEPT + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p udp -i "${interface}" --destination-port ${bettercap_dns_port} -j ACCEPT "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -i "${loopback_interface}" -j ACCEPT - "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp --destination-port ${beef_port} -j ACCEPT + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp -i "${interface}" --destination-port ${beef_port} -j ACCEPT fi fi From 6bd0f724afe594fbe665b37d8d3df7607f35f1fd Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Wed, 19 Jun 2024 15:02:38 +0200 Subject: [PATCH 86/92] Add the cleaning of the ips and the routes after evil twin attacks --- airgeddon.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/airgeddon.sh b/airgeddon.sh index 174d3e640..bbf763b59 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -1572,6 +1572,9 @@ function restore_et_interface() { iw dev "${iface_monitor_et_deauth}" del > /dev/null 2>&1 + ip addr del ${et_ip_router}/${std_c_mask} dev "${interface}" > /dev/null 2>&1 + ip route del ${et_ip_range}/${std_c_mask_cidr} dev "${interface}" table local proto static scope link > /dev/null 2>&1 + if [ "${et_initial_state}" = "Managed" ]; then set_mode_without_airmon "${interface}" "managed" ifacemode="Managed" From 599752fd2c7a9c8c776cffe57055fb7c05a37b85 Mon Sep 17 00:00:00 2001 From: zcbxxx1 <1393281966@qq.com> Date: Wed, 19 Jun 2024 22:14:25 +0800 Subject: [PATCH 87/92] update chinese strings update chinese strings 297, 719, 720, 721 --- language_strings.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/language_strings.sh b/language_strings.sh index cbe48568c..2fbaaf731 100644 --- a/language_strings.sh +++ b/language_strings.sh @@ -5203,7 +5203,7 @@ function initialize_language_strings() { arr["GERMAN",297]="Bereinigung von nftables/iptables und Routing-Regeln falls zutreffend" arr["TURKISH",297]="nftables/iptables ve routing rules varsa temizleniyor" arr["ARABIC",297]="وقواعد التوجيه إذا لزم nftables/iptables تنظيف" - arr["CHINESE",297]="\${pending_of_translation} 清理 nftables/iptables 和路由规则 如果适用" + arr["CHINESE",297]="清理 nftables/iptables 路由规则 (如果适用)" arr["ENGLISH",298]="Evil Twin attack has been started. Press [Enter] key on this window to stop it" arr["SPANISH",298]="El ataque Evil Twin ha comenzado. Pulse la tecla [Enter] en esta ventana para pararlo" @@ -11111,7 +11111,7 @@ function initialize_language_strings() { arr["GERMAN",719]="Einer Ihrer WLAN-Adapter hat einen integrierten Ländercode, der sich von dem auf Ihrem System unterscheidet. Wenn dies geschieht, erstellt der Kernel eine spezielle Regulierungsdomäne \"\${normal_color}99\${yellow_color}\", die nur Berechtigungen in BEIDEN Registrierungsdomänen enthält. Entweder stammt Ihre Hardware aus einer anderen Region oder Sie haben Ihre Reg-Domain falsch eingestellt und die Funktionalität absichtlich eingeschränkt" arr["TURKISH",719]="Wifi bağdaştırıcılarınızdan birinde, sisteminizde ayarlanandan farklı bir yerleşik ülke kodu var. Bu gerçekleştiğinde Kernel, yalnızca HER İKİ Reg etki alanındaki izinleri içeren özel bir düzenleyici etki alanı \"\${normal_color}99\${yellow_color}\" oluşturur. Ya donanımınız farklı bir bölgeye ait ya da reg alan adınızı yanlış ayarladınız ve işlevselliğinizi bilerek sınırladınız" arr["ARABIC",719]="والذي يحتوي فقط على الأذونات في كلا نطاقي التسجيل. إما أن جهازك ينتمي إلى منطقة مختلفة، أو أنك قمت بتعيين نطاق التسجيل الخاص بك بشكل غير صحيح وقمت بتقييد وظائفك عن قصد \"\${yellow_color}99\${normal_color}\" بانشاء مجال تنظيمي مخصص kernel علي رمز بلد غير الرمز الموجود علي نظامك. عندما يحدث هذا, يقوم ال wireless adapter يحتوي احدى ال " - arr["CHINESE",719]="\${pending_of_translation} 您的其中一款 WiFi 适配器的内置国家/地区代码与您系统上设置的国家/地区代码不同。当发生这种情况时,内核会创建一个自定义监管域 \"\${normal_color}99\${yellow_color}\",其中仅包含两个监管域中的权限。您的硬件来自不同的地区,或者您不正确地设置了您的注册域并故意限制了您的功能" + arr["CHINESE",719]="您的其中一款 WiFi 适配器的内置国家/地区代码与您系统上设置的国家/地区代码不同。当发生这种情况时,系统内核会创建一个自定义的监管域 \"\${normal_color}99\${yellow_color}\",其中仅包含两个监管域中的权限。发生这种情况可能是您的硬件来自不同的地区,或您不正确地设置了注册域并故意限制了您的功能" arr["ENGLISH",720]="It was detected more than one airgeddon instance running. Keep in mind that sharing and using the same wireless adapter in more than one instance at the same time, probably will lead to uncontrolled errors or unexpected results" arr["SPANISH",720]="Se ha detectado más de una instancia de airgeddon ejecutándose. Ten en cuenta que compartir y utilizar el mismo adaptador inalámbrico en más de una instancia al mismo tiempo probablemente provocará errores no controlados o resultados inesperados" @@ -11125,7 +11125,7 @@ function initialize_language_strings() { arr["GERMAN",720]="Es wurde festgestellt, dass mehr als eine Airgeddon-Instanz ausgeführt wird. Beachten Sie, dass die gemeinsame Nutzung und Verwendung desselben WLAN-Adapters in mehreren Instanzen gleichzeitig wahrscheinlich zu unkontrollierten Fehlern oder unerwarteten Ergebnissen führt" arr["TURKISH",720]="airgeddon'un birden fazla kere aynı anda çalıştığı tespit edildi. Aynı kablosuz bağdaştırıcıyı aynı anda paylaşmanın ve kullanmanın muhtemelen kontrol edilemeyen hatalara veya beklenmeyen sonuçlara yol açacağını unutmayın" arr["ARABIC",720]="في أكثر من حالة في نفس الوقت، قد يؤدي على الأرجح إلى أخطاء لا يمكن التحكم فيها أو نتائج غير متوقعة wireless adapter قيد التشغيل. يجب العلم أن مشاركة واستخدام نفس airgeddon تم اكتشاف وجود أكثر من " - arr["CHINESE",720]="\${pending_of_translation} 检测到有多个 airgeddon 实例正在运行。请记住,同时在多个实例中共享和使用同一个无线适配器可能会导致无法控制的错误或意外结果" + arr["CHINESE",720]="检测到有多个 airgeddon 实例正在运行。请注意,在多个实例中共享并使用同一个无线适配器可能会导致无法控制的错误或意外结果" arr["ENGLISH",721]="Number of running instances: \${normal_color}\${airgeddon_running_instances_counter}" arr["SPANISH",721]="Número de instancias en ejecución: \${normal_color}\${airgeddon_running_instances_counter}" @@ -11139,7 +11139,7 @@ function initialize_language_strings() { arr["GERMAN",721]="Anzahl der laufenden Instanzen: \${normal_color}\${airgeddon_running_instances_counter}" arr["TURKISH",721]="Çalışan airgeddon uygulamalarının sayısı: \${normal_color}\${airgeddon_running_instances_counter}" arr["ARABIC",721]="\${normal_color}\${airgeddon_running_instances_counter}\${blue_color} :عدد المثيلات قيد التشغيل" - arr["CHINESE",721]="\${pending_of_translation} 正在运行的实例数:\${normal_color}\${airgeddon_running_instances_counter}" + arr["CHINESE",721]="正在运行的实例数:\${normal_color}\${airgeddon_running_instances_counter}" } #Expand escaped variables in language strings with their actual values From 2e691d0f62f0a8cf2546ff5f3fce8620edf18067 Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Wed, 19 Jun 2024 18:38:24 +0200 Subject: [PATCH 88/92] Fix error on cleaning iptables/nftables that was happening when second evil twin was launched on the first instance --- airgeddon.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index bbf763b59..c8594bfde 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -6157,7 +6157,7 @@ function clean_initialize_iptables_nftables() { debug_print if [ "${1}" = "start" ]; then - if is_first_routing_modifier_airgeddon_instance; then + if [[ "${clean_all_iptables_nftables}" -eq 1 ]] && is_first_routing_modifier_airgeddon_instance; then clean_all_iptables_nftables fi prepare_iptables_nftables @@ -6465,6 +6465,7 @@ function is_first_routing_modifier_airgeddon_instance() { [[ "${item}" =~ ^(et)?([0-9]+)rs[0-1]$ ]] && agpid="${BASH_REMATCH[2]}" if [ "${agpid}" = "${BASHPID}" ]; then + clean_all_iptables_nftables=0 return 0 fi done @@ -10155,7 +10156,7 @@ function set_std_internet_routing_rules() { debug_print control_routing_status "start" - if is_first_routing_modifier_airgeddon_instance && [[ ! -f "${system_tmpdir}${routing_tmp_file}" ]]; then + if [ ! -f "${system_tmpdir}${routing_tmp_file}" ]; then save_iptables_nftables fi @@ -15892,6 +15893,7 @@ function initialize_script_settings() { custom_certificates_cn="" card_vif_support=0 country_code="00" + clean_all_iptables_nftables=1 } #Detect graphics system From 5d4993558ad40f7cb43df4b89d6c68db62de71fc Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Thu, 20 Jun 2024 17:26:51 +0200 Subject: [PATCH 89/92] Fix error appearing on heredoc during evil twin captive portal attack caused by a bad/quick copy paste --- airgeddon.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index c8594bfde..d0f10cf4d 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -11072,8 +11072,6 @@ function set_et_control_script() { function kill_pid_and_children_recursive() { - debug_print - local parent_pid="" local child_pids="" From a5674c735b049516d2089ae69f120ec7b51c619b Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Mon, 24 Jun 2024 09:44:54 +0200 Subject: [PATCH 90/92] Fix shellcheck warnings --- airgeddon.sh | 56 ++++++++++++++++++++++++++-------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/airgeddon.sh b/airgeddon.sh index d0f10cf4d..92c7499c2 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -1572,8 +1572,8 @@ function restore_et_interface() { iw dev "${iface_monitor_et_deauth}" del > /dev/null 2>&1 - ip addr del ${et_ip_router}/${std_c_mask} dev "${interface}" > /dev/null 2>&1 - ip route del ${et_ip_range}/${std_c_mask_cidr} dev "${interface}" table local proto static scope link > /dev/null 2>&1 + ip addr del "${et_ip_router}/${std_c_mask}" dev "${interface}" > /dev/null 2>&1 + ip route del "${et_ip_range}/${std_c_mask_cidr}" dev "${interface}" table local proto static scope link > /dev/null 2>&1 if [ "${et_initial_state}" = "Managed" ]; then set_mode_without_airmon "${interface}" "managed" @@ -10160,8 +10160,8 @@ function set_std_internet_routing_rules() { save_iptables_nftables fi - ip addr add ${et_ip_router}/${std_c_mask} dev "${interface}" > /dev/null 2>&1 - ip route add ${et_ip_range}/${std_c_mask_cidr} dev "${interface}" table local proto static scope link > /dev/null 2>&1 + ip addr add "${et_ip_router}/${std_c_mask}" dev "${interface}" > /dev/null 2>&1 + ip route add "${et_ip_range}/${std_c_mask_cidr}" dev "${interface}" table local proto static scope link > /dev/null 2>&1 routing_modified=1 clean_initialize_iptables_nftables "start" @@ -10170,54 +10170,54 @@ function set_std_internet_routing_rules() { if [ "${et_mode}" = "et_captive_portal" ]; then if [ "${iptables_nftables}" -eq 1 ]; then - "${iptables_cmd}" add rule ip nat_"${airgeddon_instance_name}" prerouting_"${airgeddon_instance_name}" iifname "${interface}" tcp dport ${www_port} counter dnat to ${et_ip_router}:${www_port} - "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${interface}" tcp dport ${www_port} counter accept - "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${interface}" tcp dport ${https_port} counter accept - "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${interface}" udp dport ${dns_port} counter accept + "${iptables_cmd}" add rule ip nat_"${airgeddon_instance_name}" prerouting_"${airgeddon_instance_name}" iifname "${interface}" tcp dport "${www_port}" counter dnat to "${et_ip_router}:${www_port}" + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${interface}" tcp dport "${www_port}" counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${interface}" tcp dport "${https_port}" counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${interface}" udp dport "${dns_port}" counter accept else - "${iptables_cmd}" -t nat -A PREROUTING -p tcp -i "${interface}" --dport ${www_port} -j DNAT --to-destination ${et_ip_router}:${www_port} - "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp -i "${interface}" --destination-port ${www_port} -j ACCEPT - "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp -i "${interface}" --destination-port ${https_port} -j ACCEPT - "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p udp -i "${interface}" --destination-port ${dns_port} -j ACCEPT + "${iptables_cmd}" -t nat -A PREROUTING -p tcp -i "${interface}" --dport "${www_port}" -j DNAT --to-destination "${et_ip_router}:${www_port}" + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp -i "${interface}" --destination-port "${www_port}" -j ACCEPT + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp -i "${interface}" --destination-port "${https_port}" -j ACCEPT + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p udp -i "${interface}" --destination-port "${dns_port}" -j ACCEPT fi elif [ "${et_mode}" = "et_sniffing_sslstrip2" ]; then if [ "${iptables_nftables}" -eq 1 ]; then - "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${interface}" tcp dport ${bettercap_proxy_port} counter accept - "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${interface}" udp dport ${bettercap_dns_port} counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${interface}" tcp dport "${bettercap_proxy_port}" counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${interface}" udp dport "${bettercap_dns_port}" counter accept "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${loopback_interface}" counter accept else - "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp -i "${interface}" --destination-port ${bettercap_proxy_port} -j ACCEPT - "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p udp -i "${interface}" --destination-port ${bettercap_dns_port} -j ACCEPT + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp -i "${interface}" --destination-port "${bettercap_proxy_port}" -j ACCEPT + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p udp -i "${interface}" --destination-port "${bettercap_dns_port}" -j ACCEPT "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -i "${loopback_interface}" -j ACCEPT fi elif [ "${et_mode}" = "et_sniffing_sslstrip2_beef" ]; then if [ "${iptables_nftables}" -eq 1 ]; then - "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${interface}" tcp dport ${bettercap_proxy_port} counter accept - "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${interface}" udp dport ${bettercap_dns_port} counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${interface}" tcp dport "${bettercap_proxy_port}" counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${interface}" udp dport "${bettercap_dns_port}" counter accept "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${loopback_interface}" counter accept - "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${interface}" tcp dport ${beef_port} counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${interface}" tcp dport "${beef_port}" counter accept else - "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp -i "${interface}" --destination-port ${bettercap_proxy_port} -j ACCEPT - "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p udp -i "${interface}" --destination-port ${bettercap_dns_port} -j ACCEPT + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp -i "${interface}" --destination-port "${bettercap_proxy_port}" -j ACCEPT + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p udp -i "${interface}" --destination-port "${bettercap_dns_port}" -j ACCEPT "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -i "${loopback_interface}" -j ACCEPT - "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp -i "${interface}" --destination-port ${beef_port} -j ACCEPT + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -p tcp -i "${interface}" --destination-port "${beef_port}" -j ACCEPT fi fi if [ "${et_mode}" != "et_captive_portal" ]; then if [ "${iptables_nftables}" -eq 1 ]; then - "${iptables_cmd}" add rule nat_"${airgeddon_instance_name}" postrouting_"${airgeddon_instance_name}" ip saddr ${et_ip_range}/${std_c_mask_cidr} oifname "${internet_interface}" counter masquerade + "${iptables_cmd}" add rule nat_"${airgeddon_instance_name}" postrouting_"${airgeddon_instance_name}" ip saddr "${et_ip_range}/${std_c_mask_cidr}" oifname "${internet_interface}" counter masquerade else - "${iptables_cmd}" -t nat -A POSTROUTING -s ${et_ip_range}/${std_c_mask} -o ${internet_interface} -j MASQUERADE + "${iptables_cmd}" -t nat -A POSTROUTING -s "${et_ip_range}/${std_c_mask}" -o "${internet_interface}" -j MASQUERADE fi fi if [ "${iptables_nftables}" -eq 1 ]; then - "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${interface}" ip daddr ${et_ip_router}/${ip_mask_cidr} icmp type echo-request ct state new,related,established counter accept - "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" ip daddr ${et_ip_router}/${ip_mask_cidr} counter drop + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" iifname "${interface}" ip daddr "${et_ip_router}/${ip_mask_cidr}" icmp type echo-request ct state new,related,established counter accept + "${iptables_cmd}" add rule ip filter_"${airgeddon_instance_name}" input_"${airgeddon_instance_name}" ip daddr "${et_ip_router}/${ip_mask_cidr}" counter drop else - "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -i "${interface}" -p icmp --icmp-type 8 -d ${et_ip_router}/${ip_mask} -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT - "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -d ${et_ip_router}/${ip_mask} -j DROP + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -i "${interface}" -p icmp --icmp-type 8 -d "${et_ip_router}/${ip_mask}" -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT + "${iptables_cmd}" -A input_"${airgeddon_instance_name}" -d "${et_ip_router}/${ip_mask}" -j DROP fi sleep 2 } From 0f72cfbb1d9373b0c7bf270ceb6dffdda03199cc Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Mon, 1 Jul 2024 23:09:27 +0200 Subject: [PATCH 91/92] Fix error shown while checking if a handshake is wpa2 when wpa3 handshake is captured --- CHANGELOG.md | 1 + airgeddon.sh | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 68e50e9cf..97dff9748 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ - Improvements on 5Ghz country code check and 5Ghz band capability detection on adapters - Fixed bug to avoid set advanced captive portal on second time if is not desired after setting it previously - Now channel is automatically updated on control window during "DoS pursuit mode" for all Evil Twin attacks + - Fixed error shown while checking if a handshake is wpa2 when wpa3 handshake is captured ### 11.22 - Possibility to add manually ESSID name for selected hidden networks diff --git a/airgeddon.sh b/airgeddon.sh index 92c7499c2..9e3ba15c4 100755 --- a/airgeddon.sh +++ b/airgeddon.sh @@ -7996,7 +7996,7 @@ function check_bssid_in_captured_file() { if [[ "${handshake_captured}" = "1" ]] || [[ "${pmkid_captured}" = "1" ]]; then if [[ "${2}" = "showing_msgs_capturing" ]] || [[ "${2}" = "showing_msgs_checking" ]]; then - if ! is_wpa2_handshake "${1}" "${bssid}"; then + if ! is_wpa2_handshake "${1}" "${bssid}" > /dev/null 2>&1; then echo language_strings "${language}" 700 "red" language_strings "${language}" 115 "read" From a272e3610f53e7548bd8dac1f32af9a419b342fb Mon Sep 17 00:00:00 2001 From: v1s1t0r1sh3r3 Date: Tue, 2 Jul 2024 10:15:42 +0200 Subject: [PATCH 92/92] Update wiki screenshots --- imgs/wiki/airgeddon_scrs1.png | Bin 22540 -> 21465 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/imgs/wiki/airgeddon_scrs1.png b/imgs/wiki/airgeddon_scrs1.png index 9157662b6fc42457e71ade5a1f6dc86370b7e562..c8651b50ddeba2107cdbaff982e8a4283dd84463 100644 GIT binary patch literal 21465 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 literal 22540 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