Идентификация технологий, на которых работает веб-сайт (базовое и продвинутое использование WhatWeb)


Что такое WhatWeb

WhatWeb – это кроссплатформенная программа, она написана на Ruby и работает на популярных платформах, таких как Windows, Mac OSX и Linux. WhatWeb используется для определения на каких программах, каких версий работает веб-сайт. Собираемую информацию условно можно разделить на три группы:

  • о веб-сервере (используется ли Apache, nginx или что-то ещё, их версии, используется ли PHP и какой версии, какие заголовки отправляются, используется ли OpenSSL и какой версии и т.д.)
  • о платформе веб-сайта (какая используется система управления контентом и какой версии, какие используются библиотеки JavaScript, какие фреймворки и каких версий задействованы в работе веб-сайта и т.п.)
  • сопутствующая информация о веб-сайте (IP сайта, страна расположения веб-сервера, почтовые адреса, популярные инструменты аналитики и статистики и прочее)

Используемая информация может использоваться для различной аналитики, а также при тестировании на проникновении и при расследовании на основе открытых источников (для сопоставления принадлежности сайтов одному лицу, установлении личности владельца).

В настоящее время WhatWeb также имеет плагины для идентификации разнообразных встроенных устройств.

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

В этой инструкции будет рассмотрена работа с WhatWeb в ОС Linux.

В таких дистрибутивах как Kali Linux и BlackArch программа WhatWeb уже предустановлена.

Для установки в Ubuntu иили Linux Mint выполните в командной строке следующие команды:

sudo apt update
sudo apt install whatweb ruby-json ruby-rchardet

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

WhatWeb – это утилита программной строки, поэтому все действия нужно выполнять в консоли. Для использования базовых функций программы, достаточно указать адрес сайта:

whatweb адрес_сайта

Вместо адреса сайта может быть IP.

Пример:

whatweb suip.biz

Или:

whatweb 185.117.153.79

Будет выведена примерно следующая информация:

Проанализируем результат работы WhatWeb. Во-первых, видно, что собранная информация разделена на две группы. Первая:

http://suip.biz [302 Found] Apache[2.4.33], HTTPServer[Unix][Apache/2.4.33 (Unix) OpenSSL/1.1.0h PHP/7.2.4], IP[185.117.153.79], OpenSSL[1.1.0h], PHP[7.2.4], RedirectLocation[https://suip.biz/], Title[302 Found]

Вторая:

https://suip.biz/ [200 OK] Apache[2.4.33], Email[alexey@miloserdov.org], HTML5, HTTPServer[Unix][Apache/2.4.33 (Unix) OpenSSL/1.1.0h PHP/7.2.4], IP[185.117.153.79], OpenSSL[1.1.0h], PHP[7.2.4], Script[text/javascript], Strict-Transport-Security[max-age=15768000; includeSubDomains; preload], Title[Welcome!], UncommonHeaders[upgrade], X-Frame-Options[SAMEORIGIN], X-Powered-By[PHP/7.2.4]

В самом начале нам показан просканированный хост и протокол (http://suip.biz). За тем идёт ответ сервера [302 Found] – этот ответ означает, что запрашиваемый документ доступен по другому адресу, т.е. перемещён. Далее нам говорится, что хост работает с использованием веб-сервера Apache версии 2.4.33, на платформе Unix. При этом используется программа OpenSSL версии1.1.0h, а также PHP версии 7.2.4. Нам показан IP сервера — 185.117.153.79. Строка RedirectLocation[https://suip.biz/] говорит о том, про происходит редирект (перенаправление), в квадратных скобках указан адрес, куда нас перекидывает. В строке Title[302 Found] указано имя веб-страницы.

Итак, видно, что на странице с HTTP сайта нет, он использует протокол HTTPS и на него настроена переадресация.

WhatWeb самостоятельно переходит по указанному для переадресации адресу (это можно изменить в настройках) и также собирает там информацию. Из новых строк во второй секции мы видим [200 OK] – это код сервера, который означает, что всё в порядке и будет отправлен запрошенный документ. На веб-странице обнаружен адрес электронной почты Email[alexey@miloserdov.org], также веб-страница использует HTML5. На странице используются скрипты — text/javascript, а именно JavaScript, сервер отправляет заголовки Strict-Transport-Security[max-age=15768000; includeSubDomains; preload], X-Frame-Options[SAMEORIGIN], X-Powered-By[PHP/7.2.4], имеется нераспространённый заголовок upgrade. Заголовок страницы «Welcome!».

По умолчанию WhatWeb использует почти все свои плагины. Но если плагин не применим для данного сайта (например, плагин для распознавания phpBB, хотя сайт работает на WordPress), либо если плагин не дал никакой информации (плагин поиска адресов электронной почты на странице, где нет ни одного адреса email), то эти плагины ничего не выводят.

Также часто вы увидите в выводе строки:

  • JQuery – используется соответствующая библиотека на JavaScript
  • Cookies[XSRF-TOKEN,laravel_session] – информация о кукиз
  • Country[RUSSIAN FEDERATION][RU] – информация о стране, где расположен сервер
  • Google-Analytics[UA-11055654-3] – пример информации об использовании Google Analytics

Как узнать CMS (систему управления контентом) и платформу сайта

По умолчанию WhatWeb пытается определить КМС сайта. Но если веб-мастер предпринял шаги чтобы скрыть эти данные, то для более интенсивного сканирования имеется опция -a, которая определяет уровень «агрессии» сканирования:


Уровень агрессии контролирует баланс между скоростью/незаметностью и достоверностью.

  --aggression, -a=УРОВЕНЬ  Установить уровень агрессии. По умолчанию: 1.
  1. Незаметный         Сделать один HTTP запрос на каждую цель и также
                следовать перенаправлениям.
  3. Агрессивный            Если плагин уровня 1 совпадает, будут сделаны
                дополнительные запросы.
  4. Тяжёлый            Делает множество HTTP запросов на каждую цель.
                Пробуются URL из всех плагинов.

Как мы видим, по умолчанию установлен уровень 1. Дополнительные результаты вам может дать использование т.н. «агрессивного» уровня. Применяется так:

whatweb -a 3 ЦЕЛЬ

Пример:

whatweb -a 3 suip.biz

Использование Агрессивного уровня сканирования может дать более детальные сведения, например, о версии платформы, на которой работает веб-сайт. К примеру, обычный режим сканирования может показать, что сайт использует phpBB версии 2, а агрессивный режим сканирования может дать данные для этого же сайта, что используется phpBB версии 2, точнее >2.0.20. Или обычный режим сканирования показывает Joomla версии 1.5, а агрессивный режим может уточнить, что Joomla версии 1.5.13 — 1.5.14.

Хорошей практикой является использование Агрессивного режима с названием определённого плагина, более подробные сведения по которому вы хотите получить. Благодаря этому, с одной стороны, вы получите нужные вам сведения. А с другой – будет сделано намного меньше запросов, и вы будете менее заметны.

«Тяжёлый» режим является очень медленным. По умолчанию работа WhatWeb является логически оптимизированной – не делаются запросы от заведомо неприменимых плагинов. В Тяжёлом же режиме делается большое количество запросов.

Обход систем обнаружения вторжений (IDS)

Если мы попробуем просканировать сайт tools.kali.org:

whatweb -a 3 tools.kali.org

То мы получим:

http://tools.kali.org [301 Moved Permanently] Country[RESERVED][ZZ], HTTPServer[Sucuri/Cloudproxy], IP[192.124.249.6], RedirectLocation[https://tools.kali.org/], Title[301 Moved Permanently], UncommonHeaders[x-content-type-options,x-sucuri-id], X-Frame-Options[SAMEORIGIN], X-XSS-Protection[1; mode=block]

https://tools.kali.org/ [403 Forbidden] Country[RESERVED][ZZ], HTML5, HTTPServer[Sucuri/Cloudproxy], IP[192.124.249.6], Title[Sucuri WebSite Firewall - Access Denied], UncommonHeaders[x-content-type-options,x-sucuri-id], X-Frame-Options[SAMEORIGIN], X-XSS-Protection[1; mode=block]

Получены данные о сервере, но строка [403 Forbidden] говорит о том, что доступ для сканера на сайт закрыт. Поэтому мы недополучили информацию о движке сайта и прочем, что можно найти на HTML-страницах.

Скорее всего, нас «вычислили» по User Agent – пользовательскому агенту – это строка, которая отправляется в заголовке и характеризует программу, которая обращается к веб-сайту. По умолчанию отправляется WhatWeb/0.4.9, но с помощью опции -U можно вписать вызывающую больше доверия строку. Например:

whatweb -a 3 -U 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36' tools.kali.org

И сразу другой результат:

Мы видим, что используются:

  • WordPress[4.9.4]
  • All-in-one-SEO-Pack[2.5]
  • HTML5
  • JQuery[1.12.4]
  • MetaGenerator[Powered by Slider Revolution 5.4.7.2 — responsive, Mobile-Friendly Slider Plugin for WordPress with comfortable drag and drop interface.,Powered by WPBakery Page Builder — drag and drop page builder for WordPress.,WordPress 4.9.4]
  • PoweredBy[Slider,WPBakery]
  • Script[text/javascript],

Информация:


  • Email[info at kali.org]
  • Title[Penetration Testing Tools — Kali Linux]
  • x-pingback[https://tools.kali.org/xmlrpc.php]

Смена User Agent – это очень простой приём, который почти всегда работает.

Если проблемы со сканированием остались, то используйте эти опции:

  --max-threads, -t     Количество одновременных потоков. По умолчанию: 25.
  --wait=СЕКУНДЫ        Ждать СЕКУНД между подключениями.
                Это полезно, когда используется единичный поток.

Можно установить один поток и интервал между запросами в несколько секунд, чтоб меньше попадать в поле зрения IDS.

Плагины WhatWeb

На момент написания в WhatWeb более 1700 плагинов. С помощью опции -l можно вывести весь список с кратким описанием.

С помощью опции -I выводится список всех плагинов с подробной информацией. Также после -I можно указать ключевое слово для поиска:

whatweb -I wordpress

Аналогично для поиска плагинов работает опция —search-plugins, после котоорой нужно указать строку для поиска.

С помощью опции -p можно выбрать плагины, которые вы хотите использовать при сканировании. Каждый элемент может быть директорией, файлом или именем плагина и может опционально иметь модификатор +/.

Если модификатора нет, то используется только указанный плагин:

whatweb -a 3 -p /usr/share/whatweb/plugins-disabled/html-comments.rb spryt.ru

Если модификатор есть, то используется весь набор по умолчанию и плюс (или минус) указанный плагин, например:

whatweb -a 3 -p +/usr/share/whatweb/plugins-disabled/html-comments.rb spryt.ru

В Kali Linux плагины размещены в папке /usr/share/whatweb/plugins.

Отключённые по умолчанию плагины WhatWeb

В папке /usr/share/whatweb/plugins-disabled/ имеется ряд плагинов, которые по умолчанию не используются – в первую очередь из-за возможного обильного вывода полученной информации. В своих сканированиях вы можете включить один или несколько из перечисленных плагинов, используя опцию -p.


Имя Путь до файла в Kali Linux Описание
address /usr/share/whatweb/plugins-disabled/address.rb Плагин идентифицирует (X)HTML/XML элемент 'address' (адрес) и извлекает его значение.
adobe-flash-urls /usr/share/whatweb/plugins-disabled/adobe-flash-urls.rb Идентифицирует файлы adobe flash и пытается получить путь к файлу Flash.
atom_feed /usr/share/whatweb/plugins-disabled/atom_feed.rb Получает адрес AtomFeed (RSS-лента).
charset /usr/share/whatweb/plugins-disabled/charset.rb Определяет кодировку страницы, это нужно для вывода MongoDB. Проверяет только содержимое тега meta, не проверяет HTTP заголовок. Он пробует указанную кодировку, затем ascii, затем utf-8 затем использует CharDet fиз rchardet gem, что оказывает нагрузку на CPU. Тестирует преобразование в UTF-8 используя Iconv. В случае неуспеха возвращает Failed."
content-type /usr/share/whatweb/plugins-disabled/content-type.rb Определяет тип содержимого документа.
footer-hash /usr/share/whatweb/plugins-disabled/footer-hash.rb Анализирует подвал HTML. Переводит последние 500 символов исходного кода страницы в подпись (рассчитывает хеш). Активируется только для сайтов, у которых на странице больше 1000 символов. Это может использоваться для группировки веб-сайтов, созданных чем-то неожиданным. Успехом считается если плагин вернул одинаковый хеш для более чем 10% образцов. Некоторые типы сайтов имеют больше вариаций чем другие.
frame-urls /usr/share/whatweb/plugins-disabled/frame-urls.rb Этот плагин определяет такие HTML элементы как фреймы frame и iframe и собирает URL.
google-webmaster-verify /usr/share/whatweb/plugins-disabled/google-webmaster-verify.rb Этот плагин идентифицирует meta тег, используемый для верификации в Google Webmaster. Это может быть полезным для отслеживания веб-мастера на нескольких доменах.
header-hash /usr/share/whatweb/plugins-disabled/header-hash.rb Анализирует заголовок HTML. Переводит первые 500 символов в подпись. Это может использоваться для группировки веб-сайтов, созданных чем-то неожиданным. Успехом считается если плагин вернул одинаковый хеш для более чем 10% образцов. Некоторые типы сайтов имеют больше вариаций чем другие.
html-comments /usr/share/whatweb/plugins-disabled/html-comments.rb Этот плагин извлекает HTML комментарии из исходного кода HTML.
http-headers /usr/share/whatweb/plugins-disabled/http-headers.rb Этот плагин извлекает HTTP заголовки. Подробности о них: https://ru.wikipedia.org/wiki/Список_заголовков_HTTP
length /usr/share/whatweb/plugins-disabled/length.rb Длина HTML body.
links /usr/share/whatweb/plugins-disabled/links.rb Плагин пытается извлечь все ссылки из исходного кода HTML.
md5 /usr/share/whatweb/plugins-disabled/md5.rb MD5 сумма html body. Полезно для нахождения идентичных страниц.
meta-city /usr/share/whatweb/plugins-disabled/meta-city.rb Плагин извлекает город из мета тега city. Этот тег используется поисковым движком Gigablast.
meta-contact /usr/share/whatweb/plugins-disabled/meta-contact.rb Плагин получает контактное имя или email из мета тега contact.
meta-country /usr/share/whatweb/plugins-disabled/meta-country.rb Плагин извлекает страну из мета тега country. Этот тег используется поисковым движком Gigablast.
meta-description /usr/share/whatweb/plugins-disabled/meta-description.rb Этот плагин извлекает описание из мета тэга description.
meta-geography /usr/share/whatweb/plugins-disabled/meta-geography.rb Плагин получает содержимое мета тега geography.
meta-keywords /usr/share/whatweb/plugins-disabled/meta-keywords.rb Плагин получает содержимое мета тега keywords.
meta-state /usr/share/whatweb/plugins-disabled/meta-state.rb Плагин извлекает страну из мета тега state. Этот тег используется поисковым движком Gigablast.
meta-zipcode /usr/share/whatweb/plugins-disabled/meta-zipcode.rb Плагин извлекает ZIP-код (почтовый индекс) из мета тега zipcode. Этот тег используется поисковым движком Gigablast.
mobile-website /usr/share/whatweb/plugins-disabled/mobile-website.rb Этот плагин выявляет веб-сайты, предназначенные для мобильных устройств.
post-parameters /usr/share/whatweb/plugins-disabled/post-parameters.rb Этот плагин извлекает URL форм, отправляемых методом post, а также параметры 'id' и 'name' из элементов <input>, <select> и <textarea> внутри элементов <form>, которые использует метод POST. Он не может выявить POST параметры, используемые асинхронным javascript. Больше информации о POST: https://ru.wikipedia.org/wiki/POST_(HTTP)
rss_feed /usr/share/whatweb/plugins-disabled/rss_feed.rb Этот плагин находит RSS фиды и извлекает источник (адрес) RSS фида.
script-urls /usr/share/whatweb/plugins-disabled/script-urls.rb Этот плагин выявляет экземпляры HTML элементов script и получает URL.
shortcut-icon /usr/share/whatweb/plugins-disabled/shortcut-icon.rb Этот плагин получает путь до favicon (иконки сайта).
subdomains /usr/share/whatweb/plugins-disabled/subdomains.rb Этот плагин находит и извлекает субдомены из параметров href и src любых обнаруженных HTML элементов.
tagpattern-hash /usr/share/whatweb/plugins-disabled/tagpattern-hash.rb Нечеткое сопоставление шаблонов. Анализирует структуру тегов HTML. Переводит порядок открытия и закрытия тегов в подпись. Порог установлен как минимум на 12 открывающих или закрывающих тегов. Это можно использовать для группировки веб-сайтов, созданных чем-то неожиданным. Подпись хешируется для экономии размера файла журнала. Необработанные подписи могут использоваться для группировки по подобию.
vary /usr/share/whatweb/plugins-disabled/vary.rb Этот плагин извлекает значение HTTP заголовка vary. Это редко бывает полезным, тем не менее, это идентифицирует веб-сайты, которые фильтруют на основе пользовательского агента, если 'user-agent' присутствует в заголовке vary.

Примеры использования этих плагинов.

Определение типа документа:

whatweb -p /usr/share/whatweb/plugins-disabled/content-type.rb https://kali.tools/files/passwords/password_dictionaries/500-worst-passwords.txt.bz2
https://kali.tools/files/passwords/password_dictionaries/500-worst-passwords.txt.bz2 [200 OK] Content-Type[application/x-bzip2]
whatweb -p /usr/share/whatweb/plugins-disabled/content-type.rb kali.tools
http://kali.tools [302 Found] Content-Type[text/html; charset=iso-8859-1]
https://kali.tools/ [200 OK] Content-Type[text/html; charset=UTF-8]

Смотрим комментарии в исходном коде страницы:

whatweb -p /usr/share/whatweb/plugins-disabled/html-comments.rb xakep.ru | tr , '\n'

В предыдущей команде используется tr , '\n' чтобы каждый комментарий выводился на отдельной строке.


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

whatweb -p +/usr/share/whatweb/plugins-disabled/html-comments.rb xakep.ru

Можно указывать сразу по несколько плагинов:

whatweb -p /usr/share/whatweb/plugins-disabled/atom_feed.rb,/usr/share/whatweb/plugins-disabled/rss_feed.rb https://hackware.ru

Получение содержимого тега description:

whatweb -p /usr/share/whatweb/plugins-disabled/meta-description.rb habrahabr.ru

Сканирование сайтов, где требуется вход

Если для доступа к содержимому сайта требуется выполнить вход – ввести логин и пароль, то больше информации можно получить если выполнять сканирование от залогированного пользователя. WhatWeb поддерживает аутентификацию двух видов:

  --user, -u=<пользователь:пароль>    Базовая аутентификация HTTP.
  --cookie, -c=КУКИЗ        Использовать кукиз, напр. 'имя=значение; имя2=значение2'.

Кукиз можно использовать когда применяется вход через веб-форму. Для этого вам нужно совершить вход и посмотреть, какие кукиз были установлены веб-сайтом. Для этого удобно использовать программу Burp Suite. Если передавать серверу верные кукиз, то он будет обрабатывать запросы WhatWeb как от совершившего вход пользователя. Т.е. будет показывать ему страницу, доступную для вошедшего пользователя.

Вывод и сохранение результатов WhatWeb

Имеется много опций для сохранения результатов сканирования в разных форматах:

  --log-brief=ФАЙЛ      Краткий лог, однострочный вывод.
  --log-verbose=ФАЙЛ        Вербальный вывод лога.
  --log-errors=ФАЙЛ     Журнал ошибок.
  --log-xml=ФАЙЛ        Лог в формате XML.
  --log-json=ФАЙЛ       Лог в формате JSON.
  --log-sql=ФАЙЛ        Журнал выражений SQL INSERT.
  --log-sql-create=ФАЙЛ     Создать таблицы базы данных SQL.
  --log-json-verbose=ФАЙЛ   Вербальный лог в формате JSON.
  --log-magictree=ФАЙЛ      Лог в формате MagicTree XML.
  --log-object=ФАЙЛ     Лог в формате Ruby object inspection.
  --log-mongo-database      Имя базы данных MongoDB.
  --log-mongo-collection    Имя коллекции MongoDB.
                По умолчанию: whatweb.
  --log-mongo-host      Имя хоста или IP адрес MongoDB.
                По умолчанию: 0.0.0.0.
  --log-mongo-username      Имя пользователя MongoDB. По умолчанию: nil.
  --log-mongo-password      Пароль MongoDB. По умолчанию: nil.
  --log-elastic-index       Имя индекса для хранения результатов. По умолчанию: whatweb 
  --log-elastic-host        Хост:порт elastic http интерфейса. По умолчанию: 127.0.0.1:9200

Можно одновременно сохранять в разные форматы, если указать несколько опций журналирования. Продвинутым пользователям, которые хотят SQL вывод, следует прочитать исходный код, чтобы увидеть неподдерживаемые возможности.

Модификация целей

Для этого имеются следующие опции:

  --url-prefix          Добавить префикс к целевому URL.
  --url-suffix          Добавить суффикс к целевому URL.
  --url-pattern         Вставить цели в URL.
                например example.com/%insert%/robots.txt

Опции —url-prefix и —url-suffix довольно понятны. С помощью первой удобнов сканировать одинаковый субдомен на ряде сайтов. А с помощью второй можно сканировать одинаковую папку или страницу также на ряде сайтов.

Опция —url-pattern вставляет цели в URL. Она требует, чтобы также была установлена опция —input-file. Её можно использовать двумя способами. Главное правило: она вставляет строки из файла —input-file в то место, где указано %insert%.

К примеру, имеется файл targets.txt с содержимым:

blog
admin
news

Если запустить команду следующим образом:

whatweb --url-pattern='mi-al.ru/%insert%/' --input-file=targets.txt

То будут просканированы цели mi-al.ru/blog/, mi-al.ru/admin/, mi-al.ru/news/

В файл targets.txt можно записать URL адреса:

mi-al.ru
suip.biz

Если запустить команду следующим образом:

whatweb --url-pattern='blog.%insert%/' --input-file=targets.txt

То будут просканированы цели blog.suip.biz и blog.mi-al.ru.

Паттерн может быть более сложным, например: blog.%insert%/admin и пр.

Сканирование в WhatWeb целей из стандартного ввода

Как сказано в справке, с опцией —input-file=ФАЙЛ, -i в качестве имени файла можно указать /dev/stdin. В этом случае хосты будут считываться из стандартного ввода.

При необходимости, можно не использовать опцию -i и также считывать стандартный ввод, если запустить следующую конструкцию:

echo mi-al.ru | whatweb $(</dev/stdin)

Решение проблемы с ошибкой ERROR: uninitialized constant Target::OpenSSL

На некоторых системах при сканировании сайтов, использующих протокол HTTPS, в WhatWeb может появляться ошибка:

https://mi-al.ru/ ERROR: uninitialized constant Target::OpenSSL

Также вместо результатов сканирования для HTTPS адреса выводится слово [ Unassigned].

Ошибка возникает при работе на ruby 2.5-* и её довольно просто исправить. Можно, например, использовать ruby 2.4, но я предпочитаю более простой вариант. Находим исполнимый файл whatweb:

which whatweb

Например, в моей системе это файл /usr/bin/whatweb. Открываем его любым текстовым редактором. Находим там блок с require и добавляем в конец строку:

require 'openssl'

Сохраняем и выходим. Сразу после этого проблема будет решена.

Бесплатный онлайн сервис сканирований с помощью WhatWeb

WhatWeb работает на самых разных операционных системах и очень легко устанавливается в популярные дистрибутивы Linux, но если вам хочется ещё больше простоты, то воспользуйтесь онлайн сервисом сканирования WhatWeb: https://suip.biz/ru/?act=whatweb, который имеется среди других бесплатных сканеров и сервисов на SuIP.biz. Там по применяется агрессивный режим сканирования и активировано несколько дополнительных плагинов, которые на мой взгляд являются достаточно полезными.

Заключение

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

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

С помощью WhatWeb можно проводить разведку сети и даже сканировать на уязвимости. Примеры подобного использования описаны на страницы вики данной программы: https://github.com/urbanadventurer/WhatWeb/wiki/Advanced-Usage


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

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *