diff --git a/attacks/Handshake Snooper/attack.sh b/attacks/Handshake Snooper/attack.sh index 540d1bf..4788292 100755 --- a/attacks/Handshake Snooper/attack.sh +++ b/attacks/Handshake Snooper/attack.sh @@ -224,6 +224,7 @@ handshake_snooper_set_deauthenticator_identifier() { handshake_snooper_unset_jammer_interface() { if [ ! "$HandshakeSnooperJammerInterface" ]; then return 1; fi HandshakeSnooperJammerInterface="" + HandshakeSnooperJammerInterfaceOriginal="" # Check if we're automatically selecting the interface & skip # this one if so to take the user back properly. @@ -238,19 +239,18 @@ handshake_snooper_set_jammer_interface() { #if [ "$HandshakeSnooperDeauthenticatorIdentifier" = \ # "$HandshakeSnooperMonitorMethodOption" ]; then return 0; fi - if [ ! "$HandshakeSnooperUninitializedJammerInterface" ]; then + if [ ! "$HandshakeSnooperJammerInterfaceOriginal" ]; then echo "Running get jammer interface." > $FLUXIONOutputDevice if ! fluxion_get_interface attack_targetting_interfaces \ "$HandshakeSnooperJammerInterfaceQuery"; then echo "Failed to get jammer interface" > $FLUXIONOutputDevice return 1 fi - local selectedInterface=$FluxionInterfaceSelected - else - local selectedInterface=$HandshakeSnooperUninitializedJammerInterface - unset HandshakeSnooperUninitializedJammerInterface + HandshakeSnooperJammerInterfaceOriginal=$FluxionInterfaceSelected fi + local selectedInterface=$HandshakeSnooperJammerInterfaceOriginal + if ! fluxion_allocate_interface $selectedInterface; then echo "Failed to allocate jammer interface" > $FLUXIONOutputDevice return 2 @@ -424,31 +424,6 @@ prep_attack() { IOUtilsHeader="handshake_snooper_header" - local -r attackPath="$FLUXIONPath/attacks/Handshake Snooper" - - # Attempt loading configuration if one is available. - # TODO: Enable this by removing extraneous " -a ! " when properly implemented. - if [ -f "$attackPath/attack.conf" ]; then - local choice=${1:+Y} - # TODO: This doesn't translate choices to the selected language. - while ! echo "$choice" | grep -q "^[ynYN]$" &> /dev/null; do - echo -ne "$FLUXIONVLine Would you like to repeat the last attack? [Y/n] " - read choice - if [ ! "$choice" ]; then break; fi - done - - if [ "${choice,,}" != "n" ]; then - local configuration - readarray -t configuration < <(more "$attackPath/attack.conf") - - HandshakeSnooperDeauthenticatorIdentifier=${configuration[0]} - HandshakeSnooperUninitializedJammerInterface=${configuration[1]} - HandshakeSnooperVerifierIdentifier=${configuration[2]} - HandshakeSnooperVerifierInterval=${configuration[3]} - HandshakeSnooperVerifierSynchronicity=${configuration[4]} - fi - fi - # Removed read-only due to local constant shadowing bug. # I've reported the bug, we can add it when fixed. local sequence=( @@ -463,15 +438,32 @@ prep_attack() { return 1 fi + HandshakeSnooperState="Ready" +} + +load_attack() { + local -r configurationPath=$1 + + local configuration + readarray -t configuration < <(more "$configurationPath") + + HandshakeSnooperDeauthenticatorIdentifier=${configuration[0]} + HandshakeSnooperJammerInterfaceOriginal=${configuration[1]} + HandshakeSnooperVerifierIdentifier=${configuration[2]} + HandshakeSnooperVerifierInterval=${configuration[3]} + HandshakeSnooperVerifierSynchronicity=${configuration[4]} +} + +save_attack() { + local -r configurationPath=$1 + # Store/overwrite attack configuration for pause & resume. # Order: DeauthID, JammerWI, VerifId, VerifInt, VerifSync - echo "$HandshakeSnooperDeauthenticatorIdentifier" > "$attackPath/attack.conf" - echo "$HandshakeSnooperJammerInterface" >> "$attackPath/attack.conf" - echo "$HandshakeSnooperVerifierIdentifier" >> "$attackPath/attack.conf" - echo "$HandshakeSnooperVerifierInterval" >> "$attackPath/attack.conf" - echo "$HandshakeSnooperVerifierSynchronicity" >> "$attackPath/attack.conf" - - HandshakeSnooperState="Ready" + echo "$HandshakeSnooperDeauthenticatorIdentifier" > "$configurationPath" + echo "$HandshakeSnooperJammerInterfaceOriginal" >> "$configurationPath" + echo "$HandshakeSnooperVerifierIdentifier" >> "$configurationPath" + echo "$HandshakeSnooperVerifierInterval" >> "$configurationPath" + echo "$HandshakeSnooperVerifierSynchronicity" >> "$configurationPath" } stop_attack() { diff --git a/fluxion.sh b/fluxion.sh index b235eb2..6a2a5ca 100755 --- a/fluxion.sh +++ b/fluxion.sh @@ -450,6 +450,22 @@ fluxion_handle_target_change() { FluxionTargetChannel=${targetInfo[2]} FluxionTargetSSIDClean=$(fluxion_target_normalize_SSID) + + if ! stop_attack; then + fluxion_conditional_bail "Target tracker failed to stop attack." + fi + + if ! load_attack "$FLUXIONPath/attacks/$FluxionAttack/attack.conf"; then + fluxion_conditional_bail "Target tracker failed to load attack." + fi + + if ! prep_attack; then + fluxion_conditional_bail "Target tracker failed to prep attack." + fi + + if ! fluxion_run_attack; then + fluxion_conditional_bail "Target tracker failed to start attack." + fi } # If target monitoring enabled, act on changes. @@ -1736,11 +1752,34 @@ fluxion_prep_attack() { # Check if attack provides tracking interfaces, get & set one. # TODO: Uncomment the lines below after implementation. - #if type -t attack_tracking_interfaces &> /dev/null; then - # if ! fluxion_target_set_tracker; then return 4; fi - #fi + if type -t attack_tracking_interfaces &> /dev/null; then + if ! fluxion_target_set_tracker; then return 4; fi + fi + + # If attack is capable of restoration, check for configuration. + if type -t load_attack &> /dev/null; then + # If configuration file available, check if user wants to restore. + if [ -f "$path/attack.conf" ]; then + local choice=${1:+Y} + # TODO: This doesn't translate choices to the selected language. + while ! echo "$choice" | grep -q "^[ynYN]$" &> /dev/null; do + echo -ne "$FLUXIONVLine Would you like to repeat the last attack? [Y/n] " + read choice + if [ ! "$choice" ]; then break; fi + done + + if [ "${choice,,}" != "n" ]; then + load_attack "$path/attack.conf" + fi + fi + fi if ! prep_attack; then return 5; fi + + # Save the attack for user's convenience if possible. + if type -t save_attack &> /dev/null; then + save_attack "$path/attack.conf" + fi } fluxion_run_attack() {