Подделать адрес отправителя в email

Решение

В первой задаче мы с тобой продолжим познавать различные атаки на электронную почту и обратим внимание на такой вектор, как подмена адреса отправителя в email’ах. Задача старая (еще бы, ведь электронная почта постарше www будет), но своей актуальности совсем не потеряла. Хотя когда-то и ходили разговорчики о том, что в скором времени мы откажемся от почты (да у нас в редакции каждый день ходят — по пять раз на дню отказываемся от этого архаизма :). — Прим. ред.), но, по мне, сейчас email — это один из основных методов «идентификации» пользователей. Хочешь где-то зарегиться — указывай email свой. О применении же подмены адреса я приведу ниже пару жизненных примеров.

 

WARNING

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

На самом деле решение этой задачи достаточно простое. Все, что нам понадобится, — это понимание протокола SMTP (TCP, 25-й порт), о котором мы начали говорить в прошлых номерах.

Напомню, что это протокол, который используется для пересылки email’ов. Когда ты отправляешь письмо, твой email-клиент подключается по SMTP к твоему почтовому серверу (MTA), а тот, в свою очередь, подключается к MTA-серверу получателя (из MX DNS записи имени домена).

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

Итак, сначала мы получаем MX DNS запись сервера нашего получателя. Берем то, что идет после @, и пишем в консоли «nslookup -type=mx target.com».

Пример спуфинга отправителя для Yandex
Пример спуфинга отправителя для Yandex

Потом подключаемся к 25-му порту полученного сервера. Для этого можно использовать ncat. После приветствия от сервера мы пишем:

  1. HELO any_textЭто наше приветствие. Текст чаще всего может быть любой (помни, что он сохранится в заголовках).
  2. MAIL FROM: any_name@any_host.comЗдесь мы должны указать, от кого письмо. Указывать можно, по сути, любые значения. Но в зависимости от настроек сервера получателя мы можем столкнуться с некоторыми ограничениями. Так, некоторые серверы резолвят имя домена и если оно не существует, то не принимают его (то есть gmail.com подставишь, а asdijasdop.com — нет). Некоторые не разрешают, чтобы имя было эквивалентно имени домена получателя (например, target.com)
  3. RCPT TO: victim@target.comДалее указываем поле, кому адресовано наше письмо.
  4. DATAУказав сверху основные поля, далее мы переходим к телу сообщения, что и озаглавливает команда DATA. Но надо сказать, что она специфическая.

    Во-первых, здесь можно использовать переносы строк. Фактически, для того чтобы закончить команду DATA, а с ней и все письмо, необходимо чаще всего написать точку (.) и перенос строки (\r\n). Как только ты закрываешь эту команду, сервер прилепляет письму специальный идентификатор, и его можно считать отправленным.

    Во-вторых, несмотря на то что DATA как бы определяет тело сообщения, в итоге все данные именно из него попадают в поля «От кого», «Кому» и прочие в почтовом клиенте получателя письма (неважно, веб или десктопное приложение). Поэтому далее мы указываем данные, которые фактически будут отображаться в почтовом клиенте.

  5. To: victim@target.comПоле «Кому» в почтовом клиенте. В зависимости от настроек сервера может быть и любым. Но для спуфинга, конечно, лучше написать email получателя (то же, что и в RCPT TO).
  6. From: any_name@any_host.comПоле «От кого». Это главное поле, на которое мы хотим повлиять. По идее, значение может быть совсем любым. Также оно может не совпадать со значением в MAIL FROM, что отвязывает нас от привязки к существующим доменам для примера выше.
  7. Subject: blah-blahПоле «Тема». Текст может быть любым.
  8. Далее через строку (два переноса строки) мы пишем текст нашего сообщения, а в конце ставим точку и перенос для окончания команды DATA

 

Основная фишка заключается в том, что данные из тела письма попадают в почтовый клиент нашей жертвы. Заголовок MAIL FROM на отображение не влияет. Ну и кроме того, сама архитектура почты не дает возможности проверить отправителя.

Конечно, есть целый ряд технологий и методов (типа DMARC) для борьбы со спуфингом, но пока что это плохо работает (имхо). По этому поводу приведу ряд примеров. Я протестировал mail.ru, Yandex и Google на спуфинг по описанному выше методу. Только гугл помещал мои письма в папочку «Спам». С остальными можно было делать все что угодно. Кроме того, мы в Digital Security проводили ряд работ по социальной инженерии и спокойно спуфили адреса: письма всегда доходили и проблем не было. Причем письма можно отправлять и от внутренних адресов. Представь: приходит какому-нибудь бухгалтеру письмо от имени его директора с PDF’очкой — ведь, конечно, он и откроет, и запустит его. Да что там PDF — от «волнения» и экзешник запустит :).

Ну и еще пара примеров о полезности спуфинга. Так, этой осенью кто-то проспуфил пресс-релиз от одной компании в Швеции, что их покупает Samsung. Новостные порталы оперативно распространили информацию, что и отразилось на бирже резким ростом компании. К сожалению для атакующих, ситуацию быстро задетектили и торги аннулировали. Еще один пример будет приведен в следующей задаче.

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

Проспуфленное письмо
Проспуфленное письмо
 

Подделать отправителя в Facebook

Решение

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

Во-первых, у каждого пользователя ФБ есть почтовый адрес в формате username@facebook.com. Причем username общеизвестен. Он есть в адресе страницы пользователя (facebook.com/username). И конечно, на этот email можно слать ему сообщения. Они появятся у него во входящих.

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

Таким образом, если мы хотим отправить пользователю аккаунта А сообщение от пользователя Б, то нам нужно только узнать почту пользователя Б (но не фейсбучную).

Все очень просто, как видишь. Фейсбук исправлять это не собирается (да и не особо может). За подробностями отправляю тебя к статье моего друга Сергея Белова.

Подмена отправителя в Facebook
Подмена отправителя в Facebook
 

Определить антивирус через IE

Решение

В одном из последних выпусков «Хакера» я описывал в Easy Hack’е способ, как можно в Internet Explorer’е узнать о существовании какого-то файла в файловой системе с помощью JavaScript’а и встроенного XML-парсера, который поддерживает внешние entity (XXE). Вот, наткнулся на интересный скрипт, с помощью которого можно задетектить антивирус, установленный на компьютер-жертву. Скрипт работает для IE 10-й версии (и выше) и проверяет существование того или иного файла в системе. Но старый метод лучше, так как работает во всех версиях. Так что из этого скрипта можно вытянуть лишь пути по умолчанию для большинства актуальных версий Касперского.

 

Атаковать принтеры

Решение

Мы с тобой в Easy Hack’e обсуждали уже много различных методов атак на различные системы. Многие из них касались именно корпоративных сетей. Теперь дошел черед и до сетевых принтеров. Если компания становится хоть сколько-то крупной, без сетевых принтеров уже не обойтись. Но казалось бы, что можно сделать с этими глупыми железячками? На деле — достаточно многое.

Итак, для начала давай вспомним и изучим кое-какие особенности этих устройств. Во-первых, они не так глупы. Как и большинство современных девайсов, это устройство представляет собой миникомпьютер. То есть внутри может крутиться даже какая-то знакомая тебе ОС типа линукса, с полной поддержкой TCP/IP-стека. Далее, чаще всего данные девайсы имеют целый арсенал для удаленного их управления: SNMP, Telnet, SSH, веб-сервер для настройки через браузер. И конечно, по умолчанию они либо без пароля, либо с паролем стандартным. В-третьих, большинство из них можно еще и перепрошивать. Вроде ничего не забыл. Перейдем к тому, зачем же и как мы их можем атаковать.

Начнем с малого. С учетом первого пункта — поддержки TCP/IP-стека — мы можем использовать их для сканирования сети в Zombie mode Nmap’а. Напомню тебе, что эта техника представляет собой. У нас есть три хоста: атакующий, сканируемый хост (жертва), принтер. Атакующий отправляет от имени принтера запросы на подключение к портам жертвы. Жертва отвечает принтеру на запрос с теми или иными флагами в зависимости от открытости порта. В зависимости от выставленных флагов внутренние счетчики пакетов принтера меняются. Атакующий, подключаясь к принтеру, может узнать, изменились ли данные счетчики и насколько, и на основе этого сделать вывод: открыт порт или нет. Таким образом, атакующий может незаметно просканировать жертву, а все возможные подозрения будут падать на принтер. Задача еще больше затрудняется для жертвы, так как сканирование можно проводить со множества таких зомби-хостов (принтеров).

Далее. Теперь важно вспомнить, что представляет собой собственно печать на сетевом принтере. В самом обычном виде есть открытый порт у принтера: 9100 TCP. Все, что приходит на него, автоматически печатается на принтере. Таким образом, просто подключившись Ncat’ом к этому порту, мы можем напечатать любой текст. Но это так, для фана. Хотя на деле, когда печать идет с обычного компа, на этот порт посылаются данные в формате PJL или PostScript какой-нибудь, которые позволяют сделать правильную разметку страницы и вставить картинку. То есть тот же плейн-текст, но за счет команд PJL мы можем управлять поведением принтера при печати. Но для наших целей формат фактически не так важен, главное, что все идет плейн-текстом. Таким образом, все, что нам необходимо, — это произвести man-in-the-middle атаку, и мы сможем видеть все, что печатается на принтере. Казалось бы, что здесь такого? Но точно тебе скажу, что многие компании очень боятся утечек информации, а на принтерах печатается много всего конфиденциального. Так что принтер — прекрасное место для шпионажа.

Конечно, для проведения самой атаки мы можем, например, воспользоваться ARP-спуфингом, но есть метод лучше и проще. Так как чаще всего принтеры никто не настраивает и пароль по умолчанию к управляющим интерфейсам подходит, то мы можем подключиться к принтеру, сменить его IP на любой другой (все принтеры позволяют это сделать), а себе установить IP принтера. А с учетом того, что другие компы печатают данные просто подключаясь по определенному IP на 9100-й порт, подмены никто не заметит. Все, что нам надо, — принять эти данные и переслать их на итоговый принтер. И теперь можно сидеть и собирать материалы компании :). Просто, но мощно.

Крис Джон Райли (Chris John Riley) опубликовал небольшой Python-скрипт, который открывает 9100-й порт, сохраняет все задачи по печати (то есть документы) и перенаправляет их на любой другой принтер.

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

Если тебя заинтересовала данная тема, то вот пара ссылочек: goo.gl/1wIqfB, goo.gl/8NH4vi.

 

Атаковать с использованием WebDAV

Решение

Веб — это большая-большая смесь различных технологий на самом деле. Их много-много, и неполоманного тоже много. А есть старое и почти забытое, но которое в определенных ситуациях дает отличный профит. Итак, WebDAV (Web Distributed Authoring and Versioning) — это относительно старая технология, позволяющая, если по-простому, работать с файлами на веб-сервере. Мы можем закачивать файлы, искать, перемещать их, используя возможность только веб-сервера. Получается некий аналог файловой системы. Хотя, с другой стороны, WebDAV — это не совсем доступ именно к файлам, так как это могут быть и «виртуальные» файлы и директории. Но для наших целей (атака) это не настолько важно.

Скорее здесь интересней то, что WebDAV — расширение протокола HTTP. То есть в том же виде HTTP-запросов, который мы знаем, передаются WebDAV-команды и их «параметры». Метод HTTP-запроса (GET) является командой, например PROPFIND, а параметры передаются в теле запроса чаще всего в XML-формате. По картинке будет понятно.

Пример работы команд WebDAV
Пример работы команд WebDAV

Думаю, необходимо отметить, что браузеры сами по себе не умеют работать с WebDAV’ом. В смысле там нет функционала для просмотра коллекций (файлов) или для их загрузки на сервер. Так что нужно пользоваться сторонним ПО. В винде есть поддержка проводником. Для этого надо зайти в меню «Сервис -> Подключить сетевой диск» и указать полный путь для веб-сервера (вроде http://host.com/webdav_here/).

О’кей. Идейно разобрались. Что же до атаки? Ну, WebDAV нам сулит две вещи. Во-первых, это дисклоз информации. Так как мы можем производить поиск по файловой системе (не по всей, разумеется), то есть шанс найти что-то, что не должно быть нам доступно. Во-вторых, это возможность заливки файлов. И здесь все может быть очень аппетитно. Как минимум мы можем залить HTML’ку и поиметь хранимую XSS, как максимум (?) — мы можем залить туда шелл и получить полный доступ.

Как же нам это провернуть? Для этого надо понять ряд вещей: поддерживает ли сервер WebDAV и какой доступ у нас есть. Для того чтобы понять, есть ли поддержка, мы можем посмотреть заголовки веб-сервера. Тот же апач сообщает об этом. Кроме того, некоторые веб-серверы поддерживают его по умолчанию (IIS 5.x).

Но поддержка еще ничего нам не дает, потому что мы должны найти директорию веб-сервера, которая с WebDAV’ом. Для того чтобы ее искать, нам потребуется использовать HTTP-метод OPTIONS. Если мы запросим данным методом директорию с WebDAV’ом, то нам выползет список WebDAV-методов, доступных для нее. То есть отсутствие WebDAV-методов в ответе на OPTIONS-запрос к корню веб-сервера еще совсем не означает отсутствие поддержки WebDAV во всех директориях.

Детектим поддержку WebDAV
Детектим поддержку WebDAV

Далее, если мы ее обнаружили, то мы можем использовать команду PROPFIND или SEARCH для поиска имеющихся файлов на сервере. Но тут нас может ждать первая преграда — аутентификация. К сожалению, очень на многих веб-серверах при настройке WebDAV это одно из необходимых условий. Брутфорс и пароли по умолчанию, конечно, в помощь. Когда мы найдем необходимый файл, то спокойно можем его качать (используется обычный GET).

А как же с загрузкой файлов? Здесь тоже все отчасти просто. Используется метод PUT для закачки файлов. Но есть два существенных ограничения. Во-первых, чаще всего мы не можем писать в любую директорию. На это у директории должны быть соответствующие права. Но главное, насколько я знаю, невозможно понять, для какой директории есть права на запись, а для какой — нет. То есть тот же OPTIONS будет един для всех. С другой стороны, мы просто можем потыкаться везде PUT’ом. Во-вторых, часто имеется список расширений, которые можно загружать. Да-да, не только мы умные :).

Так вот, чтобы четко протестить веб-сервер на предмет WebDAV, необходимо просканить все директории с помощью OPTIONS-метода (тлз отдельных не видел, а модуль в метасплоите проверяет лишь корень веб-сервера, так что рукописный скрипт или Burp тебе в помощь). А после этого каждую из найденных — на возможность загрузки в нее различных страшных файлов. Вот под это есть одна тулзенка — DAVTest. Она вполне удобна для тестирования. Создает рандомные имена файлам и папкам, загружает с различными расширениями, подчищает за собой. Кроме того, может проверить олдскульный трик: закачать файл с одним расширением, а потом его переименовать. Аналогичные модули есть и в Metasploit’е.

Надеюсь, прочтенное наполнило тебя энтузиазмом и жаждой жизни! Кстати, если тебя интересуют какие-то виды атак или технологии, о которых бы ты хотел узнать, — пиши на почту.

И успешных познаний нового!

 

1 комментарий

  1. valmont_a

    04.02.2017 at 12:34

    а как можно получить письмо?
    то есть фактически использовать и на отправку и на получение писем?

Оставить мнение

Check Also

Беспощадный буст. Как ускорить многопоточный код на C++

Уже много лет твой компьютер умеет выполнять код любимого ПО параллельно на всех своих ядр…