Этичный хакинг и тестирование на проникновение, информационная безопасность
Main Menu
Как обнаружить все Wi-Fi устройства в округе?
С помощью программы airodump-ng можно увидеть информацию о точках доступа и клиентах. Если точек доступа несколько, то всё просто и удобно, а что делать, если общее количество ТД и станций в пределах диапазона измеряется сотнями? Такое количество не влезет ни в один экран.
Также через airodump-ng неудобно сопоставлять подключённые к ТД станции.
При использовании с программой airodump-ng опции -w захваченные пакеты записываются в файл, ещё создаётся файл с расширением .csv, который можно открыть программой для работы с таблицами или текстовым редактором. В этом файле собрана информация об увиденных устройствах:
Плюсом этого файла является то, что, там хотя бы можно увидеть все обнаруженные устройства. Минус – неудобство анализа данных.
В результате я решил написать под собственные нужды (а если вы это читаете – то значит и поделиться с вами) небольшой скрипт для анализа файла .csv, создаваемого программой airodump-ng.
Скрипт умеет следующее:
показывает общее количество увиденных точек доступа, клиентов и не подключённых к какой-либо ТД клиентов;
для каждой сети определяет производителя устройства;
выделяет сети, работающие на 5 ГГц;
для каждой сети показывает подключённых к ней клиентов;
для каждого клиента определяет производителя устройства, на основе этих данных предполагает, является ли устройство мобильным телефоном, может ли поддерживать режим монитора;
показывает сети, к которым пытался подключиться каждый клиент;
показывает всех клиентов, не подключённых ни к какой сети, и отображает для них сети, которые они искали.
Пример данных, которые выводит скрипт (данные получены из одного места без перемещения, за 1+ час):
Чтобы проанализировать файл .csv, нужно, чтобы airodump-ng его создала. Для этого переводим беспроводную карту в режим монитора. Я всегда начинаю со следующих двух команд, чтобы не мешали никакие процессы:
—berlin 60000 используется для того, чтобы из списка не исключались ТД и Станции, которые ушли из вида
-w /tmp/test – для сохранения файлов в директорию /tmp/ с префиксом test
—channel 1-13,36-165 говорит переключаться по всем возможным каналам, включая 5 ГГц.
Теперь создайте файл wfw.sh:
gedit wfw.sh
и скопируйте туда следующее
Развернуть
#!/bin/bash
if [[ "$1" && -f "$1" ]]; then
FILE="$1"
else
echo 'Укажите .csv файл, который вы хотите проанализировать.';
echo 'Пример запуска:';
echo -e "\tbash wfw.sh /tmp/test-01.csv";
exit
fi
echo -e "\033[1mВсего точек доступа: \033[0;31m`grep -E '([A-Za-z0-9._: @\(\)\\=\[\{\}\"%;-]+,){14}' $FILE | wc -l`\e[0m"
echo -e "\033[1mВсего клиентов: \033[0;31m`grep -E '([A-Za-z0-9._: @\(\)\\=\[\{\}\"%;-]+,){5} ([A-Z0-9:]{17})|(not associated)' $FILE | wc -l`\e[0m"
echo -e "\033[1mИз них клиентов без ассоциации: \033[0;31m`grep -E '(not associated)' $FILE | wc -l`\e[0m"
echo -e "\033[0;36m\033[1mИнформация о сетях:\e[0m"
while read -r line ; do
if [ "`echo "$line" | cut -d ',' -f 14`" != " " ]; then
echo -e "\033[1m" `echo -e "$line" | cut -d ',' -f 14` "\e[0m"
else
echo -e " \e[3mне удалось получить имя сети\e[0m"
fi
fullMAC=`echo "$line" | cut -d ',' -f 1`
echo -e "\tMAC-адрес: $fullMAC"
MAC=`echo "$fullMAC" | sed 's/ //g' | sed 's/-//g' | sed 's/://g' | cut -c1-6`
result="$(grep -i -A 1 ^$MAC ./oui.txt)";
if [ "$result" ]; then
echo -e "\tПроизводитель: `echo "$result" | cut -f 3`"
else
echo -e "\tПроизводитель: \e[3mИнформация не найдена в базе данных.\e[0m"
fi
is5ghz=`echo "$line" | cut -d ',' -f 4 | grep -i -E '36|40|44|48|52|56|60|64|100|104|108|112|116|120|124|128|132|136|140'`
if [ "$is5ghz" ]; then
echo -e "\t\033[0;31mРаботает на 5 ГГц!\e[0m"
fi
printonce="\tИнформация о подключённых клиентах:"
while read -r line2 ; do
clientsMAC=`echo $line2 | grep -E "$fullMAC"`
if [ "$clientsMAC" ]; then
if [ "$printonce" ]; then
echo -e $printonce
printonce=''
fi
echo -e "\t\t\033[0;32m" `echo $clientsMAC | cut -d ',' -f 1` "\e[0m"
MAC2=`echo "$clientsMAC" | sed 's/ //g' | sed 's/-//g' | sed 's/://g' | cut -c1-6`
result2="$(grep -i -A 1 ^$MAC2 ./oui.txt)";
if [ "$result2" ]; then
echo -e "\t\t\tПроизводитель: `echo "$result2" | cut -f 3`"
ismobile=`echo $result2 | grep -i -E 'Olivetti|Sony|Mobile|Apple|Samsung|HUAWEI|Motorola|TCT|LG|Ragentek|Lenovo|Shenzhen|Intel|Xiaomi|zte'`
warning=`echo $result2 | grep -i -E 'ALFA|Intel'`
if [ "$ismobile" ]; then
echo -e "\t\t\t\033[0;33mВероятно, это мобильное устройство\e[0m"
fi
if [ "$warning" ]; then
echo -e "\t\t\t\033[0;31;5;7mУстройство может поддерживать режим монитора\e[0m"
fi
else
echo -e "\t\t\tПроизводитель: \e[3mИнформация не найдена в базе данных.\e[0m"
fi
probed=`echo $line2 | cut -d ',' -f 7`
if [ "`echo $probed | grep -E [A-Za-z0-9_\\-]+`" ]; then
echo -e "\t\t\tИскал сети: $probed"
fi
fi
done < <(grep -E '([A-Za-z0-9._: @\(\)\\=\[\{\}\"%;-]+,){5} ([A-Z0-9:]{17})|(not associated)' $FILE)
done < <(grep -E '([A-Za-z0-9._: @\(\)\\=\[\{\}\"%;-]+,){14}' $FILE)
echo -e "\033[0;36m\033[1mИнформация о неподключённых клиентах:\e[0m"
while read -r line2 ; do
clientsMAC=`echo $line2 | cut -d ',' -f 1`
echo -e "\033[0;31m" `echo $clientsMAC | cut -d ',' -f 1` "\e[0m"
MAC2=`echo "$clientsMAC" | sed 's/ //g' | sed 's/-//g' | sed 's/://g' | cut -c1-6`
result2="$(grep -i -A 1 ^$MAC2 ./oui.txt)";
if [ "$result2" ]; then
echo -e "\tПроизводитель: `echo "$result2" | cut -f 3`"
ismobile=`echo $result2 | grep -i -E 'Olivetti|Sony|Mobile|Apple|Samsung|HUAWEI|Motorola|TCT|LG|Ragentek|Lenovo|Shenzhen|Intel|Xiaomi|zte'`
warning=`echo $result2 | grep -i -E 'ALFA|Intel'`
if [ "$ismobile" ]; then
echo -e "\t\033[0;33mВероятно, это мобильное устройство\e[0m"
fi
if [ "$warning" ]; then
echo -e "\t\033[0;31;5;7mУстройство может поддерживать режим монитора\e[0m"
fi
else
echo -e "\tПроизводитель: \e[3mИнформация не найдена в базе данных.\e[0m"
fi
probed=`echo $line2 | cut -d ',' -f 7`
if [ "`echo $probed | grep -E [A-Za-z0-9_\\-]+`" ]; then
echo -e "\tИскал сети: $probed"
fi
done < <(grep -E '(not associated)' $FILE)
Также нам понадобиться файл с базой данных MAC-адресов и соответствующих им производителей, скачайте его в ту же директорию, где разместили файл wfw.sh
wget http://standards-oui.ieee.org/oui/oui.txt
Скрипт запускать так:
bash wfw.sh путь_до_файла.csv
Обратите внимание, что если вы несколько раз запускали программу airodump-ng, то она каждый раз создаёт новые файлы, не удаляя старые. Я использовал префикс test, поэтому при первом запуске в папке /tmp/ был создан файл test-01.csv. Именно его я и буду анализировать. Кстати, скрипт можно запускать прямо во время работы airodump-ng. Пример запуска:
bash wfw.sh /tmp/test-01.csv
Обратите внимание на данные:
Всего точек доступа: 118
Всего клиентов: 292
Из них клиентов без ассоциации: 205
Общее количество точек доступа (118) – именно столько моя беспроводная карта увидела Wi-Fi сетей в округе (без перемещения). Общее количество клиентов (292) – это все устройства, которые подключены или не подключены к ТД. Клиенты без ассоциации (205) – это те, кто не подключён ни к одной из Wi-Fi сетей (например, проходили мимо моего дома с телефоном, на котором включен Wi-Fi).
Для этой ТД не получено имя сети, тем не менее, один из подключённых к ней клиентов искал сеть с именем alisa. Вполне возможно, что это и есть имя данной сети:
Аналогично для сетей на следующих скриншотах:
С помощью скрипта можно искать разные артефакты в беспроводном пространстве, например, не только у меня есть Wi-Fi карта с режимом монитора:
Очень много устройств у которых MAC-адрес начинается с DA:A1:19 и при этом отсутствует в базе данных:
Хотя если погуглить, можно найти информацию, что этот диапазон принадлежит самой Гугл:
Также я нашёл упоминания, что случайные MAC-адрес с таким префиксом создают Android и iOS для приватности.
Заключение
Чтобы скрипт показал как можно больше информации, дайте airodump-ng поработать подольше, хотя бы минут 5-10.
В зависимости от целей, можно использовать данные, полученные в процессе перемещения.
Является ли устройство мобильником и поддерживает ли режим монитора предполагается исключительно исходя из имени производителя, т.е. данные могут быть неверными.
подскажите, а можно ли с помощью данного инструмента (или любого другого) вычислить дальность от точки до клиента. Может условную (в мсекундах) или неточную?
Доброго времени суток. Воспользовался вашим скриптом — отличный, спасибо)
Развернул Kali на Raspberri pi3, на интегрированной wlan запустил монитор и airdump-ng. Всё выглядит рабочим, но проблема подкралась откуда не ждали: включил на собственной мобиле wifi, увидел его, затем выключил/включил wifi на мобиле и… больше свой телефон в airodump-ng я не видел((( Более того моего MAC нет и в test-01.csv
Тоже самое сделал с ещё одним мобильным телефоном — тоже перестал видеться. С чем может быть связанно такое поведение? Может быть каким-то специальным образом нужно airodump-ng перезапускать?
Приветствую! Дело в том, что сейчас большинство телефонов работают следующим образом:
пока телефон НЕ подключён к какой-либо точке доступа, у него случайный MAC-адрес вида DA:A1:19*
когда телефон подключается к точке доступа, его MAC-адрес возвращается к настоящему.
Судя по вашему описанию, впервые вы увидели свой телефон, когда он был подключён к ТД. Затем вы пытались искать свой телефон, когда он НЕ был подключён к какой-либо ТД. Получается, что телефон в списке есть, но вы не можете его узнать, т.к. у него спуфится MAC-адрес. Подключитесь к ТД, и вы узнаете свой телефон.
"гугловских" МАС адрессов в списке действительно целая куча, Но дело было не только в этом. Телефон переподключённый к точке, изменил мак адрес. Под переподключением я имею ввиду забывание сети, и повторное подключение с вводом ключа.
Похоже что способом по МАС адресу идентифицировать пользователя нельзя. Есть ли какие-нибудь альтернативы идентификации посредством WiFi?
Пользовался скриптом и всё было прекрасно, пока не упёрся в лимит sd карты. Для того, что бы sd карта не выходила из строя (файловая система переключается в режим read only) вечно перезаписывающийся csv решил хранить в RAM диске. Благо в linux это делается без сторонних утилит одной строкой:
#Создаём каталог
sudo mkdir -p /ram
#Выделяем часть ОЗУ под RAM-disc
sudo mount -t tmpfs -o size=100m tmpfs /ram
Скрипты указанные в статье запускаем в связке с директорией /ram
Здравствуйте. Можно ли сейчас как-то обойти динамическией маки? Т.е. возможно ли узнать маки устройств в радиусе действия, не подключённых ни к каким ТД, грубо говоря, устройств "проходящих" мимо?
1. А что будет, если пользователь создаст shell-скрипт, у котого имя не wfw.sh? Для того, чтобы исправить досадную ошибку необходимо использовать "$(basename "$0")".
2. При попытки выполнить не из дериктории, в которых находится shell-скрипт, получаю "grep: ./oui.txt: Нет такого файла или каталога". Всё из-за того, что ищёт файл в текующей директории.
Ошибка в result2="$(grep -i -A 1 ^$MAC2 ./oui.txt)";. Как вариант исправления предлагаю использовать:
DIR="$( cd "$( dirname "$0" )" && pwd )"
result="$(grep -i -A 1 ^$MAC $DIR/oui.txt)";
Замечу, что у вас не только одна переменная, которая выполняет комманду — у Вас есть result2.
#airodump-ng-oui-update из пакета aircrack-ng
скачает в /etc/aircrack-ng/airodump-ng-oui.txt
После этого aircrack-ng будет выводить в своем окне производителя.
#airodump-ng-oui-update из пакета aircrack-ng
скачает в /etc/aircrack-ng/airodump-ng-oui.txt
После этого aircrack-ng будет выводить в своем окне производителя.
aircrack-ngairdump будет выводитьподскажите, а можно ли с помощью данного инструмента (или любого другого) вычислить дальность от точки до клиента. Может условную (в мсекундах) или неточную?
Доброго времени суток. Воспользовался вашим скриптом — отличный, спасибо)
Развернул Kali на Raspberri pi3, на интегрированной wlan запустил монитор и airdump-ng. Всё выглядит рабочим, но проблема подкралась откуда не ждали: включил на собственной мобиле wifi, увидел его, затем выключил/включил wifi на мобиле и… больше свой телефон в airodump-ng я не видел((( Более того моего MAC нет и в test-01.csv
Тоже самое сделал с ещё одним мобильным телефоном — тоже перестал видеться. С чем может быть связанно такое поведение? Может быть каким-то специальным образом нужно airodump-ng перезапускать?
Приветствую! Дело в том, что сейчас большинство телефонов работают следующим образом:
Судя по вашему описанию, впервые вы увидели свой телефон, когда он был подключён к ТД. Затем вы пытались искать свой телефон, когда он НЕ был подключён к какой-либо ТД. Получается, что телефон в списке есть, но вы не можете его узнать, т.к. у него спуфится MAC-адрес. Подключитесь к ТД, и вы узнаете свой телефон.
"гугловских" МАС адрессов в списке действительно целая куча, Но дело было не только в этом. Телефон переподключённый к точке, изменил мак адрес. Под переподключением я имею ввиду забывание сети, и повторное подключение с вводом ключа.
Похоже что способом по МАС адресу идентифицировать пользователя нельзя. Есть ли какие-нибудь альтернативы идентификации посредством WiFi?
В итоге
сканит, csv сохраняет, но скрип не отрабатывает(
root@kali:~/wifiscr# bash wfw.sh /tmp/test-01.csv
wfw.sh: строка 2: $'\r': команда не найдена
wfw.sh: строка 82: синтаксическая ошибка рядом с неожиданным маркером «fi»
'fw.sh: строка 82: `
Скорее всего, скопировали неправильно. Скачайте скрипт отсюда.
Отлично. Спасибо
Можете добавить в скрипт ещё мощность ap и клиентов?
Пользовался скриптом и всё было прекрасно, пока не упёрся в лимит sd карты. Для того, что бы sd карта не выходила из строя (файловая система переключается в режим read only) вечно перезаписывающийся csv решил хранить в RAM диске. Благо в linux это делается без сторонних утилит одной строкой:
Скрипты указанные в статье запускаем в связке с директорией /ram
А, как выйти из режима монитора (на следующем после дампа шаге файл с базой данных MAC-адресов не удается скачать)?
Здравствуйте. Можно ли сейчас как-то обойти динамическией маки? Т.е. возможно ли узнать маки устройств в радиусе действия, не подключённых ни к каким ТД, грубо говоря, устройств "проходящих" мимо?
1. А что будет, если пользователь создаст shell-скрипт, у котого имя не wfw.sh? Для того, чтобы исправить досадную ошибку необходимо использовать "$(basename "$0")".
echo -e "\tbash "$(basename "$0")" /tmp/test-01.csv";
2. При попытки выполнить не из дериктории, в которых находится shell-скрипт, получаю "grep: ./oui.txt: Нет такого файла или каталога". Всё из-за того, что ищёт файл в текующей директории.
Ошибка в result2="$(grep -i -A 1 ^$MAC2 ./oui.txt)";. Как вариант исправления предлагаю использовать:
DIR="$( cd "$( dirname "$0" )" && pwd )"
result="$(grep -i -A 1 ^$MAC $DIR/oui.txt)";
Замечу, что у вас не только одна переменная, которая выполняет комманду — у Вас есть result2.
Изменённый shell-скрипт: https://pastebin.com/x928m5j8
Проверте его прежде чем изменять статью.
P.S. Заметил, что у Вас в форме отверта битая ссылка. Речь о "подписаться".